Iterador

12
1 Iterador ATAI

description

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 - PowerPoint PPT Presentation

Transcript of Iterador

Page 1: Iterador

1

Iterador

ATAI

Page 2: Iterador

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

Page 3: Iterador

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.

Page 4: Iterador

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

Page 5: Iterador

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

Page 6: Iterador

6

Diagrama UML

Colecção<<Interface>>

getIterator()

Iterator<<Interface>>

hasNext():booleannext():Object

ColecçãoConcreta

getIterator():Iterator

IteradorConcreto

Page 7: Iterador

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

Page 8: Iterador

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()- opcionalRemove o último elemento devolvido pelo Iterador

Podemos definir o nosso interface

public interface Iterator{

boolean hasNext();Object next();

}

Page 9: Iterador

9

Diagrama UML

Colecção<<Interface>>

getIterator()

Iterator<<Interface>>

hasNext():booleannext():Object

EstruturaLinear

getIterator():Iterator

EstruturaLinearIterator

Page 10: Iterador

10

Iterador numa Estrutura Linear EstáticaUso de classe localpublic class EstruturaLinearEstatica implements 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 }

Page 11: Iterador

11

Iterador numa Estrutura Linear DinâmicaUso de classe localpublic class EstruturaLinearDinamica implements 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();

}

Page 12: Iterador

12

Iterador numa Estrura Linear

public static void main (String args[]){

Iterator ai, ai2;

EstruturaLinear s;

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());

}

}

}