Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 1/20 Wykład 4 Model obiektowy (2) dr inż. Ewa Stemposz

Podobne prezentacje


Prezentacja na temat: "E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 1/20 Wykład 4 Model obiektowy (2) dr inż. Ewa Stemposz"— Zapis prezentacji:

1 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 1/20 Wykład 4 Model obiektowy (2) dr inż. Ewa Stemposz

2 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 2/20 Zagadnienia Wystąpienie klasy: bezpośrednie i pośrednie Klasa konkretna a klasa abstrakcyjna Metoda abstrakcyjna Ekstensja klasy Atrybuty Specyfikacja metod Rodzaje metod Przesłanianie Przeciążanie

3 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 3/20 Wystąpienie klasy Pojęcie wystąpienie klasy (instancja klasy) oznacza obiekt, który jest “podłączony” do danej klasy, jest jej członkiem. Wystąpienia mogą być: bezpośrednie i pośrednie. Obiekt jest wystąpieniem bezpośrednim swojej klasy i wystąpieniem pośrednim wszystkich jej nadklas. nazwa_obiektu : nazwa_klasy nazwa_atrybutu = wart_atrybutu... :nazwa_klasy nazwa_atrybutu = wart_atrybutu... nazwa_obiektu : nazwa_klasy : nazwa_klasy W zależności od poziomu szczegółowości możliwe są następujące oznaczenia dla obiektu:

4 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 4/20 Klasa abstrakcyjna a konkretna (1) Klasa abstrakcyjna: nie ma (nie może mieć) bezpośrednich wystąpień i służy wyłącznie jako nadklasa dla innych klas. Stanowi jakby wspólną część definicji grupy klas o podobnej semantyce. UML pozwala na oznaczenie bytu abstrakcyjnego za pomocą wartości etykietowanej {abstract = TRUE} (TRUE można opuścić) lub napisanie nazwy bytu abstrakcyjnego italikami (np. nazwy klasy czy metody abstrakcyjnej). Klasa konkretna: może mieć (ma prawo mieć) wystąpienia bezpośrednie. Klasa abstrakcyjna: nie ma (nie może mieć) bezpośrednich wystąpień i służy wyłącznie jako nadklasa dla innych klas. Stanowi jakby wspólną część definicji grupy klas o podobnej semantyce. UML pozwala na oznaczenie bytu abstrakcyjnego za pomocą wartości etykietowanej {abstract = TRUE} (TRUE można opuścić) lub napisanie nazwy bytu abstrakcyjnego italikami (np. nazwy klasy czy metody abstrakcyjnej). Klasa konkretna: może mieć (ma prawo mieć) wystąpienia bezpośrednie. Osoba prawna {abstract} Osoba fizyczna Firma Sekwencja pierwszy następny Sekwencja int... implementacje Sekwencja char...implementacje Klasyczna klasyfikacja w biologii: tylko liście w drzewie klas mogą być klasami konkretnymi.

5 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 5/20 Klasa abstrakcyjna a konkretna (2) A – klasa abstrakcyjna K – klasa konkretna K1 K2K3 K4K5 K A, KA, K A, KA, K K K Klasa abstrakcyjna nie może znaleźć się w liściu drzewa. Klasa konkretna może zająć każde położenie w drzewie.

6 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 6/20 Metoda abstrakcyjna Metoda abstrakcyjna: jest to metoda wyspecyfikowana w nadklasie, której implementacja musi znaleźć się w którejś z podklas danej klasy. Specyfikacja metody oblicz wypłatę znajduje się w klasie abstrakcyjnej Pracownik. Każda klasa konkretna zawiera właściwą dla siebie implementację tej metody. Pracownik godzinowy stawka godzinowa liczba godzin oblicz wypłatę Pracownik etatowy zarobek tygodniowy oblicz wypłatę Pracownik na zlecenie zarobek miesięczny oblicz wypłatę już zarobił w tym roku oblicz wypłatę{abstract} Klasa abstrakcyjna nie musi zawierać abstrakcyjnych metod (ale może). Klasa konkretna musi zawierać implementacje tych metod abstrakcyjnych, które nie zostały zaimplementowane w żadnej z nadklas. Pracownik {abstract}

