Ce sunt sabloanele software _design patterns__ by pptfiles

VIEWS: 0 PAGES: 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
v promoveaza felxibilitatea oferind un nivel indirect unui alt obiect
v 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
v    Composite si Decorator :

ü    ambele se bazeaza pe compozitii recursive pentru a organiza un numar nedefinit de obiecte

v    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 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.

								
To top