Sunteți pe pagina 1din 2

1.

Principiul deschis-închis (PDI) necesitatea unui mecanism de impunere a ordinii la


Deschidere la extinderi nivel mai înalt
Comportamentul modulului poate fi extins clustere (Meyer); categorii de clase (Booch);
Închidere la modificări arii de subiect (Coad)
Codul sursă al modulului nu trebuie modificat Pachete
Modulele trebuie scrise astfel încât să poată să fie extinse fără să o grupare logică de declaraţii ce pot fi importate în alte programe
fie modificate. (în Java şi Ada)
Modificările datelor publice aduc un risc de “deschidere” a containere pentru un grup de clase (UML)
modulului raţionament la un nivel de abstractizare mai înalt
Pot provoca un efect de modificări în cascadă, în mai Probleme ale design-ului de nivel înalt
multe locaţii neaşteptate; Scop
Erorile pot fi dificil de corectat/ de găsit în totalitate partiţionarea claselor unei aplicaţii conform unor criterii
Corecturile pot introduce erori în alte părţi şi apoi alocarea acelor partiţii unor pachete (packages)
Membrii non-privaţi sunt modificabili Probleme
Pot schimba starea clasei Care sunt criteriile optime de partiţionare?
ITE este neelegantă şi periculoasă Ce principii controlează design-ul pachetelor?
Dacă un modul încearcă să convertească dinamic un creare şi dependenţe între pachete
pointer la clasa de bază către una dintre clasele derivate, de câte Proiectăm mai întâi pachetele? Sau mai întâi clasele?
ori se extinde ierarhia de clase, se va modifica şi modulul i.e. abordarea top-down vs. bottom-up
Sunt uşor de recunoscut prin structurile tip switch sau if- Abordare
else Definirea principiilor ce guvernează proiectarea
Nu toate aceste situaţii încalcă PDI pachetelor
Doar când sunt folosite ca filtre creare şi inter-relaţii şi utilizare pachete
2. Principiul Substituţiei (Liskov)- PSL Principii ale design-ului OO de nivel înalt
Cheia PID: abstractizarea şi polimorfismul Principii de Coeziune
Implementate prin moştenire Principiul Echivalenţei Refolosire/Folosire (REP)
Cum se măsoară calitatea moştenirii? Principiul Reutilizării Comune (PRC)
Prin moştenire, orice proprietate adevărată despre obiectele Principiul Închiderii Comune (PÎC)
supertipului trebuie să rămână adevărată despre obiectele Principii de Cuplaj
subtipului. B.Liskov, 1987 Principiul Dependenţelor Aciclice (PDA)
Funcţiile ce folosesc pointeri/ referinţe la clasele de bază trebuie să Principiul Dependenţelor Stabile (PDS)
poată folosi obiecte ale claselor derivate fără să ştie aceasta. Principiul Abstracţiunilor Stabile (PAS)
R.Martin, 1996 Ce înseamnă reutilizabilitatea?
PSL: despre Semantică şi Înlocuire Copy-paste înseamnă reutilizabilitate?
Înţelegeţi înainte de a proiecta Dezavantaj: Tu eşti proprietarul copiei!
Semantica şi scopul fiecărei metode şi clase trebuie Trebuie să o schimbi, să o depanezi
clar documentat eventual codul diverge
Lipsa înţelegerii utilizatorului va duce la încălcări de Mentenanţa este un coşmar
facto ale PSL Definiţia lui Martin:
Substitutabilitatea este crucială Reutilizez cod dacă şi numai dacă nu am nevoie
Oriunde se face referire la o clasă în cod, orice niciodată să văd codul sursă
subclase existente sau viitoare ale sale trebuie să fie 100% trataţi codul refolosit ca pe un produs  nu trebuie să
substituibile facem noi mentenanţa
Pentru că, mai devreme sau mai târziu, cineva va Clienţii (cei care refolosesc) pot decide la momentul oportun să
înlocui clasa respectivă folosească o versiune mai nouă a unei componente
3. Principiul Inversării Dependenţelor (PID) 5. Principiul Echivalenţei Refolosire/Folosire (PER)
Modulele de nivel-înalt nu trebuie să depindă de modulele de nivel Granularitatea de refolosire e granularitatea de distribuţie (release).
scăzut. Ambele trebuie să depindă de abstracţiuni. Doar componentele ce pot fi uşor urmărite (în cod, în versiunile
Abstracţiunile nu trebuie să depindă de detalii. Detaliile trebuie să ulterioare), pot fi refolosite eficient. R. Martin, 1996
depindă de abstracţiuni. Adică?
O clasă de bază într-o ierarhie nu trebuie să îşi ştie subclasele Un element software reutilizabil nu poate fi refolosit cu
Modulele cu implementări detaliate depind de abstracţiuni, şi nimic adevărat în practică dacă nu este gestionat de un sistem de
nu depinde de ele distribuţie (release system) de un anumit tip
PDI= Scopul, PID= mecanismul ex. Numere sau nume asociate elementului
PSL= asigurarea pentru PID refolosit
Proiectaţi centrat pe interfeţe: Nu există ”clasă reutilizabilă”
Interfeţele/ clasele abstracte: fără garanţia notificării, siguranţei şi
Tind să se schimbe mai rar asistenţei
Abstracţiunile sunt puncte de articulare în care este mai trebuie integrat întregul modul (nu se poate
uşor de extins/ modificat reutiliza mai puţin)
Nu ar trebui să fie necesară modificarea abstracţiunilor 6. Principiul reutilizării comune (PRC)
(PDI) Toate clasele unui package [library] trebuie refolosite împreună.
Excepţii: Dacă refolosim o clasă din pachet, le refolosim pe toate.
Unele clase este foarte puţin probabil să se schimbe Pachetele de componente reutilizabile trebuie grupate după
Deci nu este avantajos să introducem stratul utilizarea aşteptată, Nu după:
de abstractizare funcţionalitate comună, nici
Exemplu: clasa String altă clasificare arbitrară.
În aceste situaţii, se foloseşte direct clasa concretă Clasele sunt de obicei refolosite în grupuri pe baza colaborării între
Ca în Java, C++ librării de clase
4. Principiul Segregării Interfeţelor (PSI) e.g. containere şi iteratorii asociaţi lor
Clienţii nu trebuie forţaţi să depindă de interfeţe pe care nu le Consecinţă – Pp. Reutilizării Comune
folosesc. R. Martin, 1996 Trebuie să grupăm într-un pachet clase ce pot fi refolosite
Mai multe interfeţe specializate pe fiecare client sunt mai bune împreună;
decât o interfaţă de interes general Altfel vom depinde de clase ce nu au legătură cu aplicaţia noastră,
Consecinţă: şi va trebui să re-compilăm aplicaţia la fiecare nouă versiune a
impactul modificărilor unei interfeţe este mai mic dacă pachetului de care depindem (chiar dacă versiunea modifică doar
interfaţa este mai mică acele clase de care noi nu avem nevoie)
poluarea interfeţelor 7. Principiul Închiderii Comune (PÎC)
Design-ul de nivel înalt Clasele unui pachet trebuie să fie închise faţă de aceleaşi tipuri de
Când vorbim de sisteme pe scară largă modificări. O modificare ce afectează pachetul, afectează toate
> 50000 Lines Of Code (C) clasele acelui pachet.
Echipe de dezvoltatori, nu un singur individ Adică?
Clasele sunt un mecanism de valoare dar insuficient Clasele care se modifică împreună trebuie grupate la
prea mărunte pentru organizarea design-ului unui un loc
sistem de dimensiuni mari Scop: limitarea dispersării modificărilor între pachetele
distribuite
Modificările trebuie să modifice un număr
minim de pachete distribuite
Relaţia cu PDeschis- Închis
Clasele unui pachet trebuie să fie coezive
Pentru un anumit tip de modificare, fie se modifică toate
clasele unei componente, fie nu se modifică nici una
Refolosire vs. Mentenanţă
PER şi PRC fac viaţa mai uşoară reutilizatorului
pachete foarte mici
PÎC face mentenanţa mai uşoară
pachete mari
Pachetele se pot modifica
iniţial, este important PÎC
Mai apoi, când dorim să reutilizăm: PER, PRC

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