Ingineria programarii: Sabloane de proiectare structurale 2

Embed Size (px)

Citation preview

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    1/96

    Ingineria programrii

    8. abloane de proiectarestructurale (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 structurale 2

    2/96

    abloane de proiectarestructurale (II)

    1. Proxy2. Categoria Musc3. Compunerea4. Principiul Responsabilitii Unice5. Iteratorul (ablon comportamental: Ia)6. Concluzii

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    3/96

    3

    Terminologie

    Proxy = Intermediar, Delegare

    Flyweight = Categoria Musc

    Composite = Compunere, Obiect compus Iterator

    Principle of Single Responsibility =Principiul Responsabilitii Unice

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    4/96

    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 structurale 2

    5/96

    abloane de proiectarestructurale (II)

    1. Proxy2. Categoria Musc3. Compunerea4. Principiul Responsabilitii Unice5. Iteratorul (SC Ia)6. Concluzii

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    6/96

    6

    Tipuri de delegare

    Delegarea la distan (Remote Proxy)

    Delegarea virtual (Virtual Proxy)

    Delegarea de protecie (Protection Proxy) Referin inteligent (Smart Reference)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    7/96

    7

    Exemplu

    Monitorizarea la distan a unor mainipentru vnzarea gumei de mestecat

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    8/96

    8

    Abordarea local

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    9/96

    9

    Programul de test

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    10/96

    10

    Abordarea distribuit

    Scopul este minimizarea modificrilor n codul deja creat

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    11/96

    11

    Apelurile metodelor (I)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    12/96

    12

    Apelurile metodelor (II)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    13/96

    13

    Apelurile metodelor (III)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    14/96

    14

    Apelurile metodelor (IV)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    15/96

    15

    Apelurile metodelor (V)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    16/96

    16

    Apelurile metodelor (VI)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    17/96

    17

    Abordarea distribuit

    Clasa Monitorrmne aproape la felFlorin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    18/96

    18

    Programul de test

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    19/96

    19

    Rulare

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    20/96

    20

    Rezultate

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    21/96

    21

    .NET

    Delegarea la distan se poate realizautiliznd: Socket-uri (socluri)

    Remoting

    Windows Communication Foundation

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    22/96

    22

    Diagrama UML

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    23/96

    23

    Definiie

    ablonul Proxyasigur un surogat sau un nlocuitorpentru alt obiect pentru a controla accesul la acesta Delegarea la distancontroleaz accesul ctre un obiect

    nelocal Delegarea virtualcontroleaz accesul la o resurs

    costisitor de creat

    Delegarea de proteciecontroleaz accesul la o resurs pebaza unor drepturi de acces

    Referin inteligent: copierea la scriere (copy on write),blocarea unui obiect, numrarea referinelor, caching

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    24/96

    24

    Delegarea virtual

    Delegarea la distan

    Delegarea virtual

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    25/96

    25

    Exemplu

    ncrcarea unei imagini Foarte mari

    De pe Internet

    Proxy-ul afieaz un mesaj pn cndimaginea este ncrcat i poate fi afiat

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    26/96

    26

    Imagine mare

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    27/96

    27

    Exemplu de rulare

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    28/96

    28

    Imagine de pe Internet

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    29/96

    29

    Exemplu de rulare

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    30/96

    30

    Delegarea de protecie

    Serviciu de matchmaking

    O persoan (owner) i poate modifica numele, sexul (!), interesele

    Nu i poate modifica ratingul (hot or not)

    Alt persoan (non-owner) Nu i poate modifica alteia numele, sexul, interesele

    i poate modifica ratingul

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    31/96

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    32/96

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    33/96

    33

    la fel ca Name

    IPerson, Person i PersonProxy trebuie s fientr-un namespace diferit de cel al clientului

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    34/96

    34

    Exemplu de rulare (I)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    35/96

    35

    Exemplu de rulare (II)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    36/96

    36

    Rezultate

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    37/96

    37

    Copierea la scriere

    Un proxy se poate folosi i pentru pstrareacpiilor unor obiecte mari care pot sau nu s semodifice

    Dac se dorete crearea unei alte instane deacest tip, proxy-ul poate decide s nu facefectiv copia, folosind n continuare primul obiect

    Cnd clientulncearc s fac modificri n aldoilea obiect, proxy-ul face copia i modificrile

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    38/96

    38

    Caching Proxy

    ine evidena obiectelor create sau resurselordisponibile i cnd apare o cerere, returneazun obiect sau o resurs din cache

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    39/96

    39

    Discuie

    Adaptorulasigur o interfa diferit Decoratorulasigur aceeai interfa, dar cu noi

    funcionaliti

    Proxy-ul asigur tot aceeai interfa, dar cu unscop diferit Intercepteaz un apel pe care l trimite mai departe

    obiectului int Chiar dac sunt incluse i funcionaliti noi, nu acesta este

    scopul principal Proxy-ul poate s i instanieze obiecte, Decoratorul

    nu (primete obiectul de decorat)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    40/96

    abloane de proiectarestructurale (II)

    1. Proxy2. Categoria Musc3. Compunerea4. Principiul Responsabilitii Unice

    5. Iteratorul (SC Ia)6. Concluzii

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    41/96

    41

    O instan a unuiprogram cu mai

    multe documente

    Mai multe instaneale aceluiaiprogram, cte unapentru fiecaredocument

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    42/96

    42

    Camerele de hotel

    Mai multe tipuri de camere Economy, Deluxe, Royal

    Mai multe tipuri de amenajri interioare, n funcie de

    preferinele clienilor i tipul de camer Flori, spun, culoarea prosoapelor

    Camerele rmn aceleai

    Preferinele variaz Acestea sunt obiecte de dimensiuni mici, care instaniaz

    un numr restrns de clase, ns sunt foarte numeroase

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    43/96

    43

    Categoria Musc

    Ideea de baz este partajarea instanelor

    Fiecare instan are: Date intrinseci(interne, constante)

    Camerele

    Date extrinseci(externe, variabile) Preferinele clienilor

    De obicei exist o Fabricpentru instaniereaobiectelor Flyweight

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    44/96

    44

    Diagrama UML a exemplului

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    45/96

    45

    Definiie

    ablonul Categoria Muscfolosetepartajarea pentru a gestiona eficient unnumr mare de obiecte de dimensiuni mici

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    46/96

    46

    Diagrama UML

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    47/96

    47

    Clase partajate i nepartajate

    Pentru clasele partajate (ConcreteFlyweight)exist o singur instan, pentru care separticularizeaz datele extrinseci

    Clasele nepartajate (UnsharedConcreteFlyweight)sunt clase normale care implementeaz aceeaiinterfa ablonul nu impune partajarea tuturor instanelor; pentru

    clasele nepartajate putem avea mai multe instane i instanele lor pot fi create de aceeai Fabric

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    48/96

    48

    Alte exemple

    Structur...

    Caractere...

    Directoare Imaginea unui director este

    aceeai, n funcie de tip(selectat, neselectat)

    Exist un obiect directorselectat i un obiectdirector neselectat

    Particularizarea se face nfuncie de coordonate

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    49/96

    Structur

    49

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    50/96

    Caractere

    50

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    51/96

    Directoare

    51

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    52/96

    52

    Aplicaii n lumea real

    Editoare de documente n care fiecare simbol(engl. glyph) este flyweight

    Programul Doc (1992)

    Un document cu 180.000 de caractere necesitalocare de spaiu pentru doar 480 de obiecte caracter

    Caching de obiecte n aplicaii web unde

    memoria este esenial(de exemplu applet-uri)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    53/96

    53

    Discuie

    Obiectele flyweight sunt obiecte pariale (instane virtuale),care se completeaz cu starea extern

    Categoria Muscdifer de Prototipdeoarece nu se foloseteclonarea pentru schimbarea strii interne a obiectelor flyweight

    Categoria Muscdifer de Singletondeoarece aici exist cte oinstan pentru fiecare caz diferit, nu doar una singur global

    Deseori obiectele flyweight sunt create de o Fabric, dintr-unbazin (engl. pool) de obiecte De exemplu un Dictionary/Hashtable, n care cheia este cazul,

    particularizarea obiectului Fabricautilizat pentru crearea obiectelor poate fi Singleton

    i pentru Categoria Muscse poate utiliza metoda copierii lascriere (Proxy)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    54/96

    abloane de proiectare

    structurale (II), abloane deproiectare comportamentale (Ia)

    1. Proxy2. Categoria Musc3. Compunerea4. Principiul Responsabilitii Unice

    5. Iteratorul (SC Ia)6. Concluzii

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    55/96

    55

    Fuziunea restaurantelor

    Pentru meniuri, unulfolosete un vector deMenuItem, cellalt o

    list de MenuItem Cele 2 meniuri trebuie

    incluse ntr-un meniuunitar

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    56/96

    56

    mbinarea: abordarea 1

    adugarea unor noimeniuri implic

    schimbarea codului

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    57/96

    57

    mbinarea: abordarea 2

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    58/96

    58

    mbinarea: abordarea 2

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    59/96

    59

    Clasele agregat

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

    Clasele agregat

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    60/96

    60

    Clasele agregat

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    61/96

    61

    Clasele iterator

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    62/96

    62

    Clasele iterator

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    63/96

    63

    Utilizare

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    64/96

    64

    Definiie

    ablonul Iteratorasigur o cale de accesaresecvenial a elementelor unui obiectagregat, fr a expune reprezentarea lui de

    baz

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    65/96

    65

    Diagrama UML

    numele metodelorpot fi diferite ct

    vreme funcionalitatearmne aceeai

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    66/96

    66

    Discuie

    Metodele Iteratoruluipot avea nume diferite Java Iterator: next(), hasNext(), remove()

    C# IEnumerator: Current, MoveNext(), Reset()

    Exist Iteratoriinterni i externi Iteratorul externeste controlat de client, ca n exemplul

    precedent (cu metoda next)

    Iteratorul interneste controlat de Iteratorul nsui, cruiatrebuie s i se spun ce operaii s efectueze cuelementele pe care le parcurge Utilizat mai ales n limbaje ca Lisp, Smalltalk etc. sau cnd se

    pot trimite ca parametri funcii anonime pentru operaii

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    67/96

    67

    Principiul Responsabilitii Unice

    O clas trebuie s aib un singur motiv deschimbare Fiecare responsabilitate este o zon de posibile

    schimbri Deci o clas trebuie s aib o singur

    responsabilitate

    Respectarea principiului conduce la cretereacoeziunii clasei

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

    Extinderea exemplului

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    68/96

    68

    Extinderea exempluluiprecedent

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    69/96

    69

    Iteratorul

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    70/96

    Tratarea unitar a meniurilor

    70

    Un iterator pentru lista demeniuri i cte un iterator

    pentru fiecare meniu n parte

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    71/96

    71

    Alte exemple

    Structur...

    Iterator cu pas variabil...

    Iterator de filtrare...

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    72/96

    72

    Colecii C#

    Colecii ArrayList

    BitArray

    Hashtable Queue

    SortedList

    Stack

    Colecii generice Dictionary

    Hashset

    LinkedList List

    Queue

    SortedDictionary

    SortedList Stack

    Obiecte agregate

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    73/96

    73

    Aplicabilitate

    ablonul se utilizeaz pentru: A accesa coninutul unui obiect agregat fr a expune

    reprezentarea intern

    A asigura suport pentru mai multe traversri aleobiectelor agregate

    A furniza o interfa uniform pentru traversareastructurilor agregate diferite

    Pentru a suporta o iteraie polimorfic

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    74/96

    74

    Avantaje

    Suport variaii n traversarea unui agregat Obiectele agregatepot fi traversate n mai multe feluri i de

    mai multe ori

    Obiectele Iteratorsimplific interfaaAgregat Agregatulare nevoie de o metod unic pentru creareaIteratorului

    Scade cuplarea dintre client i obiectele agregate

    Crete coeziunea obiectului agregatprin eliminareanecesitii de a asigura el nsui traversarea

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    75/96

    75

    Discuie

    Iteratoriisunt deseori aplicai pe structurirecursive precum obiectele Compuse(engl.Composite), prezentate n continuare

    Iteratoriipolimorfici se bazeaz pe MetodeFabricpentru a instania subclasa Iteratorcorect

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

    Extinderea exemplului cu meniuri:

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    76/96

    76

    Extinderea exemplului cu meniuri:adugarea de submeniuri

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    77/96

    77

    Reprezentarea de tip arbore

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    78/96

    78

    Definiie

    ablonul Compunerecompune obiecte nstructuri de tip arbore pentru a reprezentaierarhii parte-ntreg. ablonul permite

    clienilor s trateze uniform obiecteindividuale i compuneri de obiecte

    Pot fi ignorate diferenele dintre obiectelecompuse i obiectele elementare

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    79/96

    79

    Diagrama UML

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

    Interfaa comun pentru

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    80/96

    Interfaa comun pentrunoduri i frunze

    Implementri implicitepentru fiecare metod

    80

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    81/96

    81

    Frunzele

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

    Nodurile (I)

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    82/96

    82

    Nodurile (I)

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

    Nodurile (II)

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    83/96

    83

    Nodurile (II)

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    84/96

    84

    Principiul Responsabilitii Unice

    ablonul Compunereare 2 responsabiliti: Gestionarea ierarhiei

    Executarea operaiilor legate de meniuri

    Compromis pentru creterea transparenei Tratarea similar a nodurilor i frunzelor

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    85/96

    85

    Iteratorulcompus

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    86/96

    86

    Discuie

    Metoda Printera mult mai simpl Este un exemplu de Iterator extern

    Iteratorul compuseste mult mai complex Este un Iterator internspecializat pentru

    traversarea arborelui

    Este mai uor de apelat din exterior

    Complexitatea se mut din codul client n codulIteratorului

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    87/96

    87

    Iteratorul nul

    Abordarea 1. Pentrufrunze, CreateIterator()poate returna null Este necesar un test

    n codul client

    Abordarea 2. Se poatecrea un Iteratorcarereturneaz ntotdeaunafalsen hasNext() /MoveNext()

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    88/96

    88

    Meniul vegetarian

    n mod normal, tratarea excepiilor nu trebuie utilizat pentru logica programului

    Este nc un exemplu de compromis pentru pstrarea transparenei

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    89/96

    89

    Alte exemple

    Structur:elemente de desenare...

    SimpleComposite: angajai...

    DLinkComposite: angajai i efi...

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    90/96

    Elemente de desenare

    90

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    91/96

    Angajai

    91

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    92/96

    Angajai i efi

    92

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    93/96

    93

    Aplicabilitate

    Cnd se dorete reprezentarea unei ierarhii deobiecte, de tip parte-ntreg

    Cnd se dorete ignorarea de ctre clieni a

    diferenelor dintre compunerile de obiecte iobiectele individuale Clienii trateaz uniform toate obiectele din structura

    compus

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    94/96

    94

    Avantaje i dezavantaje

    Simplific clienii, care trateaz uniform nodurilei frunzele

    Faciliteaz adugarea unor noi tipuri de

    componente

    Poate face un proiect prea general

    ngreuneaz restricionarea componentelor uneicompuneri

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    95/96

    95

    Discuie

    ablonul Compunereeste uneori utilizatmpreun cu ablonul Decorator

    Cnd se utilizeaz mpreun Decoratorii Compuneri,

    ei vor avea de obicei o clas printe comun Decoratoriivor trebui s implementeze interfaa

    Componentcu operaii precumAdd, RemoveiGetChild

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

  • 8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2

    96/96

    Concluzii

    Proxy-ul asigur un surogat sau un nlocuitor pentru alt obiectpentru a controla accesul la acesta

    Categoria Muscfolosete partajarea pentru a gestionaeficient un numr mare de obiecte de dimensiuni mici

    Compunereacompune obiecte n structuri de tip arborepentru a reprezenta ierarhii parte-ntreg i permite clienilor strateze uniform obiecte individuale i compuneri de obiecte

    Iteratorulasigur o cale de accesare secvenial aelementelor unui obiect agregat, fr a expune reprezentarealui de baz