Mapowanie
dziedziczenia z UML do Java
Piotr Kurek
Kuba Siatkowski
Poruszane problemy
Disjoint
Overlapping
Complete
Incomplete
Multi-Inheritance
Multi-Aspect
Dynamic
Disjoint a
overlapping
Różnica polega na rozłączności zbiorów
Overlapping
Zbiory nie są rozłączne
Disjoint
Przynależność do jednego zbioru
wyklucza przynależność do innego
Przykłady
Overlapping
Sportowiec
Biegacz Skoczek
S p o r t o w i e c
B ie g a cz
S ko cz ek
Kombinacja norweska
Przykłady
Disjoint
Czlowiek
Kobieta Mężczyzna
C z ł o w i e k
K o b i e t a M ę ż c z y z n a
Complete a incomplete
Różnica polega na kompletności odwzorowania obiektów klasy
nadrzędnej przez klasy podrzędne
Complete
Wszystkie obiekty są odwzorowane w klasach podrzędnych
Klasa nadrzędna jest abstrakcyjna
Incomplete
Nie wszystkie obiekty są odwzorowane w
klasach podrzędnych
Prawdziwe życie
Complete
Przesyłka
Dostarczona Niedostarczona
P r z e s y łk a
D o s t a r c z o n a N i e d o s t a r c z o n a
Prawdziwe życie
Incomplete
Disco
Discopolo Disko Italiano Bounce
D is k o Ita lia n o
D is c o p o lo B o u n c e
D is c o
Dziedziczenie
wieloaspektowe
Specjalizacja następuje po kilku aspektach
Rower
Górski Szosowy Aluminiowy Carbonowy
zastosowanie materiał
Dziedziczenie wielokrotne
Dziedziczenie z kilku klas jednocześnie
JednośladMotor Rower
Motorower
Jako takie w Java
nie istnieje !!! ;-p
Dziedziczenie dynamiczne
Student może zmieniać stan, co może być modelowane przez
dziedziczenie dynamiczne
Student
Trzeźwy Pijany Skacowany
<<dynamic>>
Implementacje
Disjoint
Jest domyślnym sposobem dziedziczenia w Java
Czlowiek
Kobieta Mężczyzna
Overlapping
Wymaga wprowadzenia nowej klasy mającej atrybuty klas, które łączy.
Sportowiec
Biegacz Skoczek Kombinator norweski
Sportowiec
Biegacz Skoczek
{ overlapping }
Overlapping
class Sportowiec{
}
class Biegacz extends Sportowiec{
}
class Skoczek extends Sportowiec{
}
class KombinatorNorweski extends Sportowiec{
}
Complete
Klasa nadrzędna jest abstrakcyjna
abstract class Czlowiek{
}
class Kobieta extends Czlowiek{
}
class Mezczyzna extends Czlowiek{
}
Incomplete
Klasa generalizująca nie może być abstrakcyjna
class Drzewo{
}
class Jablon extends Drzewo{
}
class Grusza extends Drzewo{
}
Wielodziedziczen ie
Poprzez przekształcenie w dziedziczenia w kompozycje
Poprzez interfejsy
Wielodziedziczen ie poprzez
kompozycje
Jednoślad
Motor Rower
Motorower
Jednoślad
Motor Rower
1 0..1
0..1 1
class Jednoslad{
Motor motor;
Rower rower;
}
Wielodziedziczen ie przez intefejsy
interface Palny {
int LATWOPALNY = 2;
int PALNY = 1;
int NIEPALNY = 0;
void zapal (int palnosc);
}
class Material implements Palny{
public void zapal (int palnosc){
if (palnosc == LATWOPLANY ||
palnosc == PALNY)
System.out.println(„splonal”);
else
System.out.println(„przetrwal”);
Dziedziczenie
wieloaspektowe
Dziedziczenie dynamiczne
Trudne w implementacji