210 likes | 405 Views
Realizacja w Javie rodzajów dziedziczenia wykorzystywanych w UML. Tomasz Świerzyński Grzegorz Zadroga. 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:
E N D
Realizacja w Javie rodzajów dziedziczenia wykorzystywanych w UML. Tomasz Świerzyński Grzegorz Zadroga
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).
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.
Disjointperspektywa 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.
Disjointperspektywa projektowa 0..1 0..1 {xor}
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);
Overlappingperspektywa pojęciowa • Czyli podział, w którym osoba może być jednocześnie studentem i pracownikiem, ale nie musi.
Overlappingperspektywa projektowa Osoba 0..1 0..1 Student Pracownik
Completeperspektywa 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.
Incomplete • Czyli podział klas niecałkowity. • Nie wsystkie podklasy zostały zdefiniowane, nadklasa nie jest klasą abstrakcyjną. • Istnieje możliwość dodania nowych klas.
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.
Interfejs c.d. • 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.
Multi – inheritanceperspektywa pojęciowa • Czyli wielokrotne (wielodziedziczenie) - ma miejsce, gdy klasa dziedziczy inwarianty z więcej niż jednej klasy.
Multi – inheritanceperspektywa 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 0..1 0..1 Student Pracownik
Multi – aspect • Czyli dziedziczenie wieloaspektowe – oznacza, że występuje wiele aspektów (dyskryminatorów) dziedziczenia np. napęd i teren. Pojazd {overlapping} teren teren napęd {overlapping} Pojazd wiatrowy Pojazd silnikowy Pojazd lądowy Pojazd wodny
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). «dynamic» Kierownik zawód Osoba Inżynier Sprzedawca