• Nenhum resultado encontrado

A estrutura PONHASH foi implementada de maneira a realizar notificações pontuais, focando as entidades que apresentem o estado desejado igual ao estado atual da entidade em questão. Para isso, é necessário realizar de antemão o cálculo da função hash para direcionar as notificações apenas para as entidades interessadas. Ademais, as entidades que possuíam o estado, dito como anterior, são igualmente notificadas para terem seus estados lógicos revalidados.

3.2 ESTRUTURA GENÉRICA DO PROCESSO DE NOTIFICAÇÃO

Inicialmente, para que o Framework PON pudesse comportar as estruturas de dados mencionadas na seção 3.1, uma classe base denominada Structure foi implementada. Esta é uma classe abstrata que contém a definição virtualmente pura de métodos utilizados para comportar uma coleção de objetos (a serem notificados), sua manipulação e iteração. Ainda, neste âmbito, o padrão de projeto “Fábrica” ou

SimpleFactory dos chamados e assaz universalizados Gang of Four (GoF) foi

utilizado (GAMMA, HELM, JOHNSON e VLISSIDES, 1995).

Em suma, uma fábrica denominada SimpleFactory determina qual o tipo de estrutura deve ser utilizada em tempo de execução. Assim, conforme requerido pelo desenvolvedor, a determinada estrutura é informada a ‘fábrica’ para sua devida criação. A Figura 35 corresponde ao diagrama de classes implementado para comportar as novas estruturas do Framework PON.

A implementação SimpleFactory não é denominada necessariamente como um padrão de projeto, mas sim como uma definição de implementação (FREEMAN, ROBSON, BATES, SIERRA, 2004). Todavia ela é comumente utilizada, e tem sua importância vital neste tipo de implementação. Sua composição é importante ao ponto de poder agregar ao Framework PON a possibilidade de utilização de uma ou mais estruturas de dados, conforme a necessidade do desenvolvedor.

Figura 35 – Estrutura Genérica do Processo de Notiticação

Neste âmbito, a classe Structure define o modo de manipulação e iteração das estruturas de dados implementadas para Framework PON, especificamente as estruturas de objetos da classe STL, PONLIST e PONVECTOR. Ainda, para compor objetos de classe da STL, nomeadamente objetos da classe list da STL, foi implementado uma classe template denominada ListSTL, conforme observado no diagrama de classes da Figura 35. Neste âmbito, a iteração sobre elementos PON que se utilizam da estrutura ListSTL, é definida pela classe Structure. Outrossim, a classe SimpleFactory é responsável pela abstração da utilização das estruturas dados, uma vez definida sua utilização pelo desenvolvedor.

Deste modo, muito embora a relação explícita no diagrama de classes entre as classes SimpleFactory e Structure, na verdade ela representaria na prática as classes especializadas de Structure. Neste sentido, a execução e iteração das classes as quais representam as estruturas de dados seriam realizadas via polimorfismo.

Assim, a classe Structure define a manipulação de seus elementos através dos métodos push_back() e delete(), responsáveis, respectivamente, por adicionar e remover um elemento da estrutura de dados. Outrossim, os métodos initIterator(),

hasNext() e next(), são utilizados para iterar sobre os elementos da estrutura. Desta

forma, inicializa-se a iteração através da chamada do método initIterator(), verifica-se a existência de um elemento através do método hasNext() e, por fim, obtém-se e navega-se para o próximo elemento pela chamada do método next().

3.3 ESTRUTURA ESPECIALIZADA DO PROCESSO DE NOTIFICAÇÃO

Não obstante, o diagrama de classes da Figura 35, sob o viés da classe

Structure, de fato, resolva as questões de iterações e manipulações sobre as

estruturas de dados, ela determina um fluxo padronizado para todas as demais estruturas que compõe o Framework PON. Desta maneira, toda e qualquer nova estrutura a ser implementada para o Framework PON, deverá seguir o padrão de manipulação e iteração de seus elementos baseadas na definição da classe base

Structure.

Em se tratando particularmente da estrutura de dados PONHASH, detalhado na seção 3.1.4, a sua forma peculiar de realizar manipulações e principalmente sua maneira ímpar de iterar os elementos que a compõe, não está necessariamente relacionado a uma estrutura de classe genérica conforme esboçado na Figura 35.

Uma vez que a iteração sobre a estrutura PONHASH é realizada de maneira pontual, ou seja, diferentemente das iterações através de percorrimentos sobre as demais estruturas, o acesso a seus elementos é realizada de forma “direta”. Neste âmbito, uma nova abordagem para realização e utilização das estruturas de dados foi implementada. Esboçado na Figura 36, este modelo de classes permite uma maior flexibilidade em relação às operações e principalmente maneira de iterar os elementos constituintes de cada estrutura de dados.

Assim, cada estrutura especializa sua própria forma particular de realizar suas operações, bem como a maneira de iterar seus elementos constituintes. Para isso, uma fábrica denominada ElementsFactory é utilizada para definição de qual estrutura empregar para toda aplicação, sendo esta responsável pela criação de cada entidade que constituí o processo de notificação do Framework PON. Ainda,

neste âmbito, o padrão de projeto Abstract Factory foi utilizado (GAMMA, HELM, JOHNSON e VLISSIDES, 1995). O diagrama de classes da Figura 36 ilustra a aplicação desse padrão na estrutura do Framework PON.

Figura 36 – Estrutura Especializada do Processo de Notiticação

Conforme apresenta a Figura 36, a classe principal desde modelo é a fábrica abstrata (i.e. ElementsFactory). Essa classe é responsável pela definição de todos os métodos abstratos responsáveis pela criação de entidades PON. O diagrama, em particular, abstrai a implementação real com a representação da classe abstrata

Entity, a qual simboliza as entidades PON (e.g. Attribute, Premise, Action etc.).

Outrossim, o diagrama ilustra a presença de outras fábricas, ditas concretas, que tem por finalidade implementar os métodos herdados da fábrica abstrata. Tais

métodos têm por finalidade a criação de entidades PON concretas, as quais implementam internamente suas respectivas particularidades para cada estrutura de dados existente. Ainda, tal abordagem facilita a criação de eventuais novas estruturas de dados que possam vir a ser implementadas em trabalhos futuros.

O exemplo do Algoritmo 25, demonstra a forma de utilização e instanciação da fábrica PON sobre o método initStartApplicationComponentes. Este método é responsável por inicializar a fábrica PON, definindo principalmente qual estrutura de dados utilizar para o processo de notificação do Framework PON. Sua instância é obtida através do método getInstance() da classe SingletonFactory. Por fim, o método startApplication() é invocado, iniciando neste momento a execução da aplicação propriamente dita. Oportunamente, o exemplo esboçado pelo Algoritmo 25, instancia a estrutura de dados PONHASH (linha 2).

1 2 3 4 5

void Marksmanship::initStartApplicationComponents() {

SingletonFactory::changeStructure(SingletonFactory::PONHASHMAP);

elementsFactory = SingletonFactory::getInstance();

this->startApplication(); }