7 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 7/20 Ekstensja klasy (1) Ekstensja klasy: (ang. class extent) = aktualny, zmienny w czasie, zestaw wszystkich wystąpień danej klasy. Ekstensja klasy w implementacji oznacza specjalną strukturę danych, konkretny byt programistyczny dołączony do klasy. Ta struktura przechowuje wszystkie obiekty będące członkami danej klasy. Niektóre metody zawarte w ramach klasy odnoszą się do jej wystąpień: oPracownik.wiekoPracownik.zwolnijoKonto.obliczProcent Niektóre metody zawarte w ramach klasy odnoszą się do jej ekstensji: KlPracownik.nowyKlPracownik.zliczKlKonto.obliczSume Klasa może mieć nie jedną lecz wiele ekstensji.

8 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 8/20 Ekstensja klasy (2) Można podać kilka definicji ekstensji klasy: I zbiór bezpośrednich wystąpień danej klasy, II zbiór wszystkich wystąpień danej klasy (bezpośrednich i pośrednich), ale obcięty do atrybutów wyspecyfikowanych w tej klasie, III jak poprzednio, zbiór wszystkich wystąpień danej klasy, ale bez obcinania atrybutów, które zostały wyspecyfikowane w podklasach tej klasy. K1 {abstract} K2K3K4 O2O3 O4 I E K1 = {}, E K2 = {O2}, E K3 = {O3}, E K4 = {O4} II E K1 = {O2, O3, O4}, E K2 = {O2}, E K3 = {O3} E K4 = {O4} III E K1 = {O2, O3, O4}, E K2 = {O2}, E K3 = {O3} E K4 = {O4}

9 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 9/20 Ekstensja klasy; przykład OSOBA NAZWISKO=Nowacki ROK_UR=1940 OSOBA NAZWISKO=Abacki ROK_UR=1948 OSOBA NAZWISKO=Nowak ROK_UR=1951 NAZWISKO ROK_UR Wiek() PRACOWNIK ZAROBEK DZIAŁ ZarobekNetto() ZmieńZarobek(...) NAZWISKO=Kowalska ROK_UR=1975 NAZWISKO=Nowak ROK_UR=1951 ZAROBEK=2000 DZIAŁ=zabawki NAZWISKO=Abacki ROK_UR=1948 ZAROBEK=2500 DZIAŁ=zabawki NAZWISKO=Nowacki ROK_UR=1940 ZAROBEK=3000 DZIAŁ=sprzedaż Ekstensja klasy OSOBA Ekstensja klasy PRACOWNIK OSOBA :OSOBA :PRACOWNIK

10 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 10/20 nazwisko: string wiek: integer Atrybuty (1) Atrybuty: mogą być obiektami lub nazwanymi wartościami. Wartości atrybutów są przechowywane przez obiekty (nie należą do inwariantów klasy). Atrybut, który jest wartością, a nie obiektem, nie posiada tożsamości. Atrybut unikalnie identyfikujący obiekt (klucz) nie jest wymagany, ponieważ każdy obiekt posiada tożsamość – wewnętrzny unikalny identyfikator, automatycznie generowany przez system w momencie powoływania obiektu do życia i niewidoczny dla użytkownika. Zaleca się, by identyfikator nie miał znaczenia w dziedzinie problemowej. Klasa Osoba z atrybutami Obiekty (wystąpienia klasy Osoba) z wartościami Osoba nazwisko = Stycz wiek = 24 atrybuty obiektów klasy Osoba Pesel : nr nazwisko : string wiek : integer id osoby : integer Osoba :Osoba nazwisko = Nowak wiek = 53 :Osoba nazwisko wiek }

11 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 11/20 Atrybuty (2) Atrybuty mogą być:  proste: imię, nazwisko, nazwisko panieńskie, wiek, płeć, stosunek do służby wojsk.  złożone: data ur., adres, lista poprz. miejsc pracy, dane firmy, zdjęcie  opcjonalne: nazwisko panieńskie, stosunek do służby wojsk, lista poprzednich miejsc pracy  powtarzalne: lista poprz. miejsc pracy  pochodne: wiek  klasowe: adres firmy  atrybut będący obiektem: zdjęcie Kiedy z atrybutu warto zrobić klasę? W jakiej sytuacji atrybut adres firmy przestanie być atrybutem klasowym? Pracownik imię nazwisko nazwisko panieńskie: [0..1] data ur. /wiek adres płeć stosunek do służby wojsk.: [0..1] lista poprz. miejsc pracy: [0..*] dane firmy zdjęcie Atrybuty klasowe należą do inwariantów danej klasy.

