Lezione 08 - Iterator

1,237 views
1,189 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,237
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
29
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×