Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

PARADYGMATY PROGRAMOWANIA Wykład 4

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Zaawansowane programowanie w języku C++ Wyjątki

Zaawansowane programowanie w C++ (PCP)

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

dr inż. Jarosław Forenc

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

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

Programowanie obiektowe w języku

TEMAT : KLASY POLIMORFIZM

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

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

Plik klasy. h deklaracje klas

C++ - [4-7] Polimorfizm

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

Dziedziczenie jednobazowe, poliformizm

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Zaawansowane programowanie w C++ (PCP)

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

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

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.

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

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Wprowadzenie do programowanie obiektowego w języku C++

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

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

Materiały do zajęć VII

Architektura komputerów Wprowadzenie do algorytmów

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

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Podstawy Programowania Obiektowego

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

Technologie i usługi internetowe cz. 2

Abstrakcyjny typ danych

Mechanizm dziedziczenia

Wstęp do programowania obiektowego, wykład 7

Programowanie Obiektowe i C++

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe i zdarzeniowe

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

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

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Klasa dziedzicząca posiada wszystkie cechy klasy bazowej (plus swoje własne) dodawanie nowego kodu bez edycji (i ewentualnego wprowadzania

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Identyfikacje typu na etapie. wykonania (RTTI)

Programowanie, część I

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Wykład 9: Polimorfizm i klasy wirtualne

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Enkapsulacja, dziedziczenie, polimorfizm

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

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie obiektowe w C++ Wykład 12

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

Programowanie obiektowe

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

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

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wstęp do Programowania 2

Kurs WWW. Paweł Rajba.

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

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

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.

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Język C++ Programowanie obiektowe

Wprowadzenie do programowanie obiektowego w języku C++

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Dziedziczenie. dr Jarosław Skaruz

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

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

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

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Podstawy Języka Java

Programowanie obiektowe C++

Dziedziczenie & W slajdach są materiały zapożyczone z

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

Mechanizm dziedziczenia

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

Laboratorium 1 - Programowanie proceduralne i obiektowe

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Transkrypt:

Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Projekt Łódzka, współfinansowany ul. Żeromskiego przez Unię 116, Europejską 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego

Programowanie obiektowe Naturalny sposób postrzegania świata (brak konieczności podziału programu na dane i kod logikę) Możliwość ponownego wykorzystania kodu Łatwe rozszerzanie i dostosowywanie funkcjonalności Cechy programowania obiektowego: Abstrakcja Enkapsulacja Dziedziczenie Polimorfizm 2

Zadanie Oprogramowanie biblioteki pozwalającej na budowanie nowych figur geometrycznych oraz wykorzystanie już istniejących: Modele: figura, prostokąt, kwadrat, koło Identyczny sposób użycia niezależnie od rodzaju figury Zapewnienie wspólnego interfejsu Należy odpowiedzieć na pytania: Jakie cechy wspólne mają figury geometryczne? Czy występuje jakaś hierarchia figur i można określić zależności między nimi? 3

Przykładowa hierarchia obiektów Figura Prostokąt Elipsa Trójkąt Kwadrat Okrąg Trójkąt równoboczny 4

Klasa Figura class Figura { public: double Pole() const { return 0.0; } double Obwod() const { return 0.0;} }; Metody Pole i Obwod są pojęciami abstrakcyjnymi Co jest instancją klasy Figura? 5

Klasa Prostokąt class Prostokat { private: double a, b; public: Prostokat() : a( 0 ), b( 0 ) {} Prostokat( double _a, double _b ) : a( _a ), b( _b ) {} double Pole() const { return a*b; } double Obwod() const { return 2*a + 2*b; } }; 6

Dziedziczenie class Prostokat : public Figura { private: double a, b; public: Prostokat() : a( 0 ), b( 0 ) {} Prostokat( double _a, double _b ) : a( _a ), b( _b ) {} }; Czy to działa? 7

Dziedziczenie class Prostokat : public Figura { private: double a, b; public: Prostokat() : a( 0 ), b( 0 ) {} Prostokat( double _a, double _b ) : a( _a ), b( _b ) {} double Pole() const { return a*b; } double Obwod() const { return 2*a + 2*b; } }; 8

Kontrola dostępu do składowych Składowe klas możemy udostępniać lub nie: private protected public Analogiczne kwantyfikatory używane są przy dziedziczeniu 9

Reguły dziedziczenia Zanim wykona się konstruktor klasy pochodnej to wykonywane są konstruktory (zgodnie z hierarchią) klas bazowych Metody, które nie są dziedziczone: Konstruktory Destruktory Operator przypisania (=) 10

Cel naszego zadania... Korzystać w taki sam sposób z obiektów pochodzących od klasy Figura! 11

Wykorzystanie hierarchii klas void drukujpole( const Figura& fig ) { cout << fig.pole() << endl; } int main() { Figura fig; Prostokat p( 3, 4 ); drukujpole( p ); return 0; } 12

Wykorzystanie hierarchii klas metody wirtualne Aby wykorzystać dobrodziejstwo hierarchii klas należy: Zdefiniować metody wirtualne Obiekty przekazywać przez wskaźnik lub referencję Poprawmy tak, aby działało... 13

Klasa Figura metody wirtualne class Figura { public: virtual double Pole() const { return 0.0; } virtual double Obwod() const { return 0.0;} }; Słowa kluczowe 'virtual' wystarczy użyć tylko raz dla danej metody w klasie bazowej. Użycie jej w klasach potomnych jest opcjonalne. 14

Wirtualne destruktory Złota zasada: destruktor w klasie bazowej powinien być zawsze wirtualny! Jeżeli destruktor nie jest wirtualny to podlega wczesnemu wiązaniu (statycznemu) przez kompilator Figura *fig = new Prostokat( 2.4, 3.7 ); fig->obwod(); delete fig; 15

Cel naszego zadania... Zapewnienie wspólnego interfejsu! 16

Klasa Figura klasa abstrakcyjna class Figura { public: virtual double Pole() const = 0; virtual double Obwod() const = 0; }; Metoda abstrakcyjna musi być przedefiniowana w klasie pochodnej Nie da się utworzyć instancji klasy, która zawiera co najmniej jedną metodę czysto wirtualną (abstrakcyjną) 17

Dziedziczenie wielokrotne class Wspolrzedna { protected: double x, y; public: Wspolrzedna() : x( 0 ), y( 0 ) {} Wspolrzedna( double _x, double _y ) : x( _x ), y( _y ) {} }; class Prostokat : public Figura, public Wspolrzedna { }; 18

Rozmieszczenie obiektów w pamięci Informacje o metodach wirtualnych przechowywane są w tzw. tablicach metod wirtualnych: Virtual Method Table Virtual Function Table VTable g++ fig.cc -Wall -pedantic -fdump-class-hierarchy cat fig.cc.class 19

Dynamiczna kontrola typów Operator dynamic_cast: Konwertuje wskaźnik klasy bazowej na wskaźnik do klasy pochodnej Konwersja może się nie udać! Należy zawsze sprawdzać czy nie zwrócił wartości NULL Operator typeid: Wymaga włączenia pliku nagłówkowego <typeinfo> Zwraca obiekt klasy std::type_info: name() before() Wynik operacji może być porównywany (==) i (!=) 20

Zaawansowane programowanie w języku C++ Przeciążanie operatorów Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego