TRAB DE MAP- Iterator PDF

Title TRAB DE MAP- Iterator
Course Tópicos Especiais Em Linguagem De Programação
Institution Universidade Estadual da Paraíba
Pages 6
File Size 212.7 KB
File Type PDF
Total Downloads 39
Total Views 125

Summary

Padrão de projeto Iterator....


Description

TRABALHO DE MÉTODOS AVANÇADOS DE PROGRAMAÇÃO TEMA: PADRÃO DE PROJETO ITERATOR

INTRODUÇÃO O presente trabalho busca analisar e refletir sobre o padrão de projeto Iterator. Em engenharia de software, um padrão de desenho ou padrão de projeto (do inglês design pattern) é uma solução geral para um problema que ocorre com frequência dentro de um determinado contexto no projeto de software. Um padrão de projeto não é um projeto finalizado que pode ser diretamente transformado em código fonte ou de máquina, ele é uma descrição ou modelo (template) de como resolver um problema que pode ser usado em muitas situações diferentes. Os padrões "GoF" ('Gang of Four'), são divididos em 23 e três tipos. Vem daí a importância de classificarmos esses padrões de acordo com as suas finalidades, o que resulta em 3 classificações ou famílias: Padrões de criação : relacionados à criação de objetos, visam abstrair o processo de criação de objetos, ou seja, sua instanciação; Padrões estruturais : tratam das associações entre classes e objetos, identificando qual é melhor maneira de de realizar o relacionamento entre as entidades; Padrões comportamentais : tratam das interações e divisões de responsabilidades entre as classes ou objetos, facilitando a comunicação entre os objetos. Dentre os padrões comportamentais, está o padrão Iterator, esse p  adrão fornece uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor a sua representação subjacente. A idéia do iterador é de retirar da coleção a responsabilidade de acessar e caminhar na estrutura e colocar a responsabilidade num novo objeto separado chamado de iterador. Um Objeto agregado, tal como uma lista, deveria fornecer um meio de acessar seus elementos sem expor sua estrutura interna. Além do mais, pode-se querer percorrer a lista de diferentes maneiras, dependendo do que se quer fazer. Embora muito provavelmente, não será prudente inflar a interface da lista com operações para diferentes percursos, ainda que possa antecipar aquelas que serão necessárias, também existe a possibilidade de precisarmos ter mais de um percurso pendente sobre a mesma lista. O Padrão Iterator permite fazer tudo isso. A idéia-chave nesse padrão é retirar a responsabilidade de acesso e percurso do objeto lista e colocá-la em um objeto iterator. A Classe Iterator define uma interface para acessar os elementos da lista, ele é responsável por manter a posição do elemento corrente, e saber quais elementos já foram percorridos.

DESENVOLVIMENTO O padrão iterator tem como objetivo encapsular interações. Esse padrão de projeto depende de uma interface, na qual recebe o nome de iterator logicamente, e nela teremos alguns métodos, como representado na figura abaixo: Figura 1.0

Figura 1: Exemplo da interface iterator  Como representado, a interface é composta por três métodos, o primeiro entre eles é o hasNext(), este método tem com objetivo retornar se existem objetos a serem iterados, ou seja, ele retorna um valor booleano, caso retorne true significa que existem objetos para iterar, caso contrário quer dizer que não existe elementos a serem iterados. O seguinte é o método next(), esse método funciona basicamente em retornar o próximo elemento, ou seja, se tempos um encapsulamento de iterações com n elementos, podemos chamar cada um desses elementos sequencialmente pelo método next(), sempre chamando o próximo. E o último deles é o método remove(), onde o nome já diz tudo, ele tem como objetivo remover um determinado elemento dessa iteração. A partir do momento que temos a interface iterator podemos programar para qualquer tipo de coleções de dados com listas, matrizes ou tabelas hash, entre outros modelos de armazenamento de dados. O objetivo principal desse padrão de projeto é dividir as responsabilidades dos dados de uma coleção, na maneira em que eles são percorridos: ➢ Um iterator pode percorrer uma lista de forma sequencial. ➢ Outro iterator já poderia filtrar alguns dados quando percorridos de acordo com a necessidade da busca. ➢ Outro já poderia percorrer usando algum algoritmo de ordenação como: InsertionSort, BubbleSort, QuickSort e SelectionSort ou qualquer outro de acordo com a necessidade. ➢ Ou até então, pode até descartar certos dados que não haja mais interesse em ter armazenados.

Estrutura básica:

Figura 2.0

