SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à Lezione 08 - Iterator

Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: AspectjMatteo Baccan
 
Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - SingletonMarco Bianchi
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - DelegationMarco Bianchi
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)lukebonham
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class LibraryManuel Scapolan
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseFelice Pescatore
 
Lezione 03 - Interface
Lezione 03 - InterfaceLezione 03 - Interface
Lezione 03 - InterfaceMarco Bianchi
 
Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - FaçadeMarco Bianchi
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1Christian Nastasi
 
Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsMarco Bianchi
 
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio MercurioTesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio MercurioAlessio Mercurio
 

Similaire à Lezione 08 - Iterator (20)

Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: Aspectj
 
Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - Singleton
 
Eclipse and Java
Eclipse and JavaEclipse and Java
Eclipse and Java
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - Delegation
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 
Repository pattern
Repository patternRepository pattern
Repository pattern
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
 
Lezione 03 - Interface
Lezione 03 - InterfaceLezione 03 - Interface
Lezione 03 - Interface
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - Façade
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1
 
Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design Patterns
 
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio MercurioTesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 
Corso Java
Corso JavaCorso Java
Corso Java
 

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