180 likes | 307 Views
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
E N D
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)
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
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
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
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
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
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
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
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
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
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()
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
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
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)
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
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
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)
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