520 likes | 703 Views
Projektowanie obiektowe. Projektowanie systemów przy wykorzystaniu oddziałujących na siebie obiektów i ich klas. Cele. Dowiedzieć się, jak przedstawiać projekt oprogramowania w postaci zbioru oddziałujących na siebie obiektów, które mają stan i operacje.
E N D
Projektowanie obiektowe Projektowanie systemów przy wykorzystaniu oddziałujących na siebie obiektów i ich klas
Cele • Dowiedzieć się, jak przedstawiać projekt oprogramowania w postaci zbioru oddziałujących na siebie obiektów, które mają stan i operacje. • Poznać najważniejsze czynności ogólnego procesu projektowania obiektowego. • Poznać różne modele, które można zastosować do udokumentowania projektu obiektowego. • Poznać podstawy prezentacji tych modeli w UML-u (ang. Unified Modeling Language).
Zawartość • Obiekty i klasy obiektów • Proces projektowania obiektowego • Ewolucja projektu
Projektowanie obiektowe • To strategia projektowania, w ramach której projektanci systemu myślą w kategoriach „bytów”, a nie operacji albo funkcji. • Działający system składa się z oddziałujących na siebie obiektów, które przechowują swój lokalny stan i oferują operacje na tej informacji o stanie. • Obiekty ukrywają informację o reprezentacji stanu i w ten sposób ograniczają do niego dostęp. • Proces projektowania obiektowego obejmuje zaprojektowanie klas obiektów i związków między tymi klasami. • Gdy projekt przybierze już postać działającego programu, potrzebne obiekty są tworzone na podstawie definicji klas.
System składający się z oddziałujących na siebie obiektów o4: K4 o1: K1 o3:K3 stan o1 stan o3 stan o4 operacja1 () operacja3 () operacja4 () o5:K5 o2: K3 o6: K1 stan o2 stan o6 stan o5 operacja2 () operacja6 () operacja5 ()
Zalety projektowania obiektowego • Systemy powinny być łatwe w pielęgnacji, ponieważ obiekty są niezależne. • Można je poznawać i modyfikować jako samodzielne byty. • Zmiana implementacji obiektu lub dodanie usług nie powinno mieć wpływu na obiekty systemowe. • Obiekty są skojarzone z bytami, zwykle więc istnieje jasne odwzorowanie bytów świata rzeczywistego (np. komponentów sprzętowych) na sterujące nimi obiekty w systemie. Zwiększa to zrozumiałość i zarazem zdatność do pielęgnacji systemu.
Wyjaśnienie podstawowych pojęć dot. strategii obiektowych • Analiza obiektowa polega na opracowaniu modelu obiektowego dziedziny zastosowania. Rozpoznane obiekty odzwierciedlają byty i operacje związane z rozwiązywanym problemem. • Projektowanie obiektowe polega na opracowaniu modelu obiektowego systemu oprogramowania, który będzie implementacją zidentyfikowanych wymagań. Obiekty projektu obiektowego są związane z rozwiązaniem problemu. • Programowanie obiektowe polega na realizacji projektu oprogramowania za pomocą języka programowania obiektowego. Języki obiektowe, takie jak Java, umożliwiają bezpośrednią implementację obiektów i dostarczają udogodnienia do definiowania klas obiektów.
Obiekty Obiekt jest bytem, który ma stan i zbiór zdefiniowanych operacji działających na tym stanie. Stan jest reprezentowany jako zbiór atrybutów obiektu. Operacje skojarzone z obiektem służą do oferowania usług innym obiektom (klientom), które mogą żądać tych usług, gdy potrzebują wykonania pewnych obliczeń. Obiekty są tworzone zgodnie z definicja klasy obiektów. Definicja klasy obiektów służy jako szablon do tworzenia obiektów. Zawiera deklaracje wszystkich atrybutów i operacji, które należy skojarzyć z obiektem tej klasy.
UML • Notacja używana do oznaczenia klas obiektów jest zdefiniowana przez UML. Klasa obiektów jest przedstawiana jako nazwany prostokąt z dwoma sekcjami. Atrybuty obiektu są wymieniane w górnej sekcji. Operacje związane z obiektem są wymieniane w dolnej sekcji.
Obiekt pracownik Pracownik nazwisko : string adres : string dataUrodzenia : Date numerPracownika : integer PESEL : string dział : Dział przełożony : Pracownik wynagrodzenie : integer stan : {zatrudniony, zwolniony, emerytowany} NIP : integer ... dołącz() opuść() przejdźNaEmeryturę() zmieńSzczegóły() t a t u s : { c u r r e n t , l e f t , r e t i r e d } t a x C o d e : i n t e g e r . . . j o i n ( ) l e a v e ( ) r e t i r e ( ) c h a n g e D e t a i l s (
Komunikacja pomiędzy obiektami • Obiekty porozumiewają się przez żądania usług (wywołania metod) od innych obiektów, i jeśli trzeba, wymianę informacji niezbędnych do realizacji usługi. • Kopie informacji potrzebnych do wykonania usługi i wyniki jej wykonania są przekazywane jako parametry. • W niektórych systemach rozproszonych komunikację obiektów implementuje się po prostu jako tekstowe komunikaty wymieniane przez obiekty. • Obiekt odbiorca analizuje składniowo komunikat, rozpoznaje usługę i przekazane dane,m a następnie realizuje żądaną usługę. • Jeśli obiekty istnieją jednak w ramach tego samego programu, to wywołania metod implementuje się w taki sam sposób jak wywołania procedur i funkcji w językach C lub Ada.
Przykłady komunikacji // Wywołaj metodę obiektu biura, która przekazuje następną wartość z bufora w = buforCykliczny.pobierz() // Wywołaj metodę obiektu termostatu, która ustala utrzymywaną temperaturę termostat.ustawTemperaturę(20);
Hierarchia dziedziczenia (uogólnień) • Klasy obiektów można ułożyć w hierarchię uogólnienia lub dziedziczenia, w której widać związek między ogólnymi i bardziej szczegółowymi klasami obiektów. • Szczegółowa klasa obiektów jest w pełni zgodna z ogólną klasą obiektów, ale zawiera więcej informacji. • W UML uogólnienie obrazuje się za pomocą obrazów strzałki wskazującej klasę macierzystą. • W obiektowych językach programowania uogólnienie zwykle implementuje się za pomocą mechanizmu dziedziczenia. Klasa potomna dziedziczy atrybuty i operacje po klasie macierzystej.
Hierarchia dziedziczenia Pracownik Kierownik zarządzaneBudżety dataPrzyjęcia Programista przedsięwzięcie językiProg Kierownik Strategiczny obowiązki Kierownik Przedsięwzięcia przedsięwzięcia Kierownik Działu dział
Zalety dziedziczenia • Klasy niższe w hierarchii mają te same atrybuty i operacje co ich klasy macierzyste, mogą jednak dodawać nowe atrybuty i operacje lub modyfikować niektóre z tych odziedziczonych. • Jeśli w modelu użyto nazwy klasy macierzystej, to obiekt systemu może być zdefiniowany jako obiekt tej klasy albo jednego z jej potomków.
Powiązania pomiędzy klasami obiektów • Obiekty należące do klas obiektów biorą udział w związkach z innymi obiektami. Związki te można modelować przez opisanie powiązań między klasami obiektów. • W UML oznaczeniem powiązania jest kreska między klasami obiektów, która może mieć dodatkowe adnotacje. • Powiązanie jest bardzo ogólnym związkiem i w UML często używa się go do wskazania, że atrybut obiektu jest powiązanym obiektem albo że implementacja metody korzysta z powiązanego obiektu. • Jednym z najczęściej występujących powiązań jest agregacja, która służy do wskazania, jak obiekty składa się z innych obiektów.
Model powiązań Pracownik Dział jest-członkiem jest-zarządzany-przez Kierownik zarządza
Obiekty współbieżne • Ogólny model oddziaływania obiektów umożliwia ich współbieżne wykonywanie w równoległych procesach. • Obiekty mogą działać na tym samym komputerze lub być obiektami rozproszonymi na różnych maszynach. • W praktyce większość obiektowych języków programowania domyślnie przyjmuje model działania sekwencyjnego, w którym żądania usług obiektów, są implementowane w taki sam sposób jak wywołania funkcji.
Dwa rodzaje implementacji obiektów współbieżnych • Serwery • Obiekty są tu realizowane jako równoległe procesy z metodami odpowiadającymi zdefiniowanym operacjom obiektu. Metody są uruchamiane w odpowiedzi na zewnętrzne komunikaty i mogą się wykonywać równolegle z metodami skojarzonymi z innymi obiektami. • Obiekty aktywne • Stan obiektu może być zmieniony przez wewnętrzne operacje wykonywane przez obiekt w swoim wnętrzu. Proces reprezentujący obiekt nieustannie wykonuje te operacje, nigdy więc nie wstrzymuje swojego działania.
Przykład • Klasa obiektów reprezentuje transponder samolotu. • Transponder śledzi położeniem samolotu za pomocą systemu nawigacji satelitarnej. • Może reagować na komunikaty pochodzące z komputerów centrum kontroli lotów. • Udostępnia bieżące położenie samolotu w odpowiedzi na wywołanie metody podajPołożenie.
Implementacja obiektu aktywnego za pomocą wątków Javy Class Transponder extends Thread { Położenie bieżącePołożenie ; Współrzędne w1 , w2 ; Satelita sat1, sat2 ; Nawigator nawigator ; public Położenie podajPołożenie () { return bieżącePołożenie ; } public void run () { while (true) { w1 = sat1.położenie() ; w2 = sat2.położenie() ; bieżącePołożenie = nawigator.wyznacz(w1, w2) ; } } } // Transponder
Etapy procesu projektowania obiektowego • Zrozumienie i zdefiniowanie kontekstu oraz modelu użytkowania systemu. • Zaprojektowanie architektury systemu. • Identyfikacja głównych obiektów systemu. • Opracowanie modeli projektowych. • Wyspecyfikowanie interfejsów obiektów.
System mapy pogody System tworzący mapy pogody ma regularnie generować mapy pogody na podstawie informacji zgromadzonych przez zdalne, niestrzeżone stacje meteorologiczne i inne źródła danych, takie jak obserwatorzy pogody, balony i satelity. Stacje meteorologiczne przekazują dane do komputera obszaru w odpowiedzi na żądania przychodzące z tej maszyny. System komputera obszaru weryfikuje zebrane dane i integruje dane z różnych źródeł. Zintegrowane dane są archiwizowane. Na podstawie tego archiwum i bazy danych map komputerowych tworzy się lokalne mapy pogody. Mapy można drukować w celu rozpowszechniania na specjalnej drukarce do map lub wyświetlać w kilku różnych formatach.
System mapy pogody Z tego opisu wynika, ze zadaniem części systemu jest zbieranie danych, inna część zajmuje się integracja danych z różnych źródeł, a jeszcze inna tworzeniem map pogody. Na rysunku pokazano jedną z architektur tego systemu, którą można wywnioskować z tego opisu. Jest to architektura warstwowa, która odzwierciedla różne etapy przetwarzania zachodzącego w systemie: zbieranie danych, integrację danych, archiwizację danych i generowanie map. W tym wypadku architektura warstwowa jest właściwa, ponieważ każdy etap w swoim działaniu zależy jedynie od przetwarzania z poprzedniego etapu.
Architektura warstwowa systemu tworzącego mapy pogody Warstwa wyświetlania danych, której obiekty zajmują się przygotowaniem danych w postaci zrozumiałej dla człowieka <<subsystem>> Wyświetlanie danych Warstwa archiwizacji danych, której obiekty zajmują się składowaniem danych do późniejszego przetwarzania <<subsystem>> Archiwizacja danych Warstwa przetwarzania danych, której obiekty zajmują się sprawdzaniem i integracją zgromadzonych danych <<subsystem>> Przetwarzanie danych Warstwa gromadzenia danych, której obiekty zajmują się zdobywaniem danych ze zdalnych źródeł <<subsystem>> Gromadzenie danych
Podsystemy w systemie tworzącym mapy pogody <<subsystem>> Gromadzenie danych <<subsystem>> Wyświetlanie danych Obserwator Satelita Interfejs użytkownika Wyświetlacz map Wspólne Mapa Drukarka map Stacja meteoro- logiczna Balon <<subsystem>> Archiwizacja danych <<subsystm>> Przetwarzanie danych Składowanie danych Sprawdzanie danych Integracja danych Składnica map Składnica danych
Kontekst systemu i modele użytkowania • Pierwszym etapem procesu projektowania oprogramowania jest zrozumienie związków między projektowanym oprogramowaniem a jego środowiskiem zewnętrznym. Kontekst systemu i modele użytkowania stanowią dwa uzupełniające się modele związków pomiędzy systemem a jego środowiskiem. • Kontekst systemu jest modelem statycznym, w którym opisuje się inne systemy obecne w tym środowisku. • Model użytkowania systemu jest modelem dynamicznym, w którym opisuje się, w jaki sposób system porozumiewa się ze swoim środowiskiem.
Kontekst systemu tworzącego mapy pogody czyli podsystem gromadzenia danych <<subsystem>> Gromadzenie danych <<subsystem>> Wyświetlanie danych Obserwator Satelita Interfejs użytkownika Wyświetlacz map Wspólne Mapa Drukarka map Stacja meteoro- logiczna Balon <<subsystem>> Archiwizacja danych <<subsystm>> Przetwarzanie danych Składowanie danych Sprawdzanie danych Integracja danych Składnica map Składnica danych
Przypadki użycia stacji meteorologicznej Uruchom Wyłącz Raportuj Dostrój Testuj
Opis przypadku użycia „Raportuj” System Stacja meteorologiczna Przypadek użycia Raportuj Aktorzy System gromadzenia informacji meteorologicznych, Stacja meteorologiczna Dane Stacja meteorologiczna wysyła do systemu gromadzenia informacji meteorologicznych podsumowanie danych meteorologicznych odczytanych z przyrządów w określonym czasie. Wysyła się maksymalne, minimalne i średnie temperatury gruntu i powietrza, maksymalne, minimalne i średnie ciśnienia powietrza, maksymalną, minimalną i średnią prędkość wiatru, całkowity opad i kierunek wiatru próbkowany co pięć minut. Bodziec System gromadzenia informacji meteorologicznych nawiązuje połączenie modemowe ze stacją meteorologiczną i żąda przekazania danych. Reakcja Wysyłanie podsumowania danych do systemu gromadzenia informacji meteorologicznych. Komentarz Stacje meteorologiczne są zwykle proszone o raport raz na godzinę, ale ta częstotliwość może być inna dla różnych stacji i może w przyszłości ulec zmianie.
Projektowanie architektury • Po zdefiniowaniu oddziaływania projektowanego systemu oprogramowania z jego środowiskiem można przystąpić do projektowania architektury systemu. • Przykład architektury automatycznej stacji meteorologicznej przedstawionej za pomocą modelu warstwowego. Oto trzy warstwy oprogramowania takiej stacji meteorologicznej: • Warstwa interfejsu, której zadaniem jest porozumiewanie się z innymi częściami systemu i oferowanie zewnętrznych interfejsów systemu. • Warstwa gromadzenia danych, której zadaniem jest zarządzanie odczytem danych z przyrządów i podsumowywanie danych meteorologicznych przed przesłaniem ich do systemu tworzącego mapy. • Warstwa przyrządów, która obudowuje wszystkie przyrządy służące do gromadzenia surowych danych o warunkach pogodowych.
Architektura stacji meteorologicznej Stacja meteorologiczna <<subsystem>> Interfejs Obsługuje całą komunikację zewnętrzną <<subsystem>> Gromadzenie danych Gromadzi i podsumowuje dane Pakiet przyrządów do zbierania surowych danych <<subsystem>> Przyrządy
Identyfikacja obiektów • W praktyce ta czynność polega na wynajdowaniu klas obiektów. • Projekt jest pisany w kategoriach tych klas. • Nie uchronimy się przed udoskonalaniem tych wstępnie rozpoznanych klas obiektów i ponownym przeglądem tego etapu procesu po tym, jak osiągnie się głębsze zrozumienie projektu.
Sposoby identyfikacji • Wykorzystanie analizy gramatycznej opisu systemu w języku naturalnym. Obiekty i atrybuty są rzeczownikami, a operacje i usługi czasownikami. • Wykorzystanie namacalnych bytów (rzeczy) z dziedziny zastosowania takich jak samolot, ról takich jak kierownik, zdarzeń takich jak żądanie, interakcji takich jak spotkanie, miejsc takich jak biura, jednostek organizacyjnych jak firmy itp. • Wykorzystanie podejścia czynnościowego, w którym projektant zaczyna od zrozumienia ogólnego zachowania systemu. Różne zachowania przypisuje się do różnych części systemu. • Wykorzystanie analizy scenariuszy, w której rozpoznaje się i analizuje różne scenariusze w systemie. Po zanalizowaniu scenariusza zespół odpowiedzialny za tę analizę musi rozpoznać potrzebne obiekty, atrybuty i operacje.
Klasy obiektów stacji meteorologicznej • Klasa obiektów StacjaMeteorologiczna oferuje swojemu środowisku podstawowy interfejs stacji meteorologicznej. • Klasa obiektów DaneMeteorologiczne obudowuje podsumowanie danych odczytanych z różnych przyrządów stacji meteorologicznej. Skojarzone z nią operacje służą do gromadzenia i podsumowywania wymagań danych. • Klasy obiektów Termometr gruntowy, Wiatromierz i Barometr są bezpośrednio związane z przyrządami systemu. Odzwierciedlają namacalne byty sprzętowe systemu. Ich operacje służą do sterowania tym sprzętem.
Przykłady klas obiektów w systemie stacji meteorologicznej DaneMeteorologiczne temperaturyPowietrza temperaturyGruntu siłyWiatru kierunkiWiatru cisnienia opad gromadź () podsumuj () StacjaMeteorologiczna identyfikator raportPogodowy () dostrój (przyrządy) testuj () uruchom (przyrządy) wyłącz (przyrządy) Barometr ciśnienie wysokość test () dostrój () Termometr gruntowy temperatura testuj () dostrój () Wiatromierz SiłaWiatru kierunekWiatru test ()
Rozpoznanie dalszych obiektów i usług • Awarie przyrządów muszą być zgłaszane automatycznie. Wymaga to atrybutów i operacji do sprawdzania poprawnego działania przyrządów. • Liczba odległych stacji meteorologicznych jest duża. Trzeba więc umieć rozpoznać dane pochodzące z poszczególnych stacji. Stacje muszą zatem mieć identyfikatory.
Modele projektowe • Modele projektowe obejmują obiekty lub klasy obiektów systemu oraz, gdy ma to sens, różne rodzaje związków między tymi bytami. • Mają być abstrakcyjne, żeby zbędne szczegóły nie zakrywały związków między nimi a wymaganiami systemowymi. Muszą tez zawierać wystarczająco dużo szczegółów, żeby programiści mogli podejmować decyzje implementacyjne.
Rodzaje modeli projektowych • Model statyczny, który służy do opisu statycznej struktury systemu w kategoriach klas obiektów systemowych i ich związków. • Modele dynamiczne, które służą do opisu dynamicznej struktury systemu. Widać z nich interakcje między obiektami systemowymi.
Przykłady modeli projektowych • Modele podsystemów, w których uwzględnia się logiczne grupowanie obiektów w spójne podsystemy. Przedstawia się je na pewnego rodzaju diagramie klas, na którym każdy podsystem ma postać pakietu. Modele podsystemów są statyczne. • Modele przebiegu, w których uwzględnia się przebieg interakcji obiektów. W UML przedstawia się je w postaci diagramów przebiegu lub diagramów kooperacji. Modele przebiegu są dynamiczne. • Modele maszyn stanowych, z których wynika, w jaki sposób poszczególne obiekty zmieniają swój stan w odpowiedzi na zdarzenia. W UML przedstawia się je w postaci diagramów stanów. Modele maszyn stanowych są dynamiczne.
Przykład modelu podsystemów: powiązania obiektów stacji meteorologicznych <<subsystem>> interfejs <<subsystem>> Gromadzenie danych SterownikKomunikacji DaneMeteorologiczne Stan przyrządów StacjaMeteorologiczna <<subsystem>> Przyrządy Termometr powietrza Wskaźnik opadu Wiatromierz Termometr gruntowy Barometr Łopatka wiatrowa
Przykład modelu dynamicznego: model przebiegu • Jednym z najbardziej przydatnych i zrozumiałych modeli dynamicznych, który można opracować, jest model przebiegu. • Dla każdego typu interakcji dokumentuje on przebieg zachodzących oddziaływań obiektów. • Obiekty biorące udział w interakcji są ułożone poziomo. Każdy z nich pod spodem ma podczepioną pionową kreskę. • Czas jest przedstawiony pionowo, tzn. czas biegnie w dół przerywanych pionowych linii. • Interakcje między obiektami mają postać podpisanych strzałek łączących pionowe linie. • Cienki prostokąt na linii życia obiektu reprezentuje okres, w którym ten obiekt steruje systemem.
Przebieg operacji gromadzenia danych :Sterownik Komunikacji :Stacja Meteorologiczna :Dane Meteorologiczne żądanie (raport) potwierdzenie () raportuj () podsumuj () wyślij (raport) odpowiedź (raport) potwierdzenie ()
Modele maszyn stanowych • Można wykorzystać model maszyny stanowej, w którym widać, jak egzemplarz zmienia swój stan w zależności od otrzymywanych komunikatów. • Do zapisu modeli maszyn stanowych w UML oferuje diagramy stanów, które jako pierwszy wymyślił Harel (1987).
Diagram stanów obiektu StacjaMeteorologiczna Działanie dostrój () Dostrajanie dostrojony Wyłączony uruchom () testuj () Oczekiwanie Testowanie wyłącz () koniec transmisji koniec testu koniec gromadzenia zegar Transmitowanie raportPogodowy () podsumowanie gotowe Podsumowanie gotowe Podsumowywanie Gromadzenie
Specyfikowanie interfejsów obiektów • Ważną częścią procesu projektowania jest specyfikowanie interfejsów między różnymi komponentami. Trzeba wyspecyfikować interfejsy, aby można było równolegle projektować obiekty i komponenty. • Projektanci powinni unikać informacji o reprezentacji interfejsów w swoich projektach interfejsów. • Ten sam obiekt może mieć kilka interfejsów, które są sposobami postrzegania oferowanych metod. • W Javie można to bezpośrednio zrealizować, ponieważ interfejsy są deklarowane w oderwaniu od obiektów, a obiekty „implementują” interfejsy. Podobnie grupa obiektów może być dostępna przez jeden interfejs.
Opis interfejsu stacji meteorologicznej w Javie Interfejs StacjaMeteorologiczna { public StacjaMeteorologiczna () ; public void uruchom () ; public void uruchom (Przyrząd p) ; public void wyłącz () ; public void wyłącz (Przyrząd p) ; public void raportPogodowy () ; public void testuj () ; public void testuj (Przyrząd p) ; public void dostrój (Przyrząd p) ; public int podajID () ; } // StacjaMeteorologiczna
Ewolucja projektu • Ważną zaletą podejścia obiektowego do projektowania jest uproszczenie procesu wprowadzania zmian w projekcie. • Wynika to z tego, że reprezentacja stanu obiektu nie wpływa na projekt. Zmiana wstępnie ustalonych wewnętrznych szczegółów obiektu prawdopodobnie nie wpłynie na inne obiekty systemowe. • Co więcej, obiekty są luźno powiązane, wprowadzenie nowych obiektów jest zatem zwykle łatwe i nie prowadzi do istotnych konsekwencji dla reszty systemu.
Modyfikacja projektu • Do obiektu StacjaMeteorologiczna na tym samym poziomie co obiekt DaneMeteorologiczne należy dodać obiekt o nazwie Jakość powietrza. • Należy dodać operację raport Jakości powietrza, której działanie polega na wysłaniu danych o zanieczyszczeniach do głównego komputera. • Należy dodać obiekty reprezentujące przyrządy do pomiaru poziomu zanieczyszczeń. W tym wypadku pomiarom będą podlegać tlenek azotu, dym i benzen.
Nowe obiekty do monitorowania zanieczyszczeń StacjaMeteorologiczna Identifier raportPogodowy () raportJakościPowietrza () dostrój (przyrządy) testuj () uruchom (przyrządy) wyłącz (przyrządy) Jakość powietrza poziomTlenkuAzotu poziomDymu poziomBenzenu gromadź () podsumuj () Przyrządy do pomiaru zanieczyszczeń MiernikTlenkuAzotu MiernikDymu MiernikBenzenu