Sposoby obejścia dziedziczenia

Slides:



Advertisements
Podobne prezentacje
Agregacja Agregacja jest rodzajem asocjacji; zadaniem agregacji jest modelowanie związku całość-część. agregacja jest asocjacją: dla obu jej końców są.
Advertisements

Sposoby implementacji asocjacji
Dziedziczenie wieloaspektowe
Kamil Łącki Dominik Strzelichowski
Tomasz Pieciukiewicz Rafał Hryniów
Implementacja asocjacji
Mapowanie dziedziczenia z UML do Java
Programowanie obiektowe w Javie
Wielodziedziczenie od środka Konrad Lipiński
Szkolenie dla NaviExpert, Wprowadzenie.
Bartosz Walter Prowadzący: Bartosz Walter
Mapowanie różnych typów dziedziczenia do Javy
Dziedziczenie i jego rodzaje
C++ wykład 5 ( ) Dziedziczenie.
DIAGRAMY KLAS i obiektów
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 1 Projektowanie systemów informacyjnych Ewa Stemposz, Kazimierz Subieta.
Java – programowanie obiektowe
Projektowanie - klasy i związki
dr inż. Piotr Muryjas Wyższa Szkoła Przedsiębiorczości i Administracji
Nadstruktura języka UML w wersji 2.2
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Instrukcja USOSweb Wersja: Opracował: Sebastian Sieńko Moduł sprawdzianów.
Tworzenie aplikacji mobilnych
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Inicjalizacja i sprzątanie
JAVA.
Programowanie obiektowe
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Projektowanie obiektowe
Związki w UML Do zrobienia jest: -Przerysować jak ktoś ma Visio te dwa diagramy tak żeby podmienić tylko nazwy a reszta Taka sama, -I dodać po jednym zdaniu.
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
2 Odizolowanie danych od kodu może prowadzić do przypadkowych zmian danych przez funkcje, które nie są z nimi logicznie związane. Ponadto modyfikacja.
Modelowanie obiektowe Diagramy klas
Programowanie w języku C++
Kurs języka C++ – wykład 5 ( )
Podstawy HTML RAMKi. Ramki Za ich pomocą możesz swobodnie podzielić okno przeglądarki na kilka części i w nich niezależnie przeglądać dokumenty. Ramki.
UML W V ISUAL S TUDIO Mateusz Lamparski. UML D EFINICJA Unified Modeling Language (UML) to graficzny język do obrazowania, specyfikowania, tworzenia i.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Diagram klas Kluczowymi elementami są: klasy (class)
Projektowanie bazy danych z użyciem diagramów UML Obiektowe projektowanie relacyjnej bazy danych Paweł Jarecki.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Programowanie Zaawansowane
Projektowanie postaci formularza:
Modelowanie model związków encji
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
Wykład 5 Model obiektowy (3)
E. Stemposz. UML i Analiza Obiektowa, Wykład 3, Slajd 1/18 Wykład 3 Model obiektowy (1) dr inż. Ewa Stemposz
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Asocjacja,Kompozycja,Agregacja
ASP.NET Tworzenie i zarządzanie wyglądem aplikacji, tworzenie mapy witryny. Kontrolki nawigacyjne.
Implementacja asocjacji (z atrybutami i bez) przy użyciu: referencji (kolekcji referencji) tablic asocjacyjnych przygotował: Kamil Kowalczyk.
Temat: Tworzenie bazy danych
Projektowanie systemów informacyjnych
Inżynieria systemów informacyjnych
Programowanie Obiektowe – Wykład 6
Programowanie Obiektowe – Wykład 2
MAS – Referat 1 Mapowanie różnych typów dziedziczenia z UML do Javy
Założenia projektowe Javy
PGO - Projektowanie i implementacja pierwszych klas
Nazwa wydarzenia Wydarzenie — wprowadzenie Podtytuł wydarzenia Data
PGO Dziedziczenie Michail Mokkas.
PGO Przeciążanie metod i konstruktorów
PGO Porównywanie obiektów
Zapis prezentacji:

