Projektowanie obiektowe: Zasady i skad sie biora wzorce projektowe.

Transkrypt

Projektowanie obiektowe: Zasady i skad sie biora wzorce projektowe.
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Wykład 5
Projektowanie obiektowe: Zasady i
skad
˛ sie˛ biora˛ wzorce projektowe.
Inżynieria oprogramowania
MIS-1-502-s MIO-1-505-s MIS-1-505-n
Listopad 2014
Wprowadzenie
GRASP
Stosowanie zasad
Kazimierz Michalik
Akademia Górniczo-Hutnicza im. S. Staszica w Krakowie
5.1
Agenda
1
Wprowadzenie
2
GRASP
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Wprowadzenie
GRASP
Stosowanie zasad
3
Stosowanie zasad
5.2
Co to jest G.R.A.S.P.?
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
C. Larman: „Applying UML and Patterns”
„A Methodical Approach to Basic OO Design”.
„The GRASP principles or patterns are a learning aid to
help you understand essential object design and apply
design reasoning in a methodical, rational, explainable
way”.
Wprowadzenie
C. Larman: „Applying UML and Patterns”
GRASP
Stosowanie zasad
„Metodyczne podejście do podstaw projektowania
obiektowego.”.
„Zasady/wzorce GRASP sa˛ pomoca˛ w zrozumieniu istoty
projektowania obiektowego i stosowania go w metodyczny,
racjonalny i zrozumiały sposób".
5.3
Co to sa˛ wzorce projektowe?
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Wzorzec projektowy
uniwersalne, sprawdzone w praktyce rozwiazanie
˛
cz˛esto
pojawiajacych
˛
sie,
˛ powtarzalnych problemów projektowych.
Pokazuje powiazania
˛
i zależności pomiedzy
˛
klasami oraz
obiektami i ułatwia tworzenie, modyfikacje˛ oraz pielegnacj
˛
e˛
kodu źródłowego. Jest opisem rozwiazania,
˛
a nie jego
implementacja.
˛ Wzorce projektowe stosowane sa˛ w projektach
wykorzystujacych
˛
programowanie obiektowe.
Wprowadzenie
GRASP
Stosowanie zasad
5.4
G.R.A.S.P.
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
GRASP
General Responsibility Assignment Software Patterns (or
Principles)
1
2
Controller
Creator
3
High Cohesion
4
Indirection
5
Information Expert
6
Low Coupling
7
Polymorphism
8
Protected Variations
9
Pure Fabrication
Wprowadzenie
GRASP
Stosowanie zasad
5.5
G.R.A.S.P.
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
GRASP
Ogólne zasady przydzielania odpowiedzialności w
oprogramowaniu.
1
Kontroler
2
Twórca
3
Wysoka spójność
4
Pośrednictwo
5
Expert
6
Mało powiaza
˛ ń
7
Polimorfizm
8
Chroniona zmienność
9
Czyste wytwarzanie
Wprowadzenie
GRASP
Stosowanie zasad
Nazwy nie sa˛ najważniejsze: najważniejszy jest sens tych
zasad.
5.6
1. Controller
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Kontroler
Problem który obiekt (za interfejsem użytkownika)
powinien obsłużyć (przejać)
˛ operacje˛ (np.:
zewnetrzn
˛
a)
˛ systemu?
Rozwiazanie
˛
Powinna to być klasa, która:
opisuje system jako całość reprezentuje
główny obiekt lub urzadzenie
˛
na którym
system działa albo
reprezentuje przypadek użycia, w którym
wystepuje
˛
dana operacja
Wprowadzenie
GRASP
Stosowanie zasad
Opis podstawowa zasada dotyczaca
˛ oddzielenia
interfejsu od logiki aplikacji. Jest realizowana w
wielu wzorcach min.: Model-Widok-Kontroler
5.7
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
2. Creator
Twórca
Problem która klasa ma być odpowiedzialna za tworzenie
obiektów klasy A?
Rozwiazanie
˛
Klasa B jest odpowiedzialna za tworzenie A, gdy:
klasa B komponuje lub agreguje (”ma”)
obiekty klasy A
B zapisuje/rejestruje/nadzoruje instancje
klasy A
B współpracuje (blisko!) z A
B ma dane potrzebne do inicjalizacji A
(patrz: Ekspert)
Wprowadzenie
GRASP
Stosowanie zasad
Opis praktycznie każdy program obiektowy musi
tworzyć obiekty; właściwe zorganizowanie i
przypisanie które obiekty tworza˛ jakie inne
obiekty pozwala znaczaco
˛ zredukować ilość
powiaza
˛ ń miedzy
˛
klasami.
5.8
3. High Cohesion
Wysoka spójność
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Problem jak w praktyce zachować klase˛ skupiona˛ na
jednej odpowiedzialności, z przejrzysta˛
implementacja,
˛ zwiekszyć
˛
szanse ponownego
użycia?
Rozwiazanie
˛
gdy masz wybór, przypisuj odpowiedzialność tak,
by klasa była skupiona na jednym zadaniu
Opis Złamanie tej zasady to anty-wzorzec projektowy
"Blob": ma miejsce wtedy, gdy w programie
istnieje wiele klas, ale bardzo niewiele z nich (lub
jedna) ma dominujace
˛ znaczenie i zawiera sie˛ w
niej prawie cała istotna funkcjonalność. Takie
klasy nazywamy cz˛esto (negatywnie)
super-klasa, klasa-bóstwo, boss-klasa etc. W
szczególności NIGDY nie należy mieszać w
jednej klasie logiki aplikacji (co aplikacja
naprawde˛ robi) z dostepem
˛
do danych (skad
˛
bierze dane) – podobno za to idzie sie˛ do
programistycznego piekła ;)
Wprowadzenie
GRASP
Stosowanie zasad
5.9
4. Indirection
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Pośrednictwo
Problem jak unikać zależności od klas dostarczajacych
˛
funkcjonalność w specyficzny sposób? jak
przerywać zbyt mocne zależności miedzy
˛
klasami? jak korzystać z innych
klas/pakietów/usług bez dostosowywania sie˛ do
nich?
Rozwiazanie
˛
należy stworzyć nowy pośredni obiekt, służacy
˛
jako kanał komunikacji, tak by obiekty nie
kontaktowały sie˛ bezpośrednio
Opis aby obniżyć ilość zależności miedzy
˛
klasami
można umieścić miedzy
˛
nimi klase,
˛ przez która˛
bed
˛ a˛ sie˛ komunikować. Zmniejsza sie˛ też ogólna
ilość powiaza
˛ ń (zachowanie Low Coupling), bo
jedna klasa warstwy pośredniej może
odpowiadać paru klasom warstwy pierwotnej.
Przykładem sa˛ wzorce projektowe typu: Most,
Fasada, Adapter.
Wprowadzenie
GRASP
Stosowanie zasad
5.10
5. Information Expert
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Expert
Problem której klasie przypisać dana˛ odpowiedzialność
(zadanie)?
Rozwiazanie
˛
tej, która posiada najwiecej
˛
informacji
niezbednych
˛
do tego, by to zadanie wykonać
Opis Pochopne podejmowanie decyzji może
spowodować, że klasa aby wykonać zadanie
bedzie
˛
musiała przedostać sie˛ przez spory graf
obiektów, aby uzyskać odpowiednie informacje.
Stosowanie zasady Expert pozwala
oddelegować odpowiedzialność do podmiotu,
który na wstepie
˛
jest najlepiej przygotowany do
jej podjecie
˛
(stad:
˛ Ekspert - w sensie ”najlepszy
spośród wszystkich kandydatów”).
Wprowadzenie
GRASP
Stosowanie zasad
5.11
6. Low Coupling
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Mało powiaza
˛ ń
Problem jak utrzymać obiekty w niezależności od siebie?
Rozwiazanie
˛
tak przypisuj odpowiedzialności do obiektów, by
liczba powiaza
˛ ń była jak najmniejsza
Opis Klasa, która ma dużo powiaza
˛ ń, jest zależna od
wielu innych klas, co powoduje:
1
wiele lokalnych zmian spowodowanych
zmianami w klasach powiazanych;
˛
2
klasy trudniejsze do zrozumienia w izolacji;
3
zmniejszony „reuse” (możliwość ponownego
wykorzystania), ponieważ najcz˛eściej trzeba
jednocześnie wykorzystać cz˛eść klas
powiazanych;
˛
Klasa która ma za dużo powiaza
˛ ń
prawdopodobnie jest ”przeciażona”
˛
obowiazkami,
˛
co implikuje złamanie zasady High
Cohesion.
Wprowadzenie
GRASP
Stosowanie zasad
5.12
7. Polymorphism
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Polimorfizm
Problem jak przypisać odpowiedzialność, która może być
realizowana na kilka sposobów?
Rozwiazanie
˛
przypisz odpowiedzialność do hierarchii
obiektów wykorzystujac
˛ polimorfizm wbudowany
w jezyki
˛
obiektowe
Wprowadzenie
GRASP
Opis mechanizm polimorfizmu, pozwala
automatycznie decydować o tym ”co sie˛ stanie w
czasie działania programu” na podstawie
informacji ”jaki rodzaj obiektu został przekazany”
Stosowanie zasad
5.13
8. Protected Variations
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Chroniona zmienność
Problem jak projektować system, by umożliwić
wprowadzanie zmiany, tak by nie wymuszała ona
zmian na innych obiektach?
Rozwiazanie
˛
zidentyfikuj punkty przewidywanego
zróżnicowania/niestabilności i przypisz
odpowiedzialność do stabilnego interfejsu, a nie
konkretnych klas.
Opis chodzi o to, by wymiana klasy A na klase˛ B
oferujac
˛ a˛ podobna˛ funkcjonalność była jak
najprostsza. Ta fundamentalna zasada implikuje
enkapsulacje,
˛ polimorfizm, data-driven desig, a
nawet pliki konfiguracyjne!
Wprowadzenie
GRASP
Stosowanie zasad
5.14
9. Pure Fabrication
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Czyste wytwarzanie
Problem jaki obiekt powinien otrzymać odpowiedzialność,
gdy nie chcemy złamać High Cohesion i Low
Coupling, a proponowany Ekspert jest (z innych
przyczyn) nie do przyjecia?
˛
Rozwiazanie
˛
należy sztucznie ”wytworzyć” nowa˛ ”czysta”
˛
klase˛ (niezwiazan
˛
a˛ z problemem) i jej przypisać
te˛ odpowiedzialność
Opis Ta zasada cz˛esto jest używana jako ”złoty
środek” pozwalajacy
˛ utrzymać inne zasady, gdy
te stoja˛ w sprzeczności. Ponadto pomaga ona
uwolnić sie˛ od dziedziny problemu i rozwiazać
˛
go
”czysto informatycznie”. Przykłady: wzorce
Singleton, Factory.
Wprowadzenie
GRASP
Stosowanie zasad
5.15
Jak ważne sa˛ zasady?
Projektowanie
obiektowe: Zasady i
skad
˛ sie˛ biora˛
wzorce projektowe.
Pick your battles!
zasady nie sa˛ bezwzgledne
˛
trzeba dażyć
˛
do najszerszego ich spełniania
cz˛esto trzeba wybrać jedna˛ ponad druga˛
trzeba rozumieć kontekst w jakim sie˛ je stosuje
Wprowadzenie
GRASP
Jeżeli sie˛ pomyliłeś -> refaktoruj!
Stosowanie zasad
projektowanie to proces iteracyjny
różne diagramy pozwalaja˛ zobaczyć różne aspekty
systemu
5.16

Podobne dokumenty