A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Iterator Professor: Hyggo Almeida. Iterator Utilização de estruturas de dados Vector, ArrayList, HashSet,... Vector, ArrayList, HashSet,... 2 Vector collection;

Apresentações semelhantes


Apresentação em tema: "Iterator Professor: Hyggo Almeida. Iterator Utilização de estruturas de dados Vector, ArrayList, HashSet,... Vector, ArrayList, HashSet,... 2 Vector collection;"— Transcrição da apresentação:

1 Iterator Professor: Hyggo Almeida

2 Iterator Utilização de estruturas de dados Vector, ArrayList, HashSet,... Vector, ArrayList, HashSet,... 2 Vector collection; public void classeZusando(HashSet col){...} public void classeWusando(ArrayList col){...} public void classeXusando(Vector col){...} ArrayList collection; HashSet collection;

3 E se... Eu quiser a mudar a estrutura de dados?? Eu quiser a mudar a estrutura de dados?? 3 Vector collection; public void classeZusando(HashSet col){...} public void classeWusando(ArrayList col){...} public void classeXusando(Vector col){...} ArrayList collection; HashSet collection; Vector!!! HashSet!!!

4 Iterator Problema Como isolar o uso de uma estrutura de dados de sua representação interna de forma a poder mudar a estrutura sem afetar quem a usa??? Como isolar o uso de uma estrutura de dados de sua representação interna de forma a poder mudar a estrutura sem afetar quem a usa??? Para determinadas estruturas, pode haver formas diferentes de varredura. Como encapsular a forma exata de varredura??? Para determinadas estruturas, pode haver formas diferentes de varredura. Como encapsular a forma exata de varredura???Solução Usar um Iterador!!! Usar um Iterador!!! A idéia do iterador é retirar da coleção a responsabilidade de acessar e varrer a estrutura A idéia do iterador é retirar da coleção a responsabilidade de acessar e varrer a estrutura colocar a responsabilidade num novo objeto separado chamado iterador colocar a responsabilidade num novo objeto separado chamado iterador 4

5 Iterator A classe Iterador Implementa a interface Iterator Implementa a interface Iterator Mantém qualquer informação de estado necessária para saber até onde a iteração (varredura) já foi (mantém o cursor) Mantém qualquer informação de estado necessária para saber até onde a iteração (varredura) já foi (mantém o cursor) Como criar um iterador? Não se pode usar new diretamente pois o iterador a ser criado depende da coleção a ser varrida Não se pode usar new diretamente pois o iterador a ser criado depende da coleção a ser varrida Solução: a coleção tem um factory method para criar um iterador Exemplo em java: Vector.iterator() Exemplo em java: Vector.iterator() 5

6 Iterator Iterador do Vector 6 Decorator e Iterator public Iterator iterator() { return new Iterator() { // classe interna anônima int cursor = 0; public boolean hasNext() { return cursor < size(); } public Object next() { try { Object next = get(cursor); cursor++; return next; } catch(IndexOutOfBoundsException e) { throw new NoSuchElementException(); } } }; }

7 Iterator Como funciona??? 7 Decorator e Iterator Estrutura de dados João Maria Carlos Paulo José João Cliente Varredura crescente Iterador(cursor) hasNext() = false Vector

8 Iterator Posso mudar a forma de varrer!!! Sem mudar a estrutura! 8 Estrutura de dados João Maria Carlos Paulo José João Cliente Varredura pares!!! Iterador(cursor) hasNext() = false Vector

9 Iterator Posso mudar a estrutura sem mudar a forma de varrer! 9 HashSet João Maria Carlos Paulo José Cliente Varredura pares!!! Iterador(cursor) hasNext() = false João

10 Iterator Conseqüências É possível acessar a coleção de objetos sem saber a fonte dos objetos É possível acessar a coleção de objetos sem saber a fonte dos objetosAplicabilidade Uma classe necessita acessar o conteúdo de uma coleção sem se tornar dependente da classe que implementa aquela coleção Uma classe necessita acessar o conteúdo de uma coleção sem se tornar dependente da classe que implementa aquela coleção Uma classe necessita de uma maneira uniforme de acessar o conteúdo de múltiplas coleções Uma classe necessita de uma maneira uniforme de acessar o conteúdo de múltiplas coleções Também chamado de Cursor Cursor 10 Decorator e Iterator

11 Iterator Vamos implementar um EvenIterator para retornar apenas os índices pares de uma coleção de MyNumbers e um OddIterator para os índices ímpares. Use a interface java.util.Iterator Use a interface java.util.Iterator Use classes internas Use classes internas 11 Decorator e Iterator NumCollection numbers: Vector; addNumber(myNumber); evenIterator():Iterator; oddIterator():Iterator; iterator():Iterator; MyNumber value:int; toString(); Cliente printNumbers(Iterator); evenIterator():Iterator; oddIterator():Iterator; iterator():Iterator;

12 Iterator Mão na massa!!! 12 Decorator e Iterator return new Iterator(){ int cursor = 0; public void remove() { numbers.remove(cursor); } public boolean hasNext() { return (cursor < numbers.size()); } public Object next() { try { Object next = numbers.get(cursor); cursor+=2; return next; } catch(IndexOutOfBoundsException e) { throw new NoSuchElementException(); } }; NumCollection col = new NumCollection(); col.addNumber(new MyNumber(0)); col.addNumber(new MyNumber(1)); col.addNumber(new MyNumber(2)); col.addNumber(new MyNumber(3)); printNumbers(col.evenIterator()); Cliente.main private static void printNumbers(Iterator iterator) { while (iterator.hasNext()) { System.out.println(iterator.next()); } Cliente.printNumbers Pares

13 Dúvidas? ? 13 Decorator e Iterator


Carregar ppt "Iterator Professor: Hyggo Almeida. Iterator Utilização de estruturas de dados Vector, ArrayList, HashSet,... Vector, ArrayList, HashSet,... 2 Vector collection;"

Apresentações semelhantes


Anúncios Google