• Nenhum resultado encontrado

6.3 O M´ odulo de Extra¸c˜ ao MAMView Extractor

6.3.4 Instala¸c˜ ao do MAMView Extactor em um MAM

A instala¸c˜ao do MAMView Extractor em uma estrutura m´etrica ´e relativamente simples.

O desenvolvedor do MAM deve, primeiramente, criar alguns procedimentos que s˜ao ne-

cess´arios para a inicializa¸c˜ao do m´odulo de extra¸c˜ao. Estes procedimentos devem ser capazes de coletar um certo n´umero de objetos armazenados na estrutura (utilizados para inicializar o FastMap) e configurar o extrator (local dos arquivos de sa´ıda entre outras coisas).

Uma vez inicializado, o extrator estar´a pronto para receber as notifica¸c˜oes dos eventos ocorridos na estrutura e gerar os arquivos de sa´ıda (arquivos MVA). Para tanto, basta que o extrator esteja devidamente instalado nos procedimentos que se deseja visu- alizar, como consultas, inser¸c˜oes, remo¸c˜oes e outras opera¸c˜oes sobre a estrutura.

A notifica¸c˜ao dos eventos para o MAMView Extractor ´e feita por meio de uma API (Application Programming Interface) que utiliza como parˆametros de entrada os pr´oprios objetos e componentes da implementa¸c˜ao da estrutura, n˜ao sendo necess´ario conhecer os

detalhes de funcionamento do sistema MAMView. Esta interface ´e descrita com mais

detalhes no Apˆendice B.

Em linhas gerais, a instala¸c˜ao do extrator em um procedimento resume-se a no-

tificar o in´ıcio e o fim de uma anima¸c˜ao (in´ıcio e fim do procedimento) e a defini¸c˜ao de

pelo menos um agrupamento de eventos (frame) dentro desta anima¸c˜ao. Para cada ani-

ma¸c˜ao declarada, o MAMView Extrator criar´a um arquivo MVA automaticamente, sem

a necessidade de interven¸c˜ao do desenvolvedor.

Cada Frame pode conter um ou mais eventos que descrevem as a¸c˜oes dos algo-

elimina¸c˜ao de elementos da estrutura (a existˆencia ou atualiza¸c˜ao de propriedades de um n´o ou objeto), declara¸c˜oes de mudan¸cas de estado globais da estrutura (aumento ou di- minui¸c˜ao de altura entre outras opera¸c˜oes) e a notifica¸c˜ao da passagem do algoritmo por

um determinado elemento (marca¸c˜ao dos elementos de interesse do algoritmo).

Os eventos s˜ao sempre reportados de forma declarativa, n˜ao sendo poss´ıvel contro- lar o modo que o simulador deve agir. Al´em disto, alguns dos eventos permitem a inclus˜ao de coment´arios, que poder˜ao ser utilizados pelo usu´ario como fonte de informa¸c˜ao adicio- nal.

Como descrito no Cap´ıtulo 5, estes eventos devem ser agrupados em frames para definir quais transforma¸c˜oes devem ser aplicadas na estrutura antes que uma nova repre- senta¸c˜ao de seu estado seja criada. A organiza¸c˜ao destes eventos em quadros ´e depen- dente do procedimento estudado e da necessidade de detalhes exigida pelo desenvolvedor

de MAM. ´E importante salientar que o modo como os eventos s˜ao organizados em frames

define como o procedimento ser´a apresentado, mas n˜ao interfere na simula¸c˜ao final das estruturas.

Para visualizar uma busca, por exemplo, os eventos podem ser agrupados em frames da seguinte maneira:

• No in´ıcio do procedimento declarar o in´ıcio de uma anima¸c˜ao (opcional pois uma

anima¸c˜ao pode conter mais de um procedimento);

• declarar um frame contendo a especifica¸c˜ao da busca (seu estado inicial);

