You are on page 1of 58

Ingineria programrii

5. abloane de proiectare
creaionale (I)
Florin Leon
Universitatea Tehnic Gheorghe Asachi din Iai
Facultatea de Automatic i Calculatoare

http://florinleon.byethost24.com/curs_ip.htm
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/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://florinleon.byethost24.com/curs_ip.htm

Not

Programele care implementeaz abloanele


descrise i care pot fi descrcate din pagina
cursului sunt parte integrant a prezentrii

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/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://florinleon.byethost24.com/curs_ip.htm

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
5

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

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
6

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

Terminologie

Simple Factory = Fabrica Simpl


Factory Method = Metoda Fabric
Abstract Factory = Fabrica Abstract

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

Instanierea

new = concret

Schimbri?

Cod deschis pentru extensii dar nchis pentru modificri


Codul scris pentru o interfa funcioneaz cu orice
implementare
8

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

Identificarea aspectelor variabile

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

Modificrile

Seciunea variabil

Seciunea fix

10

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

ncapsularea crerii obiectelor

11

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

O fabric simpl
Metoda utilizat de clieni
pentru instanierea noilor
obiecte
n loc de string se
recomand enum

12

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

Utilizarea fabricii

Operatorul new a fost


nlocuit de metoda Create
din fabric

13

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

Structura Fabricii Simple

14

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

Discuie

Fabrica Simpl este util deoarece pot exista


mai muli clieni, de exemplu clasele:

Fabrica Simpl poate fi definit i ca metod


static

PizzaShopMenu
HomeDelivery etc.

Dar nu se mai poate moteni metoda Create

Fabrica Simpl nu este un ablon de


proiectare, ci un idiom de programare
15

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/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://florinleon.byethost24.com/curs_ip.htm

Extinderea modelului

17

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

Abstractizarea crerii

18

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

Subclasele decid
De fapt, utilizatorul
decide efectiv!

19

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

Exemplu de subclas

20

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

Declararea unei metode fabric

21

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

Exemplu de apel (I)

22

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

Exemplu de apel (II)

23

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

Implementarea (I)

24

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

Implementarea (II)

25

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

Rezultate

26

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

ablonul Metoda Fabric

27

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

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

28

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

Diagrama UML

29

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

Alt exemplu

30

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

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

31

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

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 parametrilor, n loc de string-uri, se pot


folosi: enumerri, constante etc.
32

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/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://florinleon.byethost24.com/curs_ip.htm

Dependenele dintre clase

PizzaStore depinde de
toate clasele concrete
34

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

Principiul
Inversiunii Dependenei

Depindei de abstraciuni,
nu de concretizri

Att la nivel nalt,


abstraciune
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)
35

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

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 (override) o metod implementat


a clasei de baz

Este o interdicie semantic, nu sintactic: funcionalitatea suprascris


nu trebuie s nlocuiasc funcionalitatea din clasa de baz, doar s
adauge ceva

Este posibil respectarea tuturor acestor recomandri ntotdeauna?


Probabil c nu.

Depinde de stabilitatea claselor (de exemplu clasa concret string


se folosete pe scar larg)
36

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/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://florinleon.byethost24.com/curs_ip.htm

Familii de produse

38

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

Fabrica de produse

39

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

Specificarea unei fabrici

40

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

O familie de produse

41

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

O fabric concret

42

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

Schema conceptual
definete
interfaa

asigur
implementarea
produselor

utilizarea
produselor
create de
fabrica
concret
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

43

Exemplu de apel (I)

44

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

Exemplu de apel (II)

45

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

Rezultate

46

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

Structura exemplului prezentat

+ Pizza
care interacioneaz cu
ingredientele

Clasele Pizza sunt


Factory object consumers
(Beneficiari)
Clasa abstract Pizza este
Beneficiar abstract iar
clasele derivate sunt
Beneficiari concrei

47

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

Definiie

ablonul Fabrica Abstract asigur o


interfa pentru crearea unor familii de
obiecte nrudite sau dependente fr a le
specifica clasele concrete

48

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

Diagrama UML

49

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

Alte exemple (I)

Structur

50

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

Alte exemple (II)

Caz concret

51

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

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.)

52

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

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
53

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

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 fabricii (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

Produsele nrudite sunt grupate


Clienii sunt decuplai de clasele concrete
54

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

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

55

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

56

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
57

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

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, OReilly Media, Inc.

http://www.msquaredweb.com/DesignPatterns/
HeadFirstDesignPatternsInCSharp.zip

Data & Object Factory. Design Patterns

http://www.dofactory.com/Patterns/Patterns.aspx

58

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

You might also like