Realizacja w Javie
rodzajów dziedziczenia
wykorzystywanych w
UML.
Główne zagadnienia:
• Definicja dziedziczenia.
• Perspektywa pojęciowej i projektowa.
• Omówienie elementów Javy wykorzystanych w referacie.
• Omówienie pojęcia interfejs.
• Rodzaje dziedziczenia:
– Disjoint
– Overlapping
– Complete
– Incomplete
– Multi-inheritance
– Multi-aspect
– Dynamiczne
• Implementacja poszczególnych rodzajów dziedziczenia w
Javie.
Co to jest dziedziczenie?
• Dziedziczenie czyli generalizacja lub specjalizacja
jest związkiem pomiędzy klasami, łączącymi klasę
bardziej ogólną (nadklasę) z jedną lub więcej klas (tzw.
podklas) będących jej specjalizacjami.
Klasa, będąca specjalizacją danej klasy, oprócz
atrybutów nadklasy może posiadać (i z reguły posiada)
też swoje atrybuty.
Dziedziczenie inwariantów do klas jest tranzytywne
(przechodnie).
Przykład dziedziczenia:
Osoba
Imie
Nazwisko
Data
urodzenia
Wiek()
Student
Numer
indeksu
Numer
grupy
Pracownik
Data
zatrudnienia
Pensja
Perspektywa pojęciowa i
projektowa
• Elementy UML związane z przejściem z pojęciowej perspektywy
na projektową perspektywę dziedziczenia.
- asocjacja – jest to powiązanie ze sobą dwóch lub więcej klas.
- agregacja - jest szczególnym rodzajem asocjacji
wyrażającym
zależność część-całość. Np. silnik jest
częścią samochodu.
- kompozycja - jest silniejszym rodzajem agregacji.
Dzięki kompozycji, podobiekty Student czy Pracownik są
mocniej związane z obiektem Osoba.
Oznacza to, część nie może istnieć bez całości i że część nie
może być współdzielona.
Co to jest klasa w Javie?
• Klasa definiuje atrybuty obiektów (dane związane z
obiektami) oraz operacje, które na tych obiektach można
wykonać.
• Atrybuty czyli pola klasy. Są reprezentowane przez
zmienne i/lub stałe, które są określonych typów i oczywiście
muszą być odpowiednio deklarowane.
• Operacje wprowadzamy poprzez definicje metod klasy.
• Obiekty danej klasy tworzy się za pomocą konstruktora,
który nadaje wartości poszczególnym polom obiektu.
• Może być utworzonych wiele obiektów danej klasy, czyli
klasa jest szablonem dla obiektu.
Disjoint
perspektywa pojęciowa
• Czyli podział rozłączny. Jest to podział domyślny. Oznacza,
że np. dana osoba nie może być jednocześnie pracownikiem
i studentem.
Osoba
Imie
Nazwisko
Data
urodzenia
Wiek()
Student
Numer
indeksu
Numer
grupy
Pracownik
Data
zatrudnienia
Pensja
{disjoint
}
Disjoint
perspektywa projektowa
0..1
0..1
{xor}
Osoba
Imie
Nazwisko
Data
urodzenia
Wiek()
Student
Numer
indeksu
Numer
grupy
Pracownik
Data
zatrudnienia
Pensja
class Osoba{
int rok_urodzenia ,telefon;
String imie,nazwisko,adres;
Osoba (String im, String naz, String adr,int tele){
imie = im;
nazwisko = naz;
adres = adr;
telefon = tele;
}
}
class Student extends Osoba
{
int numer_indeksu;
String tryb_studiow;
Student(int nr, String tryb,String im, String naz, String adr,int rok,int tele)
{
super(im,naz,adr,tele);
numer_indeksu = nr;
tryb_studiow = tryb;
}
}
class Pracownik extends Osoba{
int pensja;
String tryb_pracy;
Pracownik(int pen, String tryb,String im, String naz, String adr,int rok,int tele,int ni){
super(im,naz,adr,tele);
pensja = pen;
tryb_pracy = tryb;
}
}
Tworzenie nowych obiektów
klas
Student stud = new
Student(1234,"dzienne","Jarek","Michon","Krucza",65465);
Pracownik prac =
new Pracownik(4657,"pul etatu","Pawel","Wrona","Kompanji 1",8765432);
Overlapping
perspektywa pojęciowa
• Czyli podział, w którym osoba może być jednocześnie studentem i
pracownikiem, ale nie musi.
Osoba
Student
Pracownik
{overlapping}
Overlapping
perspektywa projektowa
Osoba
Student
Pracownik
0..1
0..1
Complete
perspektywa pojęciowa
• Czyli podział całkowity, jest to podział domyślny.
• Wszystkie klasy zostały już określone i żadna nowa nie
będzie dodawana.
• Nadklasa jest klasą abstrakcyjną.
• Perspektywa projektowa oraz implementacja w Javie
jest identyczna jak w przypadku dziedziczenia Disjoint.
Osoba
Student
Pracownik
{complete}
{abstract
}
Incomplete
• Czyli podział klas niecałkowity.
• Nie wsystkie podklasy zostały zdefiniowane, nadklasa nie
jest klasą abstrakcyjną.
• Istnieje możliwość dodania nowych klas.
Osoba
Student
Pracownik
{incomplete}
• Dziedziczenie typu incomplete wymaga
tworzenia nowych klas, ich atrybutów oraz
metod.
• Niestety w Javie musi być z góry okreslona
ilość klas i ich inwariantów.
• Datego kod dziedziczenbia typu incomplete
nie będzie różił się od kodu dziedziczenia
typu complete i nie oznaczamy w kodzie czy
dziedziczenie jest typu complete czy
incomplete.
Interfejs
• Zdażają się sytuacje, kiedy w jednej podklasie musimy wykożystać
metody z dwóch nadklas.
• W jawje jedna klasa nie może dziedziczyć jednocześnie z dwóch
nadklas.
• Problem ten możemy rozwiązać za pomocą interfejsu – jest to
jakby uboższa klasa, która nie zawiera zmiennych, tylko publiczne
abstrakcyjne metody i/lub publiczne statyczne stałe.
• Implementacja powyższych metod musi zawierać się w
klasach dziedziczących.
• Jeśli klasa kożysta z interfeiju, musi zawierać implementację
wszystkich metod interfacu.W przeciwnym razie klasa ta musi
być abstrakcyjna.
• Klasa może implementować wiele interfejsów.
• Interfejsy podobnie jak i klasy wyznaczają typy zmiennych.
• Wszystkie klasy pochodne wobec klasy implementującej dany
interfejs, prawem dziedziczenia,także będą implementowac
ten interfejs.
Interfejs c.d.
Multi – inheritance
perspektywa pojęciowa
• Czyli wielokrotne (wielodziedziczenie) - ma miejsce, gdy
klasa dziedziczy inwarianty z więcej niż jednej klasy.
Osoba
Student
Pracownik
Osoba/Pracowni
k
{overlappin
g}
Multi – inheritance
perspektywa projektowa
• Ponieważ w Javie klasa nie możne dziedziczyć wielokrotnie
(nie może dziedziczyć z klasy, która sama jest klasą
dziedziczącą), zalecane jest użycie perspektywy
projektowej z dziedziczenia typu Overlapping.
Osoba
Student
Pracownik
0..1
0..1
Multi – aspect
• Czyli dziedziczenie wieloaspektowe – oznacza, że występuje
wiele aspektów (dyskryminatorów) dziedziczenia
np. napęd i teren.
Pojazd
{overlapping}
Pojazd
wiatrowy
Pojazd
silnikowy
Pojazd
lądowy
Pojazd
wodny
napęd
teren
teren
{overlapping}
Dynamic
• Czyli dziedziczenie dynamiczne – obiekt może zmieniać w
czasie przynależność do klas, dyskryminator określa w której
klasie dany obiekt się aktualnie znajduje.
• Np. osoba może zmieniać wykonywany zawód
(dyskryminator).
Osoba
Kierownik
Inżynier
Sprzedawca
zawód
«
dynamic
»