• ao entrar em uma intera¸c˜ao recursiva, definir um frame contendo a declara¸c˜ao de todos os elementos diretamente relacionados, ou seja, todos os elementos que podem ser declarados diretamente;

• ao retornar de uma itera¸c˜ao, definir um frame que marca o n´o atual como “ativo”; • a cada altera¸c˜ao ou grupo de altera¸c˜oes no resultado, definir um “frame” para atu-

alizar o resultado;

• notificar o final da anima¸c˜ao (opcional).

Estas a¸c˜oes, quando aplicadas, n˜ao ir˜ao declarar ao simulador a existˆencia de elementos n˜ao visitados. Por´em, alterando-se a execu¸c˜ao do procedimento para gerar

um “frame” contendo todo o “dump” da estrutura antes de iniciar a busca garantir´a que

todos os elementos da estrutura sejam exibidos. Entretanto, esta ´e uma atitude pouco

recomendada, pois gera um excesso de informa¸c˜oes que pode prejudicar o entendimento

da anima¸c˜ao.

O “dump” de toda a estrutura pode ser obtido atrav´es da instala¸c˜ao de declara¸c˜oes

Figura 6.3: Pseudo-c´odigo da cria¸c˜ao de um “dump” de uma estrutura fict´ıcia. O c´odigo (a) ilustra um algoritmo para percorrer a ´arvore recursivamente enquanto o c´odigo (b)

apresenta, em vermelho, a instala¸c˜ao do MAMView Extractor para gerar o arquivo MVA

do “dump”. A interface do extrator foi simplificada para facilitar a leitura do c´odigo. Estas declara¸c˜oes podem estar todas agrupadas em um ´unico “frame” ou ent˜ao acompanhar a execu¸c˜ao do procedimento recursivo, tendo como crit´erio de agrupamento, os elementos

encontrados pela primeira vez em cada intera¸c˜ao da recurs˜ao. A Figura 6.3 mostra o

pseudo-c´odigo utilizado para criar um “dump” de uma estrutura gen´erica.

Procedimentos mais complexos, como adi¸c˜oes e remo¸c˜oes, tamb´em podem ser vi- sualizados pelo MAMView, bastando para isto, instalar o extrator nestes procedimentos, notificando para o extrator todas as transforma¸c˜oes ocorridas na estrutura em cada “passo”

dos algoritmos. A divis˜ao dos eventos em “passos” ´e determinada pelo agrupamento dos

eventos em Frames. A Figura 6.4 exemplifica a instala¸c˜ao do extrator em um procedi-

mento de consulta por abrangˆencia de uma ´arvore gen´erica.

O n´ıvel de detalhes obtido com os dados extra´ıdos pelo MAMView Extractor ´e

dependente do modo como os eventos foram agrupados durante o processo de extra¸c˜ao.

Como a divis˜ao dos eventos em Frames n˜ao altera o resultado final da simula¸c˜ao, ´e poss´ıvel

refinar experimentalmente os agrupamentos de eventos, ajustando-os `as necessidades dos

Figura 6.4: Pseudo-c´odigo de uma busca por abrangˆencia em uma estrutura fict´ıcia. O c´odigo (a) ilustra um algoritmo original enquanto o c´odigo (b) apresenta, em vermelho, a

instala¸c˜ao do MAMView Extractor para gerar o arquivo MVA relativo a cada execu¸c˜ao

do procedimento. A divis˜ao dos eventos em Frames ´e bastante simples gerando quadros

a medida que as altera¸c˜oes ocorrem. A interface do extrator foi simplificada para facilitar a leitura do c´odigo.

Em linhas gerais, a instala¸c˜ao do extrator nas estruturas ´e bastante simples, mesmo que o comportamento destas seja pouco conhecido, pois este processo resume-se a localizar os pontos do algoritmo onde ocorrem modifica¸c˜oes na estrutura e report´a-los exatamente como ocorrem, sem a necessidade de prever as conseq¨uˆencias destas altera¸c˜oes na estru- tura.