SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Ähnlich wie Lezione 08 - Iterator

Lezione 01 - Singleton
Lezione 01 - SingletonLezione 01 - Singleton
Lezione 01 - Singleton
Marco Bianchi
 
Lezione 02 - Delegation
Lezione 02 - DelegationLezione 02 - Delegation
Lezione 02 - Delegation
Marco Bianchi
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
lukebonham
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
Sinergia Totale
 
Lezione 03 - Interface
Lezione 03 - InterfaceLezione 03 - Interface
Lezione 03 - Interface
Marco Bianchi
 
Lezione 06 - Façade
Lezione 06 - FaçadeLezione 06 - Façade
Lezione 06 - Façade
Marco Bianchi
 
Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design Patterns
Marco Bianchi
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
nico07fusco
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
sasaselvatico
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 

Kürzlich hochgeladen (20)

discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 

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