Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Paradygmat programowania obiektowego, klasa, obiekt.

Podobne prezentacje


Prezentacja na temat: "Paradygmat programowania obiektowego, klasa, obiekt."— Zapis prezentacji:

1 Paradygmat programowania obiektowego, klasa, obiekt

2 Paradygmat paradygmat (słownik PWN) — przyjęty sposób widzenia rzeczywistości w danej dziedzinie Paradygmaty programowania Paradygmaty programowania programowanie strukturalne programowanie strukturalne programowanie obiektowe programowanie obiektowe

3 Paradygmat programowania obiektowego programowanie obiektowe — to paradygmat rozwiązywania problemów programistycznych z wykorzystaniem obiektów, sposób interpretacji problemu jako zbioru obiektów i relacji pomiędzy nimi.

4 Obiekt Potoczne znaczenie słowa obiekt Potoczne znaczenie słowa obiekt Znaczenie pojęcia obiektu w programowaniu Znaczenie pojęcia obiektu w programowaniu Reprezentuje na potrzeby programu obiekty ze świata rzeczywistego lub abstrakcyjne (w potocznym znaczeniu słowa obiekt) Reprezentuje na potrzeby programu obiekty ze świata rzeczywistego lub abstrakcyjne (w potocznym znaczeniu słowa obiekt) Uogólniona zmienna (struktura) Uogólniona zmienna (struktura) Zdefiniowany i używany zgodnie ze składnią i semantyką języka Zdefiniowany i używany zgodnie ze składnią i semantyką języka

5 Obiekt - uogólniona zmienna (struktura) Struktura Struktura zestaw danych, najczęściej różnych typów zestaw danych, najczęściej różnych typów Uogólniona Uogólniona obiekt = dane + metody operujące na tych danych obiekt = dane + metody operujące na tych danych

6 Obiekt - przykałady

7 Dużo obiektów zazwyczaj wiele obiektów ma taki sam zbiór cech, potrzebujemy aby te cechy definiować raz, ale wykorzystywać wielokrotnie zazwyczaj wiele obiektów ma taki sam zbiór cech, potrzebujemy aby te cechy definiować raz, ale wykorzystywać wielokrotnie klasa (słownik PWN) — kategoria przedmiotów lub zjawisk wyróżnionych na podstawie wspólnych cech Potrzebujemy klasy dla podobnych obiektów Potrzebujemy klasy dla podobnych obiektów

8 Klasa w programowaniu klasa w programowaniu — uogólniony typ zdefiniowany przez użytkownika języka klasa w programowaniu — uogólniony typ zdefiniowany przez użytkownika języka służy do definiowania obiektów (uogólnionych zmiennych) służy do definiowania obiektów (uogólnionych zmiennych) Dostarcza wielu nowych możliwości (to be discussed later :-) Dostarcza wielu nowych możliwości (to be discussed later :-) Pojedyncza klasa powinna jasno reprezentować określone pojęcie, dla którego nie istnieje (jeszcze) odpowiedni typ Pojedyncza klasa powinna jasno reprezentować określone pojęcie, dla którego nie istnieje (jeszcze) odpowiedni typ

9 Dlaczego programowanie obiektowe? kolejny etap w rozwoju technik IP: kolejny etap w rozwoju technik IP: strukturalne strukturalne proceduralne proceduralne modularne modularne narzędzie do implementacji projektów obiektowych (istneje analiza obiektowa, projektowanie obiektowe) narzędzie do implementacji projektów obiektowych (istneje analiza obiektowa, projektowanie obiektowe) języki wspierające programowanie obiektowe języki wspierające programowanie obiektowe C++, Java, … kęzyki umożliwiające programowanie obiektowe kęzyki umożliwiające programowanie obiektowewszystkie