Sposoby obejścia dziedziczenia Braki specyficznych rodzajów dziedziczenia można obejść wprowadzając dodatkowe: kompozycje asocjacje agregacje Każdy z tych związków reprezentuje się za pomocą atrybutów w klasach.

Sposoby obejścia dziedziczenia Najprostszy przypadek: kompozycja Kompozycję implementujemy poprzez umieszczenie odpowiedniego odnośnika wewnątrz klasy. SAMOCHÓD class Samochód { Silnik s; .... } SILNIK

Overlapping Overlapping – przecięcie zbiorów podklas nie jest zbiorem pustym. Pojazd { overlapping } Pojazd lądowy Pojazd wodny

Overlapping Obejście poprzez wprowadzenie dodatkowej klasy zawierającej sumę atrybutów innych podklas. Pojazd {disjoint, complete} Pojazd lądowy Pojazd wodny Pojazd wodno - lądowy

Overlapping Wady rozwiązania: konieczność tworzenia nowej klasy dla każdego pojazdu. dodawanie nowej klasy – pociąga za sobą tworzenie dużej ilości klas łączących poszczególne kategorie szybkie rozrastanie się hierarchii klas

Wielodziedziczenie (multi inheritance) Wielodziedziczenie – możliwość przejęcia inwariantów (pól i metod) z więcej niż jednej nadklasy. Występuje w języku C++, w Javie trzeba stosować rozwiązania zastępcze.

Przykład wielodziedziczenia Standardowa notacja UML: POJAZD { overlapping } POJAZD LĄDOWY POJAZD WODNY AMFIBIA

Wielodziedziczenie Jeżeli nie są wymagane szczegółowe informacje, można w ogóle zrezygnować z dziedziczenia. rezygnacja z podklas wprowadzenie dodatkowych atrybutów i metod POJAZD jezdzi() plywa()

Wielodziedziczenie Konstrukcja pozwalająca obejść brak wielodziedziczenia – zastąpienie przez kompozycję POJAZD Nazwa pojazdu 0..1 0..1 WŁAŚCIWOŚCI POJAZDU WODNEGO WŁAŚCIWOŚCI POJAZDU LĄDOWEGO Takie relacje pomiędzy klasami można zaimplementować w Javie.

Wielodziedziczenie – realizacja w Javie Wskazane jest, aby klasy Właściwości Pojazdu Lądowego i Właściwości pojazdu wodnego zostały zrealizowane jako klasy wewnętrzne klasy Pojazd. class Pojazd { String nazwa; WlPojLad wl; // może być null WlPojWod ww; // może być null class WlPojLad { double ladV; // predkosc na lądzie } class WlPojWod { double wodV; // predkosc w wodzie double wypornosc;

Wielodziedziczenie – realizacja w Javie Klasa Pojazd w tym przykładzie powinna być zaopatrzona w kilka konstruktorów w zależności od typu pojazdu. Pojazd(WlPojLad wl) { this.wl = wl; } Pojazd(WlPojWod ww) { this.ww = ww; Pojazd(WlPojLad wl, WlPojWod ww) {

Wielodziedziczenie – wady rozwiązania POJAZD POJAZD LĄDOWY POJAZD WODNY POJAZD POWIETRZNY Problemy pojawiają się gdy do istniejącej hierarchii klas dodajemy nową.

Wielodziedziczenie – wady rozwiązania w przypadku dodawania nowej podklasy (pojazd powietrzny) – konieczna modyfikacja kodu nadklasy class Pojazd { WlPojLad wl; WlPojWod ww; WlPojPow wp; class WlPojLad {...} class WlPojWod {...} class WlPojPow { .... } nowy odnośnik nowa klasa wewnętrzna

Wielodziedziczenie – wady rozwiązania Wady poprzedniego rozwiązania tzn. konieczność modyfikacji kodu już napisanych klas można obejść stosując następującą hierarchię: POJAZD WŁAŚCIWOŚCI POJAZDU WŁAŚCIWOŚCI POJAZDU LĄDOWEGO WŁAŚCIWOŚCI POJAZDU WODNEGO WŁAŚCIWOŚCI POJAZDU POWIETRZNEGO