A partir do momento que temos um iterator, podemos acessar seus elementos em um conjunto de dados sem saber como foi implementado. Na linguagem java, já temos o iterator implementando, bastando apenas fazer uso de seu recurso. Ele se encontra no pacote java.util, e como mostrado na Figura 2.0, ele pode ser usado por ArrayLists,vetores ou qualquer outro tipo de armazenamento de dados. O método da criação do iterator retorna um iterador de Lista que tem o ArrayList armazenando um conjunto qualquer de dados. Para a classe que utiliza vetor para armazenar os dados esse método cria um Iterator que retorna um iterador de vetor. Problemas específicos e implementação Um dos problemas em trabalhar com iterator são em ambientes Multithreading, onde o sistema tenha que trabalhar com várias tarefas simultaneamente sem que uma interfira na outra. As tarefas compartilham recursos do processo, mas elas tem que ser capazes de executar de forma independente. Analisando o caso, digamos que temos uma coleção, e um novo elemento é adicionado no fim dessa coleção. O iterator deve saber o novo tamanho da coleção e iterar até o fim.

Já outro elemento é adicionado à coleção antes do elemento atual. Nesta situação todos os iteradores devem estar cientes dessa alteração. Assim também as mesmas ações devem ser feitas quando um elemento é removido, os iteratores devem saber que ouve uma alteração. A principal tarefa ao criar um iterador multithreading é criar um iterador robusto (que permite inserções e remoções sem afetar um ao outro. Em seguida, os blocos que estão mudando ou acessando recursos alterados por outro segmento precisam ser sincronizados.

Iterator externo Vs iterator interno

iteradores externos - dizemos que um iterator é externo quando a um objeto na coleta dos dados. Em linguagens como java script é muito fácil criar iteradores externos. Em nossa implementação clássica um iterador externo é implementado. iteradores interno - Quando o iterador controla dizemos que ele é interno, ou seja, ao contrário do externo ele não tem um objeto na coleta, ele mesmo faz esse processo. Por outro lado implementar e usar iteradores internos é realmente difícil. Quando um iterador interno é usado significa que o código a ser executado é delegado para o um objeto agregado. A idéia principal é passar o código a ser executado para a coleção. Em seguida, a coleção chamará internamente a cada um dos componentes. Em C ++ é possível fazer o esse processo com auxílio de ponteiros. Em Java, o padrão de design Functor pode ser usado. A idéia principal é criar uma interface básica com apenas os três métodos. Em seguida, esses métodos serão implementados em uma classe que implementa a interface e a classe será passada para a coleção para iterar.

Vantagens do iterator

Iteradores tornam fácil mudar o algoritmo de percurso, simplesmente substitui a instância do iterador por uma diferente, podendo definir subclasses de iterador para suportar novos percursos. Iteradores simplifica a interface da classe agregada. A interface de percurso de Iterator elimina as necessidades de uma interface semelhante em Aggregate, dessa forma simplificando a interface da classe. Um iterador mantém o controle de acompanhamento do estado do seu próprio percurso. Portanto, você pode ter mais que um percurso em andamento ao mesmo tempo.

Desvantagens do iterator Cada implementação pode ter diferentes efeitos, por exemplo, no Iterador Externo o cliente fica responsável por remover o iterador depois que ele for utilizado. No caso da linguagem Java, que possui um garbage colector, este não é um problema tão grande, mas em C++ por exemplo, precisamos tomar cuidado de excluir o Iterador após seu uso. Outro problema com o Iterator é que devemos ter uma atenção especial em qual operação o Iterator realizará, pois, caso ele altere, adicione ou remova objetos do conjunto de dados, temos que garantir que essa operação não invalidará os dados do conjunto. Como exemplo imagine que dois iterator são utilizados em paralelo, um deles vai mostrando os dados e o outro procura um elemento específico para removê-lo, o que acontece quando um Iterator acessa um objeto que outro removeu?

APLICABILIDADE O Uso do padrão Iterator: ● Para acessar o conteúdo de uma coleção sem expor suas representação interna ● Para suportar múltiplas formas de caminhamento ● Para prover uma interface única para varrer coleções diferentes ● Isto é, para suportar a iteração polimórfica.

REFERÊNCIAS https://pt.wikipedia.org/wiki/Padr%C3%A3o_de_projeto_de_software http://www.dpi.ufv.br/projetos/apri/?page_id=724 https://pt.slideshare.net/alvarooliveira921/padro-de-projeto-iterator http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/pat/iterator.htm http://www.devmedia.com.br/padrao-de-projeto-iterator-em-java/26733 http://tads-ifrsrg.blogspot.com.br/2013/09/padrao-de-projeto-iterator.ht ml http://www.oodesign.com/iterator-pattern.html...


Similar Free PDFs