Ce sunt sabloanele software (design patterns)?

Download Report

Transcript Ce sunt sabloanele software (design patterns)?

CE SUNT TIPARELE (SABLOANELE)
SOFTWARE
(DESIGN PATTERNS)?
Design patterns – modele, sabloane, tipare de proiectare –
sunt solutii reutilizabile la problemele de programare soft
cu care ne confruntam mereu.
Un sablon ( design pattern ) NU reprezinta o clasa sau o
librarie pe care o putem integra in sistemul software: este
cu mult mai multe decat atat!
Este un model care trebuie implementat in situatia corecta.
De asemenea, sablonul nu este specific unui anumit limbaj.
Este o experienta intelectuala, o metoda de rezolvare a unei
anumite probleme cu care ne-am mai confruntat, iar aceasta
trebuie implementata In functie de situatia prezenta.
CE SUNT TIPARELE SOFTWARE
(DESIGN PATTERNS)? – CONTINUARE


Un sablon, tipar(design pattern) bun ar trebui sa poata fi
implementat in toate sau daca nu este posibil, in
majoritatea limbajelor.
Este important sa se cunoasca faptul ca, orice model de
proiectare (design pattern) poate deveni o sabie cu 2
taisuri: daca este implementat in locul nepotrivit, poate
deveni un dezastru si poate crea multe probleme.
CATEGORII DE TIPARE

Exista 3 categorii de baza de design patterns:

Structurale

Creationale

Comportamentale



Tiparele structurale se ocupa de obicei cu relatiile dintre
entitati, facand posibil lucrul impreuna a acestor entitati mai
usor.
Tiparele creationale ofera mecanisme de instantiere, devenind
astfel mai usoara crearea obiectelor intr-o maniera profitabila
pentru situatia curenta.
Tiparele comportamentale sunt folosite in comunicarea dintre
entitati si face ca aceasta comunicare sa fie mai usoara si mai
flexibila.
DE CE AM UTILIZA TIPARELE DE PROIECTARE
SOFTWARE



Tiparele software sunt, in principiu, solutii bine gandite la
problemele de programare software.
Multi programatori au intalnit aceste probleme inainte si
au folosit aceste “solutii” pentru a le rezolva.
Deci, daca se intalnesc aceste probleme, de ce am reinventa
roata regandind o solutie la ele, cand am putea folosi deja o
rezolvare demonstrata in timp, putand ocupandu-ne de
problemele care inca nu sunt rezolvate?
MODELELE STRUCTURALE





1.Adapter (Wrapper)
Aplicabilitate
- folosim modelul Adapter atunci cand:
Vrem sa folosim o clasa existenta si interfata pe care o folosim nu se potriveste cu cea de
care avem nevoie.
Vrem sa cream o clasa reutilizabila ce va coopera cu alte clase neprevazute
Vrem sa folosim mai multe sub-clase existente dar este imposibil de adaptat interfata lor.
(doar in cazul obiectului adaptor)

2.Bridge (Handle/Body)

Aplicabilitate – folosim modelul Bridge atunci cand:

Cand vrem sa evitam o legatura permanent intre abstractie si implementare.
Atat abstractiile cat si implementarile lor trebuie sa poata fi extinse prin sub-clase.

3.Composite

Aplicabilitate – folosim modelul Composite atunci cand:



Vrem sa reprezentam parti intregi din ierarhia unui obiect
Vrem clientii sa poata ignora diferentele dintre compozitii de obiecte si obiecte individuale.

4.Decorator (Wrapper)

Aplicabilitate – folosim Decorator atunci cand:

Adaugam responsabilitati obiectelor individuale in mod dinamic si transparent

Pentru responsabilitati ce pot fi retrase

Cand extensii cu ajutorul sub-claselor sunt impracticabile.

5.Facade
Aplicabilitate - folosim modelul Facade atunci cand:

Vrem sa oferim o interfata simpla unui subsistem complex

Exista multe dependente intre clienti si implementarea claselor unei abstractii

Vrem un subsistem etajat.

