Sunteți pe pagina 1din 57

Ingineria programrii

5. abloane de proiectare
creaionale (I)
Florin Leon
Universitatea Tehnic Gh. Asachi Iai
Facultatea de Automatic i Calculatoare
http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
abloane de proiectare
creaionale (I)
1. Fabrica Simpl
2. Metoda Fabric
3. Principiul Inversiunii Dependenei
4. Fabrica Abstract
5. Concluzii
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
abloane de proiectare
creaionale (I)
1. Fabrica Simpl
2. Metoda Fabric
3. Principiul Inversiunii Dependenei
4. Fabrica Abstract
5. Concluzii
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
4
abloanele creaionale (I)
abloane de proiectare care trateaz mecanismele de
creare a obiectelor
Obiectele pot fi create ntr-o manier adaptabil la
diverse situaii
Fac sistemul independent de modul n care obiectele
sunt create, compuse i reprezentate
ncapsuleaz cunotinele privind clasele concrete pe
care le utilizeaz sistemul
Ascund modul n care instanele acestor clase sunt
create i compuse
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
5
abloanele creaionale (II)
Devin importante cnd evoluia unui sistem se
bazeaz mai mult pe compunere dect pe motenire
n locul unei ierarhii prestabilite, elementele unei mulimi mici
de comportamente fundamentale pot fi combinate n orice
numr de comportamente mai complexe
Pot introduce constrngeri asupra urmtoarelor
situaii:
cine poate crea obiecte
cum sunt create obiectele
cnd sunt create obiectele
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
6
Terminologie
Simple Factory = Fabrica Simpl
Factory Method = Metoda Fabric
Abstract Factory = Fabrica Abstract
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
7
Instanierea
new = concret
Schimbri?
Cod deschis pentru extensie dar nchis pentru modificri
Codul scris pentru o interfa funcioneaz cu orice
implementare
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
8
Identificarea aspectelor variabile
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
9
Modificrile
Seciunea variabil
Seciunea fix
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
10
ncapsularea crerii obiectelor
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
11
O fabric simpl
Metoda utilizat de clieni
pentru instanierea noilor
obiecte
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
12
Utilizarea fabricii
Operatorul new a fost
nlocuit de metoda Create
din fabric
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
13
Structura Fabricii Simple
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
14
Discuie
Fabrica Simpl este util deoarece pot exista
mai muli clieni, de exemplu clasele:
PizzaShopMenu
HomeDelivery, etc.
Fabrica Simpl poate fi definit i ca metod
static
Dar nu se mai poate moteni metoda Create
Fabrica Simpl nu este un ablon de
proiectare, ci un idiom de programare
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
abloane de proiectare
creaionale (I)
1. Fabrica Simpl
2. Metoda Fabric
3. Principiul Inversiunii Dependenei
4. Fabrica Abstract
5. Concluzii
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
16
Extinderea modelului
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
17
Abstractizarea crerii
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
18
Subclasele decid
De fapt, utilizatorul
decide efectiv!
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
19
Exemplu de subclas
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
20
Declararea unei metode fabric
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
21
Exemplu de apel (I)
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
22
Exemplu de apel (II)
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
23
Implementarea (I)
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
24
Implementarea (II)
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
25
Rezultate
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
26
ablonul Metoda Fabric
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
27
Definiie
ablonul Metoda Fabric definete o
interfa pentru crearea unui obiect, dar las
subclasele s decid ce clas s instanieze
Permite unei clase s cedeze subclaselor
instanierea de obiecte
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
28
Diagrama UML
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
29
Alt exemplu
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
30
Utilizare
Metoda Fabric se folosete cnd:
O clas nu poate anticipa din ce clas trebuie s
creeze un obiect
O clas dorete ca specificarea clasei obiectului
creat s fie fcut de subclasele ei
Informaiile despre delegare trebuie localizate
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
31
Discuie
Fabrica Simpl are o singur implementare,
Metoda Fabric este o platform care las
subclasele s decid ce implementare se va
utiliza
Metoda Fabric este mai flexibil, tipurile de
produse pot varia
Exist Metode Fabric parametrizate (ca mai
sus) i neparametrizate
Pentru valorile parametrului se poate folosi o
enumerare
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
abloane de proiectare
creaionale (I)
1. Fabrica Simpl
2. Metoda Fabric
3. Principiul Inversiunii Dependenei
4. Fabrica Abstract
5. Concluzii
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
33
Dependenele dintre clase
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
34
Principiul
Inversiunii Dependenei
Depindei de abstraciuni,
nu de concretizri
Att la nivel nalt,
ct i la nivel sczut
Componentele de nivel
nalt nu trebuie s depind
de componentele de nivel
sczut
Ambele niveluri trebuie s
depind de abstraciuni
De exemplu
i creatorii (nivel nalt) i
produsele (nivel sczut)
abstractizare
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
35
Recomandri
Pentru evitarea violrii principiului, se recomand
urmtoarele:
Nicio variabil s nu aib o referin ctre o clas
concret (new concret, fabric abstract)
Nicio clas s nu fie derivat dintr-o clas concret
Nicio metod s nu suprascrie o metod implementat
a clasei de baz
Este posibil respectarea tuturor acestor
recomandri ntotdeauna? Probabil c nu.
Depinde de stabilitatea claselor (de ex. clasa
concret string se folosete pe scar larg)
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
abloane de proiectare
creaionale (I)
1. Fabrica Simpl
2. Metoda Fabric
3. Principiul Inversiunii Dependenei
4. Fabrica Abstract
5. Concluzii
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
37
Familii de produse
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
38
Fabrica de produse
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
39
Specificarea unei fabrici
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
40
O familie de produse
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
41
O fabric concret
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
42
Schema conceptual
definete
interfaa
asigur
implementarea
produselor
utilizarea
produselor
create de
fabrica
concret
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
43
Exemplu de apel (I)
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
44
Exemplu de apel (II)
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
45
Rezultate
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
46
Structura exemplului prezentat
+ Pizza
care interacioneaz
cu ingredientele
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
47
Definiie
ablonul Fabrica Abstract asigur o
interfa pentru crearea unor familii de
obiecte nrudite sau dependente fr a le
specifica clasele concrete
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
48
Diagrama UML
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
49
Alte exemple (I)
Structur
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
50
Alte exemple (II)
Caz concret
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
51
Utilizri cunoscute
Interfee grafice cu utilizatorul cu diferite
aspecte look-and-feel
Creatorii: tipurile de interfee (Windows Classic,
Windows XP, X Windows etc.)
Produsele: elementele grafice (meniuri, butoane
etc.)
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
52
Aplicabilitate
Fabrica Abstract se folosete cnd:
Sistemul trebuie s fie independent de modul n
care i sunt create, compuse sau reprezentate
produsele
Sistemul trebuie configurat cu una din mai multe
familii de produse
Se dorete furnizarea unei biblioteci de produse i
prezentarea doar a interfeelor, nu i a
implementrilor acestora
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
53
Discuie
Ambele abloane creeaz obiecte, dar:
Metoda Fabric folosete motenirea
Se deriveaz clasa i se implementeaz metoda abstract
Fabrica Abstract folosete compunerea
Subclasele arat cum se produc produsele
Pentru utilizarea unei fabrici, aceasta se instaniaz
n Fabrica Abstract, adugarea unui produs necesit schimbarea interfeei
(implicit schimbarea tuturor subclaselor)
Metoda Fabric creeaz un singur tip de produs
Fabrica Abstract creeaz familii de produse, deci are nevoie de o
interfa mai complex
n Fabrica Abstract, fabricile concrete utilizeaz Metoda Fabric
Clienii sunt decuplai de clasele concrete
Produsele nrudite sunt grupate
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
54
Metoda Fabric
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
55
Fabrica Abstract
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
56
Concluzii
Metoda Fabric
Deleag crearea obiectelor ctre subclase
Codul de creare nu trebuie s tie despre
subclasele specifice
Fabrica Abstract
Se poate alege ce familie de produse se creeaz
n momentul execuiei
Izoleaz implementarea de clieni, deoarece
clienii utilizeaz doar interfee
Simplific interschimbarea familiilor de produse
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm
57
Referine
Majoritatea imaginilor i secvenelor de cod
din acest curs au fost preluate din
urmtoarele surse:
Freeman, E., Freeman, E., Bates, B., Sierra, K.
(2004). Head First Design Patterns, O'Reilly
Media, Inc.
http://www.msquaredweb.com/DesignPatterns/
HeadFirstDesignPatternsInCSharp.zip
Data & Object Factory. Design Patterns
http://www.dofactory.com/Patterns/Patterns.aspx
Florin Leon, Ingineria programarii, http://eureka.cs.tuiasi.ro/~fleon/curs_ip.htm

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