Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałBogna Kucharska Został zmieniony 5 lat temu
1
Projektowanie systemów informatycznych Wykład 3 – Obiekt a klasa
mgr inż. Bartosz Połok
2
Obiekt
3
Obiekt Obiekt jest to struktura danych stanowiąca w implementacji komputerowej odwzorowanie bytu, który posiada dobrze określone granice i własności, wyróżnialnego w analizowanym fragmencie dziedziny problemowej Tożsamość obiektu Stan obiektu Zachowanie Typ Wszystkie atrybuty, powiązania, operacje itd. obiektu nazywane są jego własnościami. Tożsamość obiektu , która odróżnia go od innych obiektów i jest niezależna od wartości jego atrybutów, powiązań z innymi obiektami, od lokalizacji (odwzorowywanego przez obiekt) bytu w świecie rzeczywistym oraz od lokalizacji obiektu w przestrzeni adresowej komputera. Stan obiektu, który jest określony przez aktualne wartości jego atrybutów i powiązań z innymi obiektami. Stan obiektu może zmieniać się w czasie; nie pociąga to jednak za sobą zmiany jego tożsamości. Zachowanie przypisane do obiektu, tj. zestaw operacji, które można na nim wykonać. Typ przypisany do obiektu, tj. wyrażenie językowe, które poprzez specyfikację atrybutów określa jego budowę oraz ogranicza kontekst, w którym można odwoływać się do obiektu.
4
Obiekt
5
Tożsamość obiektu Byt, odwzorowywany w obiekt w implementacji komputerowej, jest wyróżnialny w dziedzinie problemowej przez sam fakt swojego istnienia, a nie poprzez jakąkolwiek fizyczną cechę, która odróżniałaby go od innych bytów.
6
Relatywizm obiektów Obiekt, stanowiący odwzorowanie pewnego bytu ze świata rzeczywistego, powinien przechowywać wszelkie informacje, które odnoszą się do tego bytu. Obiekt przenosi te informacje między innymi poprzez mechanizm atrybutów. Atrybuty obiektu same mogą być obiektami, zwanymi w takiej sytuacji podobiektami; obiekt zawierający atrybuty-podobiekty nazywany jest obiektem złożonym.
7
Powiązanie pomiędzy obiektami
Relacja między obiektami, odwzorowująca fizyczny lub pojęciowy związek istniejący między bytami w analizowanej dziedzinie problemowej, nazywana jest powiązaniem. Na poziomie implementacyjnym powiązanie jest daną będącą identyfikatorem pewnego obiektu.
8
Hermetyzacja Pojęcie hermetyzacja (inaczej: enkapsulacja) oznacza zgromadzenie w postaci jednej manipulowalnej bryły zarówno elementów struktury obiektu, jak i operacji, które można na tym obiekcie wykonać. Hermetyzacja ortodoksyjna (np. Smalltalk) Hermetyzacja ortogonalna (np. C++, Modula 2, Java) Własności: Na zewnątrz obiektu widoczne są wyłącznie te operacje, które można na nim wykonać. Atrybuty obiektu są ukryte. Dowolna własność obiektu (atrybut, operacja itd.) może być prywatna (ukryta) lub publiczna ("udostępniona" do publicznego użytku). Efekt: Dostęp do atrybutów obiektu wymaga zdefiniowania specjalnych operacji, z których jedna odczytuje wartość atrybutu, a druga ją zmienia. Efekt: Potrzebne są specjalne środki do specyfikowania własności prywatnych i publicznych.
9
Klasa
10
Klasa Klasa jest nazwanym opisem grupy obiektów o podobnych własnościach. Zgodnie z tą definicją, klasa nie jest zbiorem obiektów, lecz jest wykorzystywana do deklarowania obiektów. Najważniejszymi własnościami klasy, zwanymi inwariantami klasy, są: nazwa, czyli językowy identyfikator klasy obiektu; typ, czyli struktura (budowa) obiektu specyfikowana z wykorzystaniem mechanizmu atrybutów; metody, czyli implementacje operacji, które można wykonać na obiekcie. Do innych rodzajów inwariantów zalicza się m.in.: obsługę zdarzeń i wyjątków, które mogą zachodzić w trakcie wykonywania operacji na obiekcie; listę eksportową, czyli listę własności obiektu, które są dostępne z zewnątrz; ograniczenia, którym może podlegać obiekt klasy.
11
Nazwa klasy Głównym zadaniem nazwy klasy jest opisanie obiektów, które ona grupuje. Bardzo często przyjmuje się, że nazwa klasy powinna określać pojedynczy obiekt tej klasy, w związku z czym zazwyczaj nazwą klasy jest rzeczownik w liczbie pojedynczej Jeżeli jednak obiekt odpowiada grupie bytów, np. grupie osób, to do nazwania klasy powinno się użyć rzeczownika w liczbie mnogiej (Osoby) albo specjalnej frazy rzeczownikowej, która jest w liczbie pojedynczej (w tym przypadku np. Grupa osób) Jak można zaobserwować na przykładzie nazwy Grupa osób, znakiem dozwolonym w nazwie klasy (a także nazwie atrybutu, metody itd.) na etapie analizy jest spacja. Nazwy, których składnia nie jest dozwolona w środowisku implementacji, zostaną odpowiednio zmienione w fazie projektowania, w trakcie wykonywania czynności określanych mianem "eliminacji ograniczeń środowiska implementacji".
12
stereotyp dostępność nazwa_ klasy lista_wart_etykiet
Notacja W języku UML na diagramie klas definicja klasy przedstawiana jest w postaci prostokąta składającego się zazwyczaj z trzech pól: pola nazwy klasy, pola atrybutów, pola metod. Elementy pól, czyli nazwa, atrybuty i metody, posiadają następujące specyfikacje: nazwa klasy: stereotyp dostępność nazwa_ klasy lista_wart_etykiet atrybut: stereotyp dostępność nazwa_atrybutu : typ = wart_początkowa lista_wart_etykiet metoda: stereotyp dostępność nazwa_metody (lista_arg) : typ_wart_zwracanej lista_wart_etykiet
13
Notacja stereotyp i lista_wart_etykiet oznaczają odpowiednio stereotyp i listę wartości etykietowanych dostępność określa widoczność danego elementu. Wyróżnia się trzy podstawowe rodzaje dostępności, oznaczane w następujący sposób: + : element publiczny - jest widoczny z zewnątrz klasy; - : element prywatny - jest widoczny tylko wewnątrz klasy; # : element chroniony - jest widoczny w klasie i jej podklasach (więcej informacji na ten temat znajduje się w wykładzie omawiającym generalizację-specjalizację). lista_arg: definiuje listę parametrów formalnych metody; składnia opisu pojedynczego parametru jest następująca: rodzaj nazwa_arg : typ = wartość_początkowa, gdzie rodzaj określa sposób, w jaki metoda korzysta z danego argumentu: in: metoda może czytać wartość parametru, ale nie może jej zmieniać; out: metoda może zmieniać wartość parametru, ale nie może jej czytać; inout: metoda może zarówno czytać, jak i zmieniać wartość parametru.
14
Notacja Każdy z elementów specyfikacji klasy, za wyjątkiem nazwy, jest opcjonalny; w szczególności bardzo często na etapie analizy, lub przynajmniej na jej początku, nie określa się dostępności ani typów atrybutów. Definicję klasy można przedstawić w sposób mniej lub bardziej szczegółowy, co ilustruje rysunek. W razie potrzeby definicja klasy może zostać rozszerzona o dodatkowe pole opisujące inne własności klasy. Dla zwiększenia czytelności diagramów zaleca się, aby dla nazwy klasy stosować większą czcionkę niż dla innych elementów definicji klasy. Ponadto, nazwa klasy powinna być umieszczona pośrodku pola, natomiast pozostałe elementy wyrównane do lewej strony.
15
Wystąpienie klasy Pojęcie wystąpienie klasy (inaczej: instancja klasy) oznacza obiekt, który jest "podłączony" do danej klasy, jest jej członkiem. W zależności od wymaganego poziomu szczegółowości możliwe są różne oznaczenia wystąpienia klasy. Do obiektu można przypisać nazwę ((a) i (c)), ale nie jest to konieczne ((b) i (d)).
16
Ekstensja klasy Ekstensja klasy jest to aktualny (zmienny w czasie) zestaw wszystkich wystąpień tej klasy. Ekstensja jest implementowana w postaci specjalnej struktury danych (konkretnego bytu programistycznego dołączonego do klasy), która przechowuje wszystkie obiekty będące członkami klasy
17
Atrybuty Atrybut obiektu jest nazwaną wartością; wartość atrybutu może być literałem lub obiektem Definicje atrybutów, będąc inwariantami obiektów, są przechowywane w klasie natomiast wartości atrybutów nie należą do inwariantów i są przechowywane nie w klasach, ale w obiektach
18
Atrybuty proste - przechowują pojedyncze atomowe, niepodzielne wartości, np.: imię, nazwisko, nazwisko panieńskie, wiek, płeć, stosunek do służby wojskowej; złożone - przechowują wartości, które potencjalnie mogą nie być atomowe, np.: data urodzenia, adres zamieszkania, lista poprzednich miejsc pracy, adres firmy; opcjonalne - nie każdy obiekt danej klasy posiada wartość dla tego atrybutu, np.: nazwisko panieńskie, stosunek do służby wojskowej, lista poprzednich miejsc pracy; na diagramie opcjonalność atrybutu jest oznaczana poprzez umieszczenie [0..1] po jego nazwie; powtarzalne - potencjalnie mogą przechowywać wiele wartości tego samego typu, np.: lista poprzednich miejsc pracy; na diagramie powtarzalność atrybutu jest oznaczana poprzez umieszczenie [0..*] po jego nazwie; pochodne - są wypadkową innych wartości, np. wiek; nazwy atrybutów pochodnych są poprzedzane ukośnikiem ("/"); klasowe - ich wartości są identyczne dla wszystkich obiektów w danej ekstensji, np. adres firmy (oczywiście pod warunkiem, że wszyscy pracownicy pracują w tej samej firmie); na diagramie nazwy atrybutów klasowych są podkreślane; atrybut będący obiektem, np. zdjęcie.
19
Atrybuty Atrybuty mogą być przedstawiane na diagramach na różnych poziomach szczegółowości - wszystkie elementy wchodzące w skład specyfikacji atrybutu, oprócz jego nazwy, (czyli m.in. stereotyp, dostępność, typ) mogą być opuszczone. Reguły nazewnictwa dla atrybutów są podobne do reguł nazewnictwa dla klas, tzn. nazwa powinna odzwierciedlać semantykę atrybutu i powinna być możliwie krótka. Ponadto, na etapie analizy nazwa może zawierać znaki, które nie są dozwolone w środowisku implementacji (np. spacje).
20
Operacje a metody Wszystkie obiekty, będące członkami danej klasy, podlegają tym samym operacjom. Operację należy traktować jak swego rodzaju byt wirtualny, którego istnienie oznacza, że dla każdego obiektu, członka danej klasy, musi być udostępnione zachowanie specyfikowane przez operację. Dana operacja może być stosowana do obiektów różnych klas. Przykładem jest operacja drukuj występująca w klasach modelujących różne rodzaje plików
21
Operacje a metody Z pojęciem operacji ściśle związane jest pojęcie metody, która jest implementacją operacji w klasie; w pewnym uproszczeniu oznacza to, że operacja określa "co należy zrobić", a metoda specyfikuje "jak to należy zrobić". Jedna operacja może posiadać wiele implementacji. W przykładzie z poprzedniego slajdu istnieje jedna operacja drukuj i trzy metody drukuj implementujące operację drukowania dla różnych rodzajów plików. Zazwyczaj wszystkie metody implementujące daną operację mają taką samą sygnaturę (czyli taką samą nazwę, taką samą liczbę i typy argumentów oraz taki sam typ zwracanego wyniku), nie jest to jednak wymagane. Metody, podobnie jak atrybuty, mogą być przedstawiane na diagramach na różnych poziomach szczegółowości, dotyczy to głównie argumentów i wartości zwracanej. Brak specyfikacji argumentów metody na etapie analizy może oznaczać zarówno to, że metoda ich nie posiada, jak i to, że w danym momencie nie są one istotne. To samo dotyczy wartości zwracanej oraz typów argumentów.
22
Rodzaje metod Można wyróżnić następujące rodzaje metod:
metoda obiektu - operuje na atrybutach, powiązaniach itd. jednego obiektu; argumentem domyślnym metody obiektu jest obiekt, dla którego została ona wywołana. metoda klasowa - operuje na ekstensji klasy, czyli posiada dostęp do atrybutów, powiązań itd. wszystkich obiektów danej klasy; argumentem domyślnym metody klasowej jest ekstensja klasy. Metody klasowe są oznaczane na diagramie klas UML przez podkreślenie sygnatury. Metoda, niezależnie od tego, czy jest wykonywana w kontekście obiektu czy ekstensji klasy, może być metodą abstrakcyjną. Metoda abstrakcyjna posiada sygnaturę, ale nie może posiadać implementacji. Metody abstrakcyjne mogą być definiowane jedynie w klasach abstrakcyjnych. Z perspektywy pojęciowej głównym zadaniem tego rodzaju metod jest definiowanie zbioru zachowań dla hierarchii klas
23
Rodzaje metod Jako przykład rozważmy metody klasy Pracownik
Klasa nie posiada metod abstrakcyjnych, gdyż jako jedyna klasa na diagramie musi być klasą konkretną Klasa posiada metody obiektu, np.: policz wiek (), czy pracował w (nazwa firmy). Klasa posiada metody klasowe, np.: policz wiek (imię, nazwisko), znajdź najstarszego (). Zwróćmy uwagę na metody o nazwie policz wiek, które są różnymi implementacjami operacji obliczającej wiek pracownika: Metoda policz wiek (imię, nazwisko) jest niepoprawną implementacją, gdyż będąc metodą obiektu jest niepotrzebnie sparametryzowana wartościami jego atrybutów wiek i nazwisko. Metoda policz wiek () jest poprawną implementacją, gdyż wszystkie informacje potrzebne do obliczenia wieku są przechowywane w obiekcie, który jest domyślnym argumentem metody; w związku z tym metoda nie musi być sparametryzowana. Metoda policz wiek (imię, nazwisko) jest poprawną implementacją, gdyż będąc metodą klasową musi ona otrzymać informację, dla którego pracownika ma obliczyć wiek. Nie jest to jednak rozwiązanie optymalne, ponieważ niepotrzebnie operuje na ekstensji w sytuacji, gdy wystarczy odwołać się bezpośrednio do obiektu (tak jak w rozwiązaniu powyżej).
24
Wiązanie statyczne a dynamiczne
Wiązanie jest to mechanizm zamiany identyfikatora symbolicznego (nazwy) bytu programistycznego (stałej, zmiennej, procedury itd.) występującego w programie na wartość, adres lub wewnętrzny identyfikator tego bytu. Wyróżnia się dwa rodzaje wiązań: wiązanie wczesne (statyczne) - jest wykonywane przed uruchomieniem programu, czyli podczas kompilacji i konsolidacji: Zalety: większa szybkość działania programu oraz możliwość pełnej statycznej kontroli typów. Wady: brak możliwości rozbudowy aplikacji podczas jej działania. wiązanie późne (dynamiczne) - jest wykonywane w czasie działania programu: Zalety: możliwość przesłaniania w trakcie działania aplikacji oraz możliwość komponowania programu w trakcie jego działania, co umożliwia szybkie wprowadzenie zmiany do oprogramowania. Wady: wolniejsze działanie programu, utrudniona kontrola typów.
25
Komunikat Komunikat oznacza wywołanie operacji, która ma zostać wykonana na obiekcie. Komunikat specyfikuje zarówno obiekt będący jego adresatem, jak i operację (z listą argumentów), która ma być wykonana; nie określa jednak, która z metod implementujących daną operację ma zostać wywołana. Wołanie funkcji Wysłanie komunikatu X = dochody (emeryt) Y = dochody (pracownik) X = emeryt.dochody () Y = pracownik.dochody () Efekt: Przełączanie, czyli wybór do wykonania fragmentu kodu odpowiedniego dla danego rodzaju obiektu, jest wykonywane w ciele funkcji dochody. Funkcję pisze zwykle jeden programista, stosownie do wymagań określonych w danym momencie. Każda zmiana związana z nowym rodzajem obiektów skutkuje zmodyfikowaniem istniejącej (jednej) funkcji dochody, co potencjalnie może stanowić źródło błędów. Stosowane jest wiązanie statyczne. Efekt: Istnieje tyle metod implementujących operację dochody, ile jest klas, które ją definiują. W ciele żadnej z metod nie ma przełączania; za każdym razem, w zależności od rodzaju obiektu będącego adresatem komunikatu, wywoływana jest inna metoda dochody implementująca operację dochody. Metody (i ich twórcy) nie muszą o sobie nic wiedzieć. Każda zmiana związana z nową klasą wymaga zaimplementowania nowej metody; żadna z istniejących już metod nie musi być modyfikowana. Stosowane jest wiązanie dynamiczne.
26
Polimorfizm Termin polimorfizm oznacza "wiele form" (postaci) jednego bytu. Słowo "polimorfizm" też jest polimorficzne, ponieważ istnieje kilka rodzajów polimorfizmu: Polimorfizm metod: jedna operacja (byt wirtualny) może posiadać wiele form (metod implementujących). Innymi słowy, operacja wywoływana za pośrednictwem komunikatu może być różnie wykonana, w zależności od rodzaju obiektu, do którego ten komunikat został wysłany. Polimorfizm typów: oznacza istnienie funkcji, które mogą zarówno przyjmować wartości różnych typów jako swoje argumenty, jak też i zwracać wartości różnych typów. Polimorfizm typów uważany jest za podstawę programowania ogólnego (generycznego) w polimorficznych językach programowania. Przykładowo, funkcja zwróć pierwszy element listy (lista) zwraca pierwszy element dowolnej listy, niezależnie od tego, czy jest to lista liczb całkowitych, lista liczb rzeczywistych czy też przechowuje wartości innego typu. Polimorfizm parametryczny: rodzaj polimorfizmu typów, który oznacza, że typ bytu programistycznego może być parametryzowany innym typem, np. klasa Wektor(int) czy Wektor(char).
27
Klasa parametryzowana
Klasa parametryzowana jest specjalnym rodzajem klasy, z którą związany jest pewien parametr (lub ich lista). Klasy parametryzowane są użyteczne z dwóch zasadniczych powodów: podnoszą poziom abstrakcji oraz zwiększają potencjał ponownego użycia. Klasa parametryzowana może być przedstawiana na diagramach na dwa sposoby:
28
Podsumowanie Koncepcja obiektowości zawiera dużą liczbę pojęć, z których dwa najważniejsze to obiekt i klasa. Wraz z nimi w wykładzie omówiono również takie pojęcia jak atrybut, metoda, hermetyzacja, komunikat oraz polimorfizm. Już te kilka koncepcji sprawia, że w porównaniu do innych podejść, w tym do podejścia relacyjnego, obiektowość znacznie lepiej pozwala opisać dziedzinę problemową. Siła wyrazu obiektowości jest wzmacniana poprzez pojęcia przedstawiane w kolejnych wykładach.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.