Projektowanie i programowanie obiektowe II - Wykład II dr inż. Wojciech Tarnawski e-mail:wojciech.tarnawski@pwr.wroc.pl www.zssk.pwr.wroc.pl Copyright by Wojciech Tarnawski
Projektowanie systemów informatycznych obiektowo zorientowanych (plan projektu) 1. Identyfikacja zachowań systemu 2. Identyfikacja klas obiektów występujących w systemie 3. Klasyfikacja klas obiektów - pod względem dziedziczenia ( związek uogólniania) - pod względem zawierania się w sobie (powiązanie:agregacja) 4. Określenie powiązań komunikacji i związków użycia między obiektami ze zdefiniowanych klas. 5. Precyzyjna specyfikacja składowych klas (atrybutów i operacji) 6. Składanie modelu logicznego - określenie sekwencji działań obiektów (model funkcjonalny, model dynamiczny, przesyłanie komunikatów) Copyright by Wojciech Tarnawski
Ad. 2 Identyfikacja klas obiektów występujących w systemie Szukanie klas, które mogą wystąpić w systemie - utworzenie tzw. słownika pojęć, czyli rzeczowników mających dla nas znaczenie tzn. będą kandydowały na przyszłe klasy. Przy tworzeniu słownika pojęć możemy posłużyć się tzw. listą zachowań systemu: Kto,co ?(rzeczownik) Działanie Kogo? Rezultat Np. Użytkownik Dodaje Element dopisanie elementu System Uruchamia się uruchomienie programu, sprawdzenie hasła, ...
Na tym etapie podajemy wstępnie obowiązki klasy, widoczne własności, współpracowników klasy (tworzenie „kart modelujących”) ( precyzyjną definicję składowych klasy wykonamy na etapie piątym) np. Klasa Klient jest opisana przez nazwisko, imię itd., może on być obsługiwany, zapisywany, usuwany przez Pracownika UWAGA! Dążymy do tego, aby klas było jak najmniej i aby były jak najbardziej hermetyczne i „zakapsułkowane” !!! Copyright by Wojciech Tarnawski
Ad. 3 Klasyfikacja klas obiektów „Tutaj chodzi konkretnie o to, aby zastanowić się, czy klasy nie są ze sobą powiązane [...] w jakieś hierarchie, ewentualnie czy obiekty jednej klasy nie mieszczą w sobie obiektów innej klasy” J. Grębosz, Symfonia C++ T. 3 Klasyfikacja klas obiektów: a) pod względem dziedziczenia ( związek uogólniania) b) pod względem zawierania się w sobie (agregacja) Copyright by Wojciech Tarnawski
Ad. a) Klasyfikacja klas obiektów pod względem dziedziczenia Dziedziczenie (związek uogólniania, związek hierarchiczny) - „to technika pozwalająca na definiowanie nowej klasy przy wykorzystaniu klasy już wcześniej istniejącej” (J. Grębosz) Klasa bazowa Klasę nadrzędną (znajdującą się wyżej w hierarchii) nazywamy klasą bazową (podstawową, superklasą) Klasę podrzędną nazywamy klasą pochodną Klasa pochodna Copyright by Wojciech Tarnawski
Klasyfikacja obiektów pod względem dziedziczenia to klasyfikacja będąca rezultatem analizy ze względu na: I semantykę problemu II wtórne użycie obiektów Ad I) ...analiza semantyk (z etapu I): „..jest szczególnym rodzajem...” np. „samolot jest środkiem transportu” „samochód jest środkiem transportu” „dyrektor jest pracownikiem biura” „sekretarka jest pracownikiem biura” „klient jest ... pracownikiem biura” (nie!) Copyright by Wojciech Tarnawski
samochód jest pojazdem <----> samolot jest pojazdem (nie!) Ad II ...ze względu na wtórne użycie obiektów - możliwość późniejszego rozbudowywania systemu, w szczególności należy pamiętać o definicji prawidłowych klas abstrakcyjnych, które mogą być później stosowane. samochód jest pojazdem <----> samolot jest pojazdem (nie!) samochód jest środkiem transportu <----> samolot jest środkiem transportu Copyright by Wojciech Tarnawski
Oznaczenie klasy abstrakcyjnej w modelu klas Klasa bazowa abstrakcyjna Klasa pochodna Copyright by Wojciech Tarnawski
Przykład z klasą abstrakcyjną Copyright by Wojciech Tarnawski
Rodzaje związków dziedziczenia: publiczne prywatne chronione Na podstawie: Symfonia C++ - J. Grębosz Sposób dziedziczenia opisujemy na diagramie po zbudowaniu modelu klas. Copyright by Wojciech Tarnawski
Dziedziczenie wielokrotne Klasa Trójkąt Koło Trójkąt wpisany w Koło Dziedziczenie wielokrotne jest podejściem bardzo „elastycznym” ale zwiększającym złożoność modelu klas. Copyright by Wojciech Tarnawski
Dziedziczenie wirtualne (wirtualne klasy bazowe) ~ Copyright by Wojciech Tarnawski
Kuriozum: dziedziczenie wirtualne i niewirtualne Copyright by Wojciech Tarnawski
Dziedziczenie wirtualne a zakres klasy bazowej - wystarczy, aby choć jedno dziedziczenie wirtualne było publiczne, a efekt jest taki, jakby wszystkie pozostałe dziedziczenia tej klasy były także publiczne Przykład: 3 dziennikarzy otrzymuje tę samą informację (dziedziczenie wirtualne) ale dwóch zobowiązuje się do milczenia (private) a trzeci ją publikuje (public) - w efekcie informacja ta staje się publiczna. Copyright by Wojciech Tarnawski
Polimorfizm - „wielość form” Pojęcie polimorfizmu jest związane z istnieniem tzw. operacji (funkcji) wirtualnych, których działanie jest „zorientowane” na obiekty z których są wywoływane ( dotyczy wyłącznie klas powiązanych związkami dziedziczenia) Polimorfizm jest często (ale nie zawsze) wykorzystywany w związkach z klasami abstrakcyjnymi Klasy zawierające funkcje wirtualne oznaczamy trójkątem w prawym dolnym rogu, a funkcje te podkreślamy ... Klasa F. wirtualna Copyright by Wojciech Tarnawski