Pobierz Programowanie obiektowe i więcej Streszczenia w PDF z Programowanie obiektowe tylko na Docsity! Wstęp do programowania obiektowego Wykład 2 1 CECHY I KONCEPCJA PROGRAMOWANIA OBIEKTOWEGO 2 Koncepcja programowania obiektowego Otaczający nas świat to różnego rodzaju przedmioty. Tworząc program komputerowy dokonujemy pewnego ich odwzorowania. W programowaniu proceduralnym funkcje i zmienne dotyczące danego przedmiotu nie są ze sobą logicznie powiązane. W programowaniu obiektowym dokonuje się powiązania metod (funkcji programu) z danymi (zmiennymi) definiującymi przedmiot. Wszystko to grupuje się w klasie zawierającej w jednym miejscu zarówno dane definiowanego przedmiotu, jak i dotyczące go funkcje. 5 Podstawowe definicje Klasa – (częściowa lub całkowita) definicja dla obiektu - opis budowy i działania obiektów Obiekt – fizyczna instancja (ucieleśnienie, egzemplarz) klasy. Jest to struktura zawierająca: dane metody, czyli funkcje służące do wykonywania na tych danych określonych zadań. Każdy obiekt ma trzy cechy: tożsamość, czyli cechę umożliwiającą jego identyfikację i odróżnienie od innych obiektów; stan, czyli aktualny stan „własnych” danych; zachowanie, czyli zestaw metod wykonujących operacje na tych danych. 6 UKRYWANIE IMPLEMENTACJI: HERMETYZACJA (ENKAPSULACJA) 7 Etykieta dotyczy występujących po niej metod i pól. Liczba etykiet jest dowolna (mogą się powtarzać). W przypadku braku etykiety domyślnie jest przypisana sekcja prywatna. class Punkt{ void fun1(){…} //prywatna, bo domyślna protected: int fun2(){ … } int y; private: float fun3(){…} int x; public: double fun4(){…} }; 10 Konwencja nazewnictwa get/set/is Kiedy pole jest zadeklarowane jako prywatne możemy umożliwić : odczyt wartości pola przez metodę publiczną nazywaną get<nazwa pola>(). modyfikację wartości pola przez metodę publiczną nazywaną set<nazwa pola>. class Punkt { private: int x; int y; public: int getx(){return x;} int gety(){return y;} void setx(int xx){x=xx;} void sety(int yy){ if (yy>=0) y=yy;} }; 11 W C++ jest to tylko konwencja nazewnictwa (zalecany sposób tworzenia nazw metod do odczytu i zapisu pól prywatnych), a nie obowiązkowy element języka. Stosuje się to w wielu językach obiektowych, niekiedy jest to też mechanizm wbudowany (np. akcesory set, get w C#). 12 Modyfikacje bibliotek Ukrywanie implementacji pozwala też na modyfikację przez twórcę klas szczegółów udostępnianych bibliotek, bez większego wpływu na kod wykorzystujący te biblioteki (kod napisany przez programistę-klienta). Modyfikacje to na przykład rozszerzanie funkcjonalności biblioteki czy optymalizacja kodu. 15 KONSTRUKTORY I DESTRUKTORY 16 Geneza Przyczyną wielu błędów jest to, że programista zapomina o inicjalizacji zmiennych lub "końcowych porządkach". W programowaniu obiektowym wprowadzono więc półautomatyczny mechanizm inicjacji i "sprzątania": odpowiednio: konstruktory i destruktory. 17 Dwa sposoby inicjalizacji pól w C++ 1. W konstruktorze przy użyciu instrukcji przypisania, np.: Punkt(int xx, int yy) { x = xx; y = yy; } 2. W konstruktorze, przy użyciu listy inicjacyjnej, np.: Punkt(int xx, int yy) : x(xx), y(yy) {} Dopuszczalne są też rozwiązania mieszane. 20 Konstruktor domyślny W momencie tworzenia obiektu zawsze wywoływany jest jakiś konstruktor. Jeżeli w klasie nie został zdefiniowany żaden konstruktor, to kompilator dodaje (niewidoczny w kodzie) konstruktor domyślny (bezparametrowy). 21 Konstruktor bezparametrowy Często też definiuje się własny konstruktor bezparametrowy. Konstruktor bezparametrowy najczęściej nadaje polom wartości domyślne. 22 Destruktor W momencie niszczenia obiektu (np.: koniec zakresu widoczności obiektu lokalnego) wywoływany jest destruktor – zdefiniowany w klasie lub domyślny. Celem definiowania destruktora może być np. zwolnienie zaalokowanej ręcznie pamięci, używanych zmiennych dynamicznych, itp. porządki. Definicja destruktora: ~<nazwa klasy>() { <deklaracje zmiennych> <instrukcje>, itp. } Cechy destruktora: nie ma parametrów, nie ma typu wyniku w klasie może wystąpić tylko jeden destruktor nie można go wywołać jak zwykłej metody 25 DIAGRAMY KLAS W NOTACJI UML 26 Schemat klasy w UML Nazwa Atrybuty (zmienne klasowe) Metody (funkcje) 27 Żarówka - bool włączona # int moc + void włącz() + void wyłącz() Aby używać typu bool należy dopisać na początku programu: #include <stdbool.h> Symbole modyfikatorów dostępu: - private + public # protected