200 likes | 455 Views
Sposoby implementacji podstawowych struktur dziedziczenia w Javie. Wojtek Maykowski KArol Muszyński. Spis Treści. Wstęp (dziedziczenie, Java). Metody obejścia braku dziedziczenia. Disjoint, Complete. Overlapping. Incomplete. Dynamic. Wielodziedziczenie ( Multi Inheritance).
E N D
Sposoby implementacji podstawowych struktur dziedziczenia w Javie Wojtek Maykowski KArol Muszyński
Spis Treści • Wstęp (dziedziczenie, Java). • Metody obejścia braku dziedziczenia. • Disjoint, Complete. • Overlapping. • Incomplete. • Dynamic. • Wielodziedziczenie ( Multi Inheritance). • Dziedziczenie Wieloaspektowe (Multi-Aspect).
1.1. Wstęp. Dziedziczenie - jest to związek pomiędzy nadklasą a podklasą, polegający na przenoszeniu cech z nadklasy do podklasy. Podklasa oprócz odziedziczonych cech (atrybuty, operacje) najczęściej posiada też własne elementy, co czyni ją bardziej wyspecjalizowaną. Agregacja - jest to asocjacja określająca związek „część – całość” pomiędzy klasami.
1.2. Wstęp. Java: • Klasa, a interfejs; • Słowa kluczowe: class, interface, abstract, extends, implements; Przyklady: Interface A{} public class B{} public class abstract Przykladowa extends B, implements A{}
2.1. Metody obejścia braku dziedziczenia. A Użycie jednej tabeli dla całego drzewa klas poprzez zsumowanie wszystkich występujących atrybutów i powiązań w tym drzewie oraz dodanie dodatkowego atrybutu - dyskryminatora wariantu. Użycie oddzielnych tabel dla każdej klasy konkretnej. Usunięcie klas abstrakcyjnych i przesunięcie ich atrybutów/powiązań do klas konkretnych. Użycie tabel dla każdej klasy. Zamiana dziedziczenia na powiązania łączące nadklasę ze wszystkimi podklasami. 1 A B C dyskr B C A 2 A B A C B C A A 3 0..1 0..1 B C B C
3. Disjoint i Complete. Osoba public abstract class Osoba{} public class Pracownik extends Osoba{} public class Student extends Osoba{} { disjoint } { complete } Student Pracownik
4.1. Overlapping. Osoba Osoba { overlapping} 0..1 0..1 Student Pracownik Student Pracownik
4.2. Overlapping. Osoba public class Osoba{ public Pracownik pracownik; public Student student; } public class Pracownik{ } public class Student{ } 0..1 0..1 Student Pracownik
5. Incomplete. Osoba public class Osoba{} public class Pracownik extends Osoba{} public class Student extends Osoba{} { incomplete } Student Pracownik {…}
6.1. Dynamic. Osoba Osoba << dynamic >> { XOR } 0..1 0..1 0..1 Pucybut Klepacz KieroProj Pucybut Klepacz KieroProj
6.2. Dynamic. Osoba public class Osoba{ public IZajecie izajecia; } public class Pucybut{} public class Klepacz{} public class KieroProj{} { XOR } 0..1 0..1 0..1 Pucybut Klepacz KieroProj << Interface >> IZajecie
7.1.1 Wielodziedziczenie (Multi Inheritance).Przykład 1 – Diagram. Osoba Osoba Student Pracownik 0..1 0..1 Student Pracownik Student/Pracownik
7.1.2. Wielodziedziczenie(Multi Inheritance). Przykład 1 – Przykladowy Kod. Osoba public class Osoba{ public Pracownik pracownik; public Student student; } public class Pracownik{} public class Student{} 0..1 0..1 Student Pracownik
7.2.1 Wielodziedziczenie (Multi Inheritance).Przykład 2 – Diagram. << interface >> Osoba << interface >> IStudiujacy IPracujacy Student Pracownik StudentPracownik
7.2.2. Wielodziedziczenie(Multi Inheritance).Przykład 2 – Przykladowy Kod. public abstract class Osoba{} public Interface IStudiujacy{} public Interface IPracujacy{} public class Pracownik extends Osoba implements IPracujacy{} public class Student extends Osoba implements IStudiujacy{} public class StudentPracownik extends Osoba implements IStudiujacy, IPracujacy{}
8.1.1. Dziedziczenie Wieloaspektowe (Multi-Aspect). Przykład 1 – Diagram. Osoba Mezczyzna Kobieta Katolik Satanista Satanistka Katoliczka << Interface >> IInaczejModlacySie << Interface >> IModlacySie
8.1.2. Dziedziczenie Wieloaspektowe (Multi-Aspect). Przykład 1 – Przykladowy Kod. public class abstract Osoba{} public Interface IModlacySie{} public Interface IInaczejModlacySie public class abstract Mezczyzna extends Osoba{} public class abstract Kobieta extends Osoba{} public class Satanista extends implements IInaczejModlacySie{} public class Katolik extends implements IModlacySie{} public class Satanistka extends implements IInaczejModlacySie{} public class Katoliczka extends implements IModlacySie{}
8.2.1. Dziedziczenie Wieloaspektowe (Multi-Aspect). Przykład 2 – Diagram. Wodny Łagodny typ usposobienie POKEMON Lądowy Neutralny Złośliwy Powietrzny 0..1 Wodny Łagodny 0..1 POKEMON Lądowy Neutralny 0..1 Złośliwy Powietrzny { XOR }
8.2.2. Dziedziczenie Wieloaspektowe (Multi-Aspect). Przykład 2 – Przykladowy Kod. 0..1 Łagodny Wodny 0..1 POKEMON Neutralny Lądowy 0..1 Złośliwy Powietrzny { XOR } public abstract class Pokemon{ public Lagodny lagodny; public Neutralny neutralny; public Zlosliwy zlosliwy; } public class Wodny extends Pokemon{} public class Lądowy extends Pokemon {} Public class Powietrzny extends Pokemon {}
Materiały • Ewa Stemposz, Kazimierz Subieta - Wykłady do przedmiotu PRI; • Bruce Eckel - Thinking In Java; • http://www.ii.uib.no/Erolfwr/thesisdoc/ • G.Booch, J.Rumbaugh, I.Jacobson - UML przewodnik użytkownika WNT Warszawa 2002