Czym są właściwości. Poprawne projektowanie klas

Podobne dokumenty
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Technologie obiektowe

Rozdział 4 KLASY, OBIEKTY, METODY

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Deklaracja struktury w C++

Materiały do zajęć VII

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Wykład 8: klasy cz. 4

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Jak napisać listę jednokierunkową?

Szablony funkcji i klas (templates)

Klasy i obiekty cz II

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Podstawy Programowania Obiektowego

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Wykład 5: Klasy cz. 3

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe

Algorytmy i język C++

Programowanie komputerowe. Zajęcia 7

Technologie i usługi internetowe cz. 2

Dokumentacja do API Javy.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Wstęp do Programowania 2

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Czym jest stos i sterta?

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Podstawy i języki programowania

Assembler w C++ Syntaksa AT&T oraz Intela

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe

Wykład 4: Klasy i Metody

Informatyka I: Instrukcja 4.2

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

PHP 5 język obiektowy

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Do czego służą klasy?

Programowanie obiektowe

Wstęp do programowania obiektowego. Wykład 2

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Laboratorium 1 - Programowanie proceduralne i obiektowe

Pola i metody statyczne

Tablice (jedno i wielowymiarowe), łańcuchy znaków

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

7. Pętle for. Przykłady

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Serwery aplikacji. dr Radosław Matusik. radmat

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Podstawy programowania w C++

Polimorfizm, metody wirtualne i klasy abstrakcyjne

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Szablony funkcji i szablony klas

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Programowanie w Javie 1 Wykład i Ćwiczenia 2 Przegląd podstawowych klas w Javie (elementy programowania obiektowego) Płock, 16 października 2013 r.

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Programowanie strukturalne i obiektowe. Funkcje

Wykład 9: Polimorfizm i klasy wirtualne

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Czym są delegaty? Krótka książkowa definicja, mówiąca czym jest delegat:

Języki programowania obiektowego Nieobiektowe elementy języka C++

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Definiowanie własnych klas

Programowanie obiektowe

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Programowanie obiektowe

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Programowanie obiektowe

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Transkrypt:

Z akcesorów get i set korzysta każdy kto programuje w C#. Stanowią one duże udogodnienie w programowaniu obiektowym. Zapewniają wygodę, bezpieczeństwo i znacząco skracają kod. Akcesory są ściśle związane z właściwościami, dlatego długo zastanawiałem się nad odpowiednim tytułem dla tego artykułu. Są też związane z językiem C# i nie spotkamy ich np. w Javie. Czym są właściwości Właściwość to konstrukcja charakterystyczna m.in. dla języka C#. Zapewnia dostęp do pól klasy posługując się przy tym akcesorami get i set. Główną funkcjonalnością właściwości jest możliwość zapisywania i odczytywania prywatnych pól klasy, tak jak by były publiczne. Kiedy usłyszałem o właściwościach po raz pierwszy, w ogóle ich nie rozumiałem i nie byłem co do nich przekonany. Z biegiem czasu uświadomiłem sobie, że używanie ich w rozbudowanych projektach jest koniecznością, szczególnie jeżeli nad projektem pracuje wiele różnych osób. Poprawne projektowanie klas Jednym z podstawowych filarów programowania obiektowego jest hermetyzacja. Mówi ona aby ukrywać składniki klasy, tak aby nie było dostępne z zewnątrz. Nigdy nie wiemy kto będzie pracował na napisanej przez nas klasie. Nie jest dobrym zwyczajem, a wręcz błędem, aby ktoś mógł edytować zmienne naszej klasy z zewnątrz. Dlatego też wszelkie zmienne dostępne wewnątrz naszej klasy powinny być prywatne. Dostęp do najważniejszych pól, które mogą być dostępne z zewnątrz i świadomie taki dostęp zapewnimy, dostarczamy poprzez napisanie odpowiednich metod: Karol Trybulec p-programowanie.pl

0 public int PobierzWiek() public void UstawWiek(int wiek) _wiek = wiek; Karol.UstawWiek(); System.Console.WriteLine(Karol.PobierzWiek()); Jak widzisz, trzymamy się zasad poprawnego programowania obiektowego. Przykład jest dość trywialny. Pole wiek jest zmienną prywatną, aby ją zmodyfikować możemy posłużyć się jedynie metodami, które udostępnia klasa. Metody te są nazywane setterami i getterami. Prywatna zmienna oraz przypisane do niej metody do odczytu i zapisu dają nam pewność, że inny programista pracujący na naszej klasie, będzie trzymał się naszych założeń. Przykładowo możemy rozbudować metodę aby akceptowalny wiek był z przedziału..: public int PobierzWiek() public void UstawWiek(int wiek) if (wiek >= && wiek <=) _wiek = wiek; Karol Trybulec p-programowanie.pl

