Ingineria programarii: Sabloane de proiectare creationale 2

download Ingineria programarii: Sabloane de proiectare creationale 2

of 54

Transcript of Ingineria programarii: Sabloane de proiectare creationale 2

  • 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