Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
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