12 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 12/20 Specyfikacja metod Sygnatura metody: specyfikuje listę jej argumentów (łącznie z typami argumentów) oraz typ wyniku metody. Wszystkie metody implementujące daną operację zazwyczaj mają tę samą sygnaturę. Dla metod obiektu – obiekt jest argumentem implicite metody. Jeżeli argumenty nie są specyfikowane, to może ich być dowolnie dużo, również w ogóle. Brak specyfikacji argumentów na wczesnym etapie analizy może oznaczać zarówno, że metoda ich nie posiada, jak i to, że w danym momencie nie interesujemy się jeszcze nimi. To samo dotyczy wartości zwracanej przez metodę. nazwisko wiek dane firmy adres zmień firmę zmień_adres nazwa_pliku długość w bajtach ostatniaZmiana drukuj kolor pozycja lista wierzchołków przesuń (delta: Wektor) wewnątrz (p: Punkt): Boolean obróć (kąt) Osoba Plik Obiekt geometryczny

13 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 13/20 Rodzaje metod Pracownik imię nazwisko data ur. /wiek adres zamieszkania płeć stosunek do służby wojsk.: [0..1] lista poprz. miejsc pracy: [0..*] dane firmy policz wiek (imię, nazwisko) policz wiek czy pracował w (nazwa firmy) znajdź najstarszego Metody mogą być:  abstrakcyjne  obiektu: policz wiek, czy pracował w  klasowe: znajdź najstarszego, policz wiek (imię, nazwisko) Metody klasowe operują na ekstensji klasy, czyli na atrybutach wszystkich obiektów należących do ekstensji klasy. Metody obiektu operują na atrybutach obiektu, dla którego zostały wywołane. Obiekt stanowi argument domyślny dla tych metod. Klasa Pracownik nie posiada metod abstrakcyjnych, gdyż jako jedyna klasa na diagramie musi być klasą konkretną.

14 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 14/20 Przesłanianie metod (1) Przesłanianie (ang. overriding): – metoda z klasy bardziej wyspecjalizowanej może przesłonić metodę z klasy bardziej ogólnej. Wybierana jest metoda znajdująca się najbliżej obiektu, w sensie hierarchii dziedziczenia. Metody mają identyczną sygnaturę ale różne implementacje (ciała). Pracownik nazwisko... zwolnij()... Samodzielny prac.naukowy zwolnij() Decyzja o zwolnieniu w gestii dyrekcji Decyzja o zwolnieniu w gestii sekretariatu PAN

15 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 15/20 Przesłanianie metod (2) Dwie metody implementujące operację policz objętość. Metoda policz objętość w klasie Bryła nie może być metodą abstrakcyjną (jest dziedziczona przez klasy konkretne). Przesłanianie jest ściśle powiązane z polimorfizmem metod. Przesłanianie wymaga dynamicznego wiązania. Przesłanianie jest ważnym elementem wspomagającym ponowne użycie. Prostopadłościan Walec Stożek policz objętość pole podstawy wysokość Bryła policz objętość {abstract}... objętość = pole podstawy * wysokość objętość = 1/3 pola podstawy * wysokość

16 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 16/20 Niektórzy autorzy (np. Cardelli – propagator teorii typów polimorficznych) uważają, że przeciążanie nie jest polimorfizmem. Stwierdzenie “wszystkie metody implementujące daną operację zazwyczaj mają tę samą sygnaturę”, leżące u podstaw idei polimorfizmu, jest sprzeczne z definicją przeciążania. Przeciążanie metod Przeciążanie (ang. overloading): oznacza, że jakiś symbol (np. operatora czy funkcji) ma znaczenie zależne od kontekstu jego użycia, np. od ilości/typu argumentów. Powszechne jest przeciążanie operatora równości: = służy do porównania liczb całkowitych, liczb rzeczywistych, stringów, identyfikatorów, struktur, obiektów, itd. Podobnie, operator + może oznaczać dodawanie lub konkatenację. Przeciążanie nie wymaga dynamicznego wiązania: znaczenie operatora można wydedukować na podstawie statycznej analizy tekstu programu. W odróżnieniu od przeciążania, przesłanianie jest własnością dynamiczną, nie zawsze da się wydedukować z tekstu programu. Np. przesuń (x, y), przesuń (x, y, z) – mają różną ilość argumentów przesuń (int, int), przesuń (float, float) – mają różne typy argumentów

