SlideShare a Scribd company logo
Ingegneria del Software
Introduzione al pattern…
Laboratorio: problema introduttivo



• L’inventario di un magazzino è composto da collezioni di
  oggetti che rappresentano i prodotti (InventoryItem).

• Tali oggetti possono essere memorizzati in un database, in
  un array, in una linked list, ecc.

• Un’applicazione vuole accedere sequenzialmente agli oggetti
  in modo indipendente dalla struttura dati usata per
  memorizzarli

                Come risolvere il problema?
                Come risolvere il problema?



                   Ingegneria del Software - A.A. 2003/2004
Soluzione al problema introduttivo




                                        X

        Ingegneria del Software - A.A. 2003/2004
Presentazione del pattern
        Iterator
Il pattern Iterator (1/6)


•   Nome       Iterator [GoF95]

•   Synopsis   Fornisce una modalità di accesso sequenziale ad
               una collezione di oggetti indipendentemente
               dalla struttura dati usata per memorizzarli.

•   Context    Cfr. esempio introduttivo

•   Forces     - Una classe ha bisogno di accedere al contenuto
                 di una collezione senza risultare dipendente
                 dalla classe usata per implementare la
                 collezione
               - Una classe ha bisogno di un modo uniforme per
                 accedere il contenuto di più collezioni
                 eterogenee.

                    Ingegneria del Software - A.A. 2003/2004
Il pattern Iterator (2/6)

     Da Context…

     … a Solution
                                                     Client




• Solution - Gli “attori” del pattern Iterator sono:
– Collection: Classe che incapsula una collezione di oggetti o valori
– IteratorIF: Interfaccia che definisce i metodi di accesso sequenziale
– Iterator: Classe che implementa IterationIF
– CollectionIF: Interfaccia che obbliga una collezione a creare il proprio
                Iterator

                        Ingegneria del Software - A.A. 2003/2004
Il pattern Iterator (3/6)



•   Consequences

       - E’ possibile accedere agli oggetti senza conoscere la
         struttura dati contenente tali oggetti.

       - Usando più iteratori è facile gestire diversi
         “attraversamenti” contemporanei

       - E’ possibile per una classe fornire più iteratori che
         attraversano la collezione in modo diverso (su cosa si
         basa il metodo getNextItem()?)



                     Ingegneria del Software - A.A. 2003/2004
Il pattern Iterator (4/6)


•   Implementation

    - Oltre ai metodi già presentati è possibile trovare:
         - Test per l’esistenza e la restituzione dell’elemento
           precedente
         - Posizionamento sul primo o ultimo elemento
         - Cardinalità della collezione
         -…
    - Spesso Iterator è implementato come inner class privata
      della Collection associata
    - Modificare il contenuto di una collezione durante
      l’attraversamento di un client può creare problemi (oggetti
      mancanti o duplicati)


                     Ingegneria del Software - A.A. 2003/2004
Il pattern Iterator (5/6)



•   Java API usage



      java.util.Collection
       java.util.Collection                      java.util.Iterator
                                                  java.util.Iterator




        java.util.Vector
         java.util.Vector                     Inner class private di:
                                               Inner class private di:
     java.util.LinkedList                         java.util.Vector
                                                   java.util.Vector
      java.util.LinkedList
      java.util.ArrayList                      java.util.LinkedList
                                                java.util.LinkedList
       java.util.ArrayList
                …                               java.util.ArrayList
                                                 java.util.ArrayList
                 …
                                                          ……

                     Ingegneria del Software - A.A. 2003/2004
Il pattern Iterator (6/6)

