Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Projektowanie systemów informacyjnych

Podobne prezentacje


Prezentacja na temat: "Projektowanie systemów informacyjnych"— Zapis prezentacji:

1 Projektowanie systemów informacyjnych
Wykład 8 Model obiektowy (5) Ewa Stemposz, Kazimierz Subieta Instytut Podstaw Informatyki PAN, Warszawa Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa

2 Zagadnienia ADT Delegacja Protytypy Role Transformacje diagramu klas:
Podział poziomy klasy Podział pionowy klasy Realizacja struktur generalizacji/specjalizacji typu: disjoint overlapping dynamic Generalizacja wieloaspektowa

3 Abstrakcyjny typ danych
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. Abstrakcyjny typ danych jest bardzo bliski pojęciu klasy, której wystąpienia eksportują (niektóre) operacje, zaś ich struktura nie jest dostępna bezpośrednio 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, (1) ADT nie uczestniczy w związkach dziedziczenia, (2) wystąpienia ADT nie posiadają tożsamości, (3) nie można ich wzajemnie łączyć (powiązaniami), ani (4) wykonywać operacji na zbiorze wystąpień ADT (brak odpowiednika ekstensji i metody klasowej). Przykłady ADT: stos (z operacjami: pop, push, top, empty), pakiety obsługujące: mysz, CD ROM, grafikę, heap

4 Delegacja – alternatywa dla dziedziczenia
Lista zawartość push pop Stos Operacje na obiekcie są oddelegowane do innego obiektu. ... pierwszy następny ostatni dodaj pobierz 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. «instanceOf» Lista ... pierwszy następny ostatni dodaj pobierz 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, czyli w ramach obiektów, a nie w ramach klas. Część własności obiektu danej klasy (np. metody) jest przechowywana w innej klasie. push pop Stos Klasa “Stos” dziedziczy niepotrzebne operacje z klasy “Lista”

5 Prototypy (1) Pojęcie prototypów jest ściśle powiązane z delegacją.
Dowolny obiekt może stać się prototypem. Pod pojęciem prototypu rozumie się zarówno (1) obiekt jako wzorzec dla innego obiektu w momencie tworzeniu nowego obiektu), jak i to, że (2) informacje z obiektu-prototypu są dynamicznie (w czasie działania programu) dostępne dla obiektów potomnych. W ten sposób uzyskuje się jednorodność i zminimalizowanie środków: potrzebne są wyłącznie obiekty oraz powiązania od obiektów do ich prototypów. Powiązania między obiektami są przechodnie (obiekty mogą być w ten sposób połączone w hierarchię). Koncepcja prototypów jest dość uniwersalna i pozwala modelować klasy, dziedziczenie, dziedziczenie wielokrotne i role. Koncepcja wizjerów idzie dalej – powiązanie prowadzące do obiektu prototypu może być dodatkowo zaopatrzone w filtry, ustalające co ma być importowane.

6 Prototypy (2) Języki prototypowe (np. Self) nie wprowadzają pojęcia klasy. Obiekt może dziedziczyć cokolwiek z jakiegokolwiek innego obiektu. Prototyp Łapy: 4 Ogon: 1 Uszy:2 Oczy:2 Ulubieniec Szczepienie() Wabi_się: Rex Rasa: jamnik Płeć: M Pies Wabi_się: Mrusia Rasa: nieznana Płeć: Ż Kot Uszy:1 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ę.

7 Role Osoba staje się Studentem Student jest Osobą Źle!
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. Osoba Kowalski Właściciel psa Członek klubu golfowego Kibic Legii Podatnik Pracownik Student Pacjent Rola importuje wartości atrybutów obiektu właściciela oraz inwarianty jego klasy Rola może mieć własne (dodatkowe) atrybuty i metody Rola może należeć do własnej klasy

8 Role – przykład NAZWISKO ROK_UR Wiek() OSOBA Kowalska: pracownik Nowak: pracownik+student Abacka: Nowacki: student {overlapping} NAZWISKO = Kowalska ROK_UR = 1975 :OSOBA NAZWISKO = Nowak ROK_UR = 1951 :OSOBA NAZWISKO = Abacka ROK_UR = 1948 :OSOBA NAZWISKO = Nowacki ROK_UR = 1940 :OSOBA ZAROBEK DZIAŁ ZarobekNetto() ZmieńZarobek(...) PRACOWNIK NR_INDEKSU INDEKS WpiszOcenę(...) ObliczŚredniąOcen() STUDENT rola «instanceOf» «instanceOf» «instanceOf» «instanceOf» :PRACOWNIK ZAROBEK = 2000 DZIAŁ = zabawki :PRACOWNIK ZAROBEK = 2500 DZIAŁ = zabawki NR_INDEKSU = INDEKS = ... :STUDENT NR_INDEKSU = INDEKS = ... :STUDENT Rola importuje nie tylko inwarianty swojej klasy, lecz także wartości atrybutów swojego obiektu właściciela oraz inwarianty jego klasy.

9 Podział poziomy klasy (podział ekstensji klasy)
Osoba imię nazwisko nazwa szkoły wysokość emerytury pensja podaj nazwisko podaj szkołę zmień emeryturę zmień pensję Firma nazwa 0..1 zatrudnia * Przykład: Osoba imię nazwisko podaj nazwisko Firma 1 zatrudnia nazwa 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ę *

10 Podział pionowy klasy (podział inwariantów klasy)
np. a1 a2 a3 a K1 K21 K22 a1 a2 a3 m1 m2 m3 m2 m3 m1 Przykład: Klient * zlecił * Klient zlecił Firma nazwa adres firmy telefon firmy [1..*] imię dyrektora nazwisko dyrektora adres dyrektora telefon dyrektora Osoba imię nazwisko adres telefon podaj telefon Firma nazwa adres telefon [1..*] zmień adres 1..* 1 0..1 dyrektor 1..* zmień adres firmy podaj telefon dyrektora

