Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Lezione 08 - Iterator

1,329 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

Lezione 08 - Iterator

  1. 1. Ingegneria del Software
  2. 2. Introduzione al pattern…
  3. 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. 4. Soluzione al problema introduttivo X Ingegneria del Software - A.A. 2003/2004
  5. 5. Presentazione del pattern Iterator
  6. 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. 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. 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. 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. 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. 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
  12. 12. Domande? Ingegneria del Software - A.A. 2003/2004

×