10 Przykład – osoba strukturalnie struct osoba { int wiek; char imię[20], nazwisko[30]; }; void wczytaj_osobe(osoba *o); void ustaw_osobę(osoba *o, int wiek, char *imię, char *nazwisko); void wypisz_osobe(osoba *o); bez kontroli dostępu do pól struktury bez kontroli dostępu do pól struktury programista musi pamiętać, których funkcji używać na rzecz których struktur programista musi pamiętać, których funkcji używać na rzecz których struktur

11 Przykład – osoba obiektowo class osoba { int wiek; // składowe klasy – zmienne klasowe char imię[20], nazwisko[30]; public: void wczytaj(); // składowe klasy – metody klasy void ustaw(int wiek, char *p_imię, char *p_nazwisko); void wypisz(); }; // ten średnik musi tu być by zakończyć deklarację dane i metody razem dane i metody razem domyślnie bez dostępu do pól spoza metod klasy domyślnie bez dostępu do pól spoza metod klasy

12 Specyfikacja dostępu do składowych klasy private: private: // składowe prywatne // dostępne dla metod danej klasy // oraz metod i funkcji zaprzyjaźnionych // private – domyślne dla „class” public: public: // składowe publiczne // dostępne spoza klasy // domyślne dla „struct” protected: protected: // składowe chronione // tak jak private, ale // mogą być dodatkowo dostępne dla klas potomnych

13 Specyfikacja dostępu do składowych klasy class osoba { int wiek; // private char imię[20]; // private public: void wczytaj(); // public private: char nazwisko[30];// private public: void ustaw(int wiek, char *p_imię, char *p_nazwisko);// public void wypisz(); // public };

14 Hermetyzacja i enkapsulacja Zamknięcie danych i metod w klasie (enkapsulacja) pozwala programiście na świadome ograniczenie możliwości dostępu do danych przez kod spoza klasy (hermetyzacja). Domyślnie wszystkie składowe klasy są prywatne, czyli niedostępne z zewnątrz klasy. Domyślnie wszystkie składowe klasy są prywatne, czyli niedostępne z zewnątrz klasy. OOOP ;-) — ortodoksyjne programowanie obiektowe: wszystkie dane są prywatne, operujemy na nich wyłącznie metodami klasy. OOOP ;-) — ortodoksyjne programowanie obiektowe: wszystkie dane są prywatne, operujemy na nich wyłącznie metodami klasy.

15 Obiekt – uogólniona struktura Deklarujemy Deklarujemy class osoba ja, Ty; osoba szef; // w deklaracji/definicji obiektu można // pomijać „class”, „struct” i „union” // pomijać „class”, „struct” i „union” Używamy Używamyszef.wczytaj();szef.wypisz();

16 Operatory dostępu do składowych klasy kropka „. ” kropka „. ” obiekt.pole; // jak w strukturach C obiekt.metoda(); // enkapsulacja operator zakresu „ :: „ operator zakresu „ :: „ klasa::pole;// sizeof, pola static klasa::metoda();// przy definicji, metody statyczne Najczęściej kwalifikacje ( obiekt. i klasa::) można pominąć Najczęściej kwalifikacje ( obiekt. i klasa::) można pominąć metody klasy operujące na nieprzesłoniętych składowych klasy metody klasy operujące na nieprzesłoniętych składowych klasy deklarowanie/definiowanie metod wewnątrz deklaracji klasy deklarowanie/definiowanie metod wewnątrz deklaracji klasy

