Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Sposoby obejścia dziedziczenia Braki specyficznych rodzajów dziedziczenia można obejść wprowadzając dodatkowe: kompozycje asocjacje agregacje Każdy z tych.

Podobne prezentacje


Prezentacja na temat: "Sposoby obejścia dziedziczenia Braki specyficznych rodzajów dziedziczenia można obejść wprowadzając dodatkowe: kompozycje asocjacje agregacje Każdy z tych."— Zapis prezentacji:

1 Sposoby obejścia dziedziczenia Braki specyficznych rodzajów dziedziczenia można obejść wprowadzając dodatkowe: kompozycje asocjacje agregacje Każdy z tych związków reprezentuje się za pomocą atrybutów w klasach.

2 Sposoby obejścia dziedziczenia Najprostszy przypadek: kompozycja Kompozycję implementujemy poprzez umieszczenie odpowiedniego odnośnika wewnątrz klasy. SAMOCHÓD SILNIK class Samochód { Silnik s;.... }

3 Overlapping Overlapping – przecięcie zbiorów podklas nie jest zbiorem pustym. Pojazd lądowy Pojazd wodny { overlapping }

4 Overlapping Pojazd lądowy Pojazd wodny {disjoint, complete} Pojazd wodno - lądowy Obejście poprzez wprowadzenie dodatkowej klasy zawierającej sumę atrybutów innych podklas.

5 Overlapping Wady rozwiązania: konieczność tworzenia nowej klasy dla każdego pojazdu. dodawanie nowej klasy – pociąga za sobą tworzenie dużej ilości klas łączących poszczególne kategorie szybkie rozrastanie się hierarchii klas

6 Wielodziedziczenie – możliwość przejęcia inwariantów (pól i metod) z więcej niż jednej nadklasy. Wielodziedziczenie (multi inheritance) Występuje w języku C++, w Javie trzeba stosować rozwiązania zastępcze.

7 Przykład wielodziedziczenia Standardowa notacja UML: POJAZD POJAZD LĄDOWY POJAZD WODNY AMFIBIA { overlapping }

8 Wielodziedziczenie Jeżeli nie są wymagane szczegółowe informacje, można w ogóle zrezygnować z dziedziczenia. rezygnacja z podklas wprowadzenie dodatkowych atrybutów i metod POJAZD jezdzi() plywa()

9 Wielodziedziczenie POJAZD Nazwa pojazdu WŁAŚCIWOŚCI POJAZDU LĄDOWEGO WŁAŚCIWOŚCI POJAZDU WODNEGO Konstrukcja pozwalająca obejść brak wielodziedziczenia – zastąpienie przez kompozycję 0..1 Takie relacje pomiędzy klasami można zaimplementować w Javie.

10 Wielodziedziczenie – realizacja w Javie Wskazane jest, aby klasy Właściwości Pojazdu Lądowego i Właściwości pojazdu wodnego zostały zrealizowane jako klasy wewnętrzne klasy Pojazd. class Pojazd { String nazwa; WlPojLad wl;// może być null WlPojWod ww;// może być null class WlPojLad { double ladV;// predkosc na lądzie } class WlPojWod { double wodV;// predkosc w wodzie double wypornosc; }

11 Wielodziedziczenie – realizacja w Javie Klasa Pojazd w tym przykładzie powinna być zaopatrzona w kilka konstruktorów w zależności od typu pojazdu. Pojazd(WlPojLad wl) { this.wl = wl; } Pojazd(WlPojWod ww) { this.ww = ww; } Pojazd(WlPojLad wl, WlPojWod ww) { this.wl = wl; this.ww = ww; }

12 Wielodziedziczenie – wady rozwiązania POJAZD POJAZD LĄDOWY POJAZD WODNY POJAZD POWIETRZNY Problemy pojawiają się gdy do istniejącej hierarchii klas dodajemy nową.

13 w przypadku dodawania nowej podklasy (pojazd powietrzny) – konieczna modyfikacja kodu nadklasy Wielodziedziczenie – wady rozwiązania class Pojazd { WlPojLad wl; WlPojWod ww; WlPojPow wp; class WlPojLad {...} class WlPojWod {...} class WlPojPow {.... } nowa klasa wewnętrzna nowy odnośnik

14 Wielodziedziczenie – wady rozwiązania Wady poprzedniego rozwiązania tzn. konieczność modyfikacji kodu już napisanych klas można obejść stosując następującą hierarchię: POJAZD WŁAŚCIWOŚCI POJAZDU WŁAŚCIWOŚCI POJAZDU LĄDOWEGO WŁAŚCIWOŚCI POJAZDU WODNEGO WŁAŚCIWOŚCI POJAZDU POWIETRZNEGO


Pobierz ppt "Sposoby obejścia dziedziczenia Braki specyficznych rodzajów dziedziczenia można obejść wprowadzając dodatkowe: kompozycje asocjacje agregacje Każdy z tych."

Podobne prezentacje


Reklamy Google