Paradygmat programowania obiektowego, klasa, obiekt

Slides:



Advertisements
Podobne prezentacje
C++ wykład 9 ( ) Szablony.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Programowanie obiektowe
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe
Klasy i obiekty.
Metody wirtualne.
Wzorce.
Static, const, volatile.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
PROGRAMOWANIE STRUKTURALNE
Programowanie obiektowe w Javie
OOPC++ - wstêp, klasy1 Klasy Do struktury można dołączyć operacje działające na jej polach. struct date { int day, month, year; void set (int d, int m,
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
Podstawy informatyki Rekurencja i rekurencja Grupa: 1A
Kurs Pascala – spis treści
Struktury.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Typy prywatne 1 Typy prywatne W Adzie typy prywatne (private types) służą do bezpiecznego udostępniania danych zdefiniowanych w pakiecie, z którego korzysta.
Wykład 8 Wojciech Pieprzyca
Wstęp do programowania obiektowego
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Podstawy programowania II
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Programowanie strukturalne i obiektowe
Programowanie obiektowe w C++
Jakub Wołczko W obiektowym świecie… Jakub Wołczko
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład IX.
Programowanie obiektowe III rok EiT
WPROWADZENIE W ŚWIAT OBIEKTÓW
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Programowanie obiektowe
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – wykład 9 ( )
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Klasy ( uzupełnienie ). Definicja klasy Klasa jest zbiorem logicznie powiązanych danych i funkcji, przeznaczonych do realizacji konkretnego zadania; Zamknięcie.
Programowanie obiektowe
Dziedziczenie wielobazowe. dana klasa może mieć kilka bezpośrednich klas bazowych: dana klasa może mieć kilka bezpośrednich klas bazowych: kolorpołożenie.
Programowanie Zaawansowane
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
Wykład 5 Klasa Vec i jej operatory 1.Kategorie operatorów 2.Operatory ogólne - przykłady 3.Operatory specjalne [ ], ( ) oraz –> 4.Operatory new i delete.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Programowanie Obiektowe – Wykład 6
Typy wyliczeniowe, kolekcje
Kurs języka C++ – wykład 3 ( )
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Programowanie Obiektowe – Wykład 2
PGO Dziedziczenie Michail Mokkas.
Zapis prezentacji:

Paradygmat programowania obiektowego, klasa, obiekt

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

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.

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

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

Obiekt - przykałady

Dużo obiektów 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

Klasa w programowaniu klasa w programowaniu — uogólniony typ zdefiniowany przez użytkownika języka służy do definiowania obiektów (uogólnionych zmiennych) 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

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

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 programista musi pamiętać, których funkcji używać na rzecz których struktur

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 domyślnie bez dostępu do pól spoza metod klasy

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

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 void ustaw(int wiek, char *p_imię, char *p_nazwisko); // public void wypisz(); // public };

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. OOOP ;-) — ortodoksyjne programowanie obiektowe: wszystkie dane są prywatne, operujemy na nich wyłącznie metodami klasy.

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

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

Jak definiować metody 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

Jak definiować metody klasy? poza klasą trzeba użyć operatora zakresu w nagłówku 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? inline void osoba::wypisz() cout<<"wiek: "<<wiek<<" imie: "<<imie<<" nazwisko: "<<nazwisko<<"\n";

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. 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!

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 class A { public: void wczytaj() cin>>i; // deklaracja „i” jest w klasie wypisz(); // jak wyżej } void wypisz(); int i; };

Jak definiować metody klasy? 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 }

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

Przykład zadanie zadeklarować klasę point, której obiekty będą punktami na płaszczyźnie 2D 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

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(); };

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

Przykład class point { double x, y; public: void input() {cin>>x>>y; }; void output() {cout<<x<<y; }; … }; inline void point::move(double dx, double dy) x+=dx; y+=dy; }

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).

Klasy a Abstrakcyjne Typy Danych klasy doskonale nadają się do implementacji abstrakcyjnych typów 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. na przykład stos, kolejka, zbiór, punkt, odcinek

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

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); };

Ciekawostka: deklaracje zagnieżdżone 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.

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

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: 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.