FACULDADE FARIAS BRITO CIÊNCIA DA COMPUTAÇÃO DIEGO DE QUEIROZ CARNEIRO DOURADO FD-AED – FERRAMENTA DIDÁTICA APLICADA A ESTRUTURA DE DADOS Fortaleza 2012 DIEGO DE QUEIROZ CARNEIRO DOURADO FD-AED – FERRAMENTA DIDÁTICA APLICADA A ESTRUTURA DE DADOS Monografia apresentada para obtenção dos créditos da disciplina Trabalho de Conclusão do Curso da Faculdade Farias Brito, como parte das exigências para graduação no Curso de Ciência da Computação. Orientador: MSc. Maikol Magalhães Rodrigues. Fortaleza 2012 D739f Dourado, Diego de Queiroz Carneiro FD – AED – Ferramenta didática aplicada a estrutura de dados / Diego de Queiroz Carneiro Dourado 84 f. Monografia (Graduação) – Faculdade Farias Brito, Fortaleza, 2012. Orientador: Prof. Ms. Maikol Magalhães Rodrigues 1. Estrutura de dados. 2. Ferramenta. I. Rodrigues, Maikol Magalhães. (orient.) II. Faculdade Farias Brito. Graduação em Ciência da Computação. III. Título. CDD 005 FD-AED – FERRAMENTA DIDÁTICA APLICADA A ESTRUTURA DE DADOS Diego de Queiroz Carneiro Dourado NOTA: FINAL (0-10): ______ Data: ____/____/_______ BANCA EXAMINADORA ______________________________ MSc. Maikol Magalhães Rodrigues (Orientador) ______________________________ MSc (Examinador) ______________________________ MSc (Examinador) 5 RESUMO As Estruturas de Dados são de grande importância no âmbito da Ciência da Computação, por isso se torna necessário o entendimento básico dos conceitos e aplicações dos algoritmos durante o curso de Ciência da Computação. Este projeto tem por objetivo a criação de uma ferramenta aplicada à Estrutura de Dados, com o fim de possibilitar um melhor entendimento do comportamento das Estruturas de Dados, auxiliando o professor na passagem do conhecimento e o aluno em seu entendimento. O foco maior está em ter uma aplicação de fácil entendimento e de simples manipulação, buscando conceitos de ferramentas já existentes, através de comparativos, para avaliar quais deles se enquadram melhor na realidade da Faculdade Farias Brito. 6 SUMÁRIO INTRODUÇÃO ........................................................................................................................ 12 1 BASE TEÓRICA................................................................................................................. 14 1.1 Estrutura de Dados Básicas........................................................................................... 14 1.1.1 Pilha....................................................................................................................... 15 1.1.2 Fila......................................................................................................................... 16 1.1.3 Lista ....................................................................................................................... 18 1.1.4 Árvore.................................................................................................................... 21 1.2 Ferramentas Didáticas já Existentes ............................................................................. 24 1.2.1 Astral ..................................................................................................................... 24 1.2.2 AGEDUnifor ......................................................................................................... 28 1.2.3 Animação de Árvore-B ......................................................................................... 34 1.2.4 Spyke ..................................................................................................................... 35 1.2.5 TBC-AED.............................................................................................................. 36 1.2.6 Outras Ferramentas ............................................................................................... 42 2. DESENVOLVIMENTO DA APLICAÇÃO ...................................................................... 43 2.1 Documentação ................................................................................................................ 43 2.1.1 Mecanismos Arquiteturais..................................................................................... 43 2.1.2 Modelagem do Sistema ......................................................................................... 46 2.1.3 Arquitetura e Diagrama de Caso de Uso ............................................................... 47 2.2 Apresentação das Telas e Funcionalidades ................................................................... 53 2.2.1 Funcionalidades em Comum ................................................................................. 53 2.2.2 Pilha – Aplicações ................................................................................................. 54 2.2.3 Fila - Abstrata ....................................................................................................... 56 2.2.4 Fila - Aplicações.................................................................................................... 56 2.2.5 Lista - Abstrata ...................................................................................................... 57 7 2.2.6 Lista - Aplicações .................................................................................................. 58 2.2.7 Árvore – Abstrata/Vetor ........................................................................................ 59 2.2.8 Árvore AVL .......................................................................................................... 59 2.2.9 Árvore N-Ária – Sistema de Arquivos .................................................................. 61 2.2.10 Algoritmos Clássicos aplicados a Estrutura de Dados ........................................ 62 3 COMPARATIVO E AVALIAÇÃO DA FERRAMENTA ................................................. 63 3.1 Comparativo.................................................................................................................. 63 3.2 Avaliação da Ferramenta .............................................................................................. 77 3.2.1 Questionário ................................................................................................................. 78 3.2.2 Resultados ................................................................................................................. 79 CONCLUSÃO .......................................................................................................................... 81 REFERÊNCIAS BIBLIOGRÁFICAS ..................................................................................... 83 8 LISTA DE FIGURAS Figura 1 - Operações básicas da pilha. .................................................................. 16 Figura 2 - Operações básicas da fila. ..................................................................... 17 Figura 3 – Representação de Fila Circular. ........................................................... 18 Figura 4 - Operações básicas da lista..................................................................... 19 Figura 5 – Apresentação de uma lista simplesmente encadeada. .......................... 20 Figura 6 - Apresentação de uma lista duplamente encadeada. .............................. 20 Figura 7 - Apresentação de uma árvore de busca binária. ..................................... 22 Figura 8 – Representação de Árvore AVL. ........................................................... 23 Figura 9 – Representação de Árvore N-Ária. ........................................................ 23 Figura 10 – Representação do módulo ARRAY. .................................................. 25 Figura 11 – Representação do módulo LINKED LIST. ........................................ 25 Figura 12 – Representação do módulo DOUBLY LINKED LIST. ...................... 26 Figura 13 – Representação do módulo BINARY TREE. ...................................... 26 Figura 14 – Representação de construção de árvores no módulo BINARY TREE que tem como saída um resultado incorreto para as definições do algoritmo. ..... 27 Figura 15 – Representação do módulo AVL TREE. ............................................. 28 Figura 16 – Representação da aplicação da Estrutura de Pilha na Ferramenta. .... 29 Figura 17 – Representação da aplicação da Estrutura de Fila na Ferramenta ....... 30 Figura 18 – Representação da aplicação da Estrutura de Lista na Ferramenta. .... 31 9 Figura 19 – Representação da aplicação da Estrutura de Árvore Busca na Ferramenta com a aplicação do caminho Pré-Ordem Esquerda como exemplo... 32 Figura 20 – Representação da aplicação antes e depois da alteração das configurações visuais da ferramenta. .................................................................... 33 Figura 21 – Representação da aplicação para Árvore-N-Ária. .............................. 34 Figura 22 – Representação da aplicação para Árvore-B. ...................................... 35 Figura 23 – Tela de representação da Busca Binária............................................. 37 Figura 24 – Tela de representação de Árvore Binária de Busca. .......................... 38 Figura 25 – Passo a passo inclusão de um elemento na Pilha parte 1. .................. 40 Figura 26 – Passo a passo inclusão de um elemento na Pilha parte 2. .................. 41 Figura 27 – Diagrama de Deploy. ......................................................................... 45 Figura 28 – Árvore de Navegação. ........................................................................ 46 Figura 29 – Diagrama de classes. .......................................................................... 48 Figura 30 - Tela de apresentação da Estrutura de Dados Pilha. ............................ 54 Figura 31 – Tela de apresentação da Estrutura de Dados Pilha após botão Topo clicado. .................................................................................................................. 55 Figura 32 – Tela de apresentação da Estrutura de Dados Pilha após botão Tamanho clicado. .................................................................................................. 55 Figura 33 – Tela de apresentação da Estrutura de Dados Fila Abstrata. ............... 56 Figura 34 – Tela de apresentação da Estrutura de Dados Fila – Aplicações. ........ 56 Figura 35 – Tela de apresentação da Estrutura de Dados Lista Abstrata. ............. 57 Figura 36 – Tela de apresentação da Estrutura de Dados Lista – Aplicações. ...... 58 10 Figura 37 – Tela de apresentação da ED Árvore de Busca Binária. ..................... 59 Figura 38 – Tela de apresentação da Estrutura de Dados Árvore AVL ................ 60 Figura 39 – Tela de apresentação da Estrutura de Dados Árvore AVL balanceada após a inserção do valor 90. .................................................................................. 60 Figura 40 – Resultado da operação Tamanho do nó 7. ......................................... 61 Figura 41 – Tela de apresentação da Estrutura de Dados Pilha Inverte. ............... 62 Figura 42 – Tela de apresentação da Estrutura de Dados Fila – Fura. .................. 62 11 LISTA DE TABELAS Tabela 1 – Mecanismos Arquiteturais ................................................................... 43 Tabela 2 – Descrição das Classes .......................................................................... 49 Tabela 3 – Quadro Comparativo Parte 1. .............................................................. 64 Tabela 4 – Quadro Comparativo Parte 2. .............................................................. 69 Tabela 5 – Perguntas x Critérios............................................................................ 78 Tabela 6 - Resultado da avaliação do software ..................................................... 79 12 INTRODUÇÃO As ferramentas didáticas na disciplina de Estrutura de Dados vêm trazendo grandes contribuições ao aprendizado do aluno, por proporcionar uma melhor visão do funcionamento dos algoritmos aplicados à disciplina e até mesmo por facilitar a memorização destes, como veremos adiante. Nas referências seguintes (GARCIA et al, 2008), (SIMÕES et al, 2006), (LAUREANO, 2003), (MARSHALL et al, 2003), (SANTOS e COSTA, 2005), (NETO, 2007), é possível ver que essa abordagem traz diversas vantagens ao aprendizado dos alunos. Dentre elas, a possibilidade de ter uma visão mais real do algoritmo, enquanto que, sem a utilização destas ferramentas, os alunos têm apenas uma visão abstrata do seu funcionamento (GOMES e MENDES, 1999). Nesta pesquisa, realizamos alguns estudos para demonstrar as facilidades já alcançadas com a utilização dessa ferramenta em ambientes práticos de aprendizado. Um desses estudos foi realizado pelo Georgia Institute of Technology, que teve como finalidade medir a eficácia da utilização de animações para a demonstração dos algoritmos (GOMES e MENDES, 1999). Outro estudo foi feito durante a realização de alguns seminários para apresentação do TBC-AED (ferramenta que será vista mais a frente na sessão 6.2.6). Com o TBC-AED foram realizadas simulações com estudantes das disciplinas de Estrutura de Dados I e II. Nestas experiências, a ferramenta ficou disponível para os alunos durante o curso, onde foi comprovado o aumento da motivação e da atenção dos alunos pelas atividades (SANTOS e COSTA, 2005). No estudo citado acima, ficou comprovado que os alunos saíram de uma visão abstrata dos algoritmos, para uma visão mais real, prática e dinâmica. Com isso, foi realizada a divisão do curso, que antes era apenas teórico, em teórico-prático, o que teve o sucesso da 13 experiência confirmado, por exemplo, no aumento do índice de aprovação dos alunos nas disciplinas (SANTOS e COSTA, 2005). Como visto nas referencias anteriores, já foram criados muitos sistemas utilizando-se da animação para a representação de algoritmos e estruturas de dados, muitos exploraram bem a questão da visualização na execução das operações sobre as estruturas no auxílio para o ensino (GOMES e MENDES, 1999). Indo além da animação, a participação ativa do usuário na execução é também de grande relevância para a compreensão destes. É importante assim não só a utilização da animação, mas também permitir a interação do usuário no processo de aprendizado, possibilitando com isso o melhor entendimento do algoritmo (GARCIA et al, 2008). O propósito deste trabalho é definir e implementar uma ferramenta Web voltada para Estrutura de Dados que venha facilitar o trabalho dos professores, como um instrumento adicional a ser utilizado em sala de aula e para os alunos, uma ferramenta para exercitar os conhecimentos adquiridos e que possa ser acessada sempre que preciso por se tratar de uma ferramenta Web. O trabalho está dividido em três capítulos. No primeiro capítulo, encontramos definições teóricas sobre as Estruturas de Dados abordadas na ferramenta e a apresentação de algumas ferramentas existentes, avaliando os pontos positivos e negativos de cada uma, informações que serviram como base para a construção da ferramenta FD-AED. No segundo capítulo, será apresentada a documentação referente a ferramenta, onde será apresentada a arquitetura usada e à mesma será descrita, apresentando as telas de navegação junto as suas funcionalidades e alguns exemplos. O terceiro e último capítulo ficou o comparativo entre as ferramentas existentes e a aplicação desenvolvida, apresentando os pontos fortes e fracos de cada ferramenta. Será apresentado por fim os resultados do questionário de avaliação aplicado em sala. 14 1. BASE TEÓRICA Neste capítulo, serão apresentados os conceitos básicos das estruturas de dados que foram implementadas na ferramenta proposta e uma breve descrição das ferramentas já existente, aplicadas com o mesmo fim, citando algumas vantagens e desvantagens. 1.1 Estrutura de Dados Básicas Nesta seção, serão apresentadas as Estruturas de Dados básicas, de maneira objetiva e com o auxílio de alguns exemplos e o conceito de Estrutura de Dados. Inicialmente, para entendermos o que é uma estrutura de dados, definiremos o que são dados, tipo de dado e tipo abstrato de dado. Dado: pode ser definido como um elemento em que serão efetuadas operações, podendo ser ele variável ou constante (SCHILDT, 1997). Tipo de Dado: pode ser definido como “um conjunto de valores e um conjunto de operações sobre estes valores” (TENENBAUM et al, 1995). Tipo Abstrato de Dado: é um tipo de dado em que não há a preocupação com a sua implementação, sendo sua implementação escondida para quem a utiliza. Por isso a expressão “abstrato”, por se tratar de um tipo de dado em que fazemos operações sem que haja a necessidade de saber como elas ocorrem realmente (TENENBAUM et al, 1995). Estrutura de dados é, por sua vez, a maneira de organizar e manipular os dados que são utilizados em diferentes situações, para que haja de fato acesso e controle sobre esses dados da maneira mais eficiente e segura possível (LAFORE, 2004). 15 Existem diversas estruturas de dados aplicadas a diferentes problemas, dependendo da necessidade quanto à forma de acesso e de manipulação do dado (LAFORE, 2004). Cada uma dessas estruturas possuem suas vantagens e desvantagens, cabe a quem for utilizá-las escolher a que melhor se encaixa para a atividade e a necessidade de desempenho desejada. A seguir, serão descritas as estruturas de dados implementadas na ferramenta proposta neste trabalho. 1.1.1 Pilha A Pilha é caracterizada pela expressão "Last In First Out" (Último a Entrar, Primeiro a Sair), pois se trata de um conjunto dinâmico onde o elemento que será sempre retirado na execução da operação de remoção será o último que foi incluído. O último dado que foi incluído é conhecido como o topo da pilha (CORMEN et al, 2002). Um exemplo de funcionamento de uma pilha é imaginar uma pilha de pratos que tenha como topo o último prato colocado na pilha e este é o único que pode ser retirado. Então se quisermos acessar algum prato (elemento) da pilha, este deverá estar no topo, não estando, é preciso a execução do método de desempilhar para chegar até o prato de destino. Os métodos básicos da pilha são Push, o método de empilhar elementos, e Pop, de desempilhar o elemento do topo, onde são utilizados métodos como Topo, que retorna o elemento do topo, assim como outros (CORMEN et al, 2002). 16 1 Figura 1 - Operações básicas da pilha . Na Figura 1, tem uma pilha com os elementos 2, 7 e 1, em que 1 é o topo. E em seguida, é realizada a execução do método Push (8), que passa como parâmetro o valor 8, deixando a pilha com os seguinte elementos: 2, 7, 1 e 8, onde 8 é o novo topo. Logo em seguida, é realizada outra execução do método Push (2), dessa vez para a inclusão do elemento 2, fazendo com que a pilha fique da seguinte maneira: 2, 7, 1, 8 e 2, onde 2 é o topo, após a execução do método Push (2) é realizado a execução do método Pop() três vezes, que deixa a pilha com o seguinte aspecto: 2 e 7, onde 7 é o topo. 1.1.2 Fila A Fila é uma estrutura de dados que tem o conceito diferenciado de pilha, pois, como dito anteriormente, a pilha é definida como LIFO (Last In First Out – Último a entrar, Primeiro a Sair). Já a fila é conhecida como FIFO (First In First Out – Primeiro a entrar, Primeiro a Sair). Assim podemos exemplificar a Fila como uma fileira de pessoas em um posto de atendimento, em que a primeira pessoa que chegar será a primeira a ser atendida (CORMEN et al, 2002). 1 Fonte (http://www.brpreiss.com/books/opus7/html/img658.gif ). Acesso em: 12 Ago. 2012. 17 Uma fila possui basicamente dois métodos: 1. para enfileirar o elemento, no caso o Enqueue; e 2. para desenfileirar o elemento que é o Dequeue, onde a operação de desenfileirar só pode ser realizada se a fila não estiver vazia. Assim, usando o exemplo anterior, a chegada de uma pessoa à fila representaria a operação de Enqueue e a operação de saída da fila seria o Dequeue na fila (CORMEN et al, 2002). Figura 2 - Operações básicas da fila. Na Figura 2, é apresentado uma fila com os seguintes elementos 4, 5 e 2, que após a execução do método Enqueue (7), é realizada a inclusão do elemento 7 no final da fila, deixando-a assim com 4, 5, 2 e 7. Logo em seguida, ocorre a execução de um novo Enqueue (9), o qual inclui o elemento 9 no final da fila e posteriormente é executado o método Dequeue(), que retira o primeiro elemento da fila. Assim, a fila fica com os seguintes elementos: 5, 2, 7 e 9. Existe outra aplicação de fila, conhecida como Fila circular, a qual é utilizada com o objetivo de tornar a fila com menos gastos computacionais. Pois o conceito de circular é utilizado para evitar o deslocamento dos elementos para a esquerda sempre que houver a execução de desenfileirar (WIRTH, 1989) como vista na Figura 2, em que após a operação de dequeue é removido o elemento 4, porque é o primeiro elemento da fila, com isso após a exclusão ocorre o deslocamento dos elementos da fila para a esquerda, pois o primeiro elemento da fila sempre deverá estar na posição 0. Se tivéssemos um vetor com 1000 elementos e ocorresse a exclusão do primeiro elemento seria necessário o deslocamento de todos para a esquerda, tornando assim como dito anteriormente o gasto computacional significativo. 18 2 Figura 3 – Representação de Fila Circular . Como visto na Figura 3 é possível observar que primeiro é igual à posição 6 e fim é igual à posição 1, o que significa que o fim da fila sempre irá apontar para uma posição vazia e não será necessário o deslocamento citado anteriormente. 1.1.3 Lista Diferente das estruturas apresentadas até o momento, na Lista é possível realizar a inclusão de um elemento em qualquer posição da lista. Os elementos são incluídos de forma sequencial ou aleatória e o acesso a estes elementos difere também das estruturas de dados apresentadas anteriormente, pois qualquer elemento pode ser acessado aleatoriamente. Um exemplo de lista é o de uma lista de tarefas, onde se pode incluir ou retirar um elemento na posição desejada (GOODRICH e TAMASSIA, 2004). 2 Fonte (http://editthis.info/images/takai/2/28/EDI_Aula09.pdf). Acesso em: 05 Ago. 2012. 19 Uma lista possui dois métodos básicos: 1. responsável pela inclusão de um elemento, que é o Insert, que recebe como parâmetro a posição e o elemento que será inserido; e 2. Remove, que é responsável pela remoção e recebe como parâmetro a posição do elemento que será retirado da lista. Temos também o Search, o método de busca na lista, onde é colocado o elemento a ser buscado (GOODRICH e TAMASSIA, 2004). Figura 4 - Operações básicas da lista. Na figura 3, pode ser visto uma lista com os seguintes dados: 4, 5 e 2. Após a execução do método Insert (1,7), tem a inclusão do elemento 7 na posição um, deslocando para direita o elemento que estiver nesta posição. Com isso, a lista ficará da seguinte maneira: 4, 7, 5 e 2. Novamente é visto a execução de um Insert (4,9), que incluirá o elemento 9 na posição 4, deixando a lista com os seguintes dados: 4, 7, 5, 2 e 9. Em seguida, ocorre a execução do método Remove (2) que irá realizar a remoção do elemento na posição 2 da lista, ficando, após a execução, com os valores: 4, 7, 2 e 9. Dentre as implementações de listas existem as listas encadeadas que são divididas em Lista Simplesmente Encadeada e Lista Duplamente Encadeada, as quais foram implementadas na ferramenta criada e serão definidas. Uma lista simplesmente encadeada pode ser definida como uma estrutura a qual seus nós são ligados em apenas um sentido, essa ligação ocorre com o uso de ponteiro, onde o ponteiro de um nó aponta para o próximo elemento da lista ou para nulo se o no for o último 20 como pode ser visto o nó 2 na figura 5. Vale ressaltar que a busca na lista simplesmente encadeada ocorre em um único sentido, pois como dito anteriormente a ligação entre os nós ocorre por ponteiro e em um único sentido (CORMEN et al, 2002). Figura 5 – Apresentação de uma lista simplesmente encadeada. Já a lista duplamente encadeada é uma estrutura semelhante a lista simplesmente encadeada, diferenciando na conexão entre os nós que ocorre com o uso de dois ponteiros, onde um ponteiro aponta para o elemento seguinte e o outro para o elemento anterior. Assim como dito anteriormente a busca na lista simplesmente encadeada ocorre em um único sentido, já na duplamente encadeada a busca pode ocorrer em qualquer sentido, sendo assim o ponteiro anterior do primeiro nó apontará para nulo e o ponteiro seguinte do ultimo nó apontará para nulo, como visto na Figura 6 (CORMEN et al, 2002). Figura 6 - Apresentação de uma lista duplamente encadeada. 21 1.1.4 Árvore Árvore pode ser definida como sendo uma TAD onde os elementos são organizados de forma hierárquica. Há um elemento chamado de raiz, que se difere dos outros elementos por não possuir pai, somente filhos. Diferentemente dos outros elementos (nós), que sempre possuíram pai e possíveis filhos, no caso de um nó não ser raiz e não conter filhos ele é nomeado de nó folha. O número de filhos permitido e o que será armazenado em cada nó são diferentes para os diversos tipos de árvores conhecidas (CORMEN et al, 2002). Na ferramenta desenvolvida foi abordado três tipos de árvores: árvores de busca binária, árvore binária AVL e árvores multicaminhos3. Na aplicação de Árvores Binárias, as implementações utilizadas foram Árvore de Busca Binária e Árvore AVL, a seguir será apresentado o que é uma árvore binária e então irão ser apresentados os tipos implementados na aplicação. Árvore Binária pode ser definida como um conjunto finito de nós, que pode ser vazio, ou possuir um nó raiz e dois conjuntos separados de nós, a subárvore esquerda e a subárvore direita, as operações básicas de árvore são de inserção, deleção, busca (CORMEN et al, 2002). Das aplicações de árvores binárias foram implementadas na ferramenta as Árvore de busca binária e Árvore AVL. A árvore de busca binária segue as regras da árvore binária, difere apenas na operação de inserção, pois na árvore de busca binária toda subárvore a direita será maior que o nó raiz e a subárvore a direita será menor (CORMEN et al, 2002). Assim a inserção deve ocorrer respeitando esse conceito. Um exemplo de árvore de busca binária pode ser visto na Figura 7. Na Figura 7 é apresentado uma árvore que tem como raiz o nó 8, os nós folhas são os nós 1, 4, 7 e 14 e como dito anteriormente os nós a direita de 8 são maiores e a esquerda menores, o que faz dessa uma árvore de busca binária. 3 Também conhecida como árvore N-Ária. 22 Figura 7 - Apresentação de uma árvore de busca binária. Outra árvore binária implementada nesse projeto como dito anteriormente foi a árvore AVL, essa é uma árvore que segue como regra manter um balanceamento, no qual a altura da subárovre a direita e a esquerda a partir de cada nó só poderá diferir de no máximo uma unidade, essa unidade é dada como fator de balanceamento (GOODRICH e TAMASSIA, 2002). O balanceamento ocorre por rotações, sendo definidas por rotação simples (quando um nó desbalanceado tem seu filho no mesmo sentido da inclinação, formando uma linha reta) ou dupla (quando um nó desbalanceado tem seu filho inclinado no sentido inverso ao pai, dando uma forma de joelho). Para que seja respeitado o FB (Fator de Balanceamento), as execuções dessas rotações só irão balancear a árvore sem afetar a ordenação dela. Podemos ver um exemplo de Árvore AVL na Figura 8 (GOODRICH e TAMASSIA, 2002). 23 Figura 8 – Representação de Árvore AVL. Foi implementado na aplicação também a árvore N-ária, que é uma árvore de multicaminho, isso é pode ser vazia ou possui um nó chamado raiz, o qual um nó raiz ou seus filhos poderão ter n nós filhos (CORMEN et al, 2002), conforme a Figura 9, que apresenta o nó de valor 4 com três filhos. Neste projeto a árvore n-ária foi aplicada representando um sistema de arquivo como será apresentado no capítulo 2. Figura 9 – Representação de Árvore N-Ária. 24 1.2 Ferramentas Didáticas já Existentes Nesta sessão, serão apresentadas algumas ferramentas já existentes e que utilizam animação na representação dos algoritmos de Estruturas de Dados. Serão apresentados também alguns de seus algoritmos, com o auxílio de telas, procurando mostrar o seu funcionamento e alguns pontos como a disponibilidade, facilidade de uso, estruturas de dados implementadas, interação com o usuário e como é o front-end, modo de exibição da aplicação, que serão vistos na sessão 3.1, além de vantagens e desvantagens da utilização destas telas para visualização dos algoritmos. As ferramentas que serão abordadas nesta sessão foram escolhidas, por se tratarem de ferramentas que possuem alguns aspectos que utilizamos na ferramenta proposta, aspectos esses como a forma com que é apresentada a animação da estrutura de dado, como ocorre a interação do usuário, organização das informações na tela (ex: botões, menu). 1.2.1 Astral Astral é uma ferramenta desenvolvida para a arquitetura Macintosh, utilizando a plataforma de programação Think Pascal. Logo depois foi desenvolvida para o ambiente Windows. Essa ferramenta tem como objetivo explorar o entendimento dos algoritmos aplicados nas disciplinas de estrutura de dados com o auxílio de animações gráficas (GARCIA et al, 2008). 25 Serão descritos alguns módulos utilizados pelo Astral. I. Execução do módulo ARRAY (Vetor): É possível criar uma lista ordenada e não ordenada, existem as operações básicas de fila (inserir, remover e pesquisar) é possível também criar um array com tamanho máximo de 40. Pode ser visto na Figura 10 um exemplo de como é apresentado um array de tamanho 10. Figura 10 – Representação do módulo ARRAY. II. Execução do módulo LINKED LIST: É possível criar uma lista ordenada ou não ordenada. Existem as operações de inserir, remover, inserir no final, pesquisar e inverter a lista, a tela de exibição de uma lista encadeada (linked list) pode ser visto na Figura 11. Figura 11 – Representação do módulo LINKED LIST. 26 III. Execução do módulo DOUBLY LINKED LIST: É possível criar uma lista duplamente encadeada do tipo ordenada ou não ordenada e aplicar as operações de inserção, remoção do elemento escolhido, buscar elemento, inserir no final, inverter a lista, remover todos da lista. Na Figura 12 é apresentado um exemplo da estrutura lista duplamente encadeada (doubly linked list). Figura 12 – Representação do módulo DOUBLY LINKED LIST. IV. Execução do módulo BINARY TREE: Na execução desse módulo tem, conforme a Figura 13, as operações básicas para árvore: inclusão, exclusão, busca o elemento e realiza também as operações de caminho na árvore os quais são o Pós-Ordem, In-Ordem e o Pré-Ordem. É possível criar uma árvore com a inclusão de valores de 1 a 10, mantendo a ordem correta, conforme é apresentado na Figura 13. Figura 13 – Representação do módulo BINARY TREE. 27 Porém, com a inclusão de valores acima de 10, a ordenação fica falha, conforme a Figura 14(b), mas sendo eficiente com a utilização de letras, conforme a Figura 14(a), existem as operações de árvore: inserir, remover e pesquisar. A falha ocorre porque a ferramenta utiliza comparação ASCII, tornando-a assim muito eficiente com a manipulação de letras. Essa abordagem também é seguida nos demais módulos existentes, como o AVLTree, Graph, Hash e o Sort, onde são aplicados os algoritmos do Heap-Sort, Insertion-Sort, Merger Sort, dentre outros. Figura 14 – Representação de construção de árvores no módulo BINARY TREE que tem como saída um resultado incorreto para as definições do algoritmo. 28 V. Execução do módulo AVL TREE: Na execução desse módulo, tem conforme a Figura 15, as operações básicas para árvore são: inclusão, exclusão, busca do elemento. O balanceamento é identificado através dos caracteres “-” , “/” e “\”, o que torna a apresentação desta estrutura não muito didática, pois para um usuário novo, essa abordagem ira confundi-lo até que o mesmo entenda a utilização desses caracteres . Nas definições de árvore AVL, o caractere “/” é equivalente ao +1, o “\” equivale ao -1, e o caractere “-” é a representação do zero, isto é, a árvore ou subárvore está balanceada. Da mesma forma que no módulo BINARY TREE, o módulo AVL TREE também realiza as operações de caminho na árvore, que são o Pós-Ordem, In-Ordem e o Pré-Ordem. Figura 15 – Representação do módulo AVL TREE. 1.2.2 AGEDUnifor Essa é uma aplicação desenvolvida sobre a linguagem Java. As Estruturas de dados abordadas nesta aplicação são Pilha, Fila, Deque, Lista, Árvore de Busca e Árvore AVL. São possíveis também a realização das operações de percursos como o In-Ordem, Pré-Ordem, dentre outros, nas Estruturas de Dados de Árvore (NETO, 2007). A aplicação trabalha apenas com inteiros, ficando assim sem aplicação na utilização de letras ou palavras. 29 Na abordagem da Pilha, temos as operações básicas de Push, Pop e Top. Para auxiliar na escolha do elemento, existe a opção de gerar um elemento através da opção Random, aplicada também nas outras estruturas abordadas Na Figura 16, pode se ver a aplicação sobre Pilha. Figura 16 – Representação da aplicação da Estrutura de Pilha na Ferramenta. Na abordagem de Fila, é utilizado as operações de Enqueue (insere na fila), Dequeue (remove o primeiro elemento da fila) e Front (indica o primeiro elemento da fila). A Fila é representada pela estrutura de uma lista duplamente encadeada conforme a Figura 17. 30 Figura 17 – Representação da aplicação da Estrutura de Fila na Ferramenta Na abordagem de Lista, conforme a Figura 18, tem as operações de Add After (Adiciona o elemento após o índice passado), Add Before (Adiciona antes do índice passado), Remove (Remove o primeiro elemento da Lista). 31 Figura 18 – Representação da aplicação da Estrutura de Lista na Ferramenta. Na abordagem de Árvore de Busca, tem as operações Add (Adiciona o elemento na árvore), Remove (Remove o elemento passado no campo de texto) e Caminhar, em que são possíveis aplicar os percursos de Pré-Ordem Esquerda, Pré-Ordem Direita, Pós-Ordem Esquerda, Pós-Ordem Direita, In-Ordem Esquerda, In-Ordem, Euler Esquerda, Euler Direita e o algoritmo de Largura. Podem ser vistas na Figura 19, as operações citadas anteriormente e um exemplo de aplicação do caminho Pré-Ordem Esquerda, aplicado à árvore montada no exemplo. 32 Figura 19 – Representação da aplicação da Estrutura de Árvore Busca na Ferramenta com a aplicação do caminho Pré-Ordem Esquerda como exemplo. A ferramenta aborda as estruturas de dados de Deque e Árvore AVL, onde o módulo Deque difere do módulo Fila apenas nas operações, porque na estrutura de Deque é possível incluir no começo ou no final e na remoção a temos a mesma opção, tirando assim o elemento do começo ou do final. As operações aplicadas são: de AddFirst (Adiciona no começo), AddLast (Adiciona no Final), RemoveFirst (Remove o primeiro), RemoveLast (Remove o último), First (Retorna o Primeiro da Fila) e Last (Retorna o último da Fila). 33 É possível escolher a posição em que o elemento será apresentando, tanto como a cor da letra; a cor da caixa, quando selecionada e não selecionada; a cor da seta; tamanho da caixa em que o elemento é apresentado, assim como as bordas; o tamanho da letra; o sentido da representação, dentre outras opções, que podem ser vistos na Figura 20. Na Figura 20 (a), é apresentado o modelo padrão da ferramenta. Na Figura 20 (b), tem as tela de configuração e, na Figura 20 (c), tem o resultado após aplicar as configurações da Figura 20 (b). Figura 20 – Representação da aplicação antes e depois da alteração das configurações visuais da ferramenta. A ferramenta em alguns momentos foge da questão didática, como por exemplo, na representação de pilha que ocorre de forma direta, em que é realizado o acesso da pilha através de Lista Simplesmente Encadeada, ao invés da representação na forma de vetor. A mesma observação aplica-se na representação de Fila, que ocorre com a utilização de Lista Duplamente Encadeada. 34 No entanto, há um fator interessante na aplicação que é a apresentação do Código Fonte ao lado, o que facilita o aprendizado. 1.2.3 Animação de Árvore-B Na ferramenta Animações de Árvore-B, tem as opções de representação de Árvore-B ou Árvore-N-Ária, dependendo de como ocorre à inserção, conforme as Figuras 21 e 22. Nas Árvores N-Ária, como citado na sessão 6.2, tem a quantidade de elementos suportada por um nó. No caso dessa ferramenta, é possível definir esse valor como será apresentado mais na frente. Esta aplicação permite as operações de inserir, remover, alterar o valor de M (o valor de M é a quantidade de elementos que pode conter em nó, como citado anteriormente para Árvores-N-Ária) e inserir N objetos (insere a quantidade de elementos de acordo com o valor passado no campo texto), conforme as Figuras 21 e 22. Figura 21 – Representação da aplicação para Árvore-N-Ária. 35 Esta aplicação não tem a opção de remover todos os nós, o que a torna não muito interessante neste sentido. A única forma de realizar tal operação é utilizando a opção de alterar o valor de M, assim foi possível excluir todos os elementos. Figura 22 – Representação da aplicação para Árvore-B. 1.2.4 Spyke O Spyke é uma ferramenta baseada nas linguagens C++, Pascal e Java, onde são abordadas as estruturas de dados de Pilha e Fila que podem ser vistas na forma de Pilha dinâmica ou estática e Fila visualizada de maneira dinâmica ou estática. A aplicação busca além do resultado visual na execução das operações sobre os TADs (Tipos abstratos de dados), também trazer o comparativo na execução entre as linguagens utilizadas. O Spyke é dividido em quatro telas, que apresentam a aplicação das possibilidades de executar Pilha estática ou dinâmica e Fila estática ou dinâmica. Além de poder escolher essas opções, é possível também escolher a linguagem em que será demonstrado o resultado do TAD. Na tela de representação do TAD, é possível ver a implementação das operações (SIMÕES et al, 2006). Junto com a estrutura de dados escolhida é demonstrado também os algoritmos das operações possíveis nas estruturas, o qual aparece a implementação de acordo com a 36 linguagem escolhida, o que torna a ferramenta mais abrangente, exatamente por abordar linguagens diferentes. São apresentados diversos quadros, que se referem às funções primitivas da pilha, como por exemplo: topo, insere, remove dentre outros, e ficando ao lado direito a representação gráfica (SIMÕES et al, 2006). 1.2.5 TBC-AED O TBC-AED é uma ferramenta desenvolvida em JAVA, essa aplicação aborda os seguintes temas: Busca Binária, Métodos de Ordenação (Select Sort, Insert Sort, Bubble Sort, Merge Sort e Quick Sort), Alocação Estática e Dinâmica de Memória (Lista, Fila e Pilha) e Árvore Binária de Busca. O TBC-AED é uma ferramenta desktop bastante explicativa, que apresenta a tela de introdução, ao selecionar uma das opções no menu da aplicação. Além dessa introdução, a estrutura selecionada contém diversos pontos positivos quanto à apresentação das estruturas de dados como por exemplo o uso de legendas, a demonstração do algoritmo e o fato de o TBC-AED ser autoexplicativo (o que é um dos pontos mais fortes da ferramenta). Ao passar o mouse em partes da tela, será possível ter uma breve descrição da parte selecionada (SANTOS e COSTA, 2005). Na Figura 23, tem um exemplo da ferramenta na execução de Busca Binária, que se divide em quatro partes. Na parte superior, tem uma introdução com relação a opção selecionada, a Busca Binária. Abaixo, do lado esquerdo, tem a demonstração do algoritmo em Portugol, assim do lado direito tem a representação gráfica do algoritmo e, por fim, na parte inferior existem a legenda e os botões (SANTOS e COSTA, 2005). 37 Figura 23 – Tela de representação da Busca Binária. A única tela em que ocorre uma pequena mudança nos padrões aplicados para as outras opções é a tela para a Árvore Binária de Busca, pois, para representação dessa estrutura, foi necessário aumentar a área da animação e diminuir a área de demonstração do algoritmo em Portugol. Na Figura 24, pode ser observado que foi incluída uma janela de mensagem que se refere ao passo-a-passo da aplicação e, por fim, foi deixado um espaço na parte inferior, acima dos botões, para demonstração do resultado da execução dos métodos de caminho préordem, in-ordem ou pós-ordem na árvore gerada (SANTOS e COSTA, 2005). 38 Figura 24 – Tela de representação de Árvore Binária de Busca. Também foi realizada a implementação do TBC-AED para Web, para com isso trazer uma maior Disponibilidade e ajudar na distribuição do conhecimento, contribuindo com a melhoria do ensino das Estruturas de Dados (SANTOS e COSTA, 2005). Uma falha nessa aplicação é a forma como é realizada a abordagem quanto as informações explicativas da ferramenta, pois sempre é necessário clicar no botão informações para se ter acesso aos outros botões, sendo assim repetida informações de forma desnecessária para um usuário já conhecedor da ferramenta, ficando somente habilitados os botões de “informações” e “conceito”. Como citado anteriormente, cada vez que o usuário executar a aplicação, será necessário clicar no botão “informações”, depois clicar em “introdução”, depois em “iniciar”, para só em fim poder executar as operações, clicando no botão “passos do processo”, que apresenta as opções de operação a ser executada na Pilha e só depois inserir o valor que será incluído. 39 Com isso, para cada operação na Pilha, será necessário clicar no botão “passos do processo”, escolher a operação e só depois incluir o valor ou executar um Pop. E assim será toda vez que quiser fazer alguma operação na Pilha. O TBC-AED/Web é uma ferramenta bem explicativa, porém prende o usuário com a forma de abordagem de só poder ir para um próximo passo se tiver executado um passo anterior, o que na maioria das vezes não é necessário. Isso ocorre, por exemplo, quando, sempre que a aplicação for executada, faz-se necessário que o usuário veja a introdução novamente, dentre outras informações, também repetitivas e desnecessárias. A abordagem de Pilha no TBC-AED/Web traz, como na aplicação desktop, o seguinte padrão na tela: no topo, a introdução referente a estrutura escolhida; logo abaixo, no lado esquerdo, o algoritmo em portugol, à direita, a demonstração gráfica da estrutura de Pilha e, abaixo, os botões. A seguir, será apresentado como ocorre a inclusão de um elemento na pilha, vistos nas Figuras 25 e 26. 40 Figura 25 – Passo a passo inclusão de um elemento na Pilha parte 1. 41 Figura 26 – Passo a passo inclusão de um elemento na Pilha parte 2. 42 Na Figura 25 e 26, como descrito anteriormente, para uma simples operação de inclusão, são necessários vários passos, o que acaba por tornar cansativo o uso da ferramenta. Na Figura 25(a), ao clicar no botão “passos do processo”, é exibida a caixa de dialogo, informando as opções de operações sobre a Pilha. Após a escolha, é apresentado na caixa da Figura 25(b), o elemento 3 e, em seguida, na Figura 26(c), uma janela de confirmação, abaixo da legenda, onde é necessário realizar três cliques, pois mostra passo a passo a inclusão do valor 3, o que resulta na Figura 26(d). 1.2.6 Outras Ferramentas Nos itens anteriores foi realizada a abordagem de algumas ferramentas. Nesta seção, serão citadas outras, mas sem muitos detalhes. Algumas dessas ferramentas que serão citadas também foram testadas, mas ou não se encaixaram no modelo que foi utilizado na ferramenta implementada e descrita na sessão 2.2 implementada ou se encaixavam, mas não iriam agregar nenhum novo conceito. Com isso, não foi feito um maior detalhamento delas. Temos a ADTTool, JSave, JVALL, Linked List Teaching System, JDSL Visualizer, Opsis, Binary Search Tree Visualization, ISVL, EVENGA, VisualGraph, PILOT, JAWAA, LINK, dentre outras (SOUZA, 2004). Será apresentado no Capítulo 3 um quadro comparativo entre as ferramentas citadas e apresentadas com a ferramenta criada, buscando trazer uma visão geral das aplicações existentes e a criada. 43 2. DESENVOLVIMENTO DA APLICAÇÃO Neste capítulo, será abordada a documentação que trará como se deu a montagem da arquitetura da aplicação e tem por objetivo apresentar a ferramenta funcionalmente e, para tanto, será mostrado o software implementado, juntamente com os algoritmos e estruturas de dados desenvolvidas. 2.1 Documentação Procurando criar uma ferramenta com fácil usabilidade e entendimento para a utilização em sala de aula e também acesso dos alunos através da Web, a qual foi desenvolvida utilizando a arquitetura em camadas será apresentada nas seções 2.1.1, 2.1.2 e 2.1.3 uma visão da arquitetura da aplicação, trazendo assim uma visão geral do seu desenvolvimento. 2.1.1 Mecanismos Arquiteturais Na tabela a seguir, serão apresentados os mecanismos utilizados no desenvolvimento da aplicação, junto com a apresentação da interação entre eles. Tabela 1 – Mecanismos Arquiteturais Mecanismo de Mecanismo de Design Análise Front-End Mecanismo de Implementação Interface de comunicação com o usuário ASP.NET, Silverlight 4 e JavaScript 44 Mecanismo de Mecanismo de Design Análise Mecanismo de Implementação Back-End Lógica da Aplicação (Camada de Negócio) C# .Net Build IDE de desenvolvimento e depuração Visual Studio 2010 com a .Net Framework 4 Deploy Disponibilizar a ferramenta para teste. Visual Studio 2010, IIS 7 e No-ip. Conforme a Tabela 1, observa-se que a aplicação foi desenvolvida com a utilização do Visual Studio 2010 (rodando a .Net Framework 4), sendo aplicado para o desenvolvimento da interface o Silverlight 4 e o ASP.NET. Com isso para a lógica da ferramenta, foi utilizada a linguagem de programação C#. Foi aplicado na disponibilização da ferramenta o Visual Studio, responsável por gerar os arquivos a serem disponibilizados no IIS (Internet Information Service), responsável pela publicação local. Para a publicação na rede, foi empregado o No-IP4. Na Figura 27, será apresentado como ocorre a interação entre os mecanismos citados anteriormente. 4 Em: http://www.no-ip.com/ - Acesso em: 12 de nov. de 2012. 45 Figura 27 – Diagrama de Deploy. Conforme a Figura 27, pode ser observado que a IDE utilizada foi o Visual Studio, nele foi utilizada para construção da interface a tecnologia ASP.NET com Silverlight, onde ocorre a interação entre essas duas tecnologias através do arquivo XAP, que é criado por padrão na pasta ClienteBin da aplicação Web gerada. Assim, tem a aplicação Web utilizando ASP.NET e, nela, o arquivo XAP, que referencia a aplicação Silverlight. Temos assim, como linguagem de programação, o C# .Net, que é o Code Behind de ambas tecnologias. É visto que a interação do Visual Studio com o IIS (Internet Information Service) ocorre através dos arquivos gerados no momento da publicação da aplicação pelo Visual 46 Studio, assim, com esses arquivos referenciados pelo IIS, foi utilizado o No-IP para disponibilizar a ferramenta na Web. 2.1.2 Modelagem do Sistema Será apresentado a seguir como se encontra a modelagem da ferramenta desenvolvida, procurando trazer uma visão geral da sua estrutura. Figura 28 – Árvore de Navegação. Na Figura 28, é apresentada a árvore de navegação da ferramenta distribuída por TAD. Assim, temos Pilha, Fila, Lista e Árvore. A estrutura de Pilha está dividida em TAD Pilha e Pilha/Aplicação, onde TAD Pilha pode ser visualizada como uma Pilha Abstrata, uma Pilha usando Vetor e uma Pilha usando Lista Simplesmente Encadeada. E na opção de Pilha/Aplicação, é visto na forma de animação como ocorre uma inversão dos valores da Pilha. 47 Já a estrutura de Fila está dividida em TAD Fila, Fila/Aplicações e Fila/Fura. Assim, em TAD Fila é apresentada uma Fila de maneira abstrata na forma de uma fila de pessoas. Em Fila/Aplicações, a Fila pode ser visualizada utilizando Fila Circular, Vetor e Lista Simplesmente Encadeada. Acessando Fila/Fura, pode ser vista a aplicação de Fila utilizando a opção de furar a fila, o que ocorre com a passagem da posição e o elemento a ser inserido nela. Na aplicação de Lista, tem o TAD Lista e Lista/Aplicações, seguindo uma estrutura similar às anteriores. No TAD Lista, é possível ter a visão abstrata da estrutura, sendo apresentada como um caderno conforme a Figura 35, no qual podemos escrever seguindo as regras de lista. Em Lista/Aplicações, vemos a aplicação de Lista utilizando Vetor, Lista Simplesmente Encadeada e Lista Duplamente Encadeada. Por fim, em Árvore tem Árvore de Busca Binária, Árvore AVL e Árvore NÁria/Aplicação. Tendo assim, em Árvore de Busca Binária e Árvore AVL, a visão abstrata na aplicação de árvore. Já a Árvore N-Ária é representada como sendo um sistema de arquivos conforme Figura 40. 2.1.3 Arquitetura e Diagrama de Caso de Uso A ferramenta foi desenvolvida utilizando a arquitetura em duas camadas, onde temos a Camada de Apresentação e a Camada de Negócio. Assim, a Camada de Apresentação contém a interface da aplicação desenvolvida; e a Camada de Negócio, a lógica da ferramenta e suas operações. Como a ferramenta não tem acesso a banco de dados, não foi implementada a camada de persistência. Na Figura 29, é apresentado o Diagrama de Classe da aplicação. Assim, tem na linha superior as classes responsáveis pela interface. Na linha do meio, temos as classes responsáveis pela apresentação da Estrutura de Dados, por exemplo, no caso de Pilha temos pilha usando Vetor e LSE. Já na ultima linha, temos os objetos utilizados na criação da LSE e da LDE. São os elementos de início, intermediários e o último. Sendo no canto direito tem a classe Fila_Padrao que refere-se a uma interface que usa para montagem da fila a classes ligadas a ele conforme Figura 29. Será melhor descrito cada classe e seus relacionamentos na Tabela 2. 48 Figura 29 – Diagrama de classes. 49 Na Tabela 2, será apresentada a descrição junto com a interação das classes apresentadas anteriormente, de forma a trazer uma melhor visão da função de cada classe. Tabela 2 – Descrição das Classes Classe Pilha_PadrãoG Descrição Apresentação de Pilha Abstrata, Vetor (Es_vetor) e LSE (Es_LSE). Pilha_Invert Representação da inversão de Pilha na forma de uma animação. Fila_Padrao Traz a forma abstrata de Fila, porém utiliza as classes Fila_Ini, Fila_El e Fila_End para a sua visualização. Fila Apresenta Fila na forma de Fila Circular, Vetor (Es_Vetor) e LSE (ES_LSE). Fila_Fura Demonstração da operação de Fura Fila, utilizando LSE (Es_LSE). Lista_Padrão Aplicação de Lista na forma de um caderno. Lista Apresentação de Lista na forma de Vetor (Es_vetor), LSE (Es_LSE) e LDE (Es_LDE). 50 Classe Descrição Representação de Árvore de Busca Binária Arvore_BuscaBinaria Arvore_AVL na forma Abstrata e Vetor (ES_Vetor).Utiliza a classe Arvore_Bin. Apresenta Árvore AVL na forma abstrata. Utiliza a classe Arvore_AVL. Arvore_NAria Traz Árvore N-Ária na representação de um sistema de arquivo. Es_Vetor Classe responsável pela lógica do vetor. Es_LSE Classe responsável pela lógica e construção de uma LSE, utiliza para construção da LSE as classes RectLSE_Ini, RectLSE, RectLSE_End. Es_LDE Classe responsável pela lógica e construção de uma LDE, utiliza para construção da LDE as classes Rect_LDE_Ini, Rect_LDE, Rect_LDE_End. Arvore_Bin Classe com manipulações para Árvore Binária. Utiliza a classe Node_Arvore. Arvore_AVL_cls Classe com manipulação para Árvore AVL. Utiliza a classe Node_Arvore. 51 Classe Node_Arvore Descrição Classe de criação e manipulação do node da árvore. Fila_Ini Responsável pela apresentação gráfica do primeiro elemento da fila abstrata. Fila_El Responsável pela apresentação gráfica do elemento da fila abstrata. Fila_End Responsável pela apresentação gráfica do último elemento da fila abstrata. RectLSE_Ini Responsável pela apresentação gráfica do primeiro elemento da LSE. RectLSE Responsável pela apresentação gráfica do de um elemento da LSE. RectLSE_End Responsável pela apresentação gráfica do último elemento da LSE. Rect_LDE_Ini Responsável pela apresentação gráfica do primeiro elemento da LDE. Rect_LDE Responsável pela apresentação gráfica de um elemento da LDE. 52 Classe Rect_LDE_End Descrição Responsável pela apresentação gráfica do último elemento da LDE. Pode ser visto no Diagrama de Classe e na Tabela de Descrição das Classes que existem dez classes responsáveis pela manipulação das páginas de apresentação das Estruturas de Dados. As páginas são Pilha_Padrao, Pilha_Invert, Fila_Padrao, Fila, Fila_Fura, Lista_Padrao, Lista, Arvore_BuscaBinaria, Arvore_AVL e Arvore_N-Aria, onde a classe Pilha_Padrao utiliza a visualização de Pilha Abstrata junto com a representação de Pilha com Vetor atráves da instância da classe Es_Vetor, e Pilha com LSE através da instância da classe Es_LSE. Na classe Pilha_Invert, ocorre a apresentação da inversão de Pilha Abstrata na forma de animação. Já na classe Fila_Padrao, que apresenta a fila de forma abstrata, é possível observar que se tem a instância de três classes: a Fila_Ini, Fila_El e Fila_End, que são responsáveis pela apresentação dos elementos na fila, na forma de pessoas em uma fila. Na classe Fila, temos a representação de Fila na forma de Fila Circular, Fila usando Vetor através da classe Es_Vetor e Fila com LSE através da classe Es_LSE. Temos ainda em Fila a classe Fila_Fura, que é responsável pela apresentação da operação de furar a fila, utilizando para isso LSE com a instância do Es_LSE. Existem duas classes que nos trazem a aplicação de Lista. De forma abstrata, no caso a classe Lista_Padrao; na forma de Vetor, com a Es_Vetor, na forma de LSE, com a Es_LSE e utilizando LDE, com a instância da classe Es_LDE. Por fim, tem a representação de Árvore que nos traz três aplicações, são elas a Árvore de Busca Binária com a classe Arvore_BuscaBinaria que utiliza a instância da classe ArvoreBin para controle das operações da árvore e temos a mesma representada na forma de Vetor com a Es_Vetor. Por seguinte, se tem a Árvore AVL que utiliza a classe Arvore_AVL na qual temos a instância da Arvore_AVL_cls, responsável pelas operações da árvore AVL. 53 Ambas utilizam a classe Node_Arvore, que é onde ocorrem as operações básicas e armazenamento dos nodes da árvore. Já a representação de Árvore N-Ária ocorre com o uso da classe Arvore_N-Aria. 2.2 Apresentação das Telas e Funcionalidades Veremos nessa seção as telas apresentadas para as Estrutura de Dados abordadas na ferramenta proposta neste trabalho, tentando trazer um entendimento geral da usabilidade da ferramenta com o auxilio de exemplos. 2.2.1 Funcionalidades em Comum Temos algumas funcionalidades em comum nas telas, por exemplo é possível fazer a apresentação isolada de cada uma das implementações, pois temos a opção de ocultar cada quadro, clicando na opção Show/Hide que está localizado na parte superior a esquerda do quadro, vide figura 30. Outra função em comum é o quadro apresentado à direita da tela contendo o código referente a estrutura que é aplicado em sala, trazendo como ideal a possibilidade do aluno fazer a análise visual da estrutura de dados e possibilitar, apenas copiando e colando no compilador, fazer a execução do código e ver como se comporta a estrutura. 54 2.2.2 Pilha – Aplicações Figura 30 - Tela de apresentação da Estrutura de Dados Pilha. Na Figura 30, é apresentada a tela referente à Pilha, a qual possui três abordagens de Pilha, sendo elas, Pilha Abstrata no quadro superior à esquerda, Pilha com Vetor no quadro superior à direita e Pilha com Lista Simplesmente Encadeada no quadro inferior. As operações possíveis para Pilha são Empilhar, Desempilhar, Topo (deixa em vermelho o topo, vide Figura 31, Tamanho, onde se tem uma caixa de mensagem para cada implementação de Pilha, menos para a Pilha com LSE ,que tem o tamanho já disponível, por exemplo, se clicar em tamanho, surgirá duas caixas de mensagem informando o tamanho, conforme Figura 32, porém se tivemos com alguns dos quadros ocultos a mensagem referente ao quadro também não será visualizada. Isso se aplica as demais telas. 55 Figura 31 – Tela de apresentação da Estrutura de Dados Pilha após botão Topo clicado. Figura 32 – Tela de apresentação da Estrutura de Dados Pilha após botão Tamanho clicado. 56 2.2.3 Fila - Abstrata Figura 33 – Tela de apresentação da Estrutura de Dados Fila Abstrata. Na Figura 33, é apresentada a implementação de Fila Abstrata, onde é passada na forma de uma fila de pessoas. As operações possíveis para essa implementação são Enfileirar, Desenfileirar, Primeiro e Último. 2.2.4 Fila - Aplicações Figura 34 – Tela de apresentação da Estrutura de Dados Fila – Aplicações. 57 Na Figura 34, se tem a implementação de Fila Circular, Fila com Vetor e Fila usando Lista Simplesmente Encadeada. Existem as mesmas operações aplicada à Fila Abstrata, porém se diferencia apenas na opção de tamanho, que se assemelha a de Pilha, onde o tamanho só aparecerá para Fila Circular e Fila com Vetor, pois a Fila com LSE já é apresentado essa informação dinamicamente. A inserção, conforme as outras aplicações da ferramenta, é realizada em todas as estruturas implementadas, alterando assim dinamicamente as estruturas apresentadas. Ao clicar em inserir, é feita a inserção na cauda da Fila Circular que é preenchida no sentido horário. No caso da LSE, a inserção é feita no Fim e da mesma forma no vetor, porém na LSE é indicado a cabeça e a cauda como Inicio e Fim, já no vetor é apresentado como legenda dentro do quadro que contém a implementação de Vetor. 2.2.5 Lista - Abstrata Figura 35 – Tela de apresentação da Estrutura de Dados Lista Abstrata. 58 Para a apresentação de Lista Abstrata, é utilizada na forma de um caderno, conforme a Figura 35, onde ao inserir um dado é apresentada uma visão bem simples de como se comporta uma lista, que contém as operações de Inserir_Pos (inserir na posição escolhida), Remove_Pos, Inserir_Primeiro, Inserir_Utlimo, Remover_Primeiro, Remover_Ultimo e Elemento_Pos (retorna na caixa de mensagem o elemento da posição infirmada). 2.2.6 Lista - Aplicações Figura 36 – Tela de apresentação da Estrutura de Dados Lista – Aplicações. Na apresentação de Lista vista na Figura 36, possui Lista com Lista Simplesmente Encadeada, Lista com Lista Duplamente Encadeada e Lista com Vetor, no que difere da visualização anterior quanto às operações e à opção de tamanho, que é mostrada para no caso de Lista com Vetor. 59 2.2.7 Árvore – Abstrata/Vetor Figura 37 – Tela de apresentação da ED Árvore de Busca Binária. Na exibição de Árvore de Busca Binária, tem, conforme a Figura 37, a visão da árvore abstrata e utilizando Vetor no quadro abaixo da árvore abstrata. Temos a operações de Inserir, Remover, Buscar (colore o valor buscado), Tamanho (apresentado na forma de uma caixa de mensagem) e Caminhar, no qual temos os caminhos Pré-Ordem Esquerda, PréOrdem Direita, Pós-Ordem Esquerda, Pós-Ordem Direita, Em-Ordem Esquerda, Em-Ordem Direita, Euler Direita, Euler Esquerda e Largura. O retorno da opção Caminhar é uma caixa de mensagem com o resultado do percurso. 2.2.8 Árvore AVL Pode ser visto na Figura 38 a apresentação de Árvore AVL, onde tem as mesmas operações existentes em Árvore de Busca Binária e opções de percurso. Na implementação de Árvore AVL, temos as operações de Inserir, Remover, Buscar (colore o valor buscado) e Tamanho (é definido como a quantidade de nós da árvore). Não é possível a inserção de valores já existentes em todas as implementações de árvore. 60 Nas Figuras 38 e 39, é apresentado o balanceamento realizado na árvore AVL após a inserção do valor 90. Figura 38 – Tela de apresentação da Estrutura de Dados Árvore AVL Figura 39 – Tela de apresentação da Estrutura de Dados Árvore AVL balanceada após a inserção do valor 90. 61 2.2.9 Árvore N-Ária – Sistema de Arquivos Já na Figura 40, temos a visualização de Árvore N-Ária, sendo representada na forma de um sistema de arquivo, em que o valor do no é referente ao seu tamanho como arquivo. Essa apresentação possui as operações de Inserir, Remover, Buscar (colore o valor buscado) e Tamanho. O resultado do clique no botão tamanho pode ser visto na Figura 40, onde o resultado refere-se à soma dos elementos do no solicitado com os seus descendentes, assim o tamanho do nó 7 será 7(nó selecionado) + 22 + 13 resultando assim fica tamanho igual a 42. Figura 40 – Resultado da operação Tamanho do nó 7. 62 2.2.10 Algoritmos Clássicos aplicados a Estrutura de Dados Figura 41 – Tela de apresentação da Estrutura de Dados Pilha Inverte. Na ferramenta, foram implementadas animações de algoritmos clássicos de Estruturas de Dados, conforme podemos ver na Figura 41 onde ocorre à inversão de uma Pilha. Para tanto, é utilizada uma animação, onde ao clicarmos no botão Inverter é iniciado a animação de inversão podendo ser acelerada ou desacelerada nos botões com sinal de “+” e ““. Já na Figura 42, podemos ver outro algoritmo clássico, sendo o de Fila, utilizando a opção de Furar a Fila. Assim, temos as operações de Enfileirar e Desenfileirar, porém, se quisermos usar o fura fila, devemos indicar a posição e utilizar o botão Fura Fila. Figura 42 – Tela de apresentação da Estrutura de Dados Fila – Fura. 63 3. COMPARATIVO E AVALIAÇÃO DA FERRAMENTA Este capítulo tem por objetivo apresentar um comparativo entre a ferramenta proposta nesse trabalho e as mostradas no capítulo 1. Por fim, será apresentado a avaliação que foi realizada em sala com os alunos da disciplina de Estrutura de Dados. A avaliação terá seus resultados expostos neste capítulo, junto com uma explanação dos resultados obtidos. 3.1 Comparativo Nesta seção, será apresentado um quadro comparativo entre as ferramentas abordadas, utilizando os seguintes aspectos: disponibilidade, facilidade de uso, Estruturas de dados implementadas, interação com o usuário, como é o front-end da ferramenta, modo de exibição da ferramenta. Disponibilidade: Será levada em consideração a facilidade de obter a ferramenta para utilização. Facilidade de uso: Será vista a dificuldade em utilizar a ferramenta, como por exemplo, na execução das Estruturas de Dados. Estrutura de Dados Implementadas: Serão apresentadas quais são as estruturas abordadas pela ferramenta. Interação com o usuário: Será levado em consideração o quanto o usuário pode alterar parâmetros dos algoritmos, alterar a demonstração da estrutura, dentre outros fatores. Como é o front-end da ferramenta: Mostrará se a ferramenta foi desenvolvida para “WEB” ou “DESKTOP” e em que linguagem foi desenvolvida. Modo de exibição da ferramenta: O que é apresentado na tela de demonstração da estrutura. Tabela 3 – Quadro Comparativo Parte 1. Nome Astral Facilidade de uso Um pouco confusa quando se trata de um novo usuário. AGEDUnifor Bem flexível, muito boa e prática. Um pouco confusa a uma primeira vista por não ser muito explicativa Animação de Árvore-B Front-End Desktop, mas é necessário baixar os executáveis de cada estrutura para utilizála. Linguagem Pascal. Desktop, Linguagem Java Modo de Exibição É apresentada apenas a animação da estrutura. Não é uma apresentação muito didática, pois é toda em preto e branco. É apresentado o código fonte utilizado pela aplicação e a animação da estrutura de maneira bem explicativa. Utilizando bastante cores para diferenciar o passo a passo da estrutura. Web, linguagem Java. É apresentado de forma didática, porém nem tanto quanto a demonstração da estrutura Não é muito amigável as definições aplicadas na poderia ter cores para ajudar na ferramenta e existe algumas falhas como citado visualização. anteriormente, no caso de tentar excluir todos os elementos da Árvore só é possível se definir novamente um valor para a quantidade de elementos suportados por em cada nó. Nome Spyke Facilidade de uso Front-End Modo de Exibição Desktop, linguagens C++, Pascal e Java Tem uma apresentação bem amigável, com a demonstração da estrutura de maneira bem excplicativa e os algoritmos de cada operação possível sobre a estrutura escolhida. De acordo com as referencias se trata de uma ferramenta muito boa de utilizar pois alem de abranger mais de uma linguagem, ela é bem explicativa. Ring’G A aplicação é definida como Difícil ou Regular a usa utilização, pois é necessário a criação do algoritmo em Java para ser executado na Desktop, linguagem Java. Tem a animação de representação do algoritmo bem didática e como o algoritmo é gerado pelo o usuário isso permite utilizálo em vários testes. aplicação. É apresentado de uma forma bem didática, mas há didática demais, que prende o usuário a explicações desnecessárias depois da primeira utilização da ferramenta. É uma ferramenta bastante explicativa e de fácil entendimento, porém falha na abordagem de TBC-AED como a aplicação é explicativa. Ela torna obrigatório seguir passos desnecessários para uma segunda utilização da ferramenta, isso é a segue uma mesma sequência de apresentação. Desktop/Web, linguagem Java. Nome Facilidade de uso Front-End Modo de Exibição É mostrado apenas a animação da estrutura. ADTTool Razoável. JSave Muito boa, permite observar por exemplo o Desktop, C/C++. algoritmo de uma lista ligada de diversas formas, na forma de um vetor, na forma de pequenas Desktop,Java Muito interessante, pois permite ao usuário controlar a execução, podendo pausar a apresentação e durante a execução é apresentado várias explicações sobre as operações. caixas interligadas. JVALL Muito boa, de fácil utilização. Linked List É de fácil utilização. WEB,Java Teaching System WEB,Java JDSL Visualizer Tem uma utilização não muito didática. Desktop, Java Tem uma apresentação gráfica muito boa, com vários recursos na execução das operações. Sua apresentação é bem definida e divida em quatro partes: uma com o código onde enquanto ocorre a execução a linha que está sendo processada é grifada, outra a representação das estruturas em caixas ligadas, uma outra que serve para entrada de dados e a ultima que possui alguns controles sobre o fluxo de execução, por exemplo parar, reiniciar, avançar). A visualização da estrutura não é muito rica. Nome Opsis Facilidade de uso Front-End Para sua utilização é necessário uma leitura no manual, pois a sua utilização não é muito WEB,Java Modo de Exibição Tem uma demonstração básica não muito detalhada da estrutura de dado e visualmente um pouco desorganizada. simples, sendo até mesmo um pouco confusa. Binary Search Tree É uma ferramenta bem explicativa. De fácil Visualization utilização. ISVL Tem uma razoável facilidade no seu uso. EVEGA De fácil manipulação. VisualGraph Não é muito amigável. WEB,Java WEB, Java. Na execução da estrutura é possível ver o passo a passo com explicações textuais do que está ocorrendo durante a execução. É possível ver a execução passo a passo podendo parar, reiniciar dentre outras opções na execução. Desktop, Java. O usuário pode explorar os algoritmos durante a execução. Desktop, Java É exibida apenas a execução gráfica do algoritmo. A apresentação da estrutura é básica . PILOT Tem uma interface boa. Web, Java Nome JAWAA Facilidade de uso É uma ferramenta bastante prática e de fácil utilização. LINK Tem uma interface de entendimento razoável. FD-AED Os critérios serão descritos no final desta sessão. Front-End Web, linguagem Java.. Desktop, linguagem C++. Modo de Exibição É exibida apenas a visualização das estruturas geradas. É exibida apenas a visualização das estruturas geradas. Tabela 4 – Quadro Comparativo Parte 2. Nome Disponibilidade ED Implementadas Interação com o usuário Astral Boa, porém é necessário Array, Linked List, Doubly O usuário apenas inclui os parâmetros e utiliza os botões baixar os executáveis de cada Linked List, Binary Tree, para ver a execução dos algoritmos não é possível Estrutura para utilizá-la. AVLTree, Graph, Hash e o Sort mudanças. onde são aplicados os algoritmos do Heap-Sort, Insertion-Sort, Merger Sort AGEDUnifor Boa, porém para conseguir a Pilha, Fila, Deque, Lista, Árvore Muito interessante, é possível alterar as configurações de ferramenta, só foi possível de Busca e Árvore AVL exibição da estrutura como cor, tamanho, posição dentre através do orientador deste projeto por se tratar de um trabalho de conclusão de curso da Unifor. outras opções. Nome Disponibilidade ED Implementadas Interação com o usuário Árvore B Não é possível nenhum tipo de alteração. Pilha e Fila É possível o usuário definir qual linguagem ele deseja ver a Animação de Foi um pouco complicado de Árvore-B obter a ferramenta, mas foi possível via WEB. Spyke Não foi possível obter a ferramenta para testes, porém demonstração da estrutura escolhida. ela se enquadra em algumas definições que foram aplicadas na ferramenta desenvolvida. Ring’G Não foi possível obter a Grafos de acordo com o O usuário interage diretamente com ferramenta na geração ferramenta para testes. algoritmo gerado pelo usuário. do algoritmo a ser executado na ferramenta. É possível depurar o algoritmo em tempo de criação na própria ferramenta, o que a torna interativa porém não da melhor maneira. Nome Disponibilidade ED Implementadas Interação com o usuário TBC-AED A opção de executar a Busca Binária, Métodos de O usuário não tem a opção de nenhum tipo de alteração na aplicação Desktop não foi Ordenação (Select Sort, Insert aplicação, e ela só permite seguir para um próximo passo possível, porém é de fácil Sort, Bubble Sort, Merge Sort e após ter passado por um obrigatório o que nem sempre é acesso a versão Web. Quick Sort), Alocação Estática e necessário. Dinâmica de Memória (Lista, Fila e Pilha) e Árvore Binária de Busca. ADTTool Não foi possível obter a Pilha, Fila e Lista Linear. ferramenta para testes. JSave Não foi possível obter a ferramenta para testes. O usuário pode gerar os algoritmos e executar na aplicação e pode acompanhá-la passo a passo. Lista e Pilha. O usuário pode criar sua própria aplicação. Nome Disponibilidade ED Implementadas Interação com o usuário JVALL Não foi possível obter a Lista e Pilha. O usuário pode utilizar seu próprio código e permite ferramenta para testes. Linked List Foi possível encontrar a Teaching aplicação, porém é uma System aplicação toda em inglês o controle sobre a execução. Lista. Não permite interação do usuário do tipo como geração do seu próprio código. que para alguns estudantes pode não ser bem entendida. JDSL Foi possível acesso a Árvore, Grafos, Ordenação e Permite que o usuário gere seus próprios códigos. É uma Visualizer ferramenta, é necessário Busca. ferramenta um pouco complexa para criação e execução dos baixar o aplicativo e é necessário seguir um manual para sua utilização e conforme a anterior é uma ferramenta toda em inglês. algoritmos. Nome Disponibilidade ED Implementadas Interação com o usuário Opsis Foi possível encontrar a Árvore Permite que os usuários gerem seus próprios códigos. Árvore O usuário não tem permissões de alteração na aplicação, aplicação, porém é uma aplicação toda em inglês o que para alguns estudantes pode não ser bem entendida. Binary Foi possível encontrar a Search Tree aplicação, porém é uma Visualization apenas segui-la passo a passo. aplicação toda em inglês o que para alguns estudantes pode não ser bem entendida. ISVL Foi possível acesso a ferramenta, é uma ferramenta toda em inglês. Árvore e Busca O usuário não tem opções de alteração da ferramenta. Nome Disponibilidade ED Implementadas Interação com o usuário EVEGA Não foi possível obter a Grafos O usuário apenas pode acompanhar o passo a passo na ferramenta para testes. ferramenta. Permite a execução de comparação entre os vários algoritmos junto com gráficos de desempenho. VisualGraph Não foi possível obter a Grafos O usuário pode executar seus próprios algoritmos. Grafos e Árvore Permite que o usuário crie seus algoritmos e a aplicação ferramenta para testes. PILOT JAWAA Não foi possível obter a ferramenta para testes. informa se o algoritmo possui algum erro. JAWAA é uma linguagem Grafos, Pilha, Lista e Árvore Permite ao usuário a inserção de seus próprios algoritmos. script a qual é utilizada na construção de animações de estruturas. Nome Disponibilidade LINK Não foi possível obter a Grafos Permite que o usuário gere seus algoritmos, ou execute os já ferramenta para testes. existentes. FD-AED ED Implementadas Os critérios serão descritos no final desta sessão. Interação com o usuário 76 Das ferramentas apresentadas no quadro anterior, só foi possível efetuar testes completos nas ferramentas Astral, AGEDUnifor, Animação de Árvore-B e TBC-AED. Foi possível o acesso a algumas citadas no quadro, porém não foram muito detalhadas, como citado anteriormente, por não se enquadrarem no modelo buscado para a ferramenta desenvolvida e as restantes não foi possível o acesso, o que mostra que, com relação a Disponibilidade, ainda há grande dificuldade para a maioria das ferramentas. Foi realizada a comparação das que não se encaixam no modelo, para apresentar que existem mais ferramentas com essa abordagem e mostrar também as desvantagens para que não fosse repetida na aplicação construída. Já com relação à facilidade de uso, pode-se observar que poucas são satisfatórias. Vendo as estruturas implementadas, é possível ver que temos aplicações que abordam muitas estruturas, enquanto outras chegam a se dedicar apenas a uma estrutura, como é o caso da ferramenta Animação de Árvore-B. A maioria deixa a desejar na interação com o usuário, algumas, por exemplo, interagem demais com o usuário, obrigando-o a executar passos na aplicação que não são mais desejáveis como, por exemplo, o TBC-AED. Pode-se observar que a maioria das ferramentas foram desenvolvidas para Web, porém a maioria delas ainda são de difícil acesso ao usuário, pois uma parte dos links não puderam ser encontrados. Dentre as analisadas, poucas puderam ser testadas e a maioria dessas ferramentas encontram-se em inglês, o que para alguns alunos pode ser uma barreira para o entendimento. A maioria das ferramentas tem uma apresentação da estrutura de dados corretamente, no entanto muitas poderiam melhorar sua didática utilizando-se, por exemplo, de recursos como a aplicação de cores, legendas, dentre outros. A ferramenta desenvolvida foi baseada nas ferramentas que foram abordadas com mais detalhes na sessão 1.2 e na realidade das disciplinas de Estrutura de Dados da Faculdade Farias Brito. Buscou-se obter o melhor de cada uma, para se implementar uma aplicação simples, porém bastante didática. Foi utilizado como base principal a ferramenta AGEDUnifor que tem uma abordagem boa das estruturas, mas se teve basicamente um pouco de cada ferramenta apresentada. Seja na apresentação da estrutura até a sua usabilidade como, por exemplo, posição dos botões, operações possíveis dentre outras coisas. 77 Nos critérios escolhidos para comparativo realizado na Tabela 3 e 4, serão apresentados a seguir os pontos referentes a ferramenta criada, sendo desta forma para uma melhor visualização desses critérios: Disponibilidade: Será disponibilizada no site da Faculdade Farias Brito, tornando assim o acesso possível para todos alunos e professores. Facilidade de uso: É uma aplicação que busca ser clara na sua navegação. Estrutura de Dados Implementadas: Para Pilha, temos as abordagens de Pilha Padrão, Pilha Vetor, Pilha LSE e Inverter. Já em Fila, temos Fila Abstrata, Fila Circular, Fila Vetor, Fila LSE e o Fura Fila. Na implementação de Lista, temos LSE, LDE e Lista com Vetor, por fim Árvore com Árvore de Busca Binária, Árvore de Busca Binária com Vetor, Árvore AVL e Árvore N-Ária (Exemplificando um sistema de arquivos). Interação com o usuário: É possível a visualização das estruturas de forma independente das estruturas de dados e suas diferentes aplicações, por exemplo, Pilha Abstrata, Pilha com Vetor e Pilha com LSE podem ser vista todas ao mesmo tempo na tela ou uma de cada vez, apenas ocultando o quadro a não ser visualizado como citado anteriormente. Como é o front-end da ferramenta: É uma aplicação Web desenvolvida em Silverlight com ASP.NET para interface e, como código base, foi utilizado o C#. Modo de exibição da ferramenta: É apresentada a estrutura em sua forma abstrata ou sendo implementada com outra estrutura, procurando trazer uma visão didática da Estrutura de Dados em estudo. 3.2 Avaliação da Ferramenta Neste capítulo, serão apresentados os resultados da pesquisa realizada com os alunos da disciplina de Estrutura de Dados 1 da Faculdade Farias Brito, para se verificar o comportamento da ferramenta diante dos alunos, buscando assim ver sua aceitação pelos usuários. Está dividida em duas seções: questionário e resultados. 78 3.2.1 Questionário Foi elaborado um questionário com oito perguntas para que fosse realizada a avaliação da ferramenta pelos alunos da disciplina, como um meio de se obter o feedback dos alunos. Na Tabela 5, encontram-se as perguntas utilizadas no questionário. Tabela 5 – Perguntas x Critérios Pergunta 1) Compreensão do TAD: Pilha 2) Compreensão do TAD: Fila 3) Compreensão do TAD: Lista 4) Compreensão do TAD: Árvore 5) Design do Software 6) Compreensão da Ferramenta Critérios Avaliar o grau de compreensão do aluno referente a estrutura de dados Pilha. Avaliar o grau de compreensão do aluno referente a estrutura de dados Fila. Avaliar o grau de compreensão do aluno referente a estrutura de dados Lista. Avaliar o grau de compreensão do aluno referente a estrutura de dados Árvore. Avaliar se a ferramenta traz um design amigável e agradável. Obter se a ferramenta é de fácil leitura para o usuário. Tem por objetivo avaliar a utilização da ferramenta 7) Utilização tendo em vista seu comportamento no browser e sua resposta para as suas funções essenciais. 8) Navegação entre as Estruturas de Dados Avaliar se a navegação entre as páginas e as estruturas de dados ocorre de maneira simples na aplicação. 79 3.2.2 Resultados A ferramenta desenvolvida neste projeto foi apresentada para uma turma da disciplina de Estrutura de Dados 1 do curso de Ciência da Computação da Faculdade Farias Brito, composta por 14 alunos. Os alunos receberam instruções sobre o funcionamento da ferramenta através de uma breve apresentação e acompanhamento para algum tipo de dúvida com relação a tecnologia utilizada. Em seguida, os alunos utilizaram a aplicação e responderam a um questionário, com o objetivo de se avaliar a ferramenta e sua aceitação. Foi realizado, também, um teste de carga com os alunos da disciplina Estruturas de Dados da Universidade de Fortaleza, onde aproximadamente 20 alunos acessaram a ferramenta, simultaneamente, e executaram funcionalidades diferentes sem ocorrer problema de desempenho da ferramenta ou falta de acesso, tendo como única ressalva o acesso via o browser Google Chrome, que não renderizou os componentes corretamente. Na tabela 6, são apresentados os resultados referentes à avaliação. Tabela 6 - Resultado da avaliação do software Excelente Bom Regular Insuficiente 1) Compreensão do TAD: Pilha 50% 43% 7% 0% 2) Compreensão do TAD: Fila 43% 50% 7% 0% 3) Compreensão do TAD: Lista 43% 50% 7% 0% 4) Compreensão do TAD: Árvore 50% 43% 7% 0% 5) Design do Software 36% 28% 36% 0% 36% 50% 14% 0% 21% 72% 7% 0% 8) Navegação entre as Estruturas de Dados 36% 57% 7% 0% 6) Compreensão da Ferramenta 7) Utilização 80 Conforme visto na Tabela 6, a primeira questão recebeu uma avaliação bastante satisfatória, o que podemos concluir pela excelência em 50%. Na segunda questão, o nivel também se manteve alto, com um percentual de 43%. Na terceira, repetiu-se o índice de 43% e na quarta novamente 50%. As quatro primeiras questões se referem à compreensão dos alunos com relação às estruturas de dados após o uso, buscando o mensurar a importancia da ferramenta no seu entendimento da estrutura estudada. Na quinta questão, foi obtido uma média de 36% para excelente e 28% para bom, o que mostra que o design do software , um ponto mais delicado, também foi bem aceito pela maioria dos alunos. Na sexta questão, é pode ser observado que a compreensão da ferramenta que procura avaliar o quão simples é a compreensão de informações e comportamentos da aplicação, onde mantivemos um nível muito bom para os quesitos excelente 36% e bom 50%. Na sétima questão, foi vista a utilização da ferramenta, como a sua disponibilização e comportamento no browser, onde tivemos um percentual de 72% para bom. Na oitava questão, avaliou-se como é a navegação da ferramenta entre as estruturas, buscando trazer sua interatividade com o usuário na compreensão ao navegar, isto é, tornar a informação e o acesso simples de se entender. Neste quesito, obtivemos 36% para execelente e 57% para bom. Nenhuma das questões aplicadas no questionario obteve percentual para a ferramenta como insuficiente e teve uma média maior no quesito bom, com 49%, e em seguida excelente, com 40%. Assim com essa avaliação, a ferramenta criada teve uma aceitação boa e sendo uma ferramenta que atende a realidade e as necessidades da Faculdade Farias Brito. Trazendo, como visto na tabela 6, uma compreensão das estruturas de dados com uma média entre 40% e 50%, fazendo com que o objetivo principal da ferramenta fosse alcançado. 81 CONCLUSÃO Para melhor entendimento da utilidade e das vantagens da ferramenta desenvolvida, foram apresentados e analisados alguns exemplos de ferramentas didáticas aplicadas no âmbito das Estruturas de Dados. Ao se estudar essas ferramentas, foi observado seu funcionamento conforme execução e apresentação dos algoritmos abordados, procurando perceber a didática aplicada e a forma como o algoritmo é apresentado, sua usabilidade e também o grau de interatividade alcançado com as ferramentas. Com essa abordagem, foi possível estudar as ferramentas já existentes e criar nossa ferramenta FD-AED com mais eficiência, para ser aplicada na Faculdade Farias Brito e disponibilizada no site da faculdade, com o fim de proporcionar um melhor aproveitamento aos alunos da disciplina. Outra vantagem da ferramenta é a sua democratização, por se tratar de um software livre e de fácil acesso. Com o objetivo de validar a ferramenta, foram realizados testes com os alunos da turma de Estrutura de Dados 1 da Faculdade Farias Brito, com ótima aceitação, de acordo os resultados apresentados nessa monografia. Já os testes com os alunos da Universidade de Fortaleza tiveram o objetivo de verificar o funcionamento da ferramenta em um momento de estresse, com acesso de mais de 20 alunos ao mesmo tempo e a ferramenta comportou-se bem nesse cenário. Diante disso, acredita-se que os objetivos do trabalho foram alcançados com êxito, uma vez que tivemos não só a FD-AED disponibilizada via web, com os principais TADs e Estruturas de dados referenciados na literatura, a partir de um estudo analítico das ferramentas semelhantes disponíveis, mas também foi possível avaliar sua performance em um ambiente de prática educacional com resultados concentrados em sua maioria entre excelente e bom. 82 Cientes de que este foi um trabalho inicial, onde cabem expansões e desdobramentos, vemos algumas possibilidades para um trabalho futuro, entre elas a possibilidade de migrar o código para dispositivos móveis; a possibilidade de fazer uma ferramenta mais customizável, onde o usuário possa alterar as estruturas de dados ou a linguagem e a possibilidade de tornar a ferramenta mais extensível, onde os alunos possam acrescentar algoritmos e estruturas de dados, através, por exemplo, de um gerenciador de conteúdo. 83 REFERÊNCIAS BIBLIOGRÁFICAS CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L.; STEIN, Clifford. Algoritmos: Teoria e Prática. 2ª .ed. Rio de Janeiro, 2002.. GARCIA, I. C.; Rezende, P. J.; CALHEIROS, F. C. Astral: Um Ambiente para Ensino de Estrutura de Dados Através de Animações de Algoritmos. Disponível em: <http://www.ic.unicamp.br/~rezende/garcia.htm>. Acesso em 01 de mar. de 2012 . GOMES, Anabela de Jesus; MENDES, António José: A animação na aprendizagem de conceitos básicos de programação. Disponível em: < http://161.67.140.29/iecom/index.php/IECom/article/viewFile/113/108 >. Acesso em 20 de mar. 2010. GOODRICH, Michael T.; TAMASSIA, Roberto. Projeto de Algoritmos. 1ª.ed.Porto Alegre, 2004. GOODRICH, Michael T.; TAMASSIA, Roberto. Estrutura de Dados e Algoritmos em Java. 2ª.ed.Porto Alegre, 2002. LAFORE, Robert. Estrutura de dados & algoritmos em Java. 2.ed. Rio de Janeiro: Ciência Moderna LTDA. 2004. 84 LAUREANO, Gabriel Reanaldo; Uma animação de Árvore-B para auxílio no ensino de estruturas de dados. UFSC, 2003. MARSHALL, M. S.; HERMAN, I.; MELANÇON, G; An Object-Oriented Design for Graph Visualization, 2003. Disponível em: <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.25.7440&rep=rep1&type=pdf > . Acesso em 14 de out. de 2012. NETO, José de Sousa Rebouças; Ferramenta Didática de Estruturas de Dados, UNIFOR, Monografia desenvolvida para o Curso de Ciências da Computação, 2007. SANTOS, Rodrigo Pererira e COSTA, Heitor Augustus Xavier; Um Software Gráfico para Apresentação de Algoritmos e Estruturas de Dados aos Iniciantes em Computação e Informática, 2005. Disponível em: < http://www.cos.ufrj.br/~rps/pub/completos/2005/COMPSULMT.pdf >. Acesso em: 15 de out. de 2012. SCHILDT, Herbert; C Completo e Total. 3ª ed. São Paulo, 1997 . SIMÕES, Priscyla Waleska Targino de Azevedo; BALDESSAR, Luciano Dagostin; MARTINS, Paulo João; BARBOSA, Ana Cláudia Garcia; Spyke - Ferramenta de Apoio ao Ensino de Pilhas e Filas, 2006. Disponível em: <http://www.dcc.unesc.net/sulcomp/06/artigos/sessaoPoster /22164.pdf>. Acesso em: 10 de out. de 2012. SOUZA, Daniel Filippi; Catálogo de Algumas Ferramentas de Apoio ao Ensino de Computação, 2004. Disponível em: < http://docentes.puc- campinas.edu.br/ceatec/angela/RT012004.pdf>. Acesso em 17 de nov. de 2012. 85 TENENBAUM, Aaron M; LANGSAN, Yedidyah; AUGENSTEIN, Moshe J. Estruturas de Dados Usando C. 1ª.ed. São Paulo, 1995. WIRTH, Niklaus. Algoritmos e Estruturas de Dados. Rio de Janeiro: Prentice-Hall do Brasil, 1989.