6.Flyweight
Aplicabilitate – modelul Flyweight se foloseste atunci cand urmatoarele afirmatii sunt corecte:

O aplicatie foloseste un numar mare de obiecte

Costul stocarii este mai mare din cauza cantitatii mari de obiecte

Majoritatea starilor obiectelor pot fi preparate


Multe grupuri de obiecte pot fi inlocuite de cateva obiecte impartite odata ce starea preparata este
eliminata
Aplicatia nu depinde de identitatea obiectului.

Proxy (Surrogate)
Aplicabilitate – proxy este folosit atunci cand este nevoie de o referinta mai diversificata sau
sofisticata a unui obiect:

Un proxy la distanta ofera o reprezentare locala a unui obiect aflat in alt spatiu de adresa.

Un proxy virtual creaza obiecte scumpe la comanda.

Un proxy pentru protectie controleaza accesul la obiectul original.
COMPARATII
INTRE MODELELE
STRUCTURALE

Adapter vs Bridge
promoveaza felxibilitatea oferind un nivel indirect unui alt obiect
trimit mai departe cererile catre acest obiect dintr-o interfata alta decat cea proprie
Diferente:
Adapter se ocupa de rezolvarea incompatibilitatii intre doua interfate existente
Bridge ofera o interfata stabila clientilor si chiar te lass a variezi clasele care au implementat-o

Composite vs. Decorator vs Proxy

Composite si Decorator :

ambele se bazeaza pe compozitii recursive pentru a organiza un numar nedefinit de obiecte

Decorator si Proxy

ambele modele descriu cum sa oferi un nivel indirect unui obiect

implementarea ambelor modele pastreaza o referinta unui alt obiect unde trimit cererile
MODELELE CREATIONALE



Abstract Factory
Ofera o interfata pentru a crea familii de obiecte inrudite sau dependente fara a fi nevoiti
sa specificam clasa concreta
Ofera o ierarhie care incapsuleaza mai multe platforme posibile si posibilitatea de a
construi o suita de produse

Operatorul new devine daunator in instantiere (nu se mai face direct)

Builder





Separa construirea unui obiect complex de reprezentarea, infatisarea sa astfel incat acelasi
proces de construire poate crea reprezentari, infatisari diferite.
Analiza unei reprezentari complexe, crearea uneia din mai multe obiecte dorite
Problema apare de obicei atunci cand o aplicatie trebuie sa creeze elemente ale unui
ansamblu complex. Specifiicatiile pentru acest ansamblu sunt date intr-un spatiu secundar
dar unul sau mai multe din reprezentari trebuiesc construite in spatiul primar.
Factory Method
Defineste o interfata de creare a unui obiect dar lasa clasele derivate (subclasele) sa decida
cum instantiaza obiectul. Factory Method lasa o clasa sa cedeze modul de instantiere
subclaselor

Se defineste un constructor “virtual”

Operatorul new devine daunator, inutil

Exemplu de necesitate a acestui pattern: un framework trebuie sa standardizeze modelul
arhitectural pentru o varietate mare de aplicatii dar sa permita aplicatiilor individuale sasi defineasca propriile obiecte si sa le implementeze modul de instantiere.






Prototype
Specifica tipurile de obiecte ce se pot crea utilizand o instanta “prototip” si
creaza obiecte noi copiind acest prototip
Se evita subclasele ale unui obiect “creator” in aplicatia client, la fel cum face si
abstract factory
Evita costul crescut al crearii unui obiect nou in modul standard ( utilizand
operatorul new) cand aceasta este foarte costisitoare si scumpa pentru o
aplicatie data.
Pentru a implementa acest pattern, se declara o clasa abstracta de baza care
specifica o metoda virtuala pura clone(). Orice clasa care este derivata din clasa
de baza implementeaza metoda clone().
Clientul, in loc sa scrie cod care invoca operatorul new, apeleaza metoda clone()
a prototipului sau apeleaza o metoda factory cu un parametreu specificand
clasa derivata dorita.







