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

Podobne dokumenty
Podstawy Programowania Obiektowego

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

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

Wstęp do programowania obiektowego. Wykład 2

Do czego służą klasy?

Technologie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe

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

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

TEMAT : KLASY DZIEDZICZENIE

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Do czego służą klasy?

KLASY cz.1. Dorota Pylak

Programowanie obiektowe - 1.

Definiowanie własnych klas

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

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

Enkapsulacja, dziedziczenie, polimorfizm

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

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Wstęp do Programowania 2

Programowanie w Internecie. Java

Przesłanianie nazw, przestrzenie nazw

Programowanie obiektowe

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

Wykład 8: klasy cz. 4

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

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

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

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

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

Materiały do zajęć VII

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

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

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

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

Programowanie obiektowe

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Java Język programowania

Języki i paradygmaty programowania

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

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

Rozdział 4 KLASY, OBIEKTY, METODY

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

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 9

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

Programowanie, część I

Język C++ Programowanie obiektowe

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

Laboratorium 1 - Programowanie proceduralne i obiektowe

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Dziedziczenie jednobazowe, poliformizm

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

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

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

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

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

Wykład 4: Klasy i Metody

Szablony funkcji i szablony klas

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

Definicje klas i obiektów. Tomasz Borzyszkowski

Język programowania. Andrzej Bobyk

Pola i metody statyczne

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

Programowanie komputerowe. Zajęcia 7

Style programowania - krótki przeglad

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

Przypomnienie o klasach i obiektach

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

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

Projektowanie klas c.d. Projektowanie klas przykład

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Programowanie obiektowe

Język C++ Różnice między C a C++

Wprowadzenie do szablonów szablony funkcji

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

Wprowadzenie do szablonów szablony funkcji

Wykład 5: Klasy cz. 3

Technologie i usługi internetowe cz. 2

Dokumentacja do API Javy.

Wstęp do programowania

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

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

C-struktury wykład. Dorota Pylak

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

Język C++ zajęcia nr 2

Programowanie obiektowe język C++

Wykład 5 Okna MDI i SDI, dziedziczenie

Transkrypt:

Programowanie obiektowe w C++ dr inż. Tadeusz Wilusz Akademia Ekonomiczna w Krakowie 31-510 Kraków, ul. Rakowicka 27 Budynek Biblioteki Głównej pokój 429 tel.: 2935-264 e-mail: wiluszt@ae.krakow.pl Programowanie obiektowe w C++ Wykład 02 Temat wiodący: Koncepcja klasy. Obiekty. 1

Plan wykładu Wprowadzenie Rozszerzenia nieobiektowe Paradygmat obiektowy, klasa Paradygmat programowania obiektowego, klasa, obiekt 2

Paradygmat paradygmat (słownik PWN) przyjęty sposób widzenia rzeczywistości w danej dziedzinie Paradygmaty programowania programowanie strukturalne programowanie obiektowo zorientowane (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. 3

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) Struktura zestaw danych, najczęściej różnych typów Uogólniona obiekt = dane + metody operujące na tych danych 4

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 5

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 6

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]; 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 7

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 // 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 void wczytaj(); // public private: char nazwisko[30]; // private void ustaw(int wiek, char *p_imię, char *p_nazwisko); void wypisz(); // public // public 8

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

kropka. obiekt.pole; obiekt.metoda(); operator zakresu :: klasa::pole; klasa::metoda(); Operatory dostępu do składowych klasy // jak w strukturach C // enkapsulacja // sizeof, pola static // 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 10

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

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 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 12

Operator zakresu jako rozszerzenie nieobiektowe int fun(); int i; class C int i; void test(); int fun(); void C::test() i++; ::i++; fun(); ::fun(); // zwieksz C::i // globalne i // C::fun() // globalna fun() zadanie Przykład 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 13

Przykład class point double x, y; 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(); zadanie zdefiniować inline metody input() output() move() distance() Przykład 14

class point double x, y; void input() cin>>x>>y; void output() cout<<x<<y; Przykład 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). 15

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 zadanie Przykład 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). 16

Przykład class segment point p1, p2; 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. 17

class X class M1 class M2 Ciekawostka: deklaracje zagnieżdżone int m; 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. 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 class M2 M2 m2; // tutaj int m; 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. 18