Sunteți pe pagina 1din 3

Sabloane.

Cea mai bună metodă de creare Metoda Factory: o clasă simplă pentru Abstract Factory: o interfaţă pentru crearea Memento
de obiecte, astfel încât programul să nu luarea unei decizii- întoarce una din mai şi returnarea uneia dintre mai multe familii Scop: capteaza si externalizeaza starea
depindă de modul în care acestea sunt multe subclase posibile ale unei clase, în de obiecte relaţionate interna a unui obiect astfe; incat obiectul
create funcţie de datele pe care le primeşte Scop Oferă o interfaţă pentru crearea de poate fi restaurant in aceasta stare mai
Abstractizarea procesului de creaţie, într-o Scop Defineşte o interfaţă pentru crearea familii de obiecte înrudite sau dependente tarziu, fara a sparge incapsularea
clasă specială “creator”- pentru mai multă unui obiect, dar lasă subclasele să decidă ce fără specificarea claselor lor concrete Aplicabilitate:
flexibilitate clasă să instanţieze. Aplicabilitate Cand (o parte din) starea unui obiect trebuie
Factory Method, Prototype, Metoda Factory permite unei clase să Sistemul trebuie să fie independent de cum salvata pentru a readuce mai tarziu obiectul
Abstract Factory, Singleton, Composite, defere instanţierea subclaselor sunt create, compuse şi reprezentate in aceasta stare
Aplicabilitate produsele sale Cand o interfata directa pentru obtinerea
O clasă nu poate anticipa clasa obiectelor pe Sistemul trebuie configurat de una din mai starii ar expune detalii de implementare si
care trebuie să le creeze multe familii de produse ar sparge incapsularea obiectului
Command, Observer, Mediator
O clasă doreşte ca subclasele sale să Trebuie forţat ca o familie de obiecte Consecinte:
specifice obiectele pe care le creează produs să fie folosite împreună Protejeaza granitele incapsularii
Decorator Clasele delegă responsibilitatea uneia sau Consecinte Simplifica Originatorul: acesta nu e nevoit sa
-Modificarea comportamentului obiectelor mai multor subclase ajutătoare 1 Izolarea claselor concrete: apar în retina stari anterioare la care ar fi necesar sa
individuale fără să creeze o clasă derivată Consecinte ConcreteFactories nu în codul clientului revina
nouă Elimină legarea între clasele specifice 2 Facilitează schimbul de familii de Uneori folosirea este costisitoare: daca este
-Acesta este un alt caz în care este aplicaţiei din cod produse:un ConcreteFactory apare într-un multa informative de copiat sau atunci cand
favorizată relaţia de conţinere asupra (codul de creare foloseşte doar interfaţa singur loc clientii creaza des memento-uri
moştenirii clasei Product ) 3 uşor de modificat: Promovează Costuri ascunse in manevrarea memento-
-Decoratorul este un obiect grafic, dar Facilitează derivarea consistenţa între produse; toate produsele urilor: un caretaker nu stie exact cat sa aloce
conţine obiectul pe care îl decorează.Poate subclasele pot astfel modifica produsul unei familii se modifică împreună, în acelaşi pentru stocarea unui memento
apela metode grafice, poate executa calcule creat; timp
adiţionale, şi le poate trimite către obiectul Poate conecta ierarhii paralele de clase;lasă 4 Este dificilă susţinerea de tipuri noi de
conţinut şi decorat clienţii să apeleze FM ; produse: necesită o modificare în interfaţa
Clienţii ar trebui să deriveze din Creator AbstractFactory şi a tuturor subclaselor sale,
doar pentru a crea un anumit obiect în consecinţă
ConcreteProduct.

Command Composite Singleton: este o clasă din care nu poate Strategy


