• Nie Znaleziono Wyników

Sposoby obejścia dziedziczenia

N/A
N/A
Protected

Academic year: 2021

Share "Sposoby obejścia dziedziczenia"

Copied!
14
0
0

Pełen tekst

(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

Pojazd

lądowy Pojazd

wodny

{ overlapping }

(4)

Overlapping

Pojazd

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 0..1

Takie relacje pomiędzy klasami można zaimplementować w

(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

Cytaty

Powiązane dokumenty

System sterowania platform Č w czasie utraty ųČcznoƑci ze stanowiskiem dowodzenia .... System zasilania elektrycznego

lista składowych klasy - deklaruje składowe klasy, czyli dane i.. b) Deklaracja składowych wewnątrz klasy. C) Definicja składowych na zewnątrz klasy – kod metod występuje w jednym

tworzenie jednego pliku, definiowanie nazw z plików nagłówkowych..

Zastosowanie w postaci biblioteki typu dll klasy TKalkulator_2 opartej na properties w projekcie typu CLR Console Application.. Zastosowanie klasy TKalkulator_2 opartej na

[r]

[r]

W podobny sposób jak uzyskaliśmy pochodne drugiego i trzeciego rzędu poprzez dwu- i trzykrotne różniczkowanie funkcji, możemy zdefiniować 1 pochodną dowolnego rzędu 2 naturalnego

Kolejnego dnia, przemierzając tę samą drogę, Piotr tankował dwa razy dłużej, przez co całkowity czas jego podróży wyniósł jedną godzinę3. Ile czasu zajęłaby