Wzorce oprogramowania

advertisement
Wzorce oprogramowania
Wzorce oprogramowania
• Wzorzec oprogramowania jest formą reprezentacji wiedzy i
doświadczenia projektantów w postaci opisu często powtarzającego
się problemu występującego w tworzeniu oprogramowania oraz jego
rozwiązania, które może zostać wielokrotnie wykorzystane w innych
okolicznościach. Stosowane są różne formaty opisu wzorca
oprogramowania, jednak większość z nich zawiera nazwę, opis
problemu i jego kontekstu, założenia i ograniczenia stosowania,
szkic rozwiązania, uzasadnienia projektowe oraz omówienie
konsekwencji użycia tego rozwiązania.
• Wzorce odkrywane są w czasie budowy i eksploatacji systemów
poprzez wychwycenie i rozwiązanie genetycznych problemów
analizy projektowania i implementacji systemów. Warunkiem
uznania danego rozwiązania jako wzorca jest jego sprawdzona
stosowalność i powtarzalność.
Przykładowy szablon dokumentowania wzorców
oprogramowania
Nazwa
Powinna to być znacząca nazwa charakteryzująca problem i jego
rozwiązanie (wzorzec)
Problem
Opis problemu adresowanego przez wzorzec; jakie cele chce się
osiągnąć w danym kontekście.
Kontekst
Sytuacja, w której dany problem i jego rozwiązanie mogą się
powtarzać, opis określa sytuację w jakiej można zastosować
wzorzec.
Ograniczenia
Opis istotnych sił i ograniczeń projektowych; jak one zależą jeden
od drugiego i jak wpływają na cel który chce się osiągnąć.
Rozwiązanie
Zawiera statyczne i dynamiczne elementy definiujące
rozwiązanie. Opis obejmuje rysunki, diagramy, tekst, strukturę,
odpowiedzialności i kolaborację; pokazuje jak problem jest
rozwiązywany.
Wyniki i
konsekwencje
Opis stanu lub konfiguracji systemu po zastosowaniu wzorca,
zawierający konsekwencje jego stosowania oraz problemy jakie
mogą powstać w nowym kontekście, jak również wyniki, koszty i
zyski.
Wzorce oprogramowania
•
•
•
•
Wzorce oprogramowania są zwykle klasyfikowane w kategoriach wzajemnie się
uzupełniających wzorców analizy (analysis patterns), projektowych (design
patterns), architektury (architekture patterns) oraz wzorców aplikacji (application
framework).
Wzorce analizy odnoszą się do reprezentowania, na poziomie opracowania modelu
problemu, istniejącej wiedzy dziedzinowej związanej zwykle z problemem
biznesowym, dla którego rozwiązania budowany jest system.
Wzorce projektowe oparte są na koncepcji wielokrotnego wykorzystania
gotowych, udokumentowanych rozwiązań często powtarzających się
problemów projektowych głównie w kontekście podejścia obiektowego i
związanych z tworzeniem obiektów, strukturalnymi zależnościami między nimi
oraz zachowaniem.
Wzorzec architektury aplikacji jest opisem ogólnej struktury systemu lub
podsystemu, który jest właściwy dla problemów w danej dziedzinie zastosowań i
wyjaśnia intencje projektowe dotyczące organizacji systemu. Podejście
zorientowane na strukturę aplikacji oparte jest na tzw. wzorcu aplikacji definiującym
prawie gotową konstrukcję systemu (podsystemu), w pewnej konkretnej dziedzinie
zastosowań. Może to być generyczny szablon aplikacji, który jest następnie
uzupełniany o detale charakterystyczne dla konkretnego zastosowania.
Wzorce analizy
• Wzorce analizy opisują modele dziedziny
zastosowań, procesów biznesowych, które
wielokrotnie powtarzają się jako wynik fazy
analizy w procesie wytwarzania wielu systemów.
Zawierają one pojęciową strukturę modelu
biznesowego, zwykle niezwiązaną z konkretną
dziedziną. Przykładowe rodzaje wzorców analizy
związane są z modelowaniem struktur
organizacyjnych, planowania, działania
księgowości, prowadzenia obserwacji i
pomiarów.
Przykład wzorca analizy
Nazwa
Rezerwacja - użycie
Problem
W wielu systemach występuje problem rezerwacji i użycia jednostek na
przykład: pokoi w hotelu, książek w bibliotece, kursów na uczelni, samochodów
w wypożyczalni lub miejsc w teatrze, samolocie itp. Klient żąda rezerwacji
jednostki określonego typu, aby ją potem użyć w określonym przedziale czasu.
Następnie jednostka jest zwracana i może być ponownie użyta. Liczba
jednostek jest ograniczona i grupowana w kategorie.
Ograniczenia
Model analizy musi reprezentować wymagania i nie może zawierać szczegółów
implementacyjnych. Powinien opisywać większość sytuacji związanych z
rezerwacją i użyciem jednostki.
Rozwiązanie
Rozwiązanie oparte jest na realizacji następujących przypadków użycia:
Rezerwacja, Odwołanie rezerwacji, Użycie zarezerwowanej jednostki, Zwrot
jednostki. Model klas przedstawiony na diagramie odpowiada realizacji
wymienionych przypadków użycia. Rozróżniono typ jednostki od konkretnej
jednostki przydzielanej w momencie jej użycia. Powiązanie między rezerwacją a
użyciem wskazuje, że dane o użyciu odnoszą się do wcześniejszych rezerwacji.
Przykład wzorca analizy - cd
Nazwa
Rezerwacja - użycie
Wyniki i
konsekwencje
Wzorzec może być zastosowany do modelowania aplikacji rezerwacji i
wypożyczeń książek, wideo, łódek, pokojów, nabywania biletów itp. Ta
wariantowość wskazuje, że wzorzec ujmuje podstawowe aspekty problemu.
Jest ogólny, prosty i zrozumiały. Jednakże nie pokrywa wszystkich informacji
dla poszczególnych przypadków wystąpień tego ogólnego wzorca, np. przy
opóźnieniu zwracania książek często wysyła się upomnienie i/lub nalicza się
karę, rezerwacja miejsca na przedstawienie lub w samolocie nie wymaga
podawania przedziału dat. Pominięte są opisy sytuacji, gdy nie ma
dostępnych jednostek na dany okres, sposoby preferencji klientów, aspekty
płatności itp.
class System
Rezerw acj a
-
data_rezerwacj i :
data_cza_od:
data_czas_do:
stan:
+
+
+
+
+
twórz() : voi d
rezerwuj () : voi d
użyj () : voi d
anul uj () : voi d
obl i cz_koszt() : voi d
Klient
1
TypJednostki
rezerwacj a
-
adres:
nazwi sko:
tel efon:
+
+
dodaj () : voi d
zmi eń() : voi d
*
*
-
l i czba:
typ:
poj emność :
+
+
+
sprawdz_dostępność () : voi d
rezerwuj () : voi d
przydzi el _j ednostkę() : voi d
1
użyci e
1
0..*
Jednostka
0..*
Użycie
-
numer_umowy:
data_czas_od:
data_czas_do:
data_czas_zwrotu: i nt
typ_pł atności : i nt
stan:
+
+
+
+
twórz() : voi d
zwróć () : voi d
zmi eń() : voi d
obl i cz_koszt() : voi d
Diagram klas wzorca Rezerwacji-Użycia
1..*
-
i d:
stan:
mi ej sce:
+
+
użyci e() : voi d
zwrot() : voi d
Wzorce projektowe
•
•
Problemy projektowe najczęściej związane są z wymaganiami niefunkcjonalnymi
budowanego systemu, takimi jak wiarygodność, pielęgnowalność, efektywność.
Zwykle definiowane cele projektowanego systemu odnoszą się do wybranych
aspektów jakościowych produktu/projektu oraz możliwości nadążania za zmianami i
rozszerzalności systemu. Projektant musi więc ustalić jakie parametry jakościowe
są krytyczne dla projektu, a następnie wybrać rozwiązanie projektowe, które
pomagają w zapewnieniu pożądanych cech. Pod uwagę należy wziąć między
innymi takie czynniki jak: stopień wzajemnej zależności komponentów,
wydajność, zdolność do ponownego wykorzystania, elastyczność,
pielęgnowalność. Wymienione parametry pozostają często w sprzeczności;
przykładowo elastyczność często jest w konflikcie z wydajnością, czy ze
zrozumiałością.
Popularność wzorców projektowych jest oparta na nadziei ponownego
wykorzystania rozwiązań specyficznych wspomnianych problemów
projektowych dla różnych dziedzin aplikacyjnych. Rozwiązania są przedstawiane
w postaci modelu klas i obiektów, związków, odpowiedzialności i współpracy.
Mogą one być dalej przystosowane i zaimplementowane tak, aby rozwiązywały
problemy w ich szczególnych kontekstach.
Przykład wzorca projektowego
Nazwa
MVC (Model, View, Controller) – Model, Widok, Sterownik
Problem
Jest wiele typów klientów z różnymi wymaganiami dotyczącymi widoku danych
aplikacji. Klienci muszą mieć możliwość modyfikacji danych. Modyfikacje typu
klienta oraz sposoby dostępu nie powinny wpływać na pozostałe komponenty.
Należy umożliwić rozdzielenie interfejsu użytkownika, przetwarzania danych
oraz prezentacji wyników.
Kontekst
Sytuacja występuje często w projektowaniu środowisk prezentacji danych oraz
systemów rozproszonych.
Ograniczenia Zmiany interfejsu użytkownika powinny być możliwe w czasie działania systemu,
potrzebny jest mechanizm propagacji zmian pomiędzy interfejsem użytkownika a
modelem, wymagane jest istnienie wielu różnych widoków modelu.
Rozwiązanie
Wzorzec MVC dzieli aplikacje na trzy obszary: modelu, widoku, i sterownika
(rys). Model hermetyzuje istotne dane i funkcjonalność aplikacji. Model jest
niezależny od specyficznej dla użytkownika prezentacji lub zachowań na
wejściu. Widok może otrzymywać dane z modelu i decydować jak wyświetlać
informacje użytkownikowi. Każdy widok jest związany ze swoim sterownikiem.
Użytkownik ma interakcje z systemem tylko poprzez sterownik, który otrzymuje
zdarzenia odpowiadające działaniom użytkownika. Zdarzenia są przekształcane
na żądanie usług modelu lub widoku. Rozdzielenie modelu od widoku i
sterownika pozwala na jednoczesne istnienie wielu widoków tego samego
modelu. Jeśli użytkownik zmienia model poprzez sterownik związany z jednym z
widoków, wszystkie widoki zależne od zmienianych danych powinny
odzwierciedlać tę zmianę. Dlatego model powiadamia o zmianie wszystkie
widoki, ilekroć jego dane zostaną zmienione. Widoki na podstawie nowych
Przykład wzorca projektowego - cd
Nazwa
MVC (Model, View, Controller) – Model, Widok, Sterownik
Wyniki i
konsekwencje
Zwiększona pielęgnowalność i rozszerzalność systemu, możliwość uzyskania
wielu widoków tego samego modelu. Zastosowanie nie tylko w interfejsie
graficznym, ale także jako trójwarstwowa architektura aplikacji internetowych.
Obserwatorzy są nieświadomi istnienia innych użytkowników, częsta zmiana
modelu może powodować kosztowne uaktualnienia zainteresowanych tą
zmianą.
Wzorce projektowe
• Stosowanie wzorców projektowych
stwarza warunki, że otrzymana
implementacja jest przejrzysta, wynikowy
projekt staje się bardziej elastyczny i
przygotowany do potencjalnych zmian, co
z kolei powoduje, że rozbudowa systemu
jest łatwiejsza.
composite structure System
Jednostka::Model
zapytanie
responsibilities
hermetyzuje stan aplikacji
odpowiada na zapytania
powiadamia widoki o zmianie stanu
ujawnia funkcjonalność aplikacji
zmiana stanu
powiadomienie o zmianie stanu
Jednostka::Sterow nik
Jednostka::Widok
responsibilities
żąda aktualizacji od modelu
przedstawia model
umożliwia kontrolerowi wybór widoku
wysyła informacje do kontrolera
wybór widoku
akcje użytkownika
responsibilities
definiuje zachowanie aplikacji
odwzorowuje akcje użytkownika w uaktualnienia modelu
wybiera widok dla odpowiedzi
Wzorzec projektowy Model, Widok, Sterownik
Wzorce architektoniczne
•
•
Architektura oprogramowania systemu określa organizację systemu, jego
elementy składowe i ich interfejsy oraz metody składania elementów w
większe podsystemy. Architektura wymagana jest przy budowie złożonych
systemów określając reguły postępowania przy projektowaniu i realizacji.
Związana jest nie tylko z funkcjonalnością systemu, ale i z właściwościami
takimi jak: efektywność, odporność, możliwość ponownego użycia,
ograniczenia ekonomiczne i technologiczne oraz z estetyką. Jednym z
najczęściej stosowanych wzorców architektonicznych jest model warstwowy
(rys). Warstwy tworzą hierarchię – dana warstwa jest budowana na
usługach warstwy leżącej bezpośrednio pod nią. Architektura warstwowa
ułatwia elastyczność, modyfikowalność systemu oraz przenoszalność na
inne platformy.
W systemach automatyki sterowania i monitorowania procesami stosowany
jest wzorzec architektury typu nadrzędny – podrzędny. System nadrzędny
wydaje polecenie sterujące do podrzędnych jednostek przetwarzania
(sterowników), które z kolei bezpośrednio sterują i monitorują wybrane
procesy przemysłowe. System nadzoruje stan kontrolowanych procesów
poprzez kierowanie zapytań do poszczególnych sterowników. Same
sterowniki nie inicjują komunikacji.
Model warstwowej architektury oprogramowania
użytkownik
Warstwa styku z użytkownikiem
Warianty danego systemu aplikacyjnego
Odrębne systemy aplikacyjne
Komponenty dla inżynierów aplikacji
Warstwa logiki aplikacji
Warstwa logiki środowiska
Warstwa przechowywania danych
Generyczne komponenty interfejsu
użytkownika, interfejsy do baz danych,
usługi systemu operacyjnego,
komponenty pośredników itp.
System operacyjny, baza danych,
biblioteka klas
Wzorce aplikacji
•
•
•
•
Wzorzec aplikacji jest częściowo ukończoną aplikacją z wyróżnionymi elementami,
które dopasowane do specyficznych wymagań konkretnego systemu prowadzą do
otrzymania w pełni funkcjonalnej aplikacji. Wzorzec dostarcza zbioru podstawowych,
wspólnych usług z których może korzystać każda aplikacja z danej dziedziny. Tworzy
zbiór pojęć za pomocą których może być wyrażony model rodziny aplikacji, głównie
poprzez definicję architektury oprogramowania na bazie której każda aplikacja może
być łatwo konstruowana. Dodatkowo oferują one zbiór abstrakcji pozwalających na
dobrze umiejscowione modyfikacje komponentów lub zastosowanie komponentów z
półki. Na rys przedstawiono kontekst sterowania wzorców aplikacji w konstrukcji
systemów.
Wzorce aplikacji mogą być organizowane wokół konkretnej dziedziny lub stanowi
bardziej ogólną infrastrukturę umożliwiającą działanie aplikacji w podobny sposób lub
na wspólnej platformie.
Stosowanie wzorców aplikacji niesie ze sobą problemy związane z ich
opracowaniem, używaniem i pielęgnacją. Problemy opracowania wzorca aplikacji są
związane z zakresem dziedziny uwzględnionym we wzorcu, z dokumentacją wzorca,
wstępną inwestycją w opracowanie modelu wzorca, metodami jego opracowania,
testowania i udostępniania. Istotna jest odpowiedniość wzorca aplikacji do potrzeb
danej klasy systemów uwzględniając także cechy architektury, wydajności,
przenośności.
class System
Udziałow iec
określ a
Misj a
*
Dziedzina
punkt wi dzeni a
speł ni a
nal eży
*
*
Środow isko
Aplikacj a
wpł ywa
i mpl ementuj e
odzwi erci edl a
Wzorzec aplikacj i
Architektura
zawi era
dokumentuj e
Opis architektury
System w zorców
proj ektow ych
Mikroarchitektury
Kontekst wzorca aplikacji i architektury
Interfej sy
Download