17 Jak definiować metody klasy? Wewnątrz deklaracji klasy Wewnątrz deklaracji klasy class osoba {… void wczytaj() {cin>>wiek>>imie>>nazwisko; } // tu nie musi być średnika …}; Taka metoda jest domyślnie metodą inline Taka metoda jest domyślnie metodą inline

18 Jak definiować metody klasy? poza klasą trzeba użyć operatora zakresu w nagłówku poza klasą trzeba użyć operatora zakresu w nagłówku domyślnie metoda nie będzie inline domyślnie metoda nie będzie inline void osoba::ustaw(int wiek, char *p_imię, char *p_nazwisko) { osoba::wiek=wiek; // tu też operator zakresu bo wiek przysłonięty strcpy(imię, p_imię); strcpy(nazwisko, p_nazwisko); } metoda ma być inline? metoda ma być inline? inline void osoba::wypisz() { cout<<"wiek: "<

19 Jak definiować metody klasy? przy tworzeniu bibliotek w pliku nagłówkowym (*.h) umieszczamy deklaracje klasy i definicje metod inline, definicje nie-inline nie mogą znaleźć się w *.h. przy tworzeniu bibliotek w pliku nagłówkowym (*.h) umieszczamy deklaracje klasy i definicje metod inline, definicje nie-inline nie mogą znaleźć się w *.h. metody podobnie jak funkcje mogą mieć argumenty domyślne i być przeciążane metody podobnie jak funkcje mogą mieć argumenty domyślne i być przeciążane void ustaw(int w, char *pi="Jan", char *pn="Kowalski"); void ustaw(const osoba & przyklad); szef.ustaw(Ty); szef.ustaw(50, „Osama”, „bin Laden”); szef.ustaw(50, „Osama”); szef.ustaw(50); // szef.ustaw(); ERROR!

20 Jak definiować metody klasy? metody i zmienne zadeklarowane wewnątrz klasy są widoczne od początku definicji klasy oraz wewnątrz ciał metod zadeklarowanych wewnątrz klasy metody i zmienne zadeklarowane wewnątrz klasy są widoczne od początku definicji klasy oraz wewnątrz ciał metod zadeklarowanych wewnątrz klasy class A {public: void wczytaj() { cin>>i;// deklaracja „i” jest w klasie wypisz();// jak wyżej } void wypisz(); int i; };

21 Jak definiować metody klasy? Przypomnienie: z poza metod klasy jej składowe trzeba kwalifikować nazwą klasy bądź obiektu Przypomnienie: z poza metod klasy jej składowe trzeba kwalifikować nazwą klasy bądź obiektu int test() { A a; int j=sizeof(A::i); void (A::*p)()=&A::wczytaj; a.i=3; // i jest publiczne w A }

22 Operator zakresu jako rozszerzenie nieobiektowe int fun(); int i; class C { int i; public: void test(); int fun(); }; void C::test() { i++;// zwieksz C::i ::i++;// globalne i fun();// C::fun() ::fun();// globalna fun() }

23 Przykład zadanie zadeklarować klasę point, której obiekty będą punktami na płaszczyźnie 2D zadeklarować klasę point, której obiekty będą punktami na płaszczyźnie 2D klasa powinna nie mieć zmiennych publicznych klasa powinna nie mieć zmiennych publicznych publiczne metody klasy: input, output, move (przesuń o wektor zadany parą współrzędnych), distance (odległość od drugiego punktu przekazanego przez referencję) oraz metody coordX i coordY zwracające rzędną i odciętą punktu publiczne metody klasy: input, output, move (przesuń o wektor zadany parą współrzędnych), distance (odległość od drugiego punktu przekazanego przez referencję) oraz metody coordX i coordY zwracające rzędną i odciętą punktu

24 Przykład class point { double x, y; public: void input(); void output(); void move(double dx, double dy); double distance(const punkt &p); double coordX();// tzw akcesory – udostępniają prywatne pola klasy double coordY(); };

25 Przykład zadanie zdefiniować inline metody zdefiniować inline metody input() input() output() output() move() move() distance() distance()

26 Przykład class point { double x, y; public: void input() {cin>>x>>y; }; void output() {cout<

27 Przykład inline double point::distance(point &p) { return sqrt( (x-p.x)*(x-p.x) + (y-p.y)*(y-p.y) ); } uwaga: mamy dostęp do prywatnych pól obiektu na rzecz którego aktywowana jest dana metoda i do prywatnych pól innych obiektów klasy tej co obiektu na którego rzecz aktywowana jest metoda (p). Prywatne znaczy prywatne dla klasy (a nie dla obiektu klasy). uwaga: mamy dostęp do prywatnych pól obiektu na rzecz którego aktywowana jest dana metoda i do prywatnych pól innych obiektów klasy tej co obiektu na którego rzecz aktywowana jest metoda (p). Prywatne znaczy prywatne dla klasy (a nie dla obiektu klasy).

28 Klasy a Abstrakcyjne Typy Danych klasy doskonale nadają się do implementacji abstrakcyjnych typów danych klasy doskonale nadają się do implementacji abstrakcyjnych typów danych klasy są abstrakcyjnymi typami danych klasy są abstrakcyjnymi typami danych Znamy interfejs – gdy posługujemy się operacjami dozwolonymi dla typu, nie przejmujemy się tym, jak są one realizowane. Hermetyzacja pozwala oddzielić nieistotne z punktu widzenia użytkownika typu szczegóły implementacyjne od istotnego interfejsu. Znamy interfejs – gdy posługujemy się operacjami dozwolonymi dla typu, nie przejmujemy się tym, jak są one realizowane. Hermetyzacja pozwala oddzielić nieistotne z punktu widzenia użytkownika typu szczegóły implementacyjne od istotnego interfejsu. na przykład stos, kolejka, zbiór, punkt, odcinek na przykład stos, kolejka, zbiór, punkt, odcinek

29 Przykład zadanie zadeklarować klasę segment, której obiekty będą odcinkami na płaszczyźnie 2D zadeklarować klasę segment, której obiekty będą odcinkami na płaszczyźnie 2D klasa powinna nie mieć zmiennych publicznych klasa powinna nie mieć zmiennych publicznych publiczne metody klasy: input, output, move (przesuń o wektor zadany parą współrzędnych), length (długość odcinka). publiczne metody klasy: input, output, move (przesuń o wektor zadany parą współrzędnych), length (długość odcinka).

30 Przykład class segment { point p1, p2; public: void input() { p1.input(); p2.input(); } void output() { p1.output(); p2.output(); } void move(double dx, double dy) { p1. move(dx, dy); p2. move(dx, dy); } double length() { return p1.distance(p2); }};

31 Ciekawostka: deklaracje zagnieżdżone deklaracja klasy może być zagnieżdżona w deklaracji innej klasy deklaracja klasy może być zagnieżdżona w deklaracji innej klasy klasa zagnieżdżona nie jest widoczna globalnie, można kwalifikować klasą zewnętrzną jeżeli jest publiczna. klasa zagnieżdżona nie jest widoczna globalnie, można kwalifikować klasą zewnętrzną jeżeli jest publiczna.

32 Ciekawostka: deklaracje zagnieżdżone class X { class M1 { int m; };public: class M2 { int m; };}; void f() { M1 m1;// blad //nie w zasięgu globalnym X::M1 xm1; // blad //M1 w sekcji prywatnej X X::M2 xm2;// ok. }

33 Ciekawostka: deklaracje zagnieżdżone X to klasa która nie ma żadnych zmiennych ani metod, tylko określone typy (można oczywiście tworzyć obiekty klasy X). klasa, która zawiera zmienne klasowe: X to klasa która nie ma żadnych zmiennych ani metod, tylko określone typy (można oczywiście tworzyć obiekty klasy X). klasa, która zawiera zmienne klasowe: class X_d {public: class M2 { int m; }; M2 m2; // tutaj }; generalnie należy unikać i unika się zagnieżdżania klas (za wyjątkiem bardzo małych klas) — mało czytelne i mało przydatne. generalnie należy unikać i unika się zagnieżdżania klas (za wyjątkiem bardzo małych klas) — mało czytelne i mało przydatne.


Pobierz ppt "Paradygmat programowania obiektowego, klasa, obiekt."

Podobne prezentacje


Reklamy Google