You are on page 1of 22

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 sa-si 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 intradevar 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.

You might also like