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

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

Professor: Hyggo Almeida

Apresentações semelhantes


Apresentação em tema: "Professor: Hyggo Almeida"— Transcrição da apresentação:

1 Professor: Hyggo Almeida
Iterator Professor: Hyggo Almeida

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

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

4 Iterator Problema Solução
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??? Solução Usar um Iterador!!! 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

5 Iterator A classe Iterador 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) Como criar um iterador? 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()

6 Iterator Iterador do Vector 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(); } }; Decorator e Iterator

7 Iterator Como funciona??? Cliente Iterador(cursor) Estrutura de dados
Estrutura de dados Iterador(cursor) 1 “João” Iterador(cursor) 2 Varredura crescente 1 “Maria” Iterador(cursor) 3 Vector 2 “Carlos” Iterador(cursor) 4 3 “Paulo” Iterador(cursor) 5 hasNext() = false 4 “José” Iterador(cursor) 6 5 “João” Decorator e Iterator

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

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

10 Iterator Aplicabilidade Também chamado de Conseqüências
É possível acessar a coleção de objetos sem saber a fonte dos objetos Aplicabilidade 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 Também chamado de Cursor Decorator e Iterator

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

12 Iterator Mão na massa!!! Pares Cliente.main Cliente.printNumbers
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(); }; Pares Cliente.main 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.printNumbers private static void printNumbers(Iterator iterator) { while (iterator.hasNext()) { System.out.println(iterator.next()); } Decorator e Iterator

13 Dúvidas? ? Decorator e Iterator


Carregar ppt "Professor: Hyggo Almeida"

Apresentações semelhantes


Anúncios Google