-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
1/54
Ingineria programrii
6. abloane de proiectarecreaionale (II)
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/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
2/54
abloane de proiectarecreaionale (II)
1. Singleton2. Prototip
3. Constructor4. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
3/54
3
Terminologie
Singleton
Prototype = Prototip
Builder = Constructor ( constructorul uneiclase, fr. Monteur, montator, asamblor)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
4/54
Not
Programele care implementeaz abloaneledescrise i care pot fi descrcate din paginacursului sunt parte integrant a prezentrii
4Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
5/54
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
6/54
6
Singleton
De multe ori este nevoie s garantm faptul ca o clas s aib osingur instan (sau un numr limitat) Bazin de resurse (engl. resource pool)
De exemplu: fire de execuie, conexiuni de reea
Registrul Windows Gestionarea unui set de preferine
Interfa cu sistemul de operare
Drivere pentru dispozitive
De exemplu: imprimant, plac grafic, controller Depozit de date (engl. data repository)
Un singleton este o clas care poate avea doar o singurinstan
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
7/54
7
Implementarea clasic
Scop:Asigur faptul c o clas aredoar o singur instan i furnizeazun punct de acces global ctre aceasta
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
8/54
8
Alternative
Variabil global static Se aloc automat, chiar dac nu va fi folosit
Iniializarea ntrziat este util n cazul ncare obiectul folosete multe resurse Instana nu se aloc dect n momentul utilizrii
efective
Spre deosebire de varianta static, clasaSingleton se poate deriva
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
9/54
9
Structur
Singleton
- theInstance : Singleton = null
- Singleton()
+ instance() : Singleton
Client
if ( theInstance == null )
theInstance = new Singleton()
return instance
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
10/54
10
Comportament
:Client Singleton:Class
s:Singleton
s=instance()
[no instance]
create
sd SingletonBehavior
opt
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
11/54
11
Multithreading
Dou fire de execuie diferite pot accesaseciunea simultan i pot instania douobiecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
12/54
12
Abordarea 1
seciune sincronizat
toate citirile se fac dup
blocare iar toate scrierile sefac nainte de deblocare
performaele scad datorit
blocrii/deblocrii la fiecare accesFlorin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
13/54
13
Abordarea 2
double-checked locking
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
14/54
14
Modificatorul volatile utilizatpentru un cmp accesat de maimulte fire se execuie asigurfaptul c un fir de execuie citete
valoarea cea mai recent acmpului, setat de un alt fir deexecuie.
Sistemul citete valoarea curenta unui obiect volatil n momentul
solicitrii, chiar dac instruciuneaprecedent a citit valoareaaceluiai obiect. De asemenea,valoarea obiectului este scrisimediat dup atribuire.
Abordarea 2
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
15/54
15
Abordarea 3
detalii n slide-ul urmtor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
16/54
16
Flagul beforef ieldini t (I)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
17/54
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
18/54
Constructorul static
n exemplul de mai jos, dac flag-ul beforefieldinitestesetat, este posibil ca r1s nu fie iniializat cnd seapeleaz metodele Method1i Method2, deoarecemetodele nu acceseaz cmpulr1
n general, se recomand folosirea constructorului static,pentru a evita defecte subtile, greu de depistat
18
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
19/54
19
Alte probeme
Java Classloader
Garbage collector
C++ Resursele folosite de un Singleton trebuie dezalocate la
nchiderea aplicaiei
Singleton-ul Meyers definete instana ca o variabil local
static ntr-o funcie, care returneaz o referin la ea O astfel de definiie invoc destructorul Singleton nainte
de terminarea programului, prevenind scurgerile dememorie (engl. memory leaks)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
20/54
20
Singleton n C++
GoF: instana este creat cndse apeleaz prima datfuncia, dar nu este distrus
Meyers: instana este creat la feldar destructorul se apeleaz
nainte de terminarea programului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
21/54
21
Exemple C#
Cele 4 variante...
Structura...
Load Balancer...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
22/54
Cele 4 variante
22
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
23/54
Structura
23
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
24/54
Load Balancer
24
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
25/54
25
Discuie
Unele abloane sunt implementate folosind unSingleton De exemplu, o Fabric Abstractpoate utiliza un Singleton
pentru a asigura unicitatea fabricii Fabriciletrebuie s fie accesibile global; prin folosirea unui
Singleton, se asigur faptul c o singur fabricva controlacrearea obiectelor
Aceast abordare este util dac fabricaaloc instanele
de obiecte dintr-un bazin (engl. pool) de obiecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
26/54
abloane de proiectarecreaionale (II)
1. Singleton2. Prototip
3. Constructor
4. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
27/54
27
Clonarea
O alternativ la instanierea unei clase esterealizarea unei cpii a unui obiect O clon este o copie a unui obiect
Clona are starea sursei la momentul crerii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
28/54
28
Copii superficiale i profunde
engl. shallow copies, deep copies
La copierea obiectelor care au referine la alteentiti (de exemplu obiecte) se pune ntrebarea:
trebuie copiate referinele sau entitile refereniate? Copie superficial: se copie referinele
Copie profund: se copie entitile refereniate iorice alte entiti refereniate recursiv
Tipul de copiere recomandat depinde de situaie
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
29/54
29
Copii superficiale i profunde
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
30/54
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
31/54
31
Structur
interfacePrototype
clone()
Client
ConcretePrototype1
ConcretePrototype2
prototype
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
32/54
32
Comportament
:Client :Prototype
p:Prototypep=clone() create
sd PrototypeBehavior
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
33/54
33
Exemplu: prototipuri grafice
Se poate construi un editor de note muzicaleparticulariznd un editor grafic general
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
34/54
34
Template-urile Word
Template-urile sunt prototipuri de documente completateparial, care urmeaz s fie modificate de utilizator
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
35/54
Font-uri C#
textBox.Font = new Font(textBox.Font, newStyle);
35
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
36/54
Clonare n C#
Clonare superficial
Clonare profund
36
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
37/54
37
Exemple C#
Structura...
Color Manager...
Swimmers...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
38/54
38
Structura
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
39/54
39
Color Manager
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
40/54
40
Swimmers
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
41/54
41
Aplicabilitate
Cnd clienii trebuie decuplai de produse: Dac clasele care trebuie instaniate sunt specificate n
momentul execuiei (de exemplu ncrcare dinamic)
Pentru a evita construirea unei ierarhii de fabrici paralelecu ierarhia de produse
Dac instanele unei clase pot avea una sau doar ctevacombinaii distincte de stare
Prototipuleste asemntorcu Metoda Fabric, nsfolosete clonarea n loc de instaniere
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
42/54
42
Dificulti
Se poate dori iniializarea unor valori dup clonare
Problema principal este legat de tipul clonrii
Clonarea superficial poate afecta datele partajate
n cazul unei clone profunde, toate componenteleclonei trebuie s fie clone ale componentelorprototipurilor
Clonarea profund este imposibil n cazulreferinelor circulare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
43/54
abloane de proiectarecreaionale (II)
1. Singleton2. Prototip
3. Constructor
4. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
44/54
44
Constructor
Scop: separarea construciei unui obiectcomplex de reprezentarea sa astfel nctacelai proces de construcie s poat crea
reprezentri diferite
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
45/54
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
46/54
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
47/54
47
Structura
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
48/54
48
Vehicle Builder
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
49/54
49
Equities
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
50/54
50
Aplicabilitate
Cnd algoritmul de creare a unui obiect complexeste independent de prile care compunobiectul i de modul lor de asamblare
Cnd procesul de construcie trebuie s permitreprezentri diferite pentru obiectul construit
ablonul este des folosit n realizarea parserelor
pentru diferite formate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
51/54
51
Discuie(I)
Constructorulcreeaz un obiect complex pas cu pas.Fabrica Abstractcreeaz familii de obiecte, cte uncomponent odat
Produsul este returnat de Constructorca ultim pas,Fabrica Abstractreturneaz un produs imediat
Constructorulncapsuleazlogica modului n care esteasamblat un obiect complex, astfel nct clientul poatedoar s cear o configuraie iar Constructoruldirecioneaz logica de construire
Fabrica Abstracteste preocupat de CE se realizeaz,Constructoruleste preocupat de CUM se realizeaz
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
52/54
52
Discuie(II)
Deseori, proiectarea ncepe cu Metoda Fabric(maisimpl) i evolueaz ctre alte abloane mai flexibile imai complexe (Prototip, Constructor, Fabrica Abstract)
Constructorulpoate utiliza alte abloane pentru aimplementa componentele care se construiesc
Constructorul, Fabrica Abstracti Prototipulpot utiliza unSingletonpentru implementare
Constructorulconstruiete deseori o Compunere(engl. Composite, ablon structural)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
53/54
53
abloane nrudite
Prototip Fabricaabstract
Constructor
Un obiect folosit pentru a creaalte obiecte-produs specifice
Obiectul fabricproduse din mai
multe clase
Un produs complexeste construit
incremental
Produsul este creatprin copierea i
modificarea unuiobiect prototip
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
-
8/13/2019 Ingineria programarii: Sabloane de proiectare creationale 2
54/54
54
Concluzii
ablonul Singletongaranteaz c dintr-o claspoate exista numai o singur instan
ablonul Prototipare ca scop clonarea
instanelor de obiecte n momentul execuiei pebaza unor obiecte prototip
ablonul Constructorabstractizeaz paii de
construire a unui obiect astfel nct diferiteimplementri ale acestor pai pot construireprezentri diferite ale obiectelor