Gdyby _wiek był publiczny, nie posiadalibyśmy żadnej kontroli nad tym jaka będzie jego wartość. Biedni programiści Javy nie mają konstrukcji nazwanej właściwościami. Oznacza to, że każdą zmienną w klasie muszą obudowywać takimi funkcjami jak w przykładzie wyżej. Oczywiście w rozbudowanych przykładach i dużych klasach setterów i getterów są dziesiątki, co tworzy niepotrzebny bałagan. Ponieważ język C# był lekko wzorowany na Javie, jego projektanci uznali, że warto wprowadzić do języka konstrukcję, która zapewni bardziej praktyczny dostęp do funkcji setterów i getterów. Używanie właściwości Właściwość deklarujemy w sposób podobny do zmiennej, jednak w jej wnętrzu należy obsłużyć akcesory get oraz set. Używając właściwości, nie będziemy musieli sami pisać poszczególnych metod do każdego pola. Przeróbmy przykład znajdujący się wyżej, tak aby zamiast metod setterów i getterów używał właściwości dostępnych w C#: 0 0 // właściwość public int Wiek get set _wiek = value; Karol.Wiek = ; System.Console.WriteLine(Karol.Wiek); Karol Trybulec p-programowanie.pl

Obydwa programy zadziałają tak samo. W pierwszym użyliśmy zwykłych metod a w drugim właściwości. W kodzie pojawiły się akcesory get oraz set. Pole _wiek nadal jest prywatne, natomiast właściwość Wiek jest publiczna. Zapewnia ona dostęp do prywatnego pola _wiek. Akcesor get wywoływany jest w chwili gdy chcemy pobrać wartość właściwości. Akcesor set wywołany jest w chwili nadania wartości właściwości. Zwróć uwagę na słowo kluczowe value przy akcesorze set. Ma ono szczególną funkcję jedynie wewnątrz ciała właściwości reprezentuje wartość przypisywaną do właściwości w akcesorze set. Od tej chwili programista komunikuje się z polami klasy za pomocą publicznych właściwości. Mimo tego kod nadal jest stosunkowo długi. Na szczęście wprowadzona została deklaracja skrócona. Skrócona deklaracja właściwości Bardzo przydatne jest używanie skróconej wersji deklaracji właściwości. Pozwala ona zredukować ilość kodu do absolutnego minimum w prostych programach. Projektanci języka C# zdali sobie sprawę, że w przeważającej większości właściwość nie będzie miała żadnych dodatkowych funkcji, oprócz wyprowadzania/wprowadzania wartości dla pola prywatnego. Z tego powodu została wprowadzona możliwość skróconej deklaracji właściwości. Znowu przerobię prosty programik znany z poprzednich przykładów: public int Wiek get; set; Karol.Wiek = ; System.Console.WriteLine(Karol.Wiek); Karol Trybulec p-programowanie.pl

Środowisko automatycznie rozwinie skróconą deklarację właściwości do normalnej postaci podczas kompilacji. Kompilator niejawnie utworzy nawet pole prywatne przypisane do publicznej właściwości. Dowodem tego jest analiza języka CIL po zdebugowaniu aplikacji. Co sądzisz o tym zapisie? Program działa identycznie tak jak w poprzednich przykładach. Porównując teraz właściwości w języku C# do ich braku w Javie, widać jak bardzo są przydatne i jak bardzo potrafią skrócić kod. Tworząc klasę Osoba o przykładowych właściwościach Imie, Nazwisko, Wiek w klasie posiadamy linijki kodu. Pisząc tę samą klasę w Javie lub C++ i hermetyzując dane, będziemy mieli około linijek kodu. Podsumowanie Zgodnie z informacjami dostępnymi na MSDN, nie powinno się umieszczać zaawansowanych fragmentów kodu we właściwościach. Właściwości powinny w prosty sposób zwracać lub zapisywać wartości określonych pól. Dopuszczalne są jedynie proste operacje w stylu: get return 0-wiek; Jeżeli pisałeś wcześniej w innym języku nie zniechęcaj się do funkcjonalności jakie zapewnia C#. Używanie właściwości i akcesorów pozwala znacznie zredukować kod a na dodatek narzuca schemat poprawnego programowania obiektowego. Dodam na koniec, że niektóre źródła podają nazwę własności zamiast właściwości. Karol Trybulec p-programowanie.pl