11 Realizacja struktur generalizacji/specjalizacji (1)
perspektywa pojęciowa: generalizacja/specjalizacja (1) perspektywa projektowa: dziedziczenie (2) perspektywa projektowa: kompozycja Klasa Osoba przestaje być klasą abstrakcyjną. Osoba {abstract} Nowak Kowalski Osoba Student Pracownik 0..1 {xor} 0..1 Student Pracownik Klasa Osoba jest klasą abstrakcyjną. Nowak:Osoba Kowalski:Osoba Nowak:Student Kowalski:Pracownik Nowak:Student Kowalski:Pracownik

12 Realizacja struktur generalizacji/specjalizacji (2)
Osoba {abstract} perspektywa pojęciowa perspektywa pojęciowa czy projektowa ? Nowak Kowalski {overlapping} Osoba {abstract} Student Pracownik Abacki Student Pracownik Student/Pracownik Sytuację, gdy klasa będąca efektem wielokrotnej specjalizacji (termin?) (tu: Student/Pracownik) sama nie posiada klas specjalizowanych, lepiej jest modelować poprzez wykorzystanie ograniczenia {overlapping}, nie wywołując dzięki temu zbyt mocnego skojarzenia z dziedziczeniem wielokrotnym, czyli perspektywą projektową. Student/Pracownik na zlecenie

13 Realizacja struktur generalizacji/specjalizacji (2)
Osoba {abstract} Realizacja {overlapping}: perspektywa projektowa 1 Osoba 2 Student Pracownik Student/Pracownik 0..1 0..1 Student Pracownik Abacki:Osoba Nowak:Osoba Kowalski:Osoba Abacki:Student Nowak:Student Kowalski:Pracownik Abacki:Pracownik

14 Realizacja struktur generalizacji/specjalizacji (4)
Osoba {abstract} perspektywa pojęciowa Zachowując realizację z wykorzystaniem dziedziczenia, przy każdej zmianie specjalizacji Osoby powstaje nowy obiekt jednej z trzech podklas: Menażer, Analityk czy Projektant. Własności odziedziczone z klasy Osoba są każdorazowo przepisywane. «dynamic» Menażer Analityk Projektant W przypadku realizacji z wykorzystaniem kompozycji, 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. Klasa Osoba nie może być klasą abstrakcyjną. perspektywa projektowa Osoba {xor} 0..1 0..1 0..1 Menażer Analityk Projektant

15 Generalizacja wieloaspektowa
Użyteczna dla modelowania pojęciowego, ale utrudnia pielęgnację oprogramowania. Przykład: Pracownik {abstract} Osoba {abstract} Emeryt {abstract} status płacowy stosunek do emerytury Pracownik godzinowy Pracownik etatowy Pracownik na zlecenie Osoba nie emerytowana Osoba emerytowana Pracownik godzinowy nie emerytowany Osoba specjalizacje wg płac specjalizacje wg emerytury perspektywa pojęciowa

16 Delegacja z użyciem ról
Pracownik {abstract} Osoba Emeryt {abstract} Pracownik godzinowy Pracownik etatowy Pracownik na zlecenie Osoba nie emerytowana Osoba emerytowana Osoba Pracownik Emeryt Specjalizacje wg płac Specjalizacje wg emerytury perspektywa projektowa

17 Użycie dziedziczenia i delegacji
Dziedziczenie Delegacja Pracownik {abstract} Osoba {abstract} Emeryt {abstract} Pracownik godzinowy Pracownik etatowy Pracownik na zlecenie Osoba nie emerytowana Osoba emerytowana Osoba Emeryt Specjalizacje wg emerytury Specjalizacje wg płac perspektywa projektowa

18 Zagnieżdżona generalizacja (1)
Pracownik {abstract} status płacowy Pracownik godzinowy {abstract} Pracownik etatowy {abstract} Pracownik na zlecenie {abstract} 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 perspektywa projektowa

19 Zagnieżdżona generalizacja (2)
Pracownik {abstract} stosunek do emerytury Pracownik emerytowany {abstract} Pracownik nie emerytowany {abstract} status płacowy status płacowy Pracownik emerytowany godzinowy Pracownik emerytowany etatowy Pracownik emerytowany na zlecenie Pracownik nie emerytowany godzinowy Pracownik nie emerytowany etatowy Pracownik nie emerytowany na zlecenie perspektywa projektowa

20 Zalecenia Jeżeli klasa ma kilka nadklas, wszystkie jednakowo ważne, najlepiej użyć delegacji, która zachowuje symetrię modelu. Jeżeli jedna gałąź wyraźnie dominuje, ma zdecydowanie więcej cech niż pozostałe (inne wydają się być mniej ważne) lub może powodować wąskie gardło w wydajności, tę gałąź najlepiej zaimplementować poprzez dziedziczenie, zaś pozostałe przez delegację. Jeżeli liczba kombinacji klas jest mała, można rozpatrywać zagnieżdżoną generalizację. Przy zagnieżdżonej generalizacji, najważniejszy czynnik – o czym może zaświadczać np. zdecydowanie większa liczba własności – powinien być pierwszym kryterium podziału; pozostałe dalej, w hierarchii ważności. Unikać zagnieżdżonych generalizacji, jeżeli zbyt duża ilość kodu będzie musiała być powtórzona.


Pobierz ppt "Projektowanie systemów informacyjnych"

Podobne prezentacje


Reklamy Google