Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- O problema
- A iteração é uma forma especial de repetição em que executamos alguma lógica sobre um elemento de um conjunto. Para tipos primitivos como inteiros a iteração é um processo inerente suportado pela própria linguagem de programação e em ultima análise ao próprio computador já que nada é mais que uma soma (ou subtração).
- 1
- 2 for ( int i = 0 ; i < MAXIMO ; i++ ){
- 3 // trabalha com i
- 4 }
- Código 1:
- Se temos uma agregação de objetos, normalmente utilizaríamos um array para poder acessar cada elemento.
- 1
- 2 Object [] array = new Object [ 10 ]
- 3 for ( int i = 0 ; i < array.length ; i++ ){
- 4 Object obj = array [ i ] ;
- 5 // trabalha com obj
- 6 }
- Código 2:
- Utilizando array como forma de agrupar os elementos a iteração é simples e semelhante à de primitivos. ( na realidades ainda estamos iterado sobre o inteiro i) Mas e quando os elementos não estão agrupados em um array?
- A solução
- O padrão propõe que se utilize uma interface para controlar a iteração. O objeto que implementar esta interface conhece a seqüência do grupo e mantém uma referencia ao elemento atual de forma que possa ser utilizado de forma semelhante à iteração em um array. Por exemplo:
- 1
- 2 ObjectGroup groupOfObjects = new ObjectGroup () ;
- 3 Iterator it = Iterator.iteratorFor ( groupOfObjects ) ;
- 4
- 5 while ( it.hasMore () ){
- 6 Object obj = it.current () ;
- 7 // trabalha com obj
- 8 }
- Código 3:
- Como funciona
- A interface Iterator é simples. Um método para pegar objeto corrente e um método para sabermos se chegámos ao fim da seqüência. Contudo a implementação de um iterador tem algumas nuances importantes.
- Conjuntos Vazios
- Se o nosso iterador nos retorna a posição corrente, ele tem que obter o elemento corrente assim que é criado. Se estivermos iterando sobre um conjunto vazio é impossível obter o primeiro elemento do conjunto. Dessa forma o elemento corrente terá que ser null. Isto representa vários problemas práticos.
- O primeiro é que retornar null força a constante verificação se o elemento retornado é nulo. É uma forma muito chata de usar um iterador pois seriamos obrigados a escrever sempre algo como :
- 01
- 02
- 03 Iterator it = …
- 04
- 05 while ( it.hasMore () ){
- 06 Object obj = it.current () ;
- 07 if ( obj != null ){
- 08 // trabalha com obj
- 09 }
- 10 }
Add Comment
Please, Sign In to add comment