Wstęp do programowania obiektowego. Wykład 2

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie obiektowe - 1.

Materiały do zajęć VII

Podstawy Programowania Obiektowego

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Do czego służą klasy?

Wykład 8: klasy cz. 4

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

Zaawansowane programowanie w języku C++ Klasy w C++

Technologie obiektowe

TEMAT : KLASY DZIEDZICZENIE

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

KLASY cz.1. Dorota Pylak

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

Definiowanie własnych klas

Do czego służą klasy?

Wykład 4: Klasy i Metody

Podstawy programowania obiektowego

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

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

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

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Język programowania. Andrzej Bobyk

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

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

Technologie i usługi internetowe cz. 2

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

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

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

Dziedziczenie jednobazowe, poliformizm

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

Wykład 5: Klasy cz. 3

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

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie obiektowe

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

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

Języki i paradygmaty programowania

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

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe

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

Programowanie komputerowe. Zajęcia 7

Programowanie obiektowe

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Dokumentacja do API Javy.

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

Programowanie obiektowe w C++ Wykład 02 Temat wiodący: Koncepcja klasy. Obiekty.

Wstęp do Programowania 2

Kurs WWW. Paweł Rajba.

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

Programowanie obiektowe

Podstawy programowania obiektowego

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie do szablonów szablony funkcji

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

Wprowadzenie do szablonów szablony funkcji

Szablony klas, zastosowanie szablonów w programach

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Klasy i obiekty cz II

PARADYGMATY PROGRAMOWANIA Wykład 2

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

Programowanie obiektowe

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

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

Definiowanie własnych klas

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

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

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

Podstawy Języka Java

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Szablony funkcji i szablony klas

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

Programowanie 2. Język C++. Wykład 3.

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Programowanie obiektowe

Programowanie, część I

ALGORYTMY I STRUKTURY DANYCH

Programowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 4

Transkrypt:

Wstęp do programowania obiektowego Wykład 2 1

CECHY I KONCEPCJA PROGRAMOWANIA OBIEKTOWEGO 2

Cechy programowania obiektowego Dla wielu problemów podejście obiektowe jest zgodne z rzeczywistością (łatwe do przyswojenia przez człowieka; dobrze odzwierciedlające sposób, w jaki ludzie myślą o świecie). PO nie daje żadnych nowych efektów w gotowym programie Zastosowanie PO nie jest widoczne dla użytkownika Zastosowanie PO może pogorszyć wydajność obliczeniową programu (w porównaniu do analogicznego programu strukturalnego) 3

C++ jest językiem zarówno obiektowym, jak i imperatywnym/strukturalnym/proceduralnym. Języki programowania z cechami obiektowości to m.in.: C#, Java, Object Pascal, Lisp, Ruby, Python, PHP5. 4

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

Hermetyzacja Zwykłemu użytkownikowi niepotrzebna jest znajomość wewnętrznej budowy urządzeń. Do codziennej obsługi, wystarczą nam udostępnione bezpieczne manipulatory. Mamy dostęp tylko do wybranych metod urządzenia (np. manipulatory telewizora). W ten sposób część (bardziej skomplikowanych) funkcji jest przed nami ukryta. Analogicznie jest w programowaniu obiektowym: Hermetyzacja (enkapsulacja) - ograniczenie bezpośredniego dostępu do niektórych pól obiektów, ewentualnie umożliwienie ich modyfikacji poprzez metody. 8

Specyfikatory (etykiety) dostępu O dostępności pól i metod decydują tzw. specyfikatory dostępu: public, private i protected. W C++ w ciele klasy deklaruje się sekcje (zawierające jedną lub więcej składowych): public składowe widoczne globalnie, dla wszystkich, np. z maina; private składowe widoczne tylko dla danej klasy; protected składowe widoczne tylko dla danej klasy oraz klas dziedziczących. class Punkt { }; public: int x, y; double odległość (int xx, int yy) {return sqrt((x-xx)*(xxx)+(y-yy)*(y-yy));} private: void zeruj () {x = 0; y = 0;} protected: double przesuń (int dx, int dy) {x+=dx; y+=dy;} 9

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

Korzyści z hermetyzacji Funkcje getx(), gety(), setx() i sety() znajdują się w sekcji public i są widoczne poza obiektem klasy. Pola x i y nie są widoczne poza obiektem klasy, ale jedynie wewnątrz obiektu (mają do niej dostęp metody klasy, czyli m.in. nasze funkcje getx(), gety(), setx() i sety() ). Z tego względu te funkcje stanowią "interfejs" dostępu do pól obiektu klasy Punkt. Daje to nam kontrolę nad zapisem i odczytem do pól x i y poprzez odpowiednie definicje metod (możemy sprawdzić, odrzucić czy zabronić modyfikacji pola). Standardowe nazwy takich metod ułatwiają czytanie kodu. 13

Dwie role programistów PO Twórca klas tworzy biblioteki kodu do wykorzystania, np. klasy, ich metody i dane Programista-klient używa stworzonego kodu, czyli gotowych klas: tworzy obiekty, wywołuje metody itp. Dobrze jest ukryć przed programistą-klientem nieistotne dla niego szczegóły implementacji, które mogłyby być niewłaściwie użyte. W ten sposób zmniejsza się ryzyko popełnienia przez niego błędów w używaniu gotowych bibliotek (klas). Takie postępowanie to właśnie ukrywanie implementacji (hermetyzacja). 14

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

Konstruktor Przy tworzeniu obiektu zawsze wywoływany jest konstruktor (specjalna funkcja składowa klasy). Podstawowym zadaniem konstruktora jest inicjalizacja (nadanie odpowiednich wartości) polom tworzonego obiektu. 18

Cechy konstruktora: Nazwa konstruktora jest taka sama jak nazwa klasy; nie zwraca żadnego wyniku; może przyjmować parametry; Parametrami konstruktora nie mogą być obiekty klasy do której należy, ale mogą być referencje do tych obiektów (w C++); Nie może być wywołany jak zwykła metoda (bez tworzenia obiektu); Najczęściej jest publiczny. 19

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

Tworzenie obiektów z wykorzystaniem konstruktorów: Punkt p(20,40), p1, p2; Punkt* wskp1 = new Punkt(30, 35); Punkt* wskp2 = new Punkt(); Punkt* wskp3 = new Punkt; 23

Konstruktor kopiujący Zadaniem konstruktora kopiującego jest utworzenie nowego obiektu jako dokładnej kopii obiektu istniejącego. Nagłówek zwykle ma postać: <nazwa klasy>(const <nazwa klasy>&) Przykład: Prostokąt(const Prostokąt& p) Przy braku definicji konstruktora kopiującego, kompilator dodaje domyślny konstruktor kopiujący, który kopiuje pole po polu (jest to tzw. kopia płytka i niekiedy to nie wystarcza). 24

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) Żarówka - bool włączona # int moc + void włącz() + void wyłącz() Symbole modyfikatorów dostępu: - private + public # protected Aby używać typu bool należy dopisać na początku programu: #include <stdbool.h> 27

Przykłady klas (UML) Punkt (na płaszczyźnie) Punkt (w przestrzeni 3D) Telewizor Człowiek Szafa/Pokój/Paczka Odcinek Wektor Wielokąt (budowany z punktów) Wielokąt (budowany z odcinków) 28