17 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 17/20 Typ Podstawowe zastosowanie klasy: modelowanie pojęciowe. Podstawowe zastosowanie typu: wspomaganie kontroli formalnej poprawności programów. Typ bytu programistycznego nakłada ograniczenia na jego budowę (lub argumenty i wynik) oraz ogranicza kontekst, w którym odwołanie do tego bytu może być użyte w programie. Generalnie, na linii rozróżnień definicyjnych pomiędzy pojęciami:  klasa  typ  abstrakcyjny typ danych (ADT)  ekstensja klasy  klasa  typ  abstrakcyjny typ danych (ADT)  ekstensja klasy panuje spore zamieszanie. W wielu opracowaniach i językach (C++, Eiffel) typ jest utożsamiany z klasą. Wielu autorów uważa jednak te dwa pojęcia za różne. Klasa: przechowalnia inwariantów, implementacja metod. Typ: specyfikacja budowy obiektu, specyfikacja metod.

18 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 18/20 Podtyp Dwie definicje: Innym (równoważnym) punktem widzenia na kwestię podtypowania jest założenie, że każdy obiekt może mieć wiele typów: swojej klasy podstawowej i wszystkich jej nadklas. Ekstensja podtypu jest podzbiorem ekstensji typu. Np. zbiór liczb naturalnych jest podtypem zbioru liczb całkowitych. Typ B jest podtypem typu A, jeżeli B posiada więcej własności (atrybutów, metod,...) niż A, innymi słowy B jest bardziej wyspecjalizowane niż A. Typ B jest podtypem typu A, jeżeli B posiada więcej własności (atrybutów, metod,...) niż A, innymi słowy B jest bardziej wyspecjalizowane niż A. struct Osoba {string Nazwisko; integer Rok_urodz;}; struct Pracownik {string Nazwisko; integer Rok_urodz; integer Zarobek; }; Pracownik jest podtypem typu Osoba L. całkowita L. naturalna

19 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 19/20 Własność zamienialności Jeżeli w jakimś miejscu programu (zapytania,...) może być użyty byt typu A, to może tam być także użyty byt, którego typ jest podtypem typu A. Np., jeżeli w jakimś miejscu programu może być użyty obiekt Osoba, to w tym samym miejscu może być użyty obiekt Pracownik. Wszędzie tam, gdzie może być użyta liczba całkowita, można także użyć liczby naturalnej. Wszędzie, gdzie może być użyta Elipsa, można też użyć obiektu klasy Koło. Zamiana odwrotna nie jest możliwa. Relacja typ/podtyp stanowi podstawę dla definiowania własności zamienialności (ang. substitutability). Zasada zamienialności ma duże znaczenie dla przyrostowego rozwoju oprogramowania: obiekty nowych, bardziej wyspecjalizowanych klas mogą być wykorzystywane w tym samym środowisku, co obiekty klas bardziej ogólnych, bez potrzeby zmiany środowiska przy każdej zmianie związanej z rozszerzeniami wynikłymi ze specjalizacji.

20 E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 20/20 Typy masowe Typy, dla których rozmiar bytu nie da się przewidzieć ani sensownie ograniczyć. Kolekcje (termin ODMG-93 przyjęty dla określenia typów masowych): Zbiory (ang. sets): nie uporządkowane kolekcje elementów dowolnego ustalonego typu, bez powtórzeń. Wielozbiory (ang. multisets, bags): nie uporządkowane kolekcje elementów dowolnego ustalonego typu, elementy mogą się powtarzać. Sekwencje (ang. sequences): uporządkowane kolekcje elementów dowolnego ustalonego typu; porządek ma znaczenie informacyjne, elementy mogą się powtarzać. Tablice dynamiczne (ang. dynamic arrays): sekwencje, ale z dostępem poprzez indeks. Zbiory (ang. sets): nie uporządkowane kolekcje elementów dowolnego ustalonego typu, bez powtórzeń. Wielozbiory (ang. multisets, bags): nie uporządkowane kolekcje elementów dowolnego ustalonego typu, elementy mogą się powtarzać. Sekwencje (ang. sequences): uporządkowane kolekcje elementów dowolnego ustalonego typu; porządek ma znaczenie informacyjne, elementy mogą się powtarzać. Tablice dynamiczne (ang. dynamic arrays): sekwencje, ale z dostępem poprzez indeks. Ortogonalność konstruktorów typu: typy masowe mogą być dowolnie kombinowane z dowolnymi innymi typami, np. zbiór sekwencji; obiekt, którego atrybutami są wielozbiory, itd. Popularne języki obiektowe nie mają typów masowych lub je ograniczają (Smalltalk, C++). Systemy przedobiektowe nie są zgodne z zasadą ortogonalności konstruktorów typu.


Pobierz ppt "E. Stemposz. UML i Analiza Obiektowa, Wykład 4, Slajd 1/20 Wykład 4 Model obiektowy (2) dr inż. Ewa Stemposz"

Podobne prezentacje


Reklamy Google