Scop Încapsulează cereri ca obiecte, şi Scop -Tratează obiectele individuale şi exista mai mult de o instanţă; furnizează un Scop:- defineste o familie de algoritmi,
permite: compunerile acestor obiecte uniform punct de acces global la această instanţă incapsuleaza fiecare algoritm, ii face
-parametrizarea clienţilor cu diferite cereri -Compune obiectele în structuri Scop interschimbabili.
-înlănţuirea sau log-area cererilor arborescente pentru a reprezenta agregări -Asigură ca o clasă să aibă doar o singură - permite algoritmului sa varieze
-suport pentru operaţii anulabile (UNDO) recursive instanţă şi furnizează un punct de acces independent de clientii ce il folosesc
Aplicabilitate Aplicabilitate global la ea Aplicabilitatea:- sunt necesare variante
-Parametrizarea obiectelor -reprezentarea ierarhiilor de obiecte de tip -Aplicabilitate diferite al unui algoritm
-Specificarea, înlănţuirea, şi executarea parte-întreg -dorim exact o instanţă a unei clase -un algoritm foloseste date despre care
cererilor la diferite momente -abilitatea de a ignora diferenţa dintre -accesibilitate pentru clienţi dintr-un singur clientii nu trebuie sa stie: evita expunerea
-Suport undo compuneri de obiecte şi obiecte individuale punct structurilor de date complexe, specifice
-Modelarea tranzacţiilor Consecinte -dorim ca instanţa să fie extensibilă algoritmului
--structurarea sistemelor construite pe -Defineşte ierarhii uniforme de clase: -poate permite deasemenea şi un set -multe clase rationate difera doar prin
operaţii primitive, în jurul operaţiilor de compunere recursivă de obiecte numărabil de instanţe comportament: configureaza o clasa cu un
nivel înalt -Face clienţii simpli -optimizare faţă de vizibilitatea globală comportament particulat
--interfaţa comună  invocarea identică a --nu trebuie să ştie dacă este o frunză sau un -mai bine decât o clasă statică: Consecinte pozitive
tuturor tranzacţiilor compus --nu se poate răzgândi Familii de algoritmi înrudiţi
Consecinte --simplifică codul deoarece evită tratarea --metode niciodată virtuale Alternativă la derivare
- Decuplează Invoker de Receiver diferită a fiecărei clase Consecinte Elimină instrucţiunile condiţionale
- Comenzile sunt obiecte ale unor clase --Mai uşor de extins -Acces controlat la instanţa unică Consecinte negative
--pot fi manevrate şi extinse --uşor de adăugat noi clase Composite sau -Permite rafinarea operaţiilor şi 1.Exces de comunicare între Strategy şi
--Comenzi compuse (Composite Commands) Leaf reprezentării Context 2. Clienţii trebuie să fie conştienţi
- Uşor de adăugat comenzi noi --aplicaţie fericită a Principiului Deschis- -Permite un număr variabil (dar precis) de de diferitele strategii 3.Număr sporit de
--invoker nu se modifică Închis instanţe obiecte
--cod stabil- Principiul Deschis-Închis -Design prea general -Reducerea vizibilităţii globale
- Potenţial pentru un exces de clase de tip --sunt necesare verificări de tip pentru a
command restricţiona tipurile admise într-o anumită
structură compusă

Observer Prototype: începe cu o clasă instanţiată şi Mediator Flyweight


