SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
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

Mais conteúdo relacionado

Semelhante a 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
 

Semelhante a 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
 

Último

XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 

Último (8)

XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 

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