Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałAugustyna Młodzik Został zmieniony 11 lat temu
1
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 1 Projektowanie systemów informacyjnych Ewa Stemposz, Kazimierz Subieta Instytut Podstaw Informatyki PAN, Warszawa Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa Wykład 8 Model obiektowy (5)
2
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 2 Zagadnienia ADT Delegacja Protytypy Role Transformacje diagramu klas: Podział poziomy klasy Podział pionowy klasy Obejście dziedziczenia typu: disjoint overlapping dynamic Obejście dziedziczenia wielokrotnego i wieloaspektowego
3
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 3 Abstrakcyjny typ danych Abstrakcyjny typ danych jest bardzo bliski pojęciu klasy, której wystąpienia eksportują (niektóre) operacje, zaś ich struktura jest niedostępna dla operacji z zewnątrz. ADT ogranicza kontekst, w którym odwołanie do obiektu może być użyte w programie. ADT może odnosić się nie tylko do obiektów, ale również do wartości. Z drugiej strony, ADT może być uważane za pojęcie znacznie węższe lub ortogonalne w stosunku do pojęcia klasa. W czystej postaci, ADT nie uczestniczy w związkach dziedziczenia, wystąpienia ADT nie posiadają tożsamości, nie można ich wzajemnie łączyć (powiązaniami), ani wykonywać operacji na zbiorze wystąpień ADT (brak odpowiednika metody klasy). Abstrakcyjny typ danych (ADT) - pojęcie udostępniane w niektórych językach programowania oparte na założeniu, że typ struktury danych jest skojarzony z operacjami działającymi na elementach tego typu. Nie istnieje potrzeba i możliwość używania operacji nie należących do oferowanego zestawu; operacje są kompletne i wyłączne. Bezpośredni dostęp do składowych takiej struktury danych nie jest możliwy. Przykłady ADT stos (z operacjami: pop, push, top, empty), pakiety obsługujące: mysz, CD ROM, grafikę, heap
4
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 4 Delegacja - alternatywa dla dziedziczenia Obiekt Stos dziedziczy niepotrzebne mu operacje z klasy Lista Obiekt klasy Stos składa się z podobiektu zawartość, członka klasy Lista. Anomalia dziedziczenia jest usunięta. Obsługa obiektu Stos jest (częściowo) oddelegowana do obiektu Lista. push pop zawartość push pop top Operacje na obiekcie są oddelegowane do innego obiektu. Delegacja to alternatywa dla dziedziczenia: w tym przypadku dziedziczenie, czyli importowanie inwariantów zachodzi dynamicznie (w czasie działania programu) w ramach wystąpień klas (obiektów). Część własności danego obiektu (np. metody) jest przechowywana w innej klasie. Stos Lista pierwszy następny ostatni dodaj usuń pierwszy następny ostatni dodaj usuń Lista Stos
5
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 5 Prototypy (1) Dowolny obiekt może stać się prototypem. Pod pojęciem prototypu rozumie się zarówno obiekt jako wzorzec dla innego obiektu (przy tworzeniu nowego obiektu), jak i to, że informacje z obiektu-prototypu są dynamicznie (w czasie działania programu) dostępne dla innych obiektów. W ten sposób uzyskuje się jednorodność i zminimalizowanie środków: potrzebne są wyłącznie obiekty oraz wskaźniki (powiązania) od obiektów do ich prototypów. Te powiązania między obiektami są przechodnie; obiekty mogą być powiązane w hierarchię. Koncepcja prototypów jest dość uniwersalna i pozwala modelować klasy, dziedziczenie, dziedziczenie wielokrotne i role. Pojęcie ściśle powiązane z delegacją. Koncepcja wizjerów idzie dalej - wskaźnik prowadzący do obiektu prototypu może być dodatkowo zaopatrzony w filtry, ustalające, co ma być importowane.
6
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 6 Prototypy (2) Podstawowym argumentem zwolenników prototypów jest zmniejszenie liczby pojęć. Koncepcja prototypów jest nieunikniona, jeżeli ktoś chciałby implementować dynamiczne role obiektów. Pojęcie klasy, jako przechowalni inwariantów, ma jednak ogromne znaczenie dla modelowania pojęciowego, stąd pojęcia prototypu i klasy uzupełniają się. Prototyp Łapy: 4Ogon: 1 Uszy:2Oczy:2 Ulubieniec Szczepienie() Wabi_się: Rex Rasa: jamnik Płeć: M Pies Wabi_się: Mrusia Rasa: nieznana Płeć: Ż Kot Uszy:1 Języki prototypowe (np. Self) nie wprowadzają pojęcia klasy. Obiekt może dziedziczyć cokolwiek z jakiegokolwiek innego obiektu.
7
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 7 Role Student jest Osobą Źle! Osoba staje się Studentem Osoba Kowalski Osoba Kowalski Właściciel psa Pracownik Student Pacjent Członek klubu golfowego Kibic Legii Podatnik Rola importuje wartości atrybutów obiektu oraz inwarianty jego klasy Rola może mieć własne (dodatkowe) atrybuty Rola może należeć do własnej klasy Każdy obiekt w czasie swojego życia może nabywać i tracić wiele ról, nie zmieniając swojej tożsamości. Role zmieniają się dynamicznie.
8
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 8 Role - przykład NAZWISKO ROK_UR Wiek() Kowalska: pracownik Nowak: pracownik+student Abacka: Nowacki: student Rola importuje nie tylko inwarianty swojej klasy, lecz także wartości atrybutów swojego obiektu oraz inwarianty jego klasy. NAZWISKO: Nowacki ROK_UR: 1940 NAZWISKO: Abacka ROK_UR: 1948 NAZWISKO: Nowak ROK_UR: 1951 ZAROBEK DZIAŁ ZarobekNetto() ZmieńZarobek(...) NAZWISKO: Kowalska ROK_UR: 1975 NR_INDEKSU INDEKS WpiszOcenę(...) ObliczŚredniąOcen() :PRACOWNIK ZAROBEK: 2000 DZIAŁ: zabawki :PRACOWNIK ZAROBEK: 2500 DZIAŁ: zabawki NR_INDEKSU:223344 INDEKS:...... NR_INDEKSU:556677 INDEKS:...... rola OSOBA :OSOBA PRACOWNIK STUDENT :STUDENT
9
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 9 Podział poziomy klasy (podział ekstensji klasy) K1 K2 a1 a2 m1 m2 a K21 a1 ? a2 ? m1 ? m2 ? K22 a1 ? a2 ? m1 ? m2 ? K1 a ? Przykład Osoba imię nazwisko nazwa szkoły wysokość emerytury pensja podaj nazwisko podaj szkołę zmień emeryturę zmień pensję Firma nazwa0..1 zatrudnia * Uczeń imię nazwisko nazwa szkoły podaj nazwisko podaj szkołę Emeryt imię nazwisko wysokość emerytury podaj nazwisko zmień emeryturę Pracownik imię nazwisko pensja podaj nazwisko zmień pensję Firma nazwa * 1 Osoba imię nazwisko podaj nazwisko zatrudnia
10
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 10 Podział pionowy klasy (podział inwariantów klasy) K1 K2 a1 a2 a3 m1 m2 m3 a K21 a1 m2 m3 K22 a2 a3 m1 K1 Przykład Firma nazwa adres firmy telefon firmy [1..*] imię dyrektora nazwisko dyrektora adres dyrektora telefon dyrektora zmień adres firmy podaj telefon dyrektora Klient * zlecił 1..* Osoba imię nazwisko adres telefon podaj telefon Firma nazwa adres telefon [1..*] zmień adres Klient 1..* * zlecił np. 0..1 1 dyrektor a
11
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 11 Obejście dziedziczenia typu disjoint Osoba Student Pracownik Osoba StudentPracownik 0..1 {xor} perspektywa pojęciowa perspektywa projektowa Kowalski Nowak Nowak:Student Kowalski:Pracownik Nowak:Osoba Nowak:Student Kowalski:Osoba Kowalski:Pracownik
12
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 12 Obejście dziedziczenia typu overlapping Osoba Student Pracownik Osoba StudentPracownik 0..1 Kowalski Nowak Nowak:Osoba Nowak:Student Kowalski:Osoba Kowalski:Pracownik {overlapping} Abacki Abacki:Osoba Abacki:Student Abacki:Pracownik Zamiast kompozycji można tu użyć zarówno agregacji, jak i zwykłej asocjacji.
13
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 13 Obejście dziedziczenia typu dynamic Osoba {abstract} ProjektantAnalitykMenażer {dynamic} Osoba ProjektantAnalitykMenażer {xor} 0..1 Przy zmianie specjalizacji Osoby powstaje nowy obiekt z którejś z trzech podklas: Menażer, Analityk czy Projektant. Własności odziedziczone z klasy Osoba są każdorazowo przepisywane. W drugim przypadku, usuwany jest obiekt związany ze starą specjalizacją, tworzony jest obiekt przechowywujący własności związane z nową specjalizacją oraz tworzone jest powiązanie między nowym obiektem a obiektem klasy Osoba, przechowującym dane osobowe. W tym przypadku klasa Osoba nie może być klasą abstrakcyjną.
14
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 14 Obejście dziedziczenia wielokrotnego Osoba Student Pracownik Student/Pracownik Osoba Student Pracownik 0..1
15
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 15 Pracownik godzinowy nie emerytowany Dziedziczenie wielokrotne i wieloaspektowe Osoba status płacowy stosunek do emerytury Są konieczne, ale często komplikują pielęgnację oprogramowania. Obejście ich braku może odbyć się jeszcze na poziomie modelu obiektowego. Można też bezpośrednio zastosować metody zaproponowane dla obejścia braku dziedziczenia. Przykład: Pracownik godzinowy Pracownik etatowy Pracownik na zlecenie Osoba nie emerytowana Osoba emerytowana Osoba specjalizacje wg płac specjalizacje wg emerytury PracownikEmeryt
16
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 16 Delegacja z użyciem ról Osoba PracownikEmeryt Specjalizacje wg płac Specjalizacje wg emerytury Osoba Pracownik godzinowy Pracownik etatowy Pracownik na zlecenie Osoba nie emerytowana Osoba emerytowana PracownikEmeryt
17
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 17 Użycie dziedziczenia i delegacji DziedziczenieDelegacja Osoba Emeryt Specjalizacje wg płac Specjalizacje wg emerytury Osoba Pracownik godzinowy Pracownik etatowy Pracownik na zlecenie Osoba nie emerytowana Osoba emerytowana PracownikEmeryt
18
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 18 Zagnieżdżona generalizacja Pracownik status płacowy stosunek do emerytury stosunek do emerytury stosunek do emerytury Pracownik godzinowy nie emerytowany Pracownik godzinowy emerytowany Pracownik etatowy nie emerytowany Pracownik etatowy emerytowany Pracownik na zlecenie nie emerytowany Pracownik na zlecenie emerytowany Pracownik godzinowy Pracownik etatowy Pracownik na zlecenie Permutacja klas
19
E. Stemposz, Analiza i Projektowanie Systemów Informatycznych, Wykład 8, Slajd 19 Zalecenia Jeżeli klasa ma kilka nadklas, wszystkie jednakowo ważne, najlepiej użyć delegacji, która zachowuje symetrię modelu. Jeżeli jedna nadklasa wyraźnie dominuje, ma zdecydowanie więcej cech niż pozostałe lub może powodować wąskie gardło w wydajności, zaś inne wydają się być mniej ważne, tę jedną zaimplementować poprzez dziedziczenie, zaś pozostałe przez delegację. Jeżeli liczba kombinacji klas jest mała, można rozpatrywać zagnieżdżoną generalizację (permutację klas). Przy zagnieżdżonej generalizacji, najważniejszy czynnik powinien być pierwszym kryterium podziału; pozostałe dalej, w hierarchii ważności. Unikać zagnieżdżonych generalizacji, jeżeli duża ilość kodu musi być powtórzona. Te zalecenia mogą okazać się nieistotne o ile zdecydujemy się bezpośrednio obejść brak dziedziczenia wielokrotnego i wieloaspektowego metodami takimi samymi, jak dla obejścia dziedziczenia.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.