•   Code example

                      InventoryIteratorIF
    public interface InventoryIteratorIF {
         public boolean hasNextInventoryItem() ;
         //…
    }
                  InventoryCollection
    public class InventoryCollection { //...
         public InventoryIteratorIF iterator() {
                  return new InventoryIterator();
         }
                         InventoryIterator implements InventoryIteratorIF
          private class InventoryIterator
                  {
                  public boolean hasNextInventoryItem() {
                          //...
    } //… } }

•   Related Patterns   Adapter, Factory Method, Null Object

                         Ingegneria del Software - A.A. 2003/2004
Domande?




Ingegneria del Software - A.A. 2003/2004

More Related Content

PDF
Lezione 11 - Visitor
PDF
Pe a3 perl-metaprogramming
PDF
Lezione 09 - Abstract Factory
PDF
Lezione 11 - Bridge
PDF
Lezione 04 - Factory method
PPTX
Contentmarketing
PPTX
Join us to development New Career Future
PDF
Lezione 13 - Strategy
Lezione 11 - Visitor
Pe a3 perl-metaprogramming
Lezione 09 - Abstract Factory
Lezione 11 - Bridge
Lezione 04 - Factory method
Contentmarketing
Join us to development New Career Future
Lezione 13 - Strategy

Similar to Lezione 08 - Iterator (20)

PDF
Webbit 2004: Tiger, java
PDF
Webbit 2004: Aspectj
PDF
Lezione 01 - Singleton
PPTX
Eclipse and Java
PPTX
Scala: come recuperare la programmazione funzionale e perché
PDF
Lezione 6a: Design Pattern Strutturali
PDF
Lezione 02 - Delegation
PDF
Lezione design patterns 2011 (Peron)
PDF
C# e la Framework Class Library
PDF
Repository pattern
PDF
DotNetToscana - Sessione TypeScript
PPTX
Object Oriented with Java Programmazione Base
PDF
Lezione 03 - Interface
PDF
Java OCA teoria 1
PDF
Lezione 06 - Façade
PDF
X-NERVal e Component NER
PDF
Repository pattern slides v1.1
PDF
Lezione 00 - Introduzione ai Design Patterns
PPSX
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
PDF
Corso Java 1 - BASE
Webbit 2004: Tiger, java
Webbit 2004: Aspectj
Lezione 01 - Singleton
Eclipse and Java
Scala: come recuperare la programmazione funzionale e perché
Lezione 6a: Design Pattern Strutturali
Lezione 02 - Delegation
Lezione design patterns 2011 (Peron)
C# e la Framework Class Library
Repository pattern
DotNetToscana - Sessione TypeScript
Object Oriented with Java Programmazione Base
Lezione 03 - Interface
Java OCA teoria 1
Lezione 06 - Façade
X-NERVal e Component NER
Repository pattern slides v1.1
Lezione 00 - Introduzione ai Design Patterns
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Corso Java 1 - BASE
Ad

Lezione 08 - Iterator

  • 3. Laboratorio: problema introduttivo • L’inventario di un magazzino è composto da collezioni di oggetti che rappresentano i prodotti (InventoryItem). • Tali oggetti possono essere memorizzati in un database, in un array, in una linked list, ecc. • Un’applicazione vuole accedere sequenzialmente agli oggetti in modo indipendente dalla struttura dati usata per memorizzarli Come risolvere il problema? Come risolvere il problema? Ingegneria del Software - A.A. 2003/2004
  • 4. Soluzione al problema introduttivo X Ingegneria del Software - A.A. 2003/2004
  • 6. Il pattern Iterator (1/6) • Nome Iterator [GoF95] • Synopsis Fornisce una modalità di accesso sequenziale ad una collezione di oggetti indipendentemente dalla struttura dati usata per memorizzarli. • Context Cfr. esempio introduttivo • Forces - Una classe ha bisogno di accedere al contenuto di una collezione senza risultare dipendente dalla classe usata per implementare la collezione - Una classe ha bisogno di un modo uniforme per accedere il contenuto di più collezioni eterogenee. Ingegneria del Software - A.A. 2003/2004
  • 7. Il pattern Iterator (2/6) Da Context… … a Solution Client • Solution - Gli “attori” del pattern Iterator sono: – Collection: Classe che incapsula una collezione di oggetti o valori – IteratorIF: Interfaccia che definisce i metodi di accesso sequenziale – Iterator: Classe che implementa IterationIF – CollectionIF: Interfaccia che obbliga una collezione a creare il proprio Iterator Ingegneria del Software - A.A. 2003/2004
  • 8. Il pattern Iterator (3/6) • Consequences - E’ possibile accedere agli oggetti senza conoscere la struttura dati contenente tali oggetti. - Usando più iteratori è facile gestire diversi “attraversamenti” contemporanei - E’ possibile per una classe fornire più iteratori che attraversano la collezione in modo diverso (su cosa si basa il metodo getNextItem()?) Ingegneria del Software - A.A. 2003/2004
  • 9. Il pattern Iterator (4/6) • Implementation - Oltre ai metodi già presentati è possibile trovare: - Test per l’esistenza e la restituzione dell’elemento precedente - Posizionamento sul primo o ultimo elemento - Cardinalità della collezione -… - Spesso Iterator è implementato come inner class privata della Collection associata - Modificare il contenuto di una collezione durante l’attraversamento di un client può creare problemi (oggetti mancanti o duplicati) Ingegneria del Software - A.A. 2003/2004
  • 10. Il pattern Iterator (5/6) • Java API usage java.util.Collection java.util.Collection java.util.Iterator java.util.Iterator java.util.Vector java.util.Vector Inner class private di: Inner class private di: java.util.LinkedList java.util.Vector java.util.Vector java.util.LinkedList java.util.ArrayList java.util.LinkedList java.util.LinkedList java.util.ArrayList … java.util.ArrayList java.util.ArrayList … …… Ingegneria del Software - A.A. 2003/2004
  • 11. Il pattern Iterator (6/6) • Code example InventoryIteratorIF public interface InventoryIteratorIF { public boolean hasNextInventoryItem() ; //… } InventoryCollection public class InventoryCollection { //... public InventoryIteratorIF iterator() { return new InventoryIterator(); } InventoryIterator implements InventoryIteratorIF private class InventoryIterator { public boolean hasNextInventoryItem() { //... } //… } } • Related Patterns Adapter, Factory Method, Null Object Ingegneria del Software - A.A. 2003/2004