195047156 ingineria programarii sabloane de proiectare creationale 1

Upload: madamihaelamadalina

Post on 02-Jun-2018

234 views

Category:

Documents


1 download

TRANSCRIPT

  • 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