Realizacja w Javie rodzajw dziedziczenia wykorzystywanych w UML

  • Slides: 21
Download presentation
Realizacja w Javie rodzajów dziedziczenia wykorzystywanych w UML. Tomasz Świerzyński Grzegorz Zadroga

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

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,

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 Pracownik Numer indeksu Numer grupy

Przykład dziedziczenia: Osoba Imie Nazwisko Data urodzenia Wiek() Student Pracownik Numer indeksu Numer grupy Data zatrudnienia Pensja

Perspektywa pojęciowa i projektowa • Elementy UML związane z przejściem z pojęciowej perspektywy na

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 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 współdzielona. zależność może być

Co to jest klasa w Javie? • Klasa definiuje atrybuty obiektów (dane związane z

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.

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() {disjoint } Student Pracownik Numer indeksu Numer grupy Data zatrudnienia Pensja

Disjoint perspektywa projektowa Osoba Imie Nazwisko Data urodzenia Wiek() 0. . 1 {xor} 0.

Disjoint perspektywa projektowa Osoba Imie Nazwisko Data urodzenia Wiek() 0. . 1 {xor} 0. . 1 Student Pracownik Numer indeksu Numer grupy Data zatrudnienia Pensja

class Osoba{ int rok_urodzenia , telefon; String imie, nazwisko, adres; Osoba (String im, String

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);

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

Overlapping perspektywa pojęciowa • Czyli podział, w którym osoba może być jednocześnie studentem i pracownikiem, ale nie musi. Osoba {overlapping} Student Pracownik

Overlapping perspektywa projektowa Osoba 0. . 1 Student 0. . 1 Pracownik

Overlapping perspektywa projektowa Osoba 0. . 1 Student 0. . 1 Pracownik

Complete perspektywa pojęciowa • Czyli podział całkowity, jest to podział domyślny. • Wszystkie klasy

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. {abstract} Osoba {complete} Student Pracownik

Incomplete • Czyli podział klas niecałkowity. • Nie wsystkie podklasy zostały zdefiniowane, nadklasa nie

Incomplete • Czyli podział klas niecałkowity. • Nie wsystkie podklasy zostały zdefiniowane, nadklasa nie jest klasą abstrakcyjną. • Istnieje możliwość dodania nowych klas. Osoba {incomplete} Student Pracownik

 • Dziedziczenie typu incomplete wymaga tworzenia nowych klas, ich atrybutów oraz metod. •

• 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

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. •

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 – inheritance perspektywa pojęciowa • Czyli wielokrotne (wielodziedziczenie) - ma miejsce, gdy klasa

Multi – inheritance perspektywa pojęciowa • Czyli wielokrotne (wielodziedziczenie) - ma miejsce, gdy klasa dziedziczy inwarianty z więcej niż jednej klasy. Osoba {overlapping} Student Pracownik Osoba/Pracownik

Multi – inheritance perspektywa projektowa • Ponieważ w Javie klasa nie możne dziedziczyć wielokrotnie

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

Multi – aspect • Czyli dziedziczenie wieloaspektowe – oznacza, że występuje wiele aspektów (dyskryminatorów)

Multi – aspect • Czyli dziedziczenie wieloaspektowe – oznacza, że występuje wiele aspektów (dyskryminatorów) dziedziczenia np. napęd i teren. Pojazd {overlapping} napęd teren {overlapping} Pojazd wiatrowy Pojazd silnikowy Pojazd lądowy Pojazd wodny

Dynamic • Czyli dziedziczenie dynamiczne – obiekt może zmieniać w czasie przynależność do klas,

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» zawód Osoba Kierownik Inżynier Sprzedawca