Dziedziczenie jednobazowe, poliformizm, tablice wskaźników na obiekty



Podobne dokumenty
Dziedziczenie jednobazowe, poliformizm

Szablony klas, zastosowanie szablonów w programach

Dziedziczenie wielobazoweuzupełnienie

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 9: Polimorfizm i klasy wirtualne

Dziedziczenie. Tomasz Borzyszkowski

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wykład 9: Metody wirtualne i polimorfizm

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Język C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Kurs WWW. Paweł Rajba.

Programowanie obiektowe

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

.NET Klasy, obiekty. ciąg dalszy

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

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

TEMAT : KLASY DZIEDZICZENIE

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

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

C++ - [4-7] Polimorfizm

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Materiały do zajęć VII

Programowanie obiektowe

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

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

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

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

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

Programowanie obiektowe i zdarzeniowe

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

Podstawy Programowania semestr drugi. Wykład czternasty

Podstawy Programowania 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.

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

Klasy abstrakcyjne i interfejsy

DOSTĘP DO METOD I ZMIENNYCH, TABLICE. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla kaŝdego, Helion 2001)

Zaawansowane programowanie w C++ (PCP)

Wykład 8: klasy cz. 4

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

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

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Definiowanie własnych klas

Wykład 6 Dziedziczenie cd., pliki

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

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Technologie i usługi internetowe cz. 2

Dziedziczenie. dr Jarosław Skaruz

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

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

Aplikacje w środowisku Java

TEMAT : KLASY POLIMORFIZM

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.

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

Programowanie obiektowe

Programowanie Obiektowe i C++

Wykład 5: Klasy cz. 3

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

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

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

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Dokumentacja do API Javy.

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Programowanie w Internecie. Java

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Języki i techniki programowania Ćwiczenia 2

Programowanie obiektowe

dr inż. Jarosław Forenc

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

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Tablice (jedno i wielowymiarowe), łańcuchy znaków

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

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

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

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

Programowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Podstawy Języka Java

Lab 9 Podstawy Programowania

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Wprowadzenie do programowanie obiektowego w języku C++

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

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

Listy powiązane zorientowane obiektowo

DOSTĘP DO METOD I ZMIENNYCH. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001)

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

W dowolnym momencie można zmienić typ wskaźnika.

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

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

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

Wykład 6: Dziedziczenie

Transkrypt:

Dziedziczenie jednobazowe, poliformizm, tablice wskaźników na obiekty 1. Polimorfizm (1) tablice wskaźników na obiekty 2. Polimorfizm (2) tablice wskaźników na obiekty 3. Polimorfizm (3) tablice wskaźników na unikatowe obiekty, klasa abstrakcyjna 4. Klasa obsługująca uniwersalną tablicę zawierającą wskaźniki na unikatowe obiekty Zofia Kruczkiewicz, ETE8305_7 1

Dziedziczenie jednobazowe, poliformizm 1. Polimorfizm (1) tablice wskaźników na obiekty Zofia Kruczkiewicz, ETE8305_7 2

Tylko jeden operator==, w którym wywołane są metody wirtualne obiektów typu TProdukt1 lub TProdukt2 Zofia Kruczkiewicz, ETE8305_7 3 1

Tylko jeden operator==, w którym wywołane są metody wirtualne obiektów typu TProdukt1 lub TProdukt2: : Podaj_cene() oraz Podaj_podatek() Operator<<, w którym wywołane są metody wirtualne obiektów typu TProdukt1 lub TProdukt2: : Podaj_cene() oraz Podaj_podatek() Zofia Kruczkiewicz, ETE8305_7 4 1

Zofia Kruczkiewicz, ETE8305_7 5 2

Operator<<, w którym wywołane są metody wirtualne obiektów tylko typu TProdukt2: : Podaj_cene() oraz Podaj_podatek() 1 Zofia Kruczkiewicz, ETE8305_7 6

Wywoływany operator<< z klasy TProdukt1, natomiast w ciele tej funkcji operatorowej wywoływane są wirtualne metody Podaj_cenę oraz Podaj _podatek, stąd na ekranie pokazują się poprawne wyniki. Jednak podatek równy -1 przydatny okazał się jedynie w metodzie operatorowej operator==, służącej do porównania obiektów Zofia Kruczkiewicz, ETE8305_7 7

1 operator << z klasy TProdukt1 2 operator<< z klasy TProdukt2 1 - operator<< z klasytprodukt1. Poprawnie drukowana cena i podatek dzięki wirtualnym metodom wywoływanym w ciele tej funkcji. Jednak podatek równy -1 jest wartością nienaturalną Zofia Kruczkiewicz, ETE8305_7 8

