1 / 12

Iterador

Iterador. ATAI. Introdução. Desejamos criar uma classe para converter estrutura de dados. Exemplo: copiar o conteúdo de uma estrutura linear para uma árvore ou vice-versa Cada estrutura de dados oferece interface e protocolo diferentes para o acesso aos seus elementos

barton
Download Presentation

Iterador

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Iterador ATAI

  2. Introdução • Desejamos criar uma classe para converter estrutura de dados. Exemplo: copiar o conteúdo de uma estrutura linear para uma árvore ou vice-versa • Cada estrutura de dados oferece interface e protocolo diferentes para o acesso aos seus elementos • Algumas estruturas restringem o acesso aos seus elementos, como em Filas e Pilhas • Não é possível caminhar por seus elementos sem modificar as estruturas. (Como aceder o elemento do meio de uma pilha sem retirar os que estão sobre ele?) • Seria necessário ter acesso à implementação para “burlar” o protocolo de acesso • Isso quebra um dos pilares da OO: o encapsulamento

  3. Objectivo • Proporcionar uma forma de aceder sequencialmente os elementos de um objecto agregado (uma colecção) sem expor sua representação interna. • Motivação • Deseja-se isolar o uso de uma estrutura de dados da sua representação interna. • Isso permite mudar a estrutura sem afectar quem a utiliza. • Às vezes é necessário permitir que mais de um cliente faça o percurso da estrutura simultaneamente.

  4. Como Percorrer uma Estrutura • Para determinadas estruturas, pode haver formas diferentes de percorrer e queremos encapsular a forma exacta de percorrer a estrutura. • Por exemplo: • Uma fila pode ser percorrida nos sentidos frente=>fundo ou fundo=>frente • Uma pilha pode ser percorrida do topo para a base e da da base para o topo • Pode ser necessário criar um “filtro" que só retorne certos elementos

  5. Permissas do Iterator • Um iterador deve ter um interface suficientemente genérica e simples de forma que possa ser usado para percorrer todos os TADs • Criar o iterador: • O iterador depende do TADs a ser percorrido, sendo necessário que seja criado pelo mesmo • Aplicabilidade • O padrão Iterator deve ser usado: • Para aceder o conteúdo de um objecto agregado sem expor a sua representação interna • Para suportar múltiplas formas de varrimento • Para proporcionar uma interface única para percorrer TADs diferentes

  6. <<Interface>> Colecção getIterator() <<Interface>> Iterator hasNext():boolean next():Object ColecçãoConcreta IteradorConcreto getIterator():Iterator Diagrama UML

  7. Diagrama UML: Actores • Iterator • Define uma interface para aceder e percorrer os elementos • IteradorConcreto • Implementa a interface Iterador • Mantém a posição corrente (e qualquer outro estado) no percurso do TAD • Colecção • Define uma interface para criar um objecto Iterador • ColecçãoConcreta • Implementa a interface que cria o Iterador para retornar o IteradorConcreto apropriado

  8. Iterador • java.util.Iterator (5.0) suporta os seguintes métodos: • boolean hasNext() Retorna true se existirem mais elementos no Iterador. • Object next()Retorna o próximo elemento no Iterador. • void remove()- opcional Remove o último elemento devolvido pelo Iterador • Podemos definir o nosso interface public interface Iterator{ boolean hasNext(); Object next(); }

  9. <<Interface>> Colecção getIterator() <<Interface>> Iterator hasNext():boolean next():Object EstruturaLinear EstruturaLinearIterator getIterator():Iterator Diagrama UML

  10. Iterador numa Estrutura Linear EstáticaUso de classe local public class EstruturaLinearEstaticaimplements estruturaLinear{ private Object []tab; private int tamanho; private class IteratorEst implements Iterator{ int pos = 0; public boolean hasNext(){ return (pos < tamanho ); } public Object next(){ return tab[pos++]; } } public Iterator getIterator() { return new IteratorEst(); } //implementação de todos os métodos da Interface estruturaLinear }

  11. Iterador numa Estrutura Linear DinâmicaUso de classe local public class EstruturaLinearDinamicaimplements estruturaLinear{ private No cabeca; private int tamanho; private class ListaEncadeadaIterator implements Iterator { No pos = cabeca; public boolean hasNext(){ return (pos != null ); } public Object next(){ Object cur = pos.getElemento(); pos = pos.getProximo(); return cur; } } public Iterator getIterator() { return new ListaEncadeadaIterator(); }

  12. Iterador numa Estrura Linear public static void main (String args[]){ Iterator ai, ai2; EstruturaLinears; s = new EstruturaLinearDinamica(); for( int i = 0; i < 10; i++ ) s.inserir( new Integer(i) ); ai = s.getIterator(); while (ai.hasNext()){ System.out.println("\n1 Iterador: "+ai.next()); System.out.print(" 2 Iterador:"); for (ai2 = s.getIterator(); ai2.hasNext();) System.out.print(" "+ai2.next()); } } }

More Related