Sunteți pe pagina 1din 12

Inginerie software Curs 4

FAZA DE PROIECTARE

1. Introducere
2. Principii de proiectare
3. Şabloane de proiectare
1
1. INTRODUCERE

Simplitate şi complexitate - sunt două moduri de a proiecta un produs


software, prima metodă fiind mult mai dificilă (Hoare, 1981) :
 Prima metodă este de a-l face atât de simplu încât este evident că nu
există deficienţe.
 A doua metodă este de a-l face atât de complicat încât nu există
deficienţe evidente.
Proiectarea şi programarea:
 Lipsa unei proiectări coerente conduce la scrierea de cod haotic.
Cu cât te apuci mai repede să scrii cod, cu atât termini mai târziu.
 Programarea are şi elemente de proiectare:
Programarea este un act creativ, nu mecanic.
Verifică deciziile de proiectare şi umple golurile.
2
1. INTRODUCERE
Nivelurile proiectării:
 Arhitectura sistemului
Identificarea subsistemelor principale şi a modului în care comunică
acestea.
Are un impact major asupra performanţelor şi caracteristicilor
sistemului.
 Module / componente:
Partiţionarea subsistemelor (un modul poate însemna un namespace,
un pachet, o bibliotecă de funcţii etc.).
Interfeţele publice.
 Clase şi tipuri de date:
Proiectare mai puţin formală, mai uşor de schimbat.
Metode de proiectare:
 Proiectarea structurată:
Descompunere funcţională.
Presupune determinarea unei ierarhii de rutine.
Abordări top-down, bottom-up sau aplicarea lor în tandem.
 Proiectarea orientată pe obiect:
Gestionează complexitatea unor probleme mult mai mari. 3
Presupune identificarea obiectelor, comportamentelor şi
interacţiunilor.
2. PRINCIPII DE PROIECTARE

Principii de proiectare:
 Definiţie:
 Un principiu de proiectare este un principiu sau utilitar de bază
care poate fi aplicat pentru proiectarea sau scrierea de cod mai
uşor de întreţinut, flexibil sau extensibil.
 Fundamentale:
Principiul deschis – închis
Principiul substituţiei
Principiul inversiunii dependenţelor
Principiul responsabilităţii unice
Principiul segregării interfeţelor
Secundare
Principiul echivalenţei lansare-reutilizare
Principiul închiderii comune
Principiul reutilizării comune 4
2. PRINCIPII DE PROIECTARE

Principiul deschis – închis


 O clasă trebuie să fie deschisă pentru extindere, dar închisă pentru
modificări (Bertrand Meyer, 1998).
 Închis - permite schimbări fără a modifica codul existent.
 Deschis - folosirea moştenirii pentru a extinde/schimba codul
funcţional existent şi a nu se atinge de codul care funcţionează.

5
2. PRINCIPII DE PROIECTARE

Principiul substituţiei
 Subclasele trebuie să fie substituibile claselor lor de bază
(Barbara Liskov, 1997).
 Subclasele trebuie să fie potrivite pentru clasele de bază fără a ne
gândi că ceva nu este bine.

6
2. PRINCIPII DE PROIECTARE

Principiul inversiunii dependenţelor


 Clasele de nivel înalt nu trebuie să depindă de clasele de
nivel scăzut. Ambele trebuie să depindă de abstracţiuni.
 Abstracţiunile nu trebuie să depindă de detalii. Detaliile trebuie să
depindă de abstracţiuni.

 “Manager” (clasa de nivel înalt) depinde de “Worker” (clasa de nivel scăzut).


 Dacă se adaugă un nou tip de muncitor, “SuperWorker”, trebuie modificată clasa 7
“Manager”.
2. PRINCIPII DE PROIECTARE

Principiul responsabilităţii unice


 O clasă trebuie să aibă o singură responsabilitate, iar toate
metodele sale trebuie să se focuseze spre a retransmite acea
responsabilitate.
 Exemplu: containerele şi iteratorii (containerele gestionează obiecte,
iteratorii le traversează).

8
2. PRINCIPII DE PROIECTARE

Principiul segregării interfeţelor


 Mai multe interfeţe specifice pentru clienţi sunt mai bune
decât o singură interfaţă de uz general.
 Un client nu trebuie forţat să depindă de metode pe care nu le foloseşte.

9
2. PRINCIPII DE PROIECTARE

Principiul echivalenţei lansare-reutilizare


 Clasele reutilizabile trebuie grupate.
Principiul închiderii comune
 Clasele care se modifică împreună trebuie grupate
împreună.
 Clasele trebuie grupate astfel încât coeziunea să fie
mare.
Principiul reutilizării comune
 Clasele care nu sunt reutilizate împreună nu trebuie
grupate împreună.
 Clasele care se modifică determină o nouă versiune a
întregului pachet. 10
3. ŞABLOANE DE PROIECTARE

Un şablon este suficient de general pentru a fi aplicat în mai multe


situaţii, dar suficient de concret pentru a fi util în luarea deciziilor.
Tipuri de şabloane:
 Şabloane arhitecturale:
Nivelul arhitecturii
 Exemplu: Arhitectura MVC
 Şabloane de proiectare
Nivelul modulelor / claselor
 Idiomuri
Nivelul limbajelor de programare:
 Exemplu 1: Incrementarea unui contor:
• Basic: i = i + 1
• C: i += 1, i++
 Exemplu 2: Interschimbarea a două valori:
• C: temp = a; a = b; b = temp; 11
• Python: a, b = b, a
3. ŞABLOANE DE PROIECTARE

Şabloane de proiectare:
Şabloane creaţionale: instanţierea
Factory Method, Abstract Factory,
Builder, Prototype, Singleton
Şabloane structurale: compunerea
Adapter, Bridge, Composite
Decorator, Facade, Flyweight, Proxy
Şabloane comportamentale: comunicarea
Interpreter, Template Method, State, Strategy, Visitor
Command, Iterator, Mediator, Memento, Observer

12

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