1 / 18

Design Patterns

Design Patterns. tipare aparute in practica de proiectare numele si semnificatiile tiparelor intr-un domeniu de proiectare creeaza un limbaj Christopher Alexander et al., “A Pattern Language: Towns/Buildings/Construction”, 1977

elia
Download Presentation

Design Patterns

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Design Patterns • tipare aparute in practica de proiectare • numele si semnificatiile tiparelor intr-un domeniu de proiectare creeaza un limbaj • Christopher Alexander et al., “A Pattern Language: Towns/Buildings/Construction”, 1977 • Gamma, Helm, Johnson, Vlissides, “Design Patterns. Elements of Reusable Object-Oriented Software”, 1994 • http://rampages.onramp.net/~huston/patterns.htm • (Gang of Four; GOF)

  2. Principii generale • contati pe o interfata, nu pe o implementare • favorizati compozitia inaintea mostenirii • delegare • proiectare pentru flexibilitate. Probleme: • crearea unui obiect specificand explicit o clasa • angajarea fata de o platforma • cuplarea stransa • extinderea functionalitatii prin subclasare • modificarea claselor existente • dependenta de algoritmi

  3. Ce este un pattern? • problema: un grupaj de forte • solutia, rezultata din experienta, “war stories” • consecinte, avantaje, dezavantaje • Nume, vocabular, limbaj: “decorez” • reutilizare: pattern, mai usor decat cod • Smalltalk: Model-View-Controller • Observer, Composite, Strategy • Comportamentale, Structurale, Creationale • de Obiect, de Clasa

  4. Decorator (OS) • adauga noi functii unui obiect, in mod dinamic • comportament si/sau stare aditionale • tratarea unei cereri implica (in general) cel putin invocarea cererii similare in obiectul decorat  multe obiecte mici • java.io.InputStream, java.io.OutputStream, java.io.Reader, java.io.Writer

  5. Observer (OB) • o relatie 1-la-N in care obiectele dependente sunt anuntate atunci cand subiectul (modelul) isi schimba starea • evita cuplarea stransa model-observers • permite modificarea independenta a modelului si observer-ilor  notificari in exces • notificari selective (noul AWT) • java.util.Observer, java.util.Observable

  6. Strategy (OB) • familii de algoritmi interschimbabili prin incapsulare • variatia algoritmilor e independenta de variatia clientului • elimina instructiuni conditionale • algoritmii pot implementa acelasi comportament in moduri diferite • clientii trebuie sa cunoasca diferitele strategii disponibile!  prea multa stare context expusa; prea multe obiecte

  7. Composite (OS) • grupeaza obiecte in structuri arborescente, iar clientii pot trata uniform intregul arbore sau o parte a lui • operatiile se propaga in arbore • simplifica clientul • flexibil la adaugarea a noi tipuri de componente  poate face designul prea general  tipurile de noi componente nu pot fi restrictionate, pot fi necesare verificari la rulare • java.awt.Compoent, java.awt.Container

  8. Abstract Factory (OC) • abstractizeaza obiecte a caror functie e de a crea familii de obiecte inrudite sau interdependente (obiecte-produs) • in general, doar interfata obiectelor produs e cunoscuta de clienti (*) • reduce spatiul de nume cunoscut de clienti • e usor de trecut de la un set de produse la altul • asigura consistenta de set a produselor  dificultati cu noi tipuri de produse

  9. Factory Method (CC) • deleaga catre o subclasa crearea unui obiect cu interfata cunoscuta • conecteaza structuri de clase paralele  poate forta subclasarea doar pentru redefinirea metodei factory • se pot folosi templates sau incarcare dinamica pentru a evita subclasarea • Class.forName(nume).newInstance() in Java • idiom

  10. Singleton (OC) • asigura existenta si accesibilitatea unei singure instante a unei clase • java.lang.SecurityManager • instanta poate fi aleasa la rulare intre clasa singleton si subclasele ei, poate exista o singura instanta din intregul arbore, sau mai multe • initializarea obiectului singleton poate avea loc dupa initializarea clasei, sau poate sa nu aiba loc • un mare avantaj comparativ cu metodele statice (C++, Java) care nu sunt virtuale

  11. Prototype (OC) • creaza obiecte prin copierea unui model • poate reduce efortul de instantiere cand obiectele unei clase au un numar mic de stari • potrivit cand nu se cunoaste la compilare tipul unui obiect (incarcare dinamica) • evita ierarhii de clase factory paralele cu ierarhii de clase produs • conventie de nume: clone()

  12. Builder (OC) • deleaga un obiect sa construiasca un produs complex dintr-o reprezentare a sa • structura complexului e decisa de builder si se poate schimba independent de reprezentarea initiala • produsul e predat clientului numai la sfarsitul parcurgerii reprezentarii, ceea ce permite “finisarea” lui in detaliu • de obicei se construieste un Composite

  13. Adapter (C/OS) • converteste interfata unei clase catre o alta interfata, ceruta de clienti • adaptoarele de clasa folosesc mostenire multipla  nu implica adaptarea tuturor subclaselor • adaptoarele de obiect folosesc compozitia, delegand obiectul adaptat

  14. Bridge (OS) • desparte abstractia de implementare • abstractia contine o referinta la implementare si ii apeleaza metode la nevoie • abstractia si implementarea pot fi modificate si subclasate independent • java.awt.peer (deprecated)

  15. Iterator (OB) • asigura clientilor o parcurgere a unui obiect compus fara a expune structura lui interna • traversari multiple (cu acelasi iterator sau instantiind mai multi) • un mod uniform de a traversa structuri diferite (iterare polimorfa) • java.util.Enumeration, java.util.Iterator • traversarile simultane trebuie administrate de catre client • stergerea elementului curent

  16. State (OB) • schimba in mod dinamic comportamentul unui obiect atunci cand starea lui se schimba • fiecare tip de stare primeste acelasi set de mesaje (implementeaza aceeasi interfata)si reactioneaza la ele • elimina instructiuni conditionale • tranzitiile de stare devin explicite, programatorul le da mai multa atentie • partitioneaza descrierile de comportament • obiectele stare pot fi folosite in comun sau pot fi unice

  17. Visitor (OB) • o operatie speciala asupra unei structuri complexe • vizitatorul are o metoda de vizitare pentru fiecare tip de element din structura • in general aceasta metoda va folosi metode si campuri ale respectivului element  poate viola incapsularea daca cere expunerea a prea mult din stare • e foarte usor de adaugat noi operatii asupra structurii  e dificil de adaugat un nou tip de element (toti vizitatorii trebuie modificati)

  18. Alte patterns • structurale (OS): • Facade • Flyweight • Proxy (stub in CORBA si RMI) • comportamentale (OB): • Chain of Resposibility (java.awt.Event) • Command (java.lang.Runnable) • Mediator • Memento (java.io.Serializable) • Interpreter • Template Method

More Related