Singleton
Modelul de proiectare singleton este un model creational ce asigura faptul ca avem
o singura instanta a unei clase particulare in timpul rularii programului si ne ofera
un punct global de acces la aceasta singura instanta.
Mecansimul prin care este posibila impunerea unei singure clase este realizat prin
definirea constructorului clasei respective ca privat si furnizarea unei metode (care
se numeste metoda singleton) care este apelata in momentul in care se doreste
instantierea. Aceasta va verifica numarul de instante si va controla procesul de
instantiere.
Patternurile Abstract Factory, Builder si Prototype pot utiliza Singleton in
implementarile lor.
Modelele Singleton sunt de obicei preferate in locul variabilelor globale deoarece:
nu “polueaza” spatiul de nume glonal cu variabile nenecesare.
permit alocarea si initializarea “lenesa” (adica se amana pand cand acestea sunt
intr-adevar necesare) intru-cat in cele mai multe limbaje, variabilele globale vor
consuma intotdeauna multe resurse.
Sabloane comportamentale
1. Iteratorul
 2. Observatorul
 3. Comanda
 4. Lantul Responsabilitatilor
 5. Mediatorul
 6. Memento
 7. Strategia
 8. Metoda Tipar
 9. Starea
 10. Interpretorul
 11. Vizitatorul

Iteratorul

Sablonul Iterator
asigura o cale de
accesare secventiala a
elementelor unui obiect
agregat, fara a expune
reprezentarea lui de
baza.
Observatorul

Sablonul Observator
defineste o dependenta 1
la N intre obiecte, astfel
incat in cazul in care un
obiect isi schimba starea,
vor fi instiintate si
actualizate automat toate
obiectele sale
dependente.
Comanda

Sablonul Comanda
incapsuleaza o cerere ca
obiect, permitand
parametrizarea clientilor
cu diferite cereri,
formarea unei cozi de
cereri sau stocarea
istoricului acestora si
asigurarea suportului
pentru anularea
operatiilor.
Lantul Responsabilitatilor

Sablonul Lantul
Responsabilitatilor evita
cuplarea intre
expeditorul si
destinatarul unei cereri,
acordand mai multor
obiecte o sansa de a
rezolva cererea. Sablonul
inlantuie obiectele
destinatar si trece
cererea de-a lungul
lantului pana cand un
obiect o rezolva.
Mediatorul

Sablonul Mediator
defineste un obiect care
incapsuleaza modul in
care interactioneaza un
set de obiecte. Acest
sablon promoveaza
cuplarea slaba,
interzicand obiectelor sa
faca referinte explicite
unul la celalalt si permite
modificarea
independenta a
interactiunilor.
Memento

Sablonul Memento
captureaza si
exteriorizeaza starea
interna a unui obiect fara
a viola incapsularea, astfel
incat obiectul sa poata fi
readus ulterior la
respectiva stare.
Strategia

Sablonul Strategie
defineste o familie de
algoritmi, incapsuleaza
fiecare algoritm si ii face
interschimbabili. Acest
sablon permite
algoritmului sa varieze
independent de clientii
care il utilizeaza.
Metoda Tipar

Sablonul Metoda Tipar
defineste scheletul unui
algoritm dintr-o
operatie, transferand
unii pasi catre subclase.
Sablonul permite
subclaselor sa
redefineasca anumiti
pasi dintr-un algoritm
fara a schimba
structura acestuia.
Starea

Sablonul Stare permite
unui obiect sa-si modifice
comportamentul cand
starea sa interna se
schimba. Obiectul va
parea ca isi schimba
clasa.
Interpretorul

Sablonul Interpretor
defineste o reprezentare
a gramaticii unui limbaj
impreuna cu un
interpretor care
utilizeaza reprezentarea
pentru a interpreta
propozitiile din limbaj.
Vizitatorul

Sablonul Vizitator
reprezinta o operatie care
va fi efectuata pe
elementele unei structuri
de obiecte, permitand
definirea unei operatii noi
fara a schimba clasele
elementelor pe care
opereaza.