Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
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 class Samochód { Silnik s; .... } SILNIK
3
Overlapping Overlapping – przecięcie zbiorów podklas nie jest zbiorem pustym. Pojazd { overlapping } Pojazd lądowy Pojazd wodny
4
Overlapping Obejście poprzez wprowadzenie dodatkowej klasy zawierającej sumę atrybutów innych podklas. Pojazd {disjoint, complete} Pojazd lądowy Pojazd wodny Pojazd wodno - lądowy
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 (multi inheritance)
Wielodziedziczenie – możliwość przejęcia inwariantów (pól i metod) z więcej niż jednej nadklasy. Występuje w języku C++, w Javie trzeba stosować rozwiązania zastępcze.
7
Przykład wielodziedziczenia
Standardowa notacja UML: POJAZD { overlapping } POJAZD LĄDOWY POJAZD WODNY AMFIBIA
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 Konstrukcja pozwalająca obejść brak wielodziedziczenia – zastąpienie przez kompozycję POJAZD Nazwa pojazdu 0..1 0..1 WŁAŚCIWOŚCI POJAZDU WODNEGO WŁAŚCIWOŚCI POJAZDU LĄDOWEGO 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) {
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
Wielodziedziczenie – wady rozwiązania
w przypadku dodawania nowej podklasy (pojazd powietrzny) – konieczna modyfikacja kodu nadklasy class Pojazd { WlPojLad wl; WlPojWod ww; WlPojPow wp; class WlPojLad {...} class WlPojWod {...} class WlPojPow { .... } nowy odnośnik nowa klasa wewnętrzna
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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.