Scop iniţializată şi o copiază/ clonează pentru a Scop Scop: foloseste partajarea pentru a sustine
implementarea eficienta a unui numar mare de
Defineşte o dependenţă de tipul unul-la- crea instanţe noi (în loc să creeze efectiv Defineşte un obiect ce încapsulează cum obiecte cu granulatie fina
mai-mulţi între obiecte astfel încât atunci alte instanţe) interacţionează o mulţime de obiecte Aplicabiliatate: Cand toate conditiile de mai jos sunt
când un obiect îşi schimbă starea, toate Scop Specificaţi tipul obiectelor care se Promovează cuplajul redus prin faptul că indeplinite simultan:
dependenţele sale sunt anunţate şi creează folosind o instanţă prototipică obiectele nu mai fac referinţă direct unele la -o aplicatie foloseste un numar mare de obiecte
actualizate automat Creati obiecte noi copiind acest prototip altele, permiţând varierea independentă a -costurile de stocare sunt ridicate din cauza
numarului mare de obiecte
Aplicabilitate Aplicabilitate interacţiunii lor -cea mai mare parte din starea unui obiect poate fi
Când o abstracţiune are două aspecte, una când un sistem trebuie să fie independent Aplicabilitate Folosiţi Mediator când: facuta extrinseca
dependentă de cealaltă; încapsularea de cum sunt create, compuse şi reprezentate O mulţime de obiecte comunică într-un mod -multe grupuri de obiecte se pot inlocui de un numar
acestor aspecte în obiecte diferite permite produsele sale şi când clasele de instanţiat bine definit dar complex; relativ mic de obiecte partajate, odata ce am
ilaturata starea extrinseca
varierea şi refolosirea lor independentă; sunt specificate la execuţie ; evitaţi -Interdependenţele sunt nestructurate şi
-aplicatia nu depinde de identitatea obiectelor,
Când modificarea unui obiect solicită construirea unei ierarhii de clase-factory dificil de înţeles; intrucat obiectele flyweight pot fi partajate, testele
modificarea altora, şi nu ştim exact câte paralelă cu ierarhia claselor de produse Refolosirea unui obiect este dificila de identitate vor fi intoase true pentru obiecte
obiecte trebuie modificate (modificări Consecinte deoarece comunica prea multe obiecte conceptual distincte
dinamice, la execuţie); -Adăugarea şi ştergerea produselor la Un comportament distribuit între mai multe Consecinte
Flyweight-urile adaugă costuri la momentul execuţiei
Când un obiect trebuie să poată notifica alte execuţie clase ar trebui să fie readaptabil fără
Cantitatea de spaţiu economisit depinde de mai mulţi
obiecte fără să presupună cine sunt acestea -Mai puţină derivare: evită ierarhia paralelă derivare factori:1Reducerea numărului total de instanţe prin
Consecinte pentru creatori Consecinte partajare 2Cantitatea de stare intrinsecă pentru
Cuplaj minimal si abstract intre subiect si -Specificarea de obiecte noi prin varierea Limitează derivarea fiecare obiect 3Dacă starea extrinsecă e calculată sau
obsevatori valorilor prototipurilor:clientul se comportă Decuplează colegii stocată
Cel mai mult spaţiu se economiseşte dacă obiectele
Suport pentru comunicare de tip difuzare diferit prin delegarea către prototip Simplifică protocoalele obiectelor
folosesc cantităţi susbstanţiale de stare intrinsecă şi
(“broadcast”) -Specificarea de obiecte noi prin varierea Abstractizează cooperarea obiectelor extrinsecă, şi dacă starea extrinsecă se poate calcula-
Modificări neaşteptate Întrucât observerii structurii prototipurilor: produse compuse Centralizează controlul: mediatorul se poate în loc să fie stocată
nu ştiu unul de existenţa celuilalt, pot apare -Fiecare subclasă a Prototype trebuie să transforma într-un monolit dificil de
modificări incorecte, în cascadă implementeze clone: dificil când clasele întreţinut
există deja sau obiectele interne nu permit
copierea sau au referinţe circulare
Builder State Chain of Responsability Decorator
Scop: separa contruirea unui obiect complex Scop: permite unui obiect sa isi modifice Scop:-decupleaza transmitatorul cererii de primitor: Scop:adauga responsabilitati unui obiect
oferind mai multor obiecte sansa de a trata cererea;
de reprezentarea sa, astfel incat acelasi comportamentul cand i se modifica starea -pune primitorii intr-un lant si transmite cererea de-a
particular, mai degraba decat clasei sale. O
process de constructie poate genera interna:obiectul va parea ca-si schimba clasa lungul lantului pana ce un obiect o trateaza alternativa flexibila la derivare
reprezentari diferite Aplicabilitate:-comportamentul obiectului Aplicabilitate -mai mult decât un obiect poate trata o Aplicabilitate:-adauga responsabilitati
Aplicabilitate: depinde de starea sa cerere şi nu cunoaştem apriori cine o va trata obiectelor transparent si dinamic fara sa
Cand algoritmul pentru cearea obiectului - trebuie sa isi modifice comportamentul la -mulţimea de obiecte ce pot trata cererea trebuie să efectueze alte obiecte
fie specificabilă dinamic
complex trebuie sa fie independent de executie in functie de stare -trimitem o cerere la mai multe obiecte fără să -extinderea prin derivare nu e practica
partile ce compun obiectul si de modul lor - operatii cu instructiuni contionale multiple, specificăm primitorul Consecinte
de asamblare depinzand de starea obiectului Consecinte: -Cuplaj redus 1clientul (trimiţătorul) nu Mai flexibil decât moştenirea statică
Cand procesul de contructie trebuie sa Consecinte:- localizeaza comportamentul trebuie să ştie cine îi va trata cererea 2trimiţătorul şi -permite amestecarea şi potrivirea
primitorul nu se cunosc unul pe celălalt 3în loc ca
permita reprezentari diferite pentru specific starilor si particularizeaza responsabilităţilor: -permite aplicarea unei
trimiţătorul să cunoască toţi potenţialii primitori, se
obiectul construit. comportamentul pentru stari diferite păstrează doar o referinţă la următorul handler din proprietăţi de două ori
Consecinte: lanţ. Evită clasele încărcate de prea multe
- - comportament imprastiat intre mai multe
-permite varierea reprezentarii interne a -Flexibilitate în asignarea responsabilităţilor către cracteristici specifice în partea de sus a
unui produs subclase alea State:1numarul de clase obiecte ierarhiei: -abordarea "plăteşte-pe-măsură-
-izoleaza codul pentru contructie si creste, mai putin compact decat o singura -Cererile pot rămâne netratate
ce-consumi"; -uşor de definit noi tipuri de
reprezentare clasa 2util daca sunt multe stari decoraţiuni
-rafineaza controlul asupra procesului de -face explizita tranzitia intre stati O mulţime de obiecte mici uşor de adaptat,
construire dar dificil de învăţat şi depanat
Iterator Proxy Bridge Adapter
Scop: furnizeaza o modalitate de accesare Scop:furnizeaza un surogat pentru alt obiect Scrop:- decupleaza o abstractiune de Scop: Converteste interfata unei clase intr-o
secventiala a elementelor unui agregat, fara pentru a controla accesul la el implementarea sa alta interfata asteptata de client
a expune reprezentarea care sta la baza Aplicabilitate:-oricand este nevoie de o -permite implementarii sa varieze Permite unor clase cu interfete diferita sa
acestora referinta catre obiect mai flexibila sau mai independent de abstractiunea sa lucreze impreuna
Aplicabilitatea: sofisticata decat un simplu pointer -abstractiunea defineste si implementeaza Aplicabilitate:-cand dorim sa folosim o clasa
Pentru a accesa continutul uni obiect -proxy la distanta;- proxy virtual interfata preexistenta si interfata acestuia nu se
agregat fara sa ii expun reprezentarea -proxy de protectie; -proxy accesorii: previn Aplicabilitate:Evita legarea permanenta potriveste cu interfata de care avem nevoie
interna stergerea accidentala a obiectelor intre o abstractiune si implementarea sa -vrem sa creem o clasa reutilizabila ce
Pentru a sustine traversari multiple ale Consecinte:-proxy-urile introduc un nivel de Abstractiunile si implementarile lor trebuie coopereaza cu clase nerelationate si
obiectelor agregat indirectare sa fie independent extensibile prin derivare neprevazute
Pentru a furniza o interfata uniforma de - copiaza in timp ce scrii: Ascunde implementarea unei abstractiuni -cand avem nevoie sa folosim mai multe
traversare a diferitelor structuri agregat - -copierea obiectelor mari si complicate e complet de clienti sublase existente, dar nu e practic sa
Consecinte: costisitoare; Partajeaza o implementare intre mai multe derivam din fiecare pentru a le adapta
-sprijina variatiunile in traversarea unui - -copiem numai cand obiectul nou esre obiecte. interfata
agregat modificat Consecinte Consecinţe adaptor obiect
- iteratorii simplifica interfata agregatului Decupleaza interfata si implementarea -Permite unui singur Adapter să lucreze cu
- pot exista mai multe traversari simultan: Extensibilitate imbunatatita mai multe clase Adaptee- i.e. clasa Adaptee
fiecare iterator tine evidenta starii propriei Ascunderea detaliilor de implementare de şi toate subclesele sale, dacă acestea există;
iteratii clienti Adapter poate adăuga funcţionalităţi la
Principiul Abstractiunilor Stabile (PAS) Principiul Echivalentei Refolosire/Folosire Principiu Reutilizarii Comune (PRC) toate clasele Adaptee odată
Abstractizarea unui pachet trebuie să fie (PER) Toate clasele unui package [library] trebuie -Este mai dificil de suprascris
proporţională cu stabilitatea sa! Granularitatea de refolosire e granularitatea refolosite împreună. Dacă refolosim o clasă comportamentul lui Adaptee; pentru
Pachetele maximal stabile trebuie să fie de distribuţie (release). din pachet, le refolosim pe toate. Principiul aceasta va fi necesar să derivăm Adaptee şi
maximal abstracte. Doar componentele ce pot fi uşor urmărite ne ajuta sa decidem ce clase ar trebui puse- să facem Adapter să se refere la subclasă
Pachetele instabile trebuie să fie concrete. (în cod, în versiunile ulterioare), pot fi n pachet. PRC se aplica claselor ce tind sa fie direct, nu la Adaptee
Acest princpiu realizeaza o relatie intre refolosite eficient. refolosite impreuna. In general clasele Consecinţe adaptor clasă
stabilitate si abstractizare. Un pachet stabil Adică? reutilizabile colaboreaza cu alte clase ce fac -Adaptează Adaptee la Target ţinând cont
ar trebui sa fie abstract incat propria-i – Un element software parte din abstractizari reutilizabile. de o clasă Adapter concretă
stabilitate sa nu-l previna impotriva reutilizabil nu poate fi refolosit cu adevărat Un simplu exemplu ar putea fi clasa -Permite clasei Adapter să suprascrie o
extinderii. Pe de alta parte PAS spune ca în practică dacă nu este gestionat de un Container cu iteratori asociati. Aceste clase parte din comportamentul Adaptee, întrucât
pachetele instabile trebuie sa fie concrete, sistem de distribuţie (release system) de un sunt refolosite impreuna deoarece sunt Adapter e o subclasă a lui Adaptee
deoarece instabilitatea permite codului sa anumit tip strans cuplate intre ele. Astfel ele trebuie sa -Introduce doar un singur obiect, şi nu este
fie schimbat cu usurinta. Daca un pachet • ex. Numere sau nume fie in acelasi pachet. Se spune ca atunci cand nevoie de indirectare suplimentară cu
devine stabil ar trebui sa contina clase asociate elementului refolosit depinzi de un pachet, depinzi de clasele din pointeri pentru a obţine obiectul adaptat
abstracte, astfel poate fi extins. Pachetele – Nu există ”clasă reutilizabilă” acel pachet. Altfel vom depinde de clase ce
stabile care pot fi extinse sunt flexibile si nu • fără garanţia notificării, nu au legatura cu aplicatia noastra si va
constrang design-ul. siguranţei şi asistenţei trebui sa recompilam aplicatia la fiecare
Masurarea abstractizarii • trebuie integrat întregul noua versiune a pachetului de care
Metrica A este o masura a abstractizarii unui modul (nu se poate reutiliza mai puţin) depindem (chiar daca versiunea modifica
pachet. Valoarea ei este raportul dintre doar acele clase de care noi nu avem
clasele abstracte dintr-un pachet si numarul Fie toate clasele unui pachet sunt nevoie)
total de clase din pachet. reutilizabile, fie nici una nu este!
Metrica A ia valori intre 0 si 1. Zero
inseamna ca pachetul nu are deloc clase
abstracte. Unu inseamna ca pachetul
contine doar clase abstracte.
Secventa principala
Se poate defini o relatie intre instabilitatea I
si abstractizarea A
Zona Critica (Pain)
-foarte stabil si concret => rigid
-exemple: schemele bazelor de date,
librariile de utilitati concrete
Zona de inutilitate
-instabil si abstract=>nefolositor
nu depinde nimani de clasele respective
Secventa principala
-maximizeaza distanta intre zonele de evitat
-un echilibru intre abstractiune si stabilitate
Distante de la secventa principala
Distanta =|A+I-1|/√2 , in domeniul [0,
~0.707]
Distanta normalizata D=|A+I-1|, in
domeniul [0,1]; 0=pachet pe secventa
principala, 1=pachet departe de secventa
principala.
Principiul Deschis Inchis (PDI) Principiul Substitutiei (Liskov)-PSL Principiul Inversarii Dependentelor (PID) Principiul Dependentelor Aciclice (PDA)
Entitatile software (clase, module, functii…) Functiile care utilizeaza pointeri sau 1.Modulele de nivel-înalt nu trebuie să Structura de dependenţe a componentei
trebuie sa fie deschise la extinderi, dar referinte catre clasele de baza trebuie sa depindă de modulele de nivel scăzut. distribuite trebuie să fie un Graf Direcţionat
inchise la modificari. Ambele trebuie să depindă de abstracţiuni. Aciclic (GDA). Nu trebuie să existe cicluri.
poata folosi obiecte din clasa derivata fara
Atunci cand o singura schimbare determina 2.Abstracţiunile nu trebuie să depindă de O “Dependenţă Bună” este o dependenţă
sa stie. Importanta acestui principiu devine
in program o cascada de schimbari in detalii. Detaliile trebuie să depindă de de o ţintă cu volatilitate redusă
module dependente, se spune despre acel evidenta atunci cand iei in calcul abstracţiuni. Principiul Dependentelor Stabile (PDS)
program ca nu e bine proiectat, devenind consecintele incalcarii acestuia. Daca o Intr-o ierarhie de clase clasa de baza nu Dependenţele între componente trebuie să
astfel fragil, rigid, nepredictibil, de functie nu respecta PSL, atunci acea functie trebuie sa isi stie subclasele. Modulele cu fie în direcţia stabilităţii.
nereutilizat. Principiul deschis-inchis se foloseste un pointer sau o referinta catre implementari detaliate depend de O componentă trebuie să depindă de
ocupa de aceasta problema. PDI impune clasa de baza, insa trebuie sa cunoasca toate abstractiuni si nimic nu depinde de ele. componente mai stabile decât ea.
proiectarea de module care sa nu fie PID poate fi aplicat oricand o clasa trimite Prin folosirea acestui principiu cream
derivatele clasei de baza. O astfel de functie
modificate. Atunci cand se impun schimbari, mesaje altei clase. pachete ce sunt senzitive la anumite tipuri
se schimba comportamentul modulelor prin incalca PDI deoarece ea trebuie modificata
de schimbari. Aceste pachete sunt
adaugarea unui cod nou, nu prin schimbarea oricand o nou clasa derivata este creata De exemplu, daca consideram doua obiecte, proiectate sa fie volatile. Orice pachet ce se
vechiului cod care deja e functional. Comportamentul anuntat al unui obiect: unul de tip Button si alte de tip Lamp. vrea a fi volatil nu ar trebui sa depinda de un
-Necesitatile anuntate (Preconditii) Obiectul de tip Button detecteaza daca pachet greu de modificat. Altfel pachetul
Modulele ce respecta PDI au doua principale -Promisiunile anuntate (Postconditii) cineva a activat sau nu butonul. Obiectul de volatil va fi greu de modificat. Conform PDS
proprietati: Când redefinim o metodă într-o clasă tip Lamp afecteaza mediul exterior. Daca modulele ce sunt proiectate sa fie instabile
-Sunt deschise extinderii Lamp primeste un mesaj de tipul (predispuse la schimbare) nu depind de
derivată, putem înlocui precondiţia sa doar
Comportamentul modulelor poate fi extins. TurnOn/TurnOff, atunci lumina se va modulele ce sunt mai stabile (mai greu de
Putem face ca un modul sa se comporte cu o precondiţie mai slabă, şi postcondiţia sa aprinde/stinge modificat). Cum poate fi calculat stabilitatea
in diferite moduri, in functie de schimabrile doar cu o precondiţie mai tare. unui pachet? O madalitate este numararea
cerintelor aplicatiei, sau sa respecte Serviviile claselor derivate: sa nu ceara mai PID este incalcat deoarece metodele de dependentelor care intra si ies in / din
cerintele unei noi aplicatii mult, sa nu promita mai putin. nivel inalt ale aplicatiei nu au fost separate pachet. Aceste numaratori ne vor permite
-Sunt inchise modificarii PSL: Semantica si Inlocuire de modulele de nivel scazut. Abstractizarile sa calculam stabilitatea pozitionala a
Codul sursa al unui astfel de nu au fost separate de detalii. pachetului.
-Semantica si scopul fiecarei metode si clase
modul nu are voie sa fie modificat *Ca:cuplaj afferent-nr. de clase din afara
trebuie clar documentat. Pentru ca PID sa nu fie incalcat trebuie sa pachetului ce depind de clasele din pachet
Desi aceste proprietati par a fi -Lipsa intelegerii utilizatorului va duce la izolam abstractizarea de detaliile problemei. *Ce:cuplaj efferent-nr de clase din pachet ce
contradictorii, deoarece metoda prin care se incalcarea PSL Apoi trebuie sa rezolvam dependentele depind de clasele din afara pachetului
poate extinde un modul e modificarea proiectarii, adica detaliile trebuie sa depinda *I:instabilitatea: I ia valori de la 0 la 1;
acestuia. Felul in care aceste proprietati -Oriunde se face referire la o clasa in cod, de abstractizari. 0=stabilitate maxima a pchetului;
“lucreaza” e abstractizarea. orice subclase existente sau viitoare ale sale 1=instabilitate maxima a pachetului
PID se foloseste in aplicatii in care poate fi Valorile Ca si Ce se calculeaza prin
trebuie sa fie 100% substituibile
Inchidere strategica: reutilizat, insa sa aiba rezistenta la numararea claselor din afara pachetului in
-“Nici un program semnificativ nu poate fi -Orice cod ce poate chema legal metodele schimbari. Din moement ce abstractizarile si cauza, care au dependente cu clasele din
100% inchis” altei metode trebuie sa poata substitui detaliile sunt separate unele de celaltele, pachetul in cauza.
-Inchiderea se obtine prin utilizarea orice subclasa a clasei respective, fara codul este mult mai usor de “intretinut” . Plasarea proiectarii de nivel inalt
abstractizarii modificari ----------------------------------------------------------- Anumite programe in sistem nu ar trebui sa
Construiti metode ce pot fi Euristici PSL: Principiul Închiderii Comune (PÎC) se modifice foarte des. Acest program
invocate dinamic Nu este permis ca o clasa derivate sa Clasele unui pachet trebuie să fie închise repezinta arhitectura de nivel inalt si
Pentru a determina deciziile strategiei faţă de acealeaşi tipuri de modificări. deciziile de design. Nu se doreste ca acestea
suprascrie o metoda a clasei de baza printr-
generale (ex: desenare de patrate inainte de O modificare ce afectează pachetul, sa fie volatile. Asadar programul care
cercuri) o metoda NOP (no-operation; metoda ce nu afectează toate clasele acelui pachet. incapsuleaza modelul design-ului de nivel
-Utilizati o abordare “condusa de date” face nimic) Mai important decat reuzabilitatea este inalt ar trebui sa fie plasat in pachete
pentru a obtine inchiderea Solutii: mentenabilitatea. Daca codul intr-o aplicatie stabile. Pachetele instabile trebuie sa
Plasati deciziile strategiei particulare intr-o 1.Relatie de derivare inversa trebuie schimbat, aceste schimbari vor contina programul ce e predispus la
locatie separata (ex: fisier sau obiect -daca in clasa de baza initiala exista doar aparea intr-un pachet sau in mai multe modificari. Cum un pachet cu stabilitate
separat) pachete? Mai degraba schimabarile ar maxima (I=0) poate fi destul de flexibil
comportament additional
Minimizeaza localizarile schimbarilor trebuie sa fie focusate intr-un pachet decat pentru a rezista la schimbari? Raspunsul:
2. Extragerea unei clase de baza commune
viitoare imprastiate in mai multe pachete. PÎC e o PDI. Principiul deschis-inchis ne spune ca e
-daca atat clasa initiala cat si clasele derivate incercare de a aduna intr-un singur loc posibil si chiar de dorit sa cream clase ce
Euristici PDI: au comportament diferit clasele ce sunt predispuse schimbarilor din sunt destul de flexibile sa fie extinse fara a
Toate datele membru sunt private. Nu varii motive. Acest principiu e puternic nevesita modificare. Clasele ce respecta
exista variabile globale. asociat cu PDI . PÎC presupune: clasele ar acest principiu sunt clasele abstracte.
Modificarile datelor publice aduc un risc de trebui sa fie inchise modificarii, dar deschise -----------------------------------------------------------
“deschidere” a modulului. extinderii. Din PDI se stie ca nu exista 100% Principiul Segregarii Interfetelor (PSI)
~Pot provoca un efect de modificari in inchidere. Inchiderea trebuie sa fie Clienţii nu trebuie forţaţi să depindă de
casacada, in mai multe locatii neasteptate strategica. PÎC grupeaza in acelasi pachet interfeţe pe care nu le folosesc.
~Erorile pot fi dificil de corectat/de gasit in clase care nu pot fi inchise impotriva unor Atunci cand un client depinde de o clasa ce
totalitate (corecturile pot introduce erori in tipuri de schimbari. Astfel atunci cand vine contine interfete pe care clientul nu le
alte parti) o schimbare a cerintelor, acea schimbare foloseste, dar alt client le foloseste, atunci
Membrii non-privati sunt modificabili este cel mai probabil limitata la un numar acel client va fi afectat de schimbarile pe
~Pot schimba starea clasei. minim de pachete. care ceilalti clienti le fac asupra clasei. Mai
multe interfeţe specializate pe fiecare client
sunt mai bune decât o interfaţă de interes
general.

S-ar putea să vă placă și