-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
1/58
Ingineria programrii
5. abloane de proiectarecreaionale (I)
Florin LeonUniversitatea TehnicGheorghe Asachi din IaiFacultatea de Automatici Calculatoare
http://florinleon.byethost24.com/curs_ip.htm
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
2/58
abloane de proiectarecreaionale (I)
1. Fabrica Simpl2. Metoda Fabric3. Principiul Inversiunii Dependenei
4. Fabrica Abstract5. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
3/58
Not
Programele care implementeaz abloaneledescrise i care pot fi descrcate din paginacursului sunt parte integrant a prezentrii
3Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
4/58
abloane de proiectarecreaionale (I)
1. Fabrica Simpl2. Metoda Fabric3. Principiul Inversiunii Dependenei
4. Fabrica Abstract5. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
5/58
5
abloanele creaionale(I)
abloane de proiectare care trateaz mecanismelede 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://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
6/58
6
abloanele creaionale(II)
Devin importante cnd evoluia unui sistem sebazeaz mai mult pe compunere dect pe motenire n locul unei ierarhii prestabilite, elementele unei mulimi mici
de comportamente fundamentale pot fi combinate n oricenumr de comportamente mai complexe
Pot introduce constrngeri asupra urmtoarelorsituaii:
cine poate crea obiecte cum sunt create obiectele
cnd sunt create obiectele
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
7/58
7
Terminologie
Simple Factory = Fabrica Simpl
Factory Method = Metoda Fabric
Abstract Factory = Fabrica Abstract
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
8/58
8
Instanierea
new= concret
Schimbri? Cod deschis pentru extensii dar nchis pentru modificri Codul scris pentru o interfa funcioneaz cu orice
implementare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
9/58
9
Identificarea aspectelor variabile
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
10/58
10
Modificrile
Seciunea variabil
Seciunea fix
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
11/58
11
ncapsularea crerii obiectelor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
12/58
12
O fabric simpl
Metoda utilizat de clienipentru instanierea noilorobiecte
n loc de stringse
recomand enum
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
13/58
13
Utilizarea fabricii
Operatorul newa fostnlocuit de metoda Createdin fabric
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
14/58
14
Structura Fabricii Simple
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
15/58
15
Discuie
Fabrica Simpl este util deoarece pot existamai muli clieni, de exemplu clasele:PizzaShopMenu
HomeDeliveryetc. Fabrica Simpl poate fi definit i ca metod
static Dar nu se mai poate moteni metoda Create
Fabrica Simpl nu este un ablon deproiectare, ci un idiom de programare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
16/58
abloane de proiectarecreaionale (I)
1. Fabrica Simpl2. Metoda Fabric3. Principiul Inversiunii Dependenei4. Fabrica Abstract5. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
17/58
17
Extinderea modelului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
18/58
18
Abstractizarea crerii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
19/58
19
Subclasele decid
De fapt, utilizatoruldecide efectiv!
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
20/58
20
Exemplu de subclas
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
21/58
21
Declararea unei metode fabric
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
22/58
22
Exemplu de apel (I)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
23/58
23
Exemplu de apel (II)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
24/58
24
Implementarea (I)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
25/58
25
Implementarea (II)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
26/58
26
Rezultate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
27/58
27
ablonul Metoda Fabric
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
28/58
28
Definiie
ablonul Metoda Fabricdefinete ointerfa pentru crearea unui obiect, dar lassubclasele s decid ce clas s instanieze Permite unei clase s cedeze subclaselor
instanierea de obiecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
29/58
29
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
30/58
30
Alt exemplu
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
31/58
31
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 obiectuluicreat s fie fcut de subclasele ei
Informaiile despre delegare trebuie localizate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
32/58
32
Discuie
Fabrica Simpl are o singur implementare,Metoda Fabric este o platform care lassubclasele s decid ce implementare se va
utiliza Metoda Fabric este mai flexibil, tipurile de
produse pot varia
Exist Metode Fabric parametrizate (ca maisus) i neparametrizate Pentru valorile parametrilor, n loc de string-uri, se
pot folosi: enumerri, constante etc.
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
33/58
abloane de proiectarecreaionale (I)
1. Fabrica Simpl2. Metoda Fabric3. Principiul Inversiunii Dependenei4. Fabrica Abstract5. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
34/58
34
Dependenele dintre clase
PizzaStore depinde detoate clasele concrete
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
35/58
35
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 depindde componentele de nivelsczut
Ambele niveluri trebuie s
depind de abstraciuni De exemplu
i creatorii (nivel nalt) iprodusele (nivel sczut)
abstraciune
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
36/58
36
Recomandri
Pentru evitarea violrii principiului, se recomand urmtoarele:
Nicio variabil s nu aib o referin ctre o clas concret(newconcret, fabricabstract)
Nicio clas s nu fie derivat dintr-o clas concret
Nicio metod s nu suprascrie (override) o metod implementata clasei de baz
Este o interdicie semantic, nu sintactic: funcionalitatea suprascrisnu trebuie s nlocuiasc funcionalitatea din clasa de baz, doar sadauge ceva
Este posibil respectarea tuturor acestor recomandri ntotdeauna?Probabil c nu.
Depinde de stabilitatea claselor (de exemplu clasa concret stringse folosete pe scar larg)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
37/58
abloane de proiectarecreaionale (I)
1. Fabrica Simpl2. Metoda Fabric3. Principiul Inversiunii Dependenei4. Fabrica Abstract5. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
38/58
38
Familii de produse
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
39/58
39
Fabrica de produse
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
40/58
40
Specificarea unei fabrici
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
41/58
41
O familie de produse
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
42/58
42
O fabric concret
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
43/58
43
Schema conceptual
defineteinterfaa
asigurimplementarea
produselor
utilizareaproduselorcreate defabricaconcret
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
44/58
44
Exemplu de apel (I)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
45/58
45
Exemplu de apel (II)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
46/58
46
Rezultate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
47/58
47
Structura exemplului prezentat
+ Pizza
care interacioneaz cuingredientele
Clasele Pizza suntFactory object consumers
(Beneficiari)
Clasa abstract Pizza esteBeneficiar abstract iar
clasele derivate suntBeneficiari concrei
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
48/58
48
Definiie
ablonul Fabrica Abstract asigur ointerfa pentru crearea unor familiideobiecte nrudite sau dependente fr a le
specifica clasele concrete
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
49/58
49
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
50/58
50
Alte exemple (I)
Structur
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
51/58
51
Alte exemple (II)
Caz concret
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
52/58
52
Utilizri cunoscute
Interfee grafice cu utilizatorul cu diferiteaspecte 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://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
53/58
53
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 iprezentarea doar a interfeelor, nu i aimplementrilor acestora
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
54/58
54
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 schimbareainterfeei fabricii (implicit schimbarea tuturor subclaselor)
Metoda Fabric creeaz un singur tip de produs
Fabrica Abstract creeaz familii de produse, deci are nevoie de ointerfa mai complex
Produsele nrudite sunt grupate
Clienii sunt decuplai de clasele concrete
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
55/58
55Metoda Fabric
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
56/58
56Fabrica Abstract
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
57/58
57
Concluzii
Metoda Fabric Deleag crearea obiectelor ctre subclase Codul de creare nu trebuie s cunoasc
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://florinleon.byethost24.com/curs_ip.htm
-
8/10/2019 195047156 Ingineria Programarii Sabloane de Proiectare Creationale 1
58/58
58
Referine
Majoritatea imaginilor i secvenelor de coddin acest curs au fost preluate dinurmtoarele surse: Freeman, E., Freeman, E., Bates, B., Sierra, K.
(2004). Head First Design Patterns, O'ReillyMedia, Inc. http://www.msquaredweb.com/DesignPatterns/
HeadFirstDesignPatternsInCSharp.zip Data & Object Factory. Design Patterns
http://www.dofactory.com/Patterns/Patterns.aspx