Dziedziczenie jednobazowe, poliformizm 1. Polimorfizm (1) tablice wskaźników na obiekty 2. Polimorfizm (2) tablice wskaźników na obiekty Zofia Kruczkiewicz, ETE8305_7 9

Metody wirtualne Zofia Kruczkiewicz, ETE8305_7 10

Tutaj może być wywołana metoda tostring z klas TProdukt1 i TProdukt2 Zofia Kruczkiewicz, ETE8305_7 11

Metody wirtualne Zofia Kruczkiewicz, ETE8305_7 12

Tutaj jest wywołana metoda tostringl z klasy TProdukt1 Tutaj może być wywołana metoda tostringl z klasy TProdukt2 Zofia Kruczkiewicz, ETE8305_7 13

Wywoływany operator<< z klasy TProdukt1, natomiast w ciele tej funkcji operatorowej wywoływana jest wirtualna metoda tostring, stąd na ekranie pokazują się poprawne wyniki. Teraz podatek jest wyświetlany tylko dla obiektów typu TProdukt2 Zofia Kruczkiewicz, ETE8305_7 14

1 operator << z klasy TProdukt1 2 operator<< z klasy TProdukt2 1 - operator<< z klasytprodukt1. Poprawnie drukowana cena i podatek dzięki wirtualnej metodzie tostring wywoływanej w ciele operatora<<. Teraz podatek jest wyświetlany tyiko dla obiektów typu TProdukt2 Zofia Kruczkiewicz, ETE8305_7 15

//1 Zofia Kruczkiewicz, ETE8305_7 16

//1 Zofia Kruczkiewicz, ETE8305_7 17

(//1) Wywoływany operator<< z klasy TProdukt1, natomiast w ciele tej funkcji operatorowej wywoływana jest wirtualna metoda tostring, stąd na ekranie pokazują się poprawne wyniki. Teraz podatek jest wyświetlany tylko dla obiektów typu TProdukt2 Zofia Kruczkiewicz, ETE8305_7 18

//1 Zofia Kruczkiewicz, ETE8305_7 19

Dziedziczenie jednobazowe, poliformizm 1. Polimorfizm (1) tablice wskaźników na obiekty 2. Polimorfizm (2) tablice wskaźników na obiekty 3. Polimorfizm (3) tablice wskaźników na unikatowe obiekty, klasa abstrakcyjna Zofia Kruczkiewicz, ETE8305_7 20

Metody czysto wirtualne, klasy abstrakcyjne Metody czysto wirtualne są deklarowane z inicjalizacją zerem: virtual void wyswietl () = 0; Klasa zawierająca co najmniej jedną taką funkcję jest klasą abstrakcyjną. Oznacza to, że nie można tworzyć obiektów jej typu. Funkcja czysto wirtualna musi być przedefiniowana w klasie pochodnej, albo nowo zadeklarowana pochodna klasa będzie ją dziedziczyć, stąd stanie się również klasą abstrakcyjną. Klasa abstrakcyjna służy do uogólnienia cech wszystkich jej następców w danej rodzinie za pomocą metod czysto wirtualnych. Wystarczy korzystać ze wskaźników lub referencji do klasy abstrakcyjnej, aby można było zastosować metodę czysto wirtualną, która w czasie działania programu zostanie zastąpiona przedefiniowaną metodą wywołaną przez aktualnego następcę klasy abstrakcyjnej. Stąd dzięki klasie abstrakcyjnej można ograniczyć: liczbę innych klas funkcji obsługujących całą rodzinę Zofia Kruczkiewicz, klas dziedziczących ETE8305_7 od klasy abstrakcyjnej. 21

Klasa TAbstrakcyjny pozwala uogólnić przechowanie wskaźników obiektów np. w tablicach Zofia Kruczkiewicz, ETE8305_7 22

Przesłanianie (przedefiniowanie) wirtualnych metod abstrakcyjnych z klasy abstrakcyjnej Zofia Kruczkiewicz, ETE8305_7 23

Zrzutowanie referencji typu TAbstrakcyjny na TProdukt1 Zofia Kruczkiewicz, ETE8305_7 24

Przesłanianie (przedefiniowanie) wirtualnej metody tostring teraz z klasy TProdukt1, przedefiniowane metody operator== i operator+= są dziedziczone z klasy TProdukt1 Zofia Kruczkiewicz, ETE8305_7 25

Zofia Kruczkiewicz, ETE8305_7 26

Przesłanianie (przedefiniowanie) wirtualnych metod abstrakcyjnych z klasy abstrakcyjnej Zofia Kruczkiewicz, ETE8305_7 27

Zrzutowanie referencji typu TAbstrakcyjny na TZakup Zofia Kruczkiewicz, ETE8305_7 28

Tworzenie obiektów typu TZakup tylko z produktów, które nie powtarzają się, czyli znajdują się w tablicy produkty (produkty p2, p6 są usunięte z pamięci)- utworzono 4 obiekty typu Zofia Kruczkiewicz, ETE8305_7 TZakup 29

//1 Tworzenie obiektu s typu string każdego elementu tablicy produkty //2 Tworzenie obiektu s typu string każdego elementu tablicy zakupy Zofia Kruczkiewicz, ETE8305_7 30

Tworzenie unikatowych obiektów typu TZakup w tablicy zakupy ze względu na produkty typu TProdukt1 i TProdukt2: oraz zakupów o identycznych produktach Tworzenie unikatowych obiektów typu TProdukt1 i TProdukt2 w tablicy produkty ze względu na produkty typu TProdukt1 i TProdukt2: brak identycznych produktów w tablicy Zofia Kruczkiewicz, ETE8305_7 produkty 31

//1 //2 Zofia Kruczkiewicz, ETE8305_7 32

kolekcja - wskaźnik do tablicy przechowującej elementy typu wskaźniki na obiekty typu TAbstrakcyjny Funkcja tostring zwraca dane z tablicy kolekcja w postaci string Funkcja Wstaw_obiekt wstawia unikatowe obiekty do tablicy kolekcja, liczba tych obiektów przechowywana jest w zmiennej ile Zofia Kruczkiewicz, ETE8305_7 33

zmienna ile1 do przechowania liczby unikatowych produktów wstawianych do tablicy produkty zmienna ile2 do przechowania liczby unikatowych zakupów wstawianych do tablica zakupy zmienna ile1 przechowuje liczbę unikatowych produktów w tablicy produkty po wstawianiu ich za pomocą funkcji Zofia Kruczkiewicz, ETE8305_7 34 Wstaw_obiekt za pośrednictwem wskaźnika kolekcja

zmienna ile2 przechowuje liczbę unikatowych zakupów w tablicy zakupy po wstawianiu ich za pomocą funkcji Wstaw_obiekt za pośrednictwem Zofia Kruczkiewicz, ETE8305_7 35 wskaźnika kolekcja

//1 //2 Zofia Kruczkiewicz, ETE8305_7 36

Tutaj można podstawiać operator== oraz operator+= dla obiektów klas dziedziczących po klasie TAbstrakcyjny: TProdukt1, TProdukt2 oraz TZakup Metoda tostring może być wywoływana dla wszystkich dla obiektów z klas dziedziczących po klasie TAbstrakcyjny: TProdukt1, TProdukt2 oraz TZakup (//`1, //2) Zofia Kruczkiewicz, ETE8305_7 37

//1 //2 Zofia Kruczkiewicz, ETE8305_7 38

Dziedziczenie jednobazowe, poliformizm 1. Polimorfizm (1) tablice wskaźników na obiekty 2. Polimorfizm (2) tablice wskaźników na obiekty 3. Polimorfizm (3) tablice wskaźników na unikatowe obiekty, klasa abstrakcyjna 4. Klasa TKol1 obsługująca uniwersalną tablicę zawierającą wskaźniki na unikatowe obiekty Zofia Kruczkiewicz, ETE8305_7 39

Klasa abstrakcyjna TAbstrakcyjny Wirtualny destruktor pozwala przy usuwaniu obiektów dziedziczących po klasie TAbstrakcyjny wywołać charakterystyczny dla nich algorytm usuwania z pamięci danych powiązanych z usuwanym obiektem, Zofia Kruczkiewicz, ETE8305_7 40 zdefiniowany w destruktorze jego klasy.

Klasa TKol1 obsługująca kolekcję unikatowych obiektów oparta na obiektach dziedziczących od klasy TAbstrakcyjny Zofia Kruczkiewicz, ETE8305_7 41

Klasa TKol1 obsługująca kolekcję unikatowych obiektów oparta na obiektach dziedziczących od klasy TAbstrakcyjny Zofia Kruczkiewicz, ETE8305_7 42

Program Zofia Kruczkiewicz, ETE8305_7 43

Program Tworzenie zakupu przez podanie przykładowego produktu p oraz jego ilości. Obiekt zakup z jest tworzony przez podanie wskaźnika na produkt p1, wyszukanego w kolekcji produkty na podstawie obiektu p, który jest potem usuwany z pamięci Zofia Kruczkiewicz, ETE8305_7 44

Zofia Kruczkiewicz, ETE8305_7 45