Lezione 08 - Iterator

download Lezione 08 - Iterator

If you can't read please download the document

Transcript of Lezione 08 - Iterator

  • 1. Ingegneria del Software

2. Introduzione al pattern 3. Laboratorio: problema introduttivo Linventario 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. Unapplicazione vuole accedere sequenzialmente agli oggetti in modo indipendente dalla struttura dati usata per memorizzarliCome risolvere il problema? Come risolvere il problema? Ingegneria del Software - A.A. 2003/2004 4. Soluzione al problema introduttivo XIngegneria del Software - A.A. 2003/2004 5. Presentazione del pattern Iterator 6. Il pattern Iterator (1/6) Nome Iterator [GoF95] Synopsis Fornisce una modalit di accesso sequenziale aduna collezione di oggetti indipendentementedalla struttura dati usata per memorizzarli. ContextCfr. esempio introduttivo Forces - Una classe ha bisogno di accedere al contenutodi una collezione senza risultare dipendentedalla classe usata per implementare lacollezione- Una classe ha bisogno di un modo uniforme peraccedere il contenuto di pi collezionieterogenee.Ingegneria del Software - A.A. 2003/2004 7. Il pattern Iterator (2/6) Da Context a SolutionClient 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 IteratorIngegneria del Software - A.A. 2003/2004 8. Il pattern Iterator (3/6) Consequences - E possibile accedere agli oggetti senza conoscere lastruttura dati contenente tali oggetti. - Usando pi iteratori facile gestire diversiattraversamenti contemporanei - E possibile per una classe fornire pi iteratori cheattraversano la collezione in modo diverso (su cosa sibasa 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 lesistenza e la restituzione dellelementoprecedente- 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 lattraversamento 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 usagejava.util.Collectionjava.util.Collectionjava.util.Iterator java.util.Iterator java.util.Vectorjava.util.Vector Inner class private di:Inner class private di:java.util.LinkedList java.util.Vectorjava.util.Vector java.util.LinkedList java.util.ArrayListjava.util.LinkedList java.util.LinkedListjava.util.ArrayList java.util.ArrayListjava.util.ArrayList Ingegneria del Software - A.A. 2003/2004 11. Il pattern Iterator (6/6) Code exampleInventoryIteratorIF 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. Domande? Ingegneria del Software - A.A. 2003/2004