Mesto design pattern-a pri ...
projektovanju više puta upotrebljivog objektno orijentisanog softvera
Iskusni softverski projektanti znaju da nije uvek neophodno svaki problem rešavati od početka.
Zbog toga se u mnogim objektno orijentisanim sistemima često
naliazi na iste uzorke klasa i objekata koji komuniciraju.
Ovi uzorci opisuju rešenja
specifičnih problema projektovanja i omogućuju ponovnu
upotrebljivost za potrebe (objektno orijentisanog) dizajna.
Projektant koji poznaje design pattern-e može ih iskoristiti pri
rešavanju problema, bez potrebe da ih
ponovo otkriva, jer
primenjuje rešenja, koja su već ranije
bila uspešno korišćena.
Dakle, design pattern-i su pogodni za više puta upotrebljivi objektno
orijentisani projekat, jer imenuju, apstrahuju i identifikuju ključne
aspekte široke klase problema
koji imaju slični pojavni oblik.
Dalje, design pattern-i identifikuju klase i primerke, te njihove uloge,
interakcije, ali i distribuciju njihovih odgovornosti, te
mogu da unaprede i dokumentaciju i održavanje
postojećih sistema.
Naravno, pre primene design pattern-a na
konačno rešenje valja
proceniti
prednosti i mane te primene. Na polju obezbeđivanja fleksibilnosti,
design pattern-i su od značaja, ali
oni svoju mogućnost modifikacije često postižu uvođenjem dodatnih slojeva
posrednosti, što, na žalost, može da komplikuje dizajn i da se
odrazi na cenu u perfomansama.
... projektovanju koje uzima u obzir promene
Projektovanje koji ne uzima u obzir promene rizikuje da se u budućnosti
redizajnira. Same promene mogu da se odnose na novo definisanje ili izmenu
implementacije klasa, promenu klijenata i ponovno testiranje. Tome valja dodati da
redizajniranje utiče na mnoge delove softverskog projekta, a nepredviđene
promene su, uglavnom, skupe.
Design pattern-i su od velike pomoći i kod ovog aspekta projektovanja,
jer obezbeđuju da
sistem može da se na određeni način menja.
Upravo ključ za što veću
mogućnost ponovnog korišćenja i jeste predviđanje novih zahteva
i promene postojećih zahteva.
Svaki design pattern dozvoljava variranje nekog aspekta strukture
sistema nezavisno od drugih aspekata.
Sledi lista nekih od konkretnih i relativno
čestih razloga za redizajniranje (praćen design pattern-om adekvatnim
u opisanoj situaciji):
- zavisnost od algoritma
Ako objekti zavise od nekog algoritma, onda pri promeni algoritma, moraju se
menjati i objekti koji zavise od algoritma.
Inače, tokom razvoja i kod ponovnog korišćenja, algoritmi se
često proširuju, optimizuju i zamenjuju.
Dakle, valja izolovati algoritme koji bi mogli da se menjaju.
Design pattern-i od koristi: Iterator, Template Method, Visitor
- pogodna promena klasa
Nekada je nužno zameniti klasu koja se relativno teško menja.
Na primer, potreban Vam je izvorni kod, a nemate ga na raspolaganju.
Ili promena te klase zahteva da se izmeni čitav niz postojećih klasa.
Otuda je korisno
upotrebiti one design pattern-e koji nude rešenja za takve situacije.
Design pattern-i od koristi: Adapter, Decorater, Visitor
- posredno pravljenje objekata
Ponekad pravljenje objekata eksplicitnim navođenjem imena klase, zapravo,
je vezivanje za određenu implementaciju, umesto za određeni interfejs, što
može da iskomplikuje buduće izmene.
U toj situaciju nudi se pravljenje objekata posredno.
Design pattern-i od koristi: Factory Method, Abstract Factory, Prototype
- delegiranje
Pod delegiranjem se podrazumeva mehanizam implementacije u kom jedan
objekat prosleđuje/delegira zahtev drugom objektu.
Sam delegat će izvršiti zahtev
za potrebe originalnog objekta.
Delegiranje je sredstvo da sastavljanje objekata postane podjednako kvalitetno
za višestruko korišćenje kao i nasleđivanje.
Mnogi DP-i proizvode dizajn u
kome se proširivanje funkcionalnosti vrši pomoću potklasa.
Inače,
često postoje teškoće u prilagođavanju objekata pomoću
potklase.
Svaka nova klasa ima dodatne poslove implementiranja (inicijalizacija,
finalizacija,...).
Potom definisanje potklase zahteva i razumevanje roditeljske klase, a
kreiranje potklasa može da dovede do ekspanzije klasa (npr. čak i za malo
proširenje možda će se morati uvesti mnogo novih potklasa).
Otuda
su od značaja design pattern-i kod kojih se proširivanje funkcionalnosti vrši
jednostavnim definisanjem jedne potklase i satavljanjem njenih primeraka sa postojećim.
Design pattern-i od koristi: Bridge, Composite, Observer
Klasifikacija design pattern-a
Design pattern-i mogu da se klasifikuju prema sledeća dva kriterijuma:
namena design pattern-a
- gradivni (creational )
- strukturni (structural)
- DP-i ponašanja (behavioral ) )
domen primene design pattern-a
Kasifikacija design pattern-a iz ovog rada
|
Namena |
Domen |
Factory method |
Creational |
Klasa |
Singleton |
Creational |
Objekat |
Iterator |
Behavioral |
Objekat |
Observer |
Behavioral |
Objekat |
Visitor |
Behavioral |
Objekat |
Kriterijum namena zasniva se na delatnosti design pattern-a.
- Creational DP-i se bave postupkom kreiranja objekata.
- Structural DP-i se bave sastavljanjem klasa i objekata
(najčešće radi složenijeg ponašanja).
- Behavioral DP-i opisuju načine na koje klase i objekti
međusobno utiču jedni na druge i kako dele odgovornosti.
Kriterijum domen označava da li se DP usredsređuje pre svega na klase, ili na objekte.
- Design pattern-i klasa
Usredsređuju se
na odnose klasa između klasa i njihovih potklasa. Kako se takvi odnosi uspostavljaju nasleđivanjem,
dobijaju atribut statičnih odnosa (fiksirani su tokom prevođenja).
- Design pattern-i objekata
Usredsređuju se
na odnose između objekata koji imaju mogućnost modifikacije. Otuda su ti
odnosi dinamičniji.
Creational design pattern-i klasa prepuštaju potklasama neke segmente kreiranja objekata.
Creational design pattern-i objekata prepuštaju drugim objektima neke segmente kreiranja objekata.
Structural design pattern-i klasa koriste nasleđivanje radi sastavljanja klasa.
Structural design pattern-i objekata opisuju načine grupisanja objekata.
Behavioral design pattern-i klasa koriste nasleđivanje radi opisivanja algoritama i toka kontrole.
Behavioral design pattern-i objekata opisuju načine na koji se odvija saradnja grupe
objekata ne bi li se izvršile operacije koje objekti ne mogu izvršiti
samostalno.
... JAVA AWT/SWING
Observer DP, Composite DP, Memento DP, Strategy DP, Decorater DP
su se pokazali kao vrlo korisni mehanizmi za upotrebu pri izgradnji user interface-a
(radi obezbedjenja undo-redo mehanizma, ugnježdenih kontejnera,
uskladjivanja funkcionalnosti medjusobno zavisnih delova, ...)
o čemu već sada postoje izvesne dokumentacije i saopštenja
sa workshop-ova sa ciljem da se odmakne i dalje od ideja i skica rešenja.