1. Página de Resumo e Assinaturas
UNIVERSIDADE FEDERAL DE LAVRAS
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Orientador: Prof. Heitor Augustus Xavier Costa
Desenvolvimento de Ambientes Gráficos para o Ensino de Estruturas de Dados e Algoritmos em Grafos para Web
Bolsista: Rodrigo Pereira dos Santos
Relatório Final apresentado à Universidade Federal de Lavras, como parte das exigências do PBIICT/FAPEMIG, referente ao período de março/2005 a fevereiro/2006.
_______________________________ ______________________________ Ass inatura do bolsista Ass inatura do orientador
LAVRAS/MG - MAIO/2006
LAVRAS/MG - NOVEMBRO/2004
Rodrigo Pereira dos Santos
Heitor Augustus Xavier Costa
Desenvolvimento de Ambientes Gráficos para o Ensino de Estruturas de Dados e Algoritmos em Grafos para Web
Resumo
Este trabalho tem o objetivo de apresentar TBC-AED/WEB, TBC-GRAFOS e TBC-GRAFOS/WEB, produtos de software que contém vários temas relacionados aos conteúdos lecionados aos iniciantes em Computação, procurando deixar uma contribuição à literatura e aos docentes da área. Com isso, esses ambientes educacionais buscam contribuir para a melhoria da qualidade de ensino de programação, algoritmos, estruturas de dados e teoria dos grafos nos cursos de graduação em Computação e Informática.
Palavras-chaves: algoritmos e estruturas de dados, teoria dos grafos, programação, metodologias de ensino de computação, informática na educação.
Abstract
The paper objective is to present TBC-AED/WEB, TBC-GRAFOS and TBC-GRAFOS/WEB, software that contains some themes related to the taught contents to new students in Computation, trying to contribute to literature and to teachers of the field. So, this educational environment tries to help the improvement of the teaching quality of programming, algorithms, data structures and theory of graphs in the graduation courses in Computing.
Key-words: algorithms and data structures, theory of graphs, programming, methodologies of computing teaching and computing in education.
Sumár io
Capítulo 1 – Introdução..............................................................................................1 1.1 Motivação...........................................................................................................3 1.2 Objetivos.............................................................................................................5 1.3 Metodologia de Desenvolvimento .......................................................................6 1.4 Estrutura do Trabalho..........................................................................................9
Capítulo 2 – Metodologias de Ensino de Computação ............................................11 2.1 Considerações Iniciais.......................................................................................11 2.2 Análise de Problemas e Soluções no Ensino de Computação .............................11 2.3 Programação e Algoritmos: a Base da Computação...........................................18 2.4 Projetos de Software Relacionados ao Ensino de Algoritmos, Estruturas de Dados e Algoritmos em Grafos na Computação ................................................................. 22
2.4.1 Projetos Relacionados às Estruturas de Dados.........................................23 2.4.2 Projetos Relacionados a Algoritmos em Grafos.......................................25
2.5 Considerações Finais.........................................................................................27
Capítulo 3 – A História de Java: Tecnologias e Evolução .......................................29 3.1 Considerações Iniciais.......................................................................................29 3.2 O Nascimento ................................................................................................... 30 3.3 A Evolução .......................................................................................................33 3.4 Algumas Tecnologias........................................................................................34 3.5 Algumas Características....................................................................................38 3.6 Considerações Finais.........................................................................................40
Capítulo 4 – TBC-AED/WEB, TBC-GRAFOS e TBC-GRAFOS/WEB: Desenvolvimento dos Produtos de Software e seus Reflexos ................................... 42
4.1 Considerações Iniciais.......................................................................................42 4.2 Análise metodológica do desenvolvimento........................................................42
4.2.1 TBC-AED/WEB.....................................................................................42 4.2.2 TBC-GRAFOS e TBC-GRAFOS/WEB..................................................44
4.3 Organização e estrutura.....................................................................................45 4.3.1 TBC-AED/WEB.....................................................................................45 4.3.2 TBC-GRAFOS e TBC-GRAFOS/WEB..................................................49
4.4 Temas Abordados pelos Produtos de Software: Conceitos e Aplicação..............55 4.4.1 TBC-AED/WEB.....................................................................................55
4.4.1.1 Busca em Vetor .............................................................................56 4.4.1.2 Métodos de Ordenação................................................................... 62
4.4.1.2.1 Select Sort .............................................................................63 4.4.1.2.2 Insert Sort..............................................................................63 4.4.1.2.3 Boubble Sort..........................................................................65 4.4.1.2.4 Merge Sort.............................................................................65 4.4.1.2.5 Quick Sort .............................................................................66
4.4.1.3 Estruturas de Dados de Alocação Estática e Dinâmica de Memória 68 4.4.1.3.1 Listas.....................................................................................68 4.4.1.3.2 Filas.......................................................................................71
4.4.1.3.3 Pilhas.....................................................................................72 4.4.1.4 Árvores..........................................................................................75
4.4.2 TBC-GRAFOS e TBC-GRAFOS/WEB..................................................77 4.4.2.1 Buscas em Grafos..........................................................................77
4.4.2.1.1 Percurso em Profundidade.....................................................78 4.4.2.1.2 Percurso em Largura..............................................................84
4.4.2.2 Árvore Geradora Mínima...............................................................85 4.4.2.2.1 Algoritmo de Kruskal ............................................................88 4.4.2.2.2 Algoritmo de Prim................................................................. 88
4.4.2.3 Caminho Mínimo...........................................................................89 4.4.2.3.1 Algoritmo de Dijkstra............................................................92 4.4.2.3.2 Algoritmo de Bellman-Ford...................................................94
4.5 Considerações Finais.........................................................................................94
Capítulo 5– Considerações Finais ............................................................................96 5.1 Conclusões........................................................................................................96 5.2 Contribuições....................................................................................................97 5.3 Trabalhos Futuros.............................................................................................99
Referências Bibliográficas......................................................................................100
Anexo A – Artigos Publicados................................................................................104
Lista de Figuras
Figura 1 – Página principal do TBC-AED/WEB.....................................................46
Figura 2 – Tela Busca Binária..................................................................................47
Figura 3 – Tela L ista Duplamente Encadeada.........................................................47
Figura 4 – Tela Árvore Binária de Busca ................................................................48
Figura 5 – Tela Quick Sort ........................................................................................49
Figura 6 – Tela principal do TBC-GRAFOS...........................................................50
Figura 7 – Janela de mensagem exibida contendo uma introdução a respei to do tópico relacionado .............................................................................................51
Figura 8 – Tela Percurso em Profundidade do TBC-GRAFOS..............................51
Figura 9 – Tela Percurso em Profundidade, com janela de mensagem interna usada para o efeito de passo-a-passo................................................................52
Figura 10 – O mouse sobre a região de exibição gráfica exibe uma breve mensagem sobre ela.............................................................................................................52
Figura 11 – Barra de menu do TBC-GRAFOS.......................................................53
Figura 12 – I tem explicativo do tema Buscas em Grafos ........................................53
Figura 13 – I tem de representação gráfica do tópico Algor itmo de Kruskal, um dos algoritmos de Árvore Geradora Mínima disponíveis ......................................54
Figura 14 - Página principal do TBC-GRAFOS/WEB ...........................................54
Figura 15 – Tela Algoritmo de Bellman-Ford .........................................................55
Figura 16 – Janela de mensagem exibida contendo uma introdução a respeito do tópico relacionado .............................................................................................57
Figura 17 – Janela de mensagem exibida ao clicar no botão Informações.............58
Figura 18 – Ao clicar no botão Introdução, a área super ior é preenchida com uma breve introdução e uma janela de mensagem é exibida................................... 59
Figura 19 – Uma janela de mensagem é exibida para que o usuár io entre com o número de elementos.........................................................................................59
Figura 20 – Uma janela de mensagem é exibida para que o usuár io possa entrar com o elemento a ser procurado .......................................................................60
Figura 21 – Janela de mensagem exibida quando do advento do processo gráfico 60
Figura 22 – O botão Passos do Processo é habilitado para iniciar o processo gráfico...........................................................................................................................61
Figura 23 – Cada um dos sub-vetores é exibido a cada clique sobre o botão Passos do Processo........................................................................................................61
Figura 24 – Janela de mensagem contendo o resultado da pesquisa ......................62
Figura 25 – Tópico Select Sort do tema Métodos de Ordenação............................64
Figura 26 – Tópico Insert Sort do tema Métodos de Ordenação............................64
Figura 27 – Tópico Boubble Sort do tema Métodos de Ordenação........................65
Figura 28 – Tópico Merge Sort do tema Métodos de Ordenação...........................66
Figura 29 – Tópico Quick Sort do tema Métodos de Ordenação............................67
Figura 30 – Tópico Lista L inear do tema Estruturas Estáticas..............................69
Figura 31 – Tópico Lista Simplesmente Encadeada do tema Estruturas Dinâmicas...........................................................................................................................70
Figura 32 – Tópico Lista Duplamente Encadeada do tema Estr uturas Dinâmicas71
Figura 33 – Tópico Fila do tema Estruturas Estáticas............................................72
Figura 34 – Tópico Fila do tema Estruturas Dinâmicas..........................................73
Figura 35 – Tópico Pilha do tema Estruturas Estáticas..........................................74
Figura 36 – Tópico Pilha do tema Estruturas Dinâmicas .......................................75
Figura 37 – Tópico Árvore Binária de Busca do tema Árvores ..............................77
Figura 38 – Janela de mensagem exibida ao clicar no botão Informações.............79
Figura 39 – Ao clicar no botão Introdução, a área super ior é preenchida com uma breve introdução e uma janela de mensagem é exibida................................... 80
Figura 40 – Uma janela de mensagem é exibida para que o usuár io entenda o que deve fazer para prosseguir no ambiente...........................................................80
Figura 41 – Ao clicar no botão Opções, o usuário visualiza quais ações deve fazer para montar seu grafo.......................................................................................81
Figura 42 – Montagem do grafo no painel cinza à direita.......................................82
Figura 43 – Ao clicar no botão Passos do Processo, uma janela de mensagem interna é exibida na par te infer ior à esquerda, para efeito de passo-a-passo. 82
Figura 44 – Ao clicar no botão Reiniciar, o usuário terá o mesmo grafo que desenhou antes de iniciar o algoritmo, podendo fazer alterações ...................83
Figura 45 – Ao clicar no botão Novo Grafo, o usuário continuará no ambiente, mas terá que desenhar um novo grafo para iniciar o algor itmo.............................84
Figura 46 - Janela de mensagem exibida contendo uma introdução a respeito do tópico relacionado .............................................................................................84
Figura 47 – Tela Percurso em Largura do TBC-GRAFOS....................................86
Figura 48 – Tela Percurso em Largura do TBC-GRAFOS/WEB ..........................86
Figura 49 – Tela Algor itmo de K ruskal do TBC-GRAFOS....................................88
Figura 50 - Tela Algor itmo de K ruskal do TBC-GRAFOS/WEB ..........................89
Figura 51 - Tela Algor itmo de Prim do TBC-GRAFOS..........................................90
Figura 52 - Tela Algor itmo de Prim do TBC-GRAFOS/WEB................................90
Figura 53 - Tela Algor itmo de Dijkstra do TBC-GRAFOS....................................93
Figura 54 - Tela Algor itmo de Dijkstra do TBC-GRAFOS/WEB ..........................93
Figura 55 - Tela Algor itmo de Bellman-Ford do TBC-GRAFOS...........................94
Figura 56 - Tela Algor itmo de Bellman-Ford do TBC-GRAFOS/WEB.................95
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
1
Capítulo 1 – Introdu ção
A crescente quantidade de informação e a tecnologia gerada atualmente tornam
cada vez mais necessário a presença de profissionais de caráter persuasivo e inovador,
que sejam capazes de unir inteligência e dinamismo na busca por melhores soluções dos
problemas apresentados pelo mundo real. Isso encontra seu principal pilar nas
metodologias de ensino aplicadas durante o estágio universitário, principalmente na área
de Computação e Informática.
Com o intuito de produzir melhores resultados no processo de aprendizagem
nessas áreas, faz-se constante a necessidade de atualização das didáticas de ensino de
forma geral, procurando transformar processos abstratos em concretos, através de
produtos de software que possibil item melhor compreensão dos tópicos abordados e
maior interação entre aluno – objeto de trabalho. Isso encontra sua maior barreira nos
processos iniciais dos cursos relacionados, quando do contato com algoritmos,
programação, raciocínio lógico e estudo de estruturas de dados e grafos.
Segundo [ASCENCIO apud CAMPOS et al 2003], algoritmo é a descrição de
uma seqüência de passos que deve ser seguida para a realização de uma tarefa e, para
[FARRER apud CAMPOS et al 2003], ação é um acontecimento que, a partir de um
estado inicial, após um período de tempo finito, produz um estado final previsível e bem
definido. Assim, um algoritmo é a descrição de um conjunto de comandos que,
obedecidos, resultam em uma sucessão finita de ações.
Atualmente, o ensino de algoritmos busca nas Ciências Exatas seu pilar de
sustentação, pois disciplinas nessa área despertam o raciocínio matemático-lógico para
resolução de problemas. Mas, isso deve ser mais uma das ferramentas para o estudante e
não a sua única fonte, pois a sua formação futura será muito ampla.
Um dos grandes ramos iniciais de estudo do graduando da área se encontra na
teoria de grafos que, segundo [SANTOS et al 1995], tem origem relativamente recente
(século XVIII) e apresenta extensiva utilização em matemática aplicada, pois
demonstrou ser uma poderosa ferramenta para a modelagem de diversas situações reais
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
2
em física, química, biologia, engenharia elétrica e pesquisa operacional. Entretanto, seu
estudo e os algoritmos relacionados muitas vezes são de difícil imaginação, o que gera
uma antítese. Portanto, torna-se um grande desafio para professores e coordenadores de
cursos da área promover mudanças que possam impulsionar as capacidades intelectuais
para que estudantes possam contribuir mais e mais para a evolução global.
Os problemas apresentados na compreensão de tais conceitos, conforme [BUZIN
2001], encontra sua raiz ainda durante a formação básica, o que caracteriza uma
importante linha de pesquisa na metodologia educacional: o iniciante do curso superior
traz uma bagagem cultural que não serve apenas para o apropriado desenvolvimento de
um estudo acadêmico, mas pode atrapalhar o desenvolvimento do estudo. Ele vem de
uma experiência de estudante de disciplinas desenvolvidas em torno do paradigma de
apresentação de resposta e soluções, usualmente da velha e surrada didática diretiva, ao
invés de focar no processo de questionamento. Com certeza, sem uma radical mudança
cultural de atitude e comportamento, este indivíduo dificilmente poderá ser um
profissional de Computação adequado, visto que é preciso desenvolver a capacidade de
buscar a resposta através de novas perguntas que levem à resposta da questão original. A
formação do profissional em Computação deve incitar o desenvolvimento de raciocínio
crítico, a solução de problemas, a aplicação de métodos de pesquisa e o desenvolvimento
profissional contínuo.
Uma outra linha de pesquisa realizada é aquela direcionada para a tendência de
utilizar ferramentas computacionais como ambientes de estudo, pois segundo [SOARES
et al apud SOARES et al 2004], a partir de observações dentro de disciplinas de
graduação, percebe-se também um melhor resultado no aprendizado por meio de
atividades práticas de desenvolvimento de simuladores e ferramentas visuais didáticas de
representação de conceitos abstratos. Além disso, acompanhando esse desenvolvimento,
a linha acopla contribuições dos pesquisadores para novas estratégias de transmissão de
conhecimentos, promovendo a ampliação do acervo existente e a melhor organização de
currículos para o mercado de trabalho, e acesso facil itado de tais recursos inovadores
através de suporte via web.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
3
Dentro dessa esfera, percebe-se que cada ramo profissional deve ser embasado de
acordo com sua própria definição, através da idéia de meta-educação. É ao encontro a
isso que foi realizado um estudo denso de applets1 para disponibil izar via web produtos
de software educacionais. Dessa forma, este trabalho pretende apresentar o TBC-
AED/WEB – Treinamento Baseado em Computador para Algoritmos e Estruturas
de Dados via WEB (derivado do TBC-AED – [SANTOS e COSTA 2005a], [SANTOS
e COSTA 2005b], [SANTOS e COSTA 2005c]) –, e duas novas ferramentas
computacionais didáticas (produtos de software educacionais), o TBC-GRAFOS
(Treinamento Baseado em Computador para Algoritmos em Grafos) e TBC-
GRAFOS/WEB (Treinamento Baseado em Computador para Algoritmos em
Grafos via WEB), dentro da mesma linha de pesquisa seguida, que torne o ensino deste
conteúdo – básico para o estudo em Computação avançada que promove a resolução de
problemas de otimização – mais prático e abrangente. Desta forma, desperta o interesse
do aluno, o seu espírito de pesquisa e a busca de informações que possam torná-lo um
profissional crítico e de opinião sólida. Assim, seu rendimento ao longo do curso
aumenta, melhorando o seu desempenho em disciplinas mais específicas. Além disso, a
pesquisa propõe deixar uma contribuição a respeito dos problemas envolvidos no
processo educacional da área de Computação e Informática, listando algumas tentativas
de solução.
1.1 Motivação
É importante salientar alguns pontos especiais acerca do intuito da pesquisa,
visto que a aula de uma disciplina que relaciona programação com algoritmos e
estruturas de dados ou com algoritmos em grafos deve ser realizada em laboratórios. Isso
para que os alunos possam entender as abstrações apresentadas. Deve ser composta de
uma parte teórica, onde conceitos são transmitidos, e uma parte prática, onde vão
entender comandos e tópicos ministrados. Deve também haver questões-desafio, para
que os discentes sejam acostumados a usar de agilidade e criatividade na solução de
problemas ([JÚNIOR e RAPKIEWICZ 2004]).
1 Applets são programas Java que podem ser embutidos em documentos HTML. Quando um navegador carrega uma página da web que contém um applet, o applet é baixado para o navegador e começa a ser executado ([DEITEL e DEITEL 2003]).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
4
Nesse sentido, TBC-AED/WEB, TBC-GRAFOS e TBC-GRAFOS/WEB, os
quais enfatizam animação gráfica, são de extrema importância como facilitadores do
processo de aprendizagem, uma vez que a apresentação de conceitos abstratos se torna
mais viável e didática, melhorando a qualidade do material das aulas ([SOARES et al
2004]).
Normalmente, um aluno se interessa por aulas diferenciadas e isso não só prende
sua atenção, como também influenciam posi tivamente nas avaliações ([BUZIN 2001]).
Uma economia de tempo pode ser conseguida, direcionando para mais
explicações e resoluções de exercícios, uma vez que o material didático seria virtual,
evitando uma explanação cansativa através do quadro-negro ([SANTOS e COSTA
2005b]).
Um dos grandes pontos positivos é que o aluno teria acesso livre ao material
virtual para que pudesse estudar em casa. Além disso, ele possuirá um valioso projeto,
para consultas futuras, em caso de necessidade – a tendência em abstrair detalhes, com o
passar do tempo, sempre leva a dúvidas e estas a novas pesquisas em estruturas básicas
ora aprendidas ([GARCIA, REZENDE e CALHEIROS 1997]).
Além disso, a existência de material via web para estudos e pesquisas estimula
maior contribuição tecnológica para a sociedade, integração de diferentes ideais através
de contatos pela Internet, maior alcance ao público e divulgação das propostas de
melhorias de processos educacionais visando injetar e obter informações para ampliação
da literatura disponível.
A transição de educadores também seria facilitada, uma vez que existiria uma
base pronta para ser apreciada, mantendo a qualidade de ensino e aprendizagem do
conteúdo.
Um bom ensino de teoria dos grafos é importante, uma vez que suas aplicações
são variadas, como na área de otimização de processos, com resolução de problemas via
grafos, visando economia de tempo e melhor relação custo-benefício.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
5
Assim sendo, o uso do TBC-AED/WEB, TBC-GRAFOS e TBC-
GRAFOS/WEB é um subsídio valioso para a formação de alunos, ajudando-os a
concluírem o seu curso de Computação, pois são disciplinas que estão no início e são
pré-requisitos necessários às disciplinas mais específicas de períodos posteriores.
Quando feita uma boa base, o rendimento e o desempenho aumentam, proporcionando
melhores resultados, melhores currículos e, conseqüentemente, melhores profissionais
para o mercado.
1.2 Objetivos
Os objetivos para a realização deste trabalho de pesquisa foram:
• aplicar o produto de software educacional desenvolvido na área de algoritmos e
estruturas de dados (projeto PBIICT/FAPEMIG 2004 – [SANTOS e COSTA
2005c]) às turmas de 2005 da disciplina COM155 – Algoritmos e Estruturas de
Dados II, com acompanhamento do orientador (ministrante da disciplina) e do
orientado, para estabilizar o produto de software;
• propiciar ao orientado continuar estudando linguagem de programação Java, que é
amplamente utilizada no mercado e na pesquisa para o desenvolvimento de produtos
de software. Além disso, pesquisar recursos contidos nesta linguagem de
programação para o desenvolvimento de um ambiente web para disponibil izar o
produto desenvolvido e, assim sendo, divulgar a pesquisa;
• ampliar conhecimentos do orientado na área de programação e algoritmos em grafos,
nos seguintes tópicos: � Terminologias, convenções e implementações; � Percurso em Largura e Percurso em Profundidade; � Árvore Geradora Mínima; � Caminho Mínimo; � Fluxo Máximo.
• proporcionar ao orientado maior contato com áreas específicas de seu curso, como
Linguagens de Programação, Informática na Educação, Otimização e Engenharia de
Software;
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
6
• continuar as contribuições à literatura a respeito de métodos de ensino de
programação mais didáticos para os ingressos no curso de graduação, listando
algumas soluções discutidas na literatura;
• desenvolver um produto de software – ambiente gráfico para estudo da disciplina de
algoritmos em grafos tornando as aulas mais dinâmicas e didáticas. Isso será
disponibil izado aos alunos e demais interessados, como uma ferramenta poderosa
aos programadores iniciantes e intermediários;
• facil itar e melhorar o acesso de alunos de outros cursos que não os fundamentados
em Computação e Informática às disciplinas de programação e algoritmos em grafos,
embasando o processo de transição curricular, visto que muitos dos cursos
apresentam disciplinas eletivas2 de programação, algoritmos, estruturas de dados e
algoritmos em grafos;
• estimular mudanças na metodologia de ensino de cursos de Computação, com o
desafio de não manter na vanguarda uma área de constante atualização;
• formar um suporte para o orientado poder desenvolver projetos futuros de forma bem
consistente e engajada – uma vez que a programação e os algoritmos formam a base
de grande parte dos estudos de Computação;
• manter a estabil idade de ensino de disciplinas da área, mesmo quando da alteração
no quadro docente.
1.3 Metodologia de Desenvolvimento
Foi realizado um estudo de recursos da linguagem de programação Java para
disponibil izar o ambiente sobre algoritmos e estruturas de dados, desenvolvido durante o
projeto PBIICT/FAPEMIG 2004 ([SANTOS e COSTA 2005c]), via web. Isso foi feito
principalmente com a leitura do livro [DEITEL e DEITEL 2003] em capítulos mais
relacionados à pesquisa.
Paralelamente, foi feito um acompanhamento da disciplina Algoritmos e
Estruturas de Dados II (AED II – disciplina oferecida pelo Departamento de Ciência da
Computação da Universidade Federal de Lavras – DCC/UFLA) com a utilização do
2 Disciplinas eletivas têm a finalidade de complementar a formação do estudante, na área de conhecimento do curso.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
7
produto de software educacional desenvolvido – TBC-AED (Treinamento Baseado em
Computador para Algoritmos e Estruturas de Dados). Sua aplicação foi realizada em
regime parcial, com apresentação geral da ferramenta e disponibil ização aos alunos, para
que estes a consultassem em casa e nos laboratórios, ao longo da disciplina. O uso
parcial se deveu às condições dos laboratórios de Computação, em fase de transição de
recursos tecnológicos, impossibil itando o uso contínuo na disciplina. Mesmo com esse
problema resolvido, outro obstáculo enfrentado foi o grande número de alunos,
decorrente do alto índice de reprovações, sendo necessária a divisão da turma para aulas
práticas em laboratório. Dessa forma, estão sendo estudadas formas para sanar esse
problema.
Foi realizado um levantamento bibliográfico, na Internet e em bibliotecas, de
textos, artigos e informações a respeito dos tópicos relacionados à programação,
algoritmos, estruturas de dados e algoritmos em grafos, em especial capítulos específicos
de [WIRTH 1989] e [CORMEN, LEISERSON e RIVEST 2002]. Também foram
verificadas novas metodologias de ensino na área de Computação.
Foram identificadas as dificuldades de alunos e ex-alunos das disciplinas, para
que pudessem contribuir para a qualidade do projeto. Isso foi feito através de reuniões
entre o orientador (professor das disciplinas diretamente envolvidas há três semestres
consecutivos) e o orientado (ex-aluno das disciplinas que atingiu ótimas médias).
Em seguida, foi analisada a forma de ministrar as disciplinas de COM155 –
Algoritmos e Estruturas de Dados II e COM159 – Técnicas de Programação, oferecidas
pelo Departamento de Ciência da Computação da Universidade Federal de Lavras
(DCC/UFLA). Estas disciplinas são fundamentais para a formação de programadores e
bons estudantes para o curso. Além disso, outras disciplinas que utili zam a programação
e algoritmos em estruturas de dados e em grafos foram analisadas. Por isso, com o
término deste trabalho, foram preparados seminários para discussão sobre o tema e o
engrandecimento de pesquisas futuras.
A preocupação de construir códigos-fonte manuteníveis do produto de software
educacional foi constante. O paradigma de programação utilizado foi orientação a
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
8
objetos e a linguagem de programação foi Java devido a alguns aspectos intrínsecos
considerados importantes como a portabilidade.
Foram disponibil izados no site do orientado
(www.comp.ufla.br/~rpsantos/ic/2005.html) e do orientador
(http://www.dcc.ufla.br/~heitor/Projetos/TBC_AED_GRAFOS_WEB/TBC_AED_
GRAFOS_WEB.html) links que contém atualmente: resumos dos projetos
desenvolvidos, as monografias finais do PBIICT/FAPEMIG-2004 e PBIICT/FAPEMIG-
2005 (o presente trabalho), os produtos de software educacionais e ambientes applets-
Java para web desenvolvidos. Os sites são mantidos atualizados.
As implementações propostas pelo projeto foram concluídas. Foram
desenvolvidos applets-Java, com os temas Busca em Vetor (busca binária), Métodos de
Ordenação (select sort, insert sort, bubble sort, merge sort e quick sort), Tipos
Abstratos de Dados (TAD) lista, pilha e fi la – implementados utilizando alocação
estática e dinâmica e Árvores (árvore binária), todos referentes ao TBC-AED
(desenvolvido durante o projeto PBIICT/FAPEMIG 2004 – [SANTOS e COSTA
2005c]). Também foram desenvolvidos os temas Buscas em Grafos (percurso em
largura e percurso em profundidade), Árvore Geradora Mínima (algoritmo de
K ruskal e algoritmo de Prim) e Caminho Mínimo (algoritmo de Dij kstra e algoritmo
de Bellman-Ford). Além disso, foi desenvolvido o TBC-GRAFOS (versão para
download, que contém os tópicos acima, relacionados a grafos). Para evitar quaisquer
problemas, uma vez que algoritmos em grafos são de caráter básico para programação e
importantes para o futuro dos graduandos, optou-se por iniciar a etapa laboratorial após a
conclusão do produto de software educacional. Isso porque se trata de uma experiência
bastante interessante e inovadora, mas que precisa ser realizada com orientação inicial
bem elaborada e estruturada. Logo, pensou-se em cuidar para que quaisquer pontos
negativos imprevisíveis pudessem alterar o resultado final. Assim, a avaliação da
eficiência, da validade, da qualidade e da didática esperadas pelo projeto poderão ser
feitas de maneira formal e engajada na fase final do projeto. Além disso, ambos,
orientado e orientador, poderão discutir e montar um programa de ensino melhor e mais
completo para a disciplina a partir de 2006.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
9
Aconteceram reuniões entre orientado e orientador para discussão a respeito dos
produtos de software educacional, coleta constante de artigos e periódicos na área de
programação, linguagem de programação Java e metodologias de ensino de
Computação. Assim, pelo fato do orientador lecionar as disciplinas envolvidas, a
pesquisa se tornou menos propícia a erros. Isso torna transparente e mais astuta a
posição tomada por ambos de conduzir as disciplinas com recursos gerados, a partir do
segundo período letivo de 2005. No entanto, se acontecer alguma eventualidade durante
o decorrer do curso, o orientado será acionado e estará apto para verif icar o que ocorreu
juntamente com o orientador.
Foram elaborados resumos e artigos científicos para submissão a congressos e a
periódicos científicos. Foram apresentados trabalhos em três congressos nacionais, em
sessões técnicas orais (Anexo A): 1º) XVII Congresso de Iniciação Científica, XII
Seminário de Avaliação do PIBIC/CNPq-UFLA, VII Seminário de Avaliação do
PBIICT/FAPEMIG-UFLA (2005); 2º) IV WEIMIG – Workshop em Educação em
Computação e Informática do Estado de Minas Gerais (2005); 3º) I COMPSULMT - I
Congresso de Computação do Sul do Mato Grosso (2005). Além disso, foi publicado um
artigo completo em uma revista indexada, INFOCOMP – Journal Computer Science.
Um seminário direcionado à primeira turma a utilizar o TBC-GRAFOS (1º
semestre de 2006) será realizado, para apresentação dos objetivos do produto de
software e avaliação de perspectivas dos alunos para o futuro. Uma apresentação final
dos resultados e da metodologia de ensino para o engrandecimento da pesquisa, do órgão
que possibil itou esta realidade e da equipe técnica (orientado e orientador) será
realizada. Esta terá como público alvo alunos, professores e coordenadores de curso.
Dessa forma, espera-se que os frutos desta pesquisa contribuam para a melhoria de
profissionais das áreas de Informática e Computação.
1.4 Estrutura do Trabalho
O Capítulo 2 discorre sobre a análise de metodologias de ensino em
Computação, alguns problemas enfrentados e possíveis soluções.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
10
O capítulo 3 apresenta a linguagem de programação Java, retratando seu
histórico e suas tecnologias.
O capítulo 4 apresenta os produtos de software desenvolvidos, TBC-AED/WEB,
TBC-GRAFOS e TBC-GRAFOS/WEB, com a descrição do processo de elaboração,
ferramentas utilizadas, funcionalidades e conceitos envolvidos.
Por fim, o Capítulo 5 conclui o trabalho fazendo algumas considerações finais
sobre a pesquisa realizada.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
11
Capítulo 2 – Metodolog ias de Ensino de Computação
2.1 Considerações Iniciais
Neste capítulo, são apresentados alguns dos pontos críticos relacionados às
metodologias de ensino de Computação, enfatizando a forma de resolução de problemas
e suas implicações. Na seção 2, é apresentada uma breve análise de problemas e
desafios enfrentados no ensino desta ciência, considerando algumas soluções. Na seção
3, são retratados os problemas de estudo de algoritmos e programação em decorrência
da forma de ensino. Na seção 4, são listados alguns produtos de software util izados para
o ensino desses tópicos. Por fim, são apresentadas as considerações finais do capítulo.
2.2 Análise de Problemas e Soluções no Ensino de Computação
Dentro da esfera de discussão dos métodos educacionais como ferramentas para
a formação de profissionais de qualidade para o mercado, o presente trabalho se propõe
a dar sua contribuição. Entretanto, ele analisará um tema mais abrangente e complexo:
as áreas de Computação e Informática, que apresentam inovações constantes e grande
transformação de preceitos existentes. Sabe-se que é complicado promover mudanças
na educação básica e, ao se tratar de cursos de graduação baseados na produção de
tecnologia, o problema é ainda maior. O que se pode perceber é que esses cursos
exercem grande atração sobre os futuros ingressos em uma faculdade, o que se mostra
pela concorrência elevada em processos seletivos. No entanto, vencido o obstáculo de
entrada, vêm o início da fase universitária e um dos maiores dilemas: o contato com
disciplinas básicas que vão preparar o ingresso para atuar em áreas específicas. Esse
contato, sobretudo em cursos de Computação, pode gerar tanto afinidade quanto
repulsa, o que acontece com freqüência expressiva, conforme [RODRIGUES 2002;
SCHULTZ 2003; CHAVES DE CASTRO et al 2003; DELGADO et al 2004 apud
JÚNIOR e RAPKIEWICZ 2004].
Os problemas apresentados na compreensão de conceitos abstratos de
programação, conforme [BUZIN 2001], encontra sua raiz ainda durante a formação
básica, o que caracteriza uma importante linha de pesquisa na metodologia educacional.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
12
Deve-se incitar o raciocínio lógico e agilidade de pensamento desde cedo, para que o
jovem possa desenvolver suas habil idades cognitivas e atingir seus objetivos mais
facilmente no futuro.
Dessa forma, a falta de compreensão do raciocínio lógico pode ser a principal
razão pelo alto índice de reprovação nas disciplinas de Algoritmos e Programação e, em
alguns casos, pela desistência de um curso. Em parte, isso é decorrência da dificuldade
encontrada pelos professores para acompanharem efetivamente as atividades
laboratoriais de programação, dado o grande número de estudantes geralmente sob sua
supervisão [TOBAR et al 2001]. Dentro desse paradigma, pode ser destacada também a
forma como os alunos estudam para a disciplina, geralmente memorizando, e a falta de
pré-requisitos em conteúdos relacionados ([JÚNIOR e RAPKIEWICZ 2004]).
[RODRIGUES 2002] relata outros problemas associados a este processo:
• a falta de motivação do aluno criada pelo despreparo, citado anteriormente, e o
desânimo quando há, principalmente, a crença de que a disciplina constitui um
obstáculo extremamente difícil de ser superado;
• o processo tradicional de avaliação pode deixar o aluno tenso prejudicando o
aprendizado;
• o relacionamento entre professor e aluno pode ser um problema quando o primeiro
preocupa-se em mostrar o que sabe desconsiderando um ambiente de aprendizagem
descontraído e colaborativo;
• a didática ou a falta de metodologia de ensino dificulta o aprendizado dos novos e
diversos conceitos. Inclui-se aqui a grave falta de comunicação entre os professores
das várias disciplinas que permitiria identificar conteúdos afins ou superposição de
tópicos tornando o trabalho realizado mais integrado auxiliando o processo de
ensino e aprendizagem ([GIRAFFA, MARCZAK e ALMEIDA 2003; PIMENTEL,
FRANÇA e OMAR 2003]).
[RODRIGUES 2002] ainda afirma que o professor deve ser capaz de fazer o
aluno compreender a abstração envolvida com toda a simbologia utilizada. Para isto,
deve utilizar sua criatividade e tentar resolver cada problema baseando-se em situações
do cotidiano. Assim, o aluno começa a ter raciocínio lógico e ordem de pensamento.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
13
Segundo [SCHULTZ apud MENEZES e NOBRE 2002], algumas das
dificuldades vivenciadas pelo professor no processo são: i) reconhecer as habil idades
inatas de seus alunos; ii) apresentar técnicas para soluções de problemas; iii ) trabalhar a
capacidade de abstração do aluno, tanto na busca das possíveis soluções como na
escolha da estrutura de dados a ser utili zada; e iv) promover a cooperação e a
colaboração entre os alunos.
No entanto, para [BUZIN 2001], o iniciante do curso superior vem de uma
experiência de estudante de disciplinas desenvolvidas em torno do paradigma de
apresentação de resposta e soluções, usualmente da velha e surrada didática diretiva, ao
invés de focar no processo de questionamento. Assim, mais uma das vertentes do
problema educacional na área de Computação encontra-se na sua formação básica.
Mas, considerando o campo universitário, o nível de maturidade do aluno é
importante neste ponto para que o professor possa adequar o processo pedagógico no
sentido de acompanhar o amadurecimento do aluno, permitindo aplicar técnicas de
ensino e aprendizagem ([JÚNIOR e RAPKIEWICZ 2004]).
O acompanhamento contínuo de cada aprendiz e o tratamento personalizado a
cada estudante, principalmente em turma com um número elevado de alunos, são
possíveis se forem apoiados por sistemas inteligentes, ou seja, auxil iados por
computador ([PIMENTEL, FRANÇA e OMAR 2003]). Logo, a idéia de usar produtos
de software para o ensino de programação é de grande valia e ainda poderá transformar
o ensino de disciplinas avançadas em algo mais primoroso e tecnológico.
A partir de todo esse problemático desafio, mudanças passaram a ser
consideradas por graduados, mestres e doutores que trabalham com o ensino de
algoritmos e programação. A análise da literatura feita por [JÚNIOR e RAPKIEWICZ
2004], independente de ser nacional ou internacional, mostrou que há três vertentes na
busca de soluções para os problemas apontados:
• Ferramentas, que incluem trabalhos que apresentam ferramentas computacionais
visando facil itar o processo de ensino e aprendizagem;
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
14
• Estratégias, que incluem trabalhos que discutem estratégias de ensino e/ou de
avaliação de competências;
• Ferramentas e Estratégias, que são os trabalhos que discutem alguma estratégia
suportada por ferramentas computacionais.
Juntamente com o uso de uma ferramenta computacional, deve-se tentar ajustar
algumas propostas pedagógicas de trabalho disciplinar, cada vez mais foco de pesquisas
na área de Computação, principalmente no âmbito internacional ([JÚNIOR e
RAPKIEWICZ 2004]). Alguns trabalhos nacionais relacionados aos problemas de
ensino de algoritmos e programação estão listados a seguir:
• [FARIA e COELLO 2005], percebendo os problemas e procurando solucioná-los,
ou pelo menos amenizá-los, propuseram o uso de uma abordagem de aprendizagem
baseada na colaboração. Esta abordagem colaborativa parte do princípio de que o
conflito sócio-cognitivo entre os aprendizes pode melhorar o seu aprendizado. Para
suportar o aprendizado colaborativo, foi desenvolvido um avaliador de programas
em C, chamado Verificador de Diferenças Significativas Entre Programas – VDSP.
O VDSP avalia os programas dos alunos, pontuando-os. A pontuação é utilizada
para montar grupos de alunos que deverão refazer o programa, trocando pontos de
vista e considerações. O VDSP foi experimentado com alunos do curso de Sistemas
de Informação da PUC Minas Arcos, especificamente, alunos da disciplina
Algoritmos e Estruturas de Dados, com resultados positivos em relação à formação
de grupos de trabalho homogêneos e heterogêneos sob mediação do professor em
detrimento de um trabalho individual;
• [RAABE e SILVA 2005] notaram que o aprendizado de algoritmos é considerado
desafiador pelos estudantes de cursos tecnológicos. Os principais motivos para este
fato são: o alto nível de abstração do conteúdo e a dificuldade dos docentes em
detectar e atender as dificuldades de aprendizagem dos alunos. Dessa forma,
propuseram um ambiente que auxil ia no atendimento das dificuldades de
aprendizagem da disciplina de Algoritmos utilizando o paradigma de Assistentes
Inteligentes de Ensino. Estes assistentes auxil iam o professor em sua tarefa de
monitorar, analisar e assistir os alunos. Os resultados da utilização do ambiente
apontam para a viabil ização da tarefa de acompanhamento individualizado dos
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
15
alunos e uma maior eficiência na identificação e no atendimento às dificuldades de
aprendizagem;
• [BORGES e FILHO 2005] afirmaram que grupos de estudo têm surgido como uma
alternativa para complementar os conteúdos vistos em sala de aula e
desenvolver/aprimorar habil idades. Neste contexto, apresentaram a importância dos
grupos de estudo na formação dos futuros profissionais da área de computação.
Relataram a experiência com o grupo de estudos da linguagem Java da Universidade
Luterana do Brasil . Ao contrário do que se possa imaginar, a diferença de nível entre
os alunos não constituiu obstáculos para o andamento dos trabalhos. Observou-se
uma forte interação entre os componentes do grupo e o prazer em dividir o
conhecimento adquirido. Relações se estabeleceram a partir da experiência de
pesquisar, aprender e resolver problemas juntos;
• [FARIA, VILELA e COELLO 2005] concluíram, após diversos estudos sobre
Ambientes de Aprendizado Colaborativo Suportado por Computador, que eles
podem trazer melhorias ao processo de aprendizado e contribuir para torná-lo mais
prazeroso e socializador. Então, desenvolveram um software verificador de
diferenças significativas entre programas e o utilizaram para a montagem de grupos
para o aprendizado colaborativo de programação de computadores. Chegaram à
conclusão de que o aprendizado colaborativo é viável e eficaz nesse contexto, mas
difícil de implantar sem a presença de um mediador. Logo, estudaram o Learn in
Group, um sistema baseado na web para o suporte ao aprendizado colaborativo de
programação. O sistema contará com dois agentes mediadores, um para a
constituição de grupos de trabalho colaborativo e outro para acompanhar e estimular
a participação dos membros dos grupos;
• [JÚNIOR et al 2005] citaram que o Grupo de Trabalho de Licenciatura em
Computação (GT-3) da Sociedade Brasileira de Computação (SBC) estabeleceu
entre as metas para 2004-2005 desenvolver experiências relativas ao ensino de
programação no nível médio. Isso visando melhorar o comportamento dos futuros
ingressos em cursos de Computação e Informática e tentando sanar os problemas
relacionados ao pensamento algorítmico mais cedo. A partir dessa idéia, realizaram
tal proposta pela Universidade Estadual Norte Fluminense em uma escola pública de
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
16
Cardoso Moreira – RJ, através de uma oficina que permitiu identificar pontos de
dificuldade no processo e a necessidade de trabalhar mais a informática de modo
interdisciplinar. Apesar da elevada evasão, o resultado obtido na avaliação dos
concluintes da oficina permite projetar as expectativas da inclusão do tema
algoritmos e programação na matriz curricular. A oficina permitiu comprovar que a
idéia do GT-3 é factível, ou seja, que alunos do ensino médio são capazes de
desenvolver tal conteúdo sem necessariamente estarem inseridos em um curso
técnico, o que pode estimular o professor por aproveitar a nova competência do
aluno para promover o aprofundamento de conteúdos de sua disciplina e,
conseqüentemente, a interdisciplinaridade;
• [YAMAMOTO et al 2005] discutiram a experiência do uso de projetos integrados
para promover a interdisciplinaridade no curso de Ciência da Computação. A
integração tanto ocorre entre disciplinas de um mesmo período quanto entre
disciplinas de diferentes semestres. Esta última modalidade é altamente favorável
entre as disciplinas que formam os pacotes de disciplinas optativas, ofertadas a
partir do sexto semestre. Cada projeto visa transpor as barreiras da fragmentação do
conhecimento (não se trata de uma colagem fragmentada de saberes), o aluno é
posto diante de problemas que exigem a aplicação dos conhecimentos de uma
disciplina em outra, para posteriormente utili zá-los nos problemas. Esse processo
visa estabelecer o valor das competências e habilidades em converter o
conhecimento específico da área de formação para outras áreas de estudo. Os
resultados mais expressivos se refletiram no comportamento dos alunos: criou-se
uma cultura do ensino-aprendizado pelo próprio esforço, de que o processo de
aprendizado deve ser, em grande parte, construído pelo próprio aluno. Para os
docentes, ficou claro que devem estar aptos a aceitarem novos papéis e ficar atento
ao processo dinâmico que é o ensino da Ciência da Computação. Os projetos
iniciaram uma série de discussões sobre a fragmentação das disciplinas envolvidas
nos projetos, exibiram inúmeras deficiências de disciplinas dos períodos anteriores
ao quarto período e provocaram o questionamento dos conteúdos programáticos de
diversas disciplinas e suas formas de abordagens. Finalmente, tais projetos foram
relevantes nas discussões sobre as novas propostas para uma total reestruturação
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
17
curricular do Bacharelado em Ciência da Computação, visando melhorar a
metodologia de ensino;
• [GIRAFFA, MARCZAK e PRIKLADNICKI 2005] afirmaram que os programas
educacionais, conforme a metodologia utilizada pelo professor, podem ser
explorados de diferentes formas. Neste sentido, estes ambientes requerem um
conjunto de funções para atender os aspectos pedagógicos, identificados pelos
professores especialistas. Como esta tarefa não é de fácil execução, dado o perfil
diferenciado da equipe interdisciplinar, faz-se necessário o uso de uma metodologia
para guiar e organizar todo o projeto de desenvolvimento do software. Dessa forma,
eles apresentaram um relato de experiência em uma disciplina da graduação da
PUCRS no intuito de formalizar as práticas de engenharia de software adotadas para
o Projeto e o Desenvolvimento de Software Educacional, através do projeto PDS-E.
Isso para que sistemas de informação educacionais sejam desenvolvidos de formas
estruturada e pedagógica, contendo o assunto a ser atacado. Os resultados obtidos
com a aplicação da disciplina em três semestres consecutivos foram muito
promissores. Os alunos, em seus depoimentos colhidos através da avaliação formal
da disciplina e no seu decorrer, afirmaram que desta maneira conseguiram
dimensionar melhor o trabalho a ser feito e conseguiram conversar melhor com os
desenvolvedores (programadores). Os programadores, por sua vez, entenderam
melhor o que deviam fazer. Enfim, todos ganharam com a formalização e a
padronização das idéias. Neste contexto, tem-se buscado formalizar a metodologia
de ensino relatada e o uso dos recursos através da proposta do PDS-E.
Para [GARCIA, REZENDE e CALHEIROS 1997], diversos sistemas para
implementação de animações de algoritmos e de estruturas de dados foram produzidos.
Vários destes sistemas exploram bem a potencialidade do uso de visualizações gráficas
das operações realizadas nas estruturas de dados como ferramenta de ensino. O uso de
movimento em tempo real, cores e sons enriquecem ainda mais o poder de
comunicação. De fato, algumas experiências positivas foram relatadas na literatura,
principalmente com o uso de sistemas que utilizam a abordagem ativa, na qual o
aprendiz interage com as animações na criação de instâncias testes. Por outro lado, a
ênfase na qualidade da animação gráfica para enriquecer a abordagem ativa da maioria
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
18
dos sistemas levou-os a um grau de complexidade que impede seu uso para fins de
criação de animações pelos próprios aprendizes. Deste modo, sua utilização se limita à
interação, ainda que ativa, com as animações pré-implementadas, representando as mais
novas tendências de trabalhos para o ensino de Computação e Informática.
[GARCIA, REZENDE e CALHEIROS 1997] ainda afirmam que, do mesmo
modo que a experimentação durante a operação das animações enriquece o aprendizado
mais do que a mera observação passiva delas, é de se esperar que, com um sistema onde
a própria implementação das animações gráficas é facilitada a ponto de poder ser
realizada pelo estudante, a absorção do funcionamento dos algoritmos seja ainda mais
intensa.
Apesar desta nova tendência dos produtos de software para educação em
Computação, ainda é muito utilizada a abordagem ativa descrita anteriormente. Isso
porque configura uma forma de controle do aprendizado pelo docente, uma vez que
quaisquer informações erroneamente assimiladas na maioria das vezes causam um
impacto negativo na evolução do aluno durante o curso.
2.3 Programação e Algoritmos: a Base da Computação
Segundo a estrutura curricular abstrata constante nas Diretrizes Curriculares do
MEC, a matéria de Programação faz parte da área de formação básica em Ciência da
Computação, juntamente com as matérias Computação e Algoritmos e Arquitetura de
Computadores. [AZEREDO 2000] afirma que seu conteúdo abrange, além do ensino de
linguagens de programação propriamente ditas, os conceitos, os princípios e os modelos
de programação e o estudo de estruturas de dados e de métodos de classificação e
pesquisa de dados.
Ainda de acordo com [AZEREDO 2000], conforme consta na caracterização da
matéria, a programação, entendida como programação de computadores, é uma
atividade voltada à solução de problemas. Nesse sentido, ela está relacionada com uma
variada gama de outras atividades como especificação, projeto, validação, modelagem e
estruturação de programas e dados, utili zando-se das linguagens de programação
propriamente ditas, como ferramentas.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
19
Ao contrário do que se apregoava há alguns anos, a atividade de programação
deixou de ser uma ‘arte’ para se tornar uma ciência, envolvendo um conjunto de
princípios, técnicas e formalismos que visam a produção de software bem estruturado e
confiável. Cite-se, dentre estes, os princípios da abstração, do encapsulamento e as
técnicas de modularização e de programação estruturada.
Portanto, o estudo de programação não se restringe ao estudo de linguagens de
programação. As linguagens de programação constituem-se em uma ferramenta de
concretização de software, que representa o resultado da aplicação de uma série de
conhecimentos que transformam a especificação da solução de um problema em um
programa de computador que efetivamente resolve aquele problema.
No estudo de linguagens de programação, deve ser dada ênfase aos aspectos
funcionais e estruturais das linguagens de programação, em detrimento aos detalhes de
sintaxe. Conceitos como o significado de associação, avaliação, atribuição, chamada de
procedimento, envio de mensagens, passagem de parâmetros, herança, polimorfismo e
encapsulamento devem ser enfatizados. O estudo de linguagens deve ser precedido do
estudo dos principais paradigmas de programação, notadamente a programação
imperativa, a funcional, a baseada em lógica e a orientada a objetos.
O desenvolvimento de algoritmos, juntamente com o estudo de estruturas de
dados, deve receber especial atenção na abordagem do tema programação. Igualmente,
deve ser dada ênfase ao estudo das técnicas de especificação, projeto e validação de
programas. Um excelente campo para o exercício da programação é constituído pelo
estudo de pesquisa em tabelas e de técnicas de ordenação.
Dessa forma, deve-se entender que ensinar programação não é simplesmente
ensinar uma linguagem de programação. Este ensino envolve sobretudo entender
problemas e descrever formas de resolução, de maneira imparcial, para que então sejam
codificadas em uma linguagem. Ou seja, somente após o aprendizado dos conceitos de
algoritmo e fundamentos de lógica é que o estudante pode travar contato com uma
linguagem de programação concreta (executável), para experimentar aqueles conceitos.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
20
Além disso, o estudo de programação deve passar efetivamente pelo estudo de
estruturas de dados. Ou seja, quando se projeta um programa, deve-se pensar tanto nos
algoritmos que manipulam os dados como também na forma de estruturar estes dados.
Desta maneira, as duas coisas se complementam.
De acordo com [AZEREDO 2000], dentro do ensino de estruturas de dados,
deve ser dado destaque a parte conceitual e comportamental das estruturas, antes de
pensar em implementação. Por exemplo, no ensino de estruturas lineares, deve-se
transmitir ao aluno o conceito desta estrutura, através das operações aplicáveis, como
criar, acrescentar, consultar e remover objetos da lista. Em um curso de Ciência da
Computação, esta parte pode ser apresentada através de uma especificação algébrica,
por exemplo. Após, pode-se prosseguir mostrando disciplinas de uso, como FIFO (first
in, first out) e LIFO (last in, first out) caracterizando os casos particulares de listas
lineares (fila e pilha). Finalmente, discutem-se formas de implementações ou
representações físicas das listas (contigüidade, encadeamento, circulares, duplamente
encadeada, com/sem descritor, etc). Deve ser dada ênfase especial no estudo de
estruturas encadeadas. Este tópico é onde normalmente o aluno apresenta maior
dificuldade de assimilação do conceito, uma vez que o encadeamento não é um conceito
muito freqüente na vida real, dificultando sua compreensão. Dessa forma, é
recomendável que as disciplinas de estruturas de dados possuam significativa atividade
prática em laboratório.
Para o ensino de algoritmos em grafos, deve-se consolidar bem a finalidade e o
funcionamento de cada processo, para a sedimentação das idéias e ordem de
pensamento do aluno. Exemplos de aplicações reais devem ser constantemente
associados. Após a conceituação teórica, deve-se partir para a análise dos algoritmos
propriamente dita, enfatizando a sua exercitação motora sobre exemplos de grafos, para
que o aprendizado seja bem sólido. Nesse caso, a condução correta e clara de um
primeiro exemplo pelo professor é fundamental, para que o aprendiz possa prosseguir
sem receio e/ou dúvidas.
Quanto ao sistema de avaliação aplicado atualmente, é o mesmo adotado
tradicionalmente na maioria dos cursos de natureza teórico-prática. Além de provas
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
21
periódicas, são aplicados alguns trabalhos de programação para fixação. Uma sugestão
que vem ao encontro do uso de um produto de software durante as aulas é a redução do
peso em provas teóricas, normalmente elaboradas sobre um conteúdo denso.
Com relação aos cursos na área de Computação e Informática, os cursos de
licenciatura visam a formação de educadores para o ensino médio. Os de Ciência da
Computação e Engenharia de Computação são voltados para a formação de recursos
humanos para o desenvolvimento científico e tecnológico da computação. Embora
conhecedores da matéria, não necessariamente devem sair dos cursos com o perfil de
“programadores” . Os cursos de Sistemas de Informação incluem a formação de
programadores entre seus objetivos. Nesse sentido, em um curso de Licenciatura em
Computação, o aluno poderá ter uma carga de prática de programação menor do que a
exigida nos demais cursos, sem prejuízo da parte conceitual da matéria. Também deve
haver uma diferenciação entre os casos de cursos de atividade fim e atividade meio.
Para este último, recomenda-se uma ênfase maior no conhecimento de linguagens de
programação e atividades práticas.
Assim, a programação é, pois, um dos pontos chaves em um curso de
Computação, pois é a atividade que supre o computador com meios para servir ao
usuário. Seu uso adequado, juntamente com o entendimento de conceitos, princípios,
teorias e tecnologias, pode conduzir à produção de software de qualidade, objetivo final,
tanto quando se tem a computação como um meio como quando a computação é tida
como um fim.
Com esse intuito, [SETUBAL 2000] apresenta algumas recomendações
genéricas a serem aplicadas no ensino de disciplinas relacionadas a algoritmos e
computação:
• coerência com os objetivos fundamentais. Por coerência, entende-se que o
professor deve expressar claramente as idéias, os conceitos e as técnicas perante os
alunos (se o professor coloca algoritmos confusos na lousa ou em transparências, ele
não pode esperar algoritmos claros nas respostas dos alunos); deve destacar a
importância dos resultados teóricos e mostrar rigor formal toda vez que isto se fizer
necessário; e deve procurar valorizar o uso de técnicas na resolução de problemas.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
22
Esta última coerência pode ser alcançada em particular usando a técnica de
“descobrir” a solução de um problema junto com os alunos, ao invés de
simplesmente apresentar e explicar soluções “prontas” ;
• ênfase no pensamento crítico. Este é papel de toda educação, porém nesta matéria
um cuidado especial deve ser necessário, dada sua natureza teórica com forte
componente matemático. Em outras palavras, os alunos que têm pouca maturidade
matemática tendem a acreditar em qualquer demonstração que se lhes põe na frente.
Tal comportamento deve ser desestimulado! É essencial que os alunos duvidem
daquilo que lhes é apresentado e é com dúvidas saudáveis e sua resolução que a
percepção da importância do resultado teórico poderá ser consolidada. Nesse
sentido, considera-se um recurso valioso os exercícios que pedem para os alunos
identificarem falhas de argumentação (por exemplo em uma demonstração errada),
erros em algoritmos ou erros em notícias da imprensa;
• a teoria na prática. A experiência com o ensino das disciplinas relacionadas a
algoritmos e computação mostra que os alunos em geral não se sentem atraídos por
elas, por considerarem-na muito abstrata. Por esse motivo, crê-se ser importante usar
como recurso didático sempre que possível um grande número de exemplos da “vida
real” . A inclusão de projetos de implementação, seja dentro das disciplinas teóricas,
seja dentro de uma disciplina específica, também visa a tornar a matéria menos
abstrata. De resto, é importante salientar para os alunos o grande impacto que os
resultados teóricos têm alcançado na prática.
2.4 Projetos de Software Relacionados ao Ensino de Algoritmos, Estruturas de Dados e Algoritmos em Grafos na Computação
Como considerado relevante para o enriquecimento da pesquisa, serão listados
alguns projetos envolvidos com algoritmos, estruturas de dados e algoritmos em grafos.
Entretanto, não há pretensão alguma de se fazer uma resenha exaustiva de todos os
trabalhos relacionados.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
23
2.4.1 Projetos Relacionados às Estruturas de Dados
A seguir, são listados alguns projetos relacionados a algoritmos e estruturas de
dados:
• ASTRAL – Animation of Data Structures and Algorithms ([GARCIA, REZENDE e
CALHEIROS 1997]). É um ambiente de programação para produção de animações
de algoritmos e estruturas de dados com propósito instrucional. O ambiente foi
desenvolvido no Instituto de Computação da UNICAMP em 1995-97 para
plataforma Macintosh e recentemente portado para Windows. Utilizando o
ambiente, um usuário pode implementar uma variedade de estruturas de dados e
algoritmos e, através de chamadas de algumas rotinas específicas do ambiente, é
possível visualizar graficamente as estruturas de dados bem como animações dos
algoritmos. Isso se dá através de uma biblioteca de suporte gráfico que é parte do
ASTRAL. A abordagem de animação de algoritmos tem duas vantagens imediatas:
i) aprendizado, beneficia a observação dinâmica do funcionamento das estruturas de
dados e proporciona um nível de abstração maior; e ii) depuração, que é facil itada
pela visualização gráfica, deixando claro ao usuário-programador, no momento da
execução, em que parte da implementação da estrutura ou do algoritmo os erros
ocorrem. Estas vantagens são interessantes aos alunos de disciplinas de estruturas de
dados e algoritmos. O uso do ASTRAL em disciplinas de graduação sobre estruturas
de dados com componente de programação foi muito bem sucedido em vários
semestres;
• EDDL – Estruturas de Dados Dinâmicas Lineares ([AZUL e MENDES 1998]).
Surgiu de uma discussão sobre estratégias de ensino das estruturas de dados e tipos
de dados abstratos utilizados em programação. A estruturação do programa EDDL e
a concepção da sua funcionalidade englobam as seguintes componentes: 1)
abordagem introdutória aos conceitos ou especificação dos tipos de estruturas; 2)
técnicas de implementação; e 3) utili zação dessas estruturas na resolução de
problemas. Pode-se utilizar como ferramenta introdutória ou de revisão, exercitação
e auto-avaliação. Após o desenvolvimento dos primeiros protótipos, o EDDL
adquiriu uma configuração global em que uma tela principal dá acesso aos módulos
principais do programa, que são: conceitos introdutórios, pilhas, filas, listas lineares
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
24
e exercícios. Em cada uma dessas seções, são analisadas em detalhes as operações
mais usuais com estes tipos de estruturas, tais como: criação e destruição da
estrutura, inserção e remoção de elementos na estrutura e verificação do estado da
estrutura. O processo de avaliação do programa em situações concretas de
ensino/aprendizagem está em curso. Oferece um conjunto de ferramentas e recursos
de programação que revelam ser ao mesmo tempo intuitivo e de fácil manipulação,
diversificado, versátil e eficaz para o desenvolvimento de projetos, principalmente
quando o aspecto gráfico é um dos componentes importantes a considerar;
• TED – Tutorial de Estruturas de Dados ([FLÁVIO 2004]). É um tutorial para
dinamizar o ensino na disciplina de estrutura de dados e é um software educacional
com o objetivo de permitir uma maior interação professor-aluno, servindo como
uma ferramenta de apoio ao aprendizado. O tutorial subdivide-se nas várias
estruturas apresentadas durante a disciplina, permitindo ao aluno ter uma visão
individualizada dos conteúdos, mas sem perder a visão do todo. Através de
conceitos de dinamização de aprendizagem, como a visualização dos
acontecimentos simultaneamente com o que é executado, o aluno cria uma visão de
totalidade do sistema. O tutorial apresenta algoritmos das estruturas de dados, ao
mesmo tempo que demonstra a sua implementação lógica através de exemplos
visuais permitindo ao aluno acompanhar os passos simultaneamente ao que é
executado;
• Dictionary of Algorithms and Data Structures ([BLACK 2005]). Este site contém
uma parte do Software Quality Group do Software Diagnostics and Conformance
Testing Division, Information Technology Laboratory. Este é um dicionário de
algoritmos, técnicas algorítmicas, estruturas de dados, problemas atípicos e
definições relativas. Os algoritmos incluem funções comuns e os problemas incluem
alguns como o caixeiro viajante. Alguns tópicos têm links para implementações e
mais informações. A página de índice relaciona os tópicos por tipo ou em ordem
alfabética. Apresenta o funcionamento dos algoritmos como animações sendo
executadas ao se definirem os seus parâmetros.
A seguir, são listados outros projetos citados em [GARCIA, REZENDE e
CALHEIROS 1997]:
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
25
• Balsa (Brown ALgorithm Simulator and Animator). Foi desenvolvido na Brown
University no início dos anos 80. Seu intuito era servir como um laboratório de
experimentação com representações dinâmicas de algoritmos em tempo real. Seu
sucessor, Balsa-II , introduziu uma interface mais amigável e uma maneira
homogênea para a execução e interações com animações, trabalhando sobre a
plataforma Macintosh e com a linguagem Pascal;
• Projeto Zeus <http://www.research.digital.com/SRC/zeus/home.html>. Surgiu no
início dos anos 90, desenvolvido por M. Brown cujas contribuições incluíram uma
proposta de separação entre algoritmo e visualizadores, colocando interfaces bem
definidas entre eles, suporte à construção de programas de grande porte orientados a
objetos e a utilização da linguagem Modula 3. Em Zeus, múltiplos algoritmos
podem ser executados concorrentemente, facilitando a análise de diferenças e
similaridades entre vários algoritmos;
• Projeto Zada <http://ls4-www.informatik.unidortmund.de/RVS/zada.html>.
Desenvolvido na University of Dortmund, implementou algoritmos distribuídos
utilizando o ambiente Zeus;
• Xtango <http://www.cc.gatech.edu/gvu/softviz/algoanim/xtango.html>. É um
sistema de animação de algoritmos de propósito genérico que permite a construção
de animações em tempo real. O objetivo principal é prover facilidades para os
usuários que irão construir as suas animações, fornecendo uma interface de alto
nível. Utiliza a linguagem C e opera sobre plataformas Unix e X11 Window System;
• Polka <http://www.cc.gatech.edu/gvu/softviz/parviz/polka.html>. É sucessor de
Xtango e foi projetado para dar suporte ao desenvolvimento de animações
concorrentes, de maneira a facil itar a exibição de algoritmos paralelos;
• Projeto AnimA foi desenvolvido na Unicamp por R. Amorim e P. de Rezende e seu
principal objetivo é a produção sistemática de animações em C++ dentro de um
ambiente de estações de trabalho Unix.
2.4.2 Projetos Relacionados a Algoritmos em Grafos
A seguir, são listados alguns projetos relacionados a algoritmos e teoria dos
grafos:
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
26
• Rin’G ([SOARES et al 2004]). Consiste em um ambiente que permite aos usuários
desenvolver seus algoritmos e incluí-los em uma interface gráfica, executando-os
passo-a-passo de forma interativa. Isso visa facil itar a compreensão das técnicas
aplicadas, por meio do mapeamento das representações computacionais de
implementações para abstrações visuais de algoritmos em grafos. Permite a edição
de grafos, a execução de algoritmos para geração e acompanhamento de animações
e o salvamento e abertura de grafos e animações. No Rin’G, algoritmos são
implementados em Java e a estrutura disponibil izada pelo Diamante – um
framework também criado pelo grupo com o intuito de simpli ficar o
desenvolvimento de aplicações que utilizam grafos. Dessa forma, o ambiente busca
garantir que essas implementações sejam o máximo possível similar às definições
teóricas dos algoritmos propostos. Foi utili zado durante parte de 1º semestre de
2004 por alunos da disciplina Grafos e Teoria da Complexidade do curso de Ciência
da Computação da PUC Minas. Este teste foi considerado satisfatório pelo grupo,
motivando a contínua melhoria e o incremento do conjunto de funções da
ferramenta;
• GVF – Graph Visualization Framework ([MARSHALL e HERMAN 2003]). É um
framework para desenvolvimento de ferramentas direcionadas para manipulação de
problemas de teoria dos grafos que apresenta um bom suporte para criação de
entrada e saída de dados e layout para os grafos. Por outro lado, não permite a
inclusão de algoritmos dinamicamente ao sistema e não fornece amparo à animação
de algoritmos. Não fornece capacidade de expansão, visto que existe a possibilidade
de inclusão de operações, componentes e propriedades de um grafo;
• EVEGA ([KHURI e HOLZAPFEL 2001]). É uma ferramenta desenvolvida para o
aprendizado de algoritmos em grafos e fornece uma interface poderosa e de boa
usabilidade para criação e edição interativa de grafos e animação de algoritmos. As
execuções de vários algoritmos podem ser comparadas por meio de gráficos de
desempenho gerados pela ferramenta. Um algoritmo de fluxo máximo acompanha a
ferramenta para demonstração e é possível incluir no ambiente novos algoritmos. A
operação do EVEGA, no entanto, para geração das animações, é feita de forma
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
27
intrusiva no código do algoritmo, podendo ser necessário dividir a atenção do
problema a ser solucionado com a criação da animação;
• DIDAGRAPH ([DAGDILELIS e STRATZEMI 1998]). Permite o
acompanhamento de animações da execução de algoritmos, em alto nível, por meio
de uma visualização do grafo com o algoritmo em andamento e de uma descrição
em linguagem de alto nível do algoritmo. Essa ferramenta, atualmente, conta apenas
com poucos algoritmos; para estudar algoritmos utili zando esta ferramenta é
necessário aprender uma nova linguagem, fato este que pode desviar a atenção do
objetivo das disciplinas de grafos;
• VisualGraph ([LUCAS e NAPS 2003]). Fornece uma biblioteca para a animação
de algoritmos em grafos. Essa biblioteca, no entanto, não fornece uma interface
gráfica para o usuário, servindo apenas como base para a criação de grafos que
possam ser utili zados em outros projetos e ambientes. Para visualizar a animação
gerada por algoritmos criados com o VisualGraph, é necessário o uso de outra
ferramenta. A interface para criação de grafos é baseada em texto, pouco intuitiva e
não representa o grafo de forma amigável ao aluno;
• DisViz ([SHERSTOV 2003]). Foi desenvolvido para permitir o aprendizado em
grupo, por meio de redes locais, em um ambiente P2P (Peer to Peer) no qual é
possível criar grafos de teste e animações de algoritmos que possam ser visualizados
por todos os membros da rede. Esta ferramenta não fornece uma maneira fácil de
acoplar algoritmos desenvolvidos por usuários, de forma que os alunos só podem
utilizar os algoritmos existentes. O estudo de algoritmos em grafos utilizando esse
programa é restrito aos algoritmos implementados na ferramenta e ao
acompanhamento da animação desses algoritmos. Além disso, o estudo depende da
existência de uma rede local e da colaboração dos membros dessa rede, o que pode
dificultar o estudo dentro e fora dos horários de aulas práticas.
2.5 Considerações Finais
Apesar de existirem várias frentes de estudos interessadas em contribuir para a
melhoria e o enriquecimento do ensino de Computação, muito trabalho ainda terá que
ser feito. Uma vez que a maior parte das disciplinas dos cursos da área tem enfoque
teórico acaba por deixar as aplicações e as tarefas práticas a cargo dos alunos, o que
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
28
quase sempre acaba por deixá-los desestimulados e pensativos com relação à sua
escolha profissional. Logo, deve ser uma preocupação constante de coordenadores de
cursos da área de tentar manter condições físicas apropriadas ao desenvolvimento dos
cursos, aumentando a produtividade e qualidade dos trabalhos de conclusão de curso.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
29
Capítulo 3 – A História de Java: Tecnolog ias e Evolução
3.1 Considerações Iniciais
Dentro da gama de tecnologias disponíveis no mercado atual, a busca por
aquelas que atendam melhor aos requisitos de projetos modernos é cada vez maior. Em
contrapartida, a cada dia novas tecnologias são desenvolvidas e novos conceitos
precisam ser incorporados à formação profissional.
Em projetos que envolvem programação, utili zar meios de construção do
produto de software que sigam padrões é importante. Os atuais padrões de
implementação usam a orientação a objetos em larga escala e procuram evitar
dependência em relação à plataforma ou à estrutura física onde será executado o
produto de software.
Nesse contexto, surgiu a linguagem de programação Java, que é uma poderosa
linguagem de programação, desenvolvida pela Sun Microsystems. Java foi
originalmente concebida para ser usada com a Televisão Interativa (Tvi). A Tvi,
conforme [FERNANDES et al 2004], é um conceito que integra a televisão
convencional com as potencialidades de programas de computador, possibilitando ao
usuário assistir e interagir com o conteúdo que está sendo apresentado. Mas, de acordo
com [THOMAS et al 1997], Java acabou por se tornar uma linguagem de grande
interesse para a comunidade Internet quando a Sun lançou o HotJava, um browser web
que executa pequenos programas Java embutidos, chamados applets, em páginas web.
Em seguida, o suporte para applets foi acrescentado ao Netscape Navigator 2.0. Hoje,
applets estão se tornando obrigatórios nos sites mais sofisticados.
Neste capítulo, é apresentada a linguagem de programação Java, ferramenta
sobre a qual foram implementados os produtos de software. A seção 2 apresenta um
breve histórico a respeito do nascimento de Java, bem como os rumos que o seu projeto
de construção tomou durante seu desenvolvimento. A seção 3 retrata aspectos
importantes da sua evolução e da sua abrangência. A seção 4 detalha algumas
tecnologias disponíveis para o desenvolvimento de produtos de software em Java. A
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
30
seção 5 apresenta as principais características de Java. Por fim, são apresentadas as
considerações finais do capítulo.
3.2 O Nascimento
Segundo [BANK 1995], as origens de Java remontam ao início da década de 90,
quando o mercado de computador pessoal estava em franca expansão. Nessa época, a
Sun começava a compreender o por quê de suas estações de trabalho terem perdido
terreno para o padrão PC da IBM. Conforme [BANK 1995], complicadas, feias e
extremamente científicas para o mercado doméstico eram o conceito unânime sobre tais
máquinas. Assim, a empresa cujos equipamentos chegaram a representar mais da
metade das máquinas conectadas à Internet estava mais do que pronta para ouvir
sugestões; anteriormente, algo altamente improvável.
Nesse contexto, o jovem programador Patrick Naughton mencionou ao seu
companheiro de hockey e também presidente da Sun, Scott McNealy, que estava
deixando a empresa para se juntar à NeXT Computer onde, segundo ele, as coisas
estavam tomando um rumo mais interessante. Quando McNealy ouviu isso, sua reação
foi pedir a Naughton que, antes de ir, fizesse uma espécie de carta-sugestão, onde
constariam os erros cometidos pela Sun, segundo sua visão [BANK 1995]. Naughton,
interessado pelo desafio de descrever tais falhas, redigiu doze telas de texto e as enviou
ao presidente que, após ler, as enviou a todos da gerência da empresa.
Foi o estopim para uma vigorosa discussão. Entretanto, todos estavam propensos
a concordar com os pontos levantados. Dentre eles: i) um artista para conceber as
interfaces da Sun; ii ) um único conjunto de ferramentas de desenvolvimento; iii) uma
única tecnologia de janelas; e iv) mudanças no time de desenvolvimento de janelas e
interfaces.
Com sua vaga garantida na NeXT, Naughton participou das reuniões com os
executivos aonde se chegou à predição sobre a terceira onda da computação: pequeno
computador móvel de fácil uso, em contraponto aos mainframes e minicomputadores e
aos computadores pessoais de mesa. Estava fundado o Projeto Green ([QUINTEIRO
2005]).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
31
Para evitar o ambiente conservador e para ter o máximo de sigilo sobre o
projeto, decidiu-se trabalhar fisicamente fora dos muros da empresa. Naughton, James
Gosling e Mike Sheridan idealizaram um sistema compacto e simples que interagisse
com todo e qualquer dispositivo eletrônico, mesmo aqueles não tecnicamente chamados
de computador. Eles vislumbraram uma espécie de controle remoto universal. Algo tão
fácil de uso que permita a programação de um vídeo-cassete, a operação de uma TV ou
de um sistema de som por qualquer pessoa, mesmo aquela não inteirada sobre o
funcionamento de tais dispositivos. Começaram os dias de glória do Projeto Green.
Apesar de sua rapidez, a inconsistência das interfaces e a portabilidade
incompleta de C++ determinaram o descarte da linguagem como ambiente de
desenvolvimento. Após concluir que a confiabili dade era preferível à velocidade no
mundo dos eletro-eletrônicos, partiu-se para o desenvolvimento de um novo ambiente
de programação.
Gosling viu a possibil idade de fazer uso de sua idéia, desenvolvida em 1979.
Um enorme código Pascal nativo de uma estação PERQ precisava rodar na arquitetura
VAX da Digital. Os compiladores Pascal da época geravam um pseudo-código
intermediário que, depois, era convertido para a linguagem de máquina. Assim, Gosling
teve a idéia de criar uma máquina virtual para o VAX que, recebendo o código Pascal
PERQ, converteria-o para a arquitetura Digital. Era essa a portabilidade sem fronteiras
desejada pelo Projeto Green.
Enquanto a nova linguagem Oak (carvalho) era preparada por Gosling,
Naughton criava a interface gráfica que rodaria no protótipo. Conforme [GOSLING
2001], usando a tecnologia hammer, o protótipo foi construído: tela LCD de uma mini-
televisão Sharp, auto-falantes de um Game Boy Nintendo e partes compactadas de uma
estação Sun. Em agosto de 1992, o protótipo foi apresentado a McNeally, sendo uma
pequena tela e nada de botões. Passando o dedo pela tela, McNeally seleciona um filme
de um catálogo virtual e o arrasta para a imagem de um vídeo-cassete: a gravação do
filme está programada! Tudo feito sem teclado, mouse ou botões. O presidente da Sun
ficou em êxtase, dizendo: “Precisamos vender isso. Não falhem comigo. Derrubaremos
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
32
Microsoft, Apple, IBM e HP de uma só vez”. Wayne Rosing, outro co-fundador da Sun
Microsystems, completa: “Bil l Gates vai lamentar” .
Porém, o protótipo Star7 tinha muito mais para apresentar: Oak, uma poderosa e
segura linguagem orientada a objetos. Ao tomar conhecimento do software, Mitsubishi
e France Telecom iniciaram negociações para obter uma licença da tecnologia. A Sun
criou a FirstPerson Incorporated para cuidar dos negócios relativos ao Projeto Green.
Ao designar Rosing para a direção da FirstPerson, Mike Sheridan abandona a empresa
pois se sentiu desvalorizado.
A Mitsubishi e a France Telecom desistiram de Oak. Enquanto isso, o custo do
Star7 foi estimado em U$50. Ao mesmo tempo, a noção de Era da Informação
contagiou as pessoas e muitos entenderam que a Tvi era o caminho para atingi-la.
Assim, após a Time-Warner anunciar uma concorrência para escolher a tecnologia que
utilizaria o seu protótipo de Tvi, Naughton, Gosling e Bil l Joy (outro fundador da Sun)
empreenderam um amplo esforço para que Oak fosse escolhida. Após várias idas e
vindas à Time-Warner, a FirstPerson perdeu a disputa para a Sili con Graphics, arqui-
rival da Sun no mercado de estações de trabalho.
Meses depois, novo acordo foi tentado para transformar o ambiente provido por
Oak em produto comercial. A 3DO disponibilizou um decodificador para a Tvi. Oak foi
adaptada para a plataforma em 10 dias, mas as negociações para um acordo comercial
se estenderam por mais de 3 meses. Isso culminou em fracasso. Dessa maneira, a
atenção voltou-se novamente para o protótipo Star7.
Estas investidas fizeram com que a Sun só percebesse a relevância de um outro
fenômeno emergente, o Mosaic, cerca de 3 meses depois do seu lançamento. Em junho
de 1993, Marc Andreessen do NCSA (National Center for Supercomputing
Applications) lançou o Mosaic, primeiro visualizador gráfico para a Internet.
Esses conjuntos deixaram a direção da Sun transtornada. Em um lacônico e
taxativo comunicado à FirstPerson, a gerência da Sun determinou que encontrassem
algo para gerar dividendos. Um novo plano foi traçado, mas o fato de não mencionar ou
considerar duas das maiores sensações do momento, o Mosaic e a WWW, e de não se
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
33
atrelar a equipamentos da Sun, o que promoveria suas vendas, gerou pouco entusiasmo
nos executivos. Assim, no segundo trimestre de 1994, a FirstPerson foi oficialmente
liquidada e o Star7 foi abandonado.
Entretanto, quando tudo parecia perdido, Bill Joy salvou Oak, convencendo a
alta cúpula de que a linguagem poderia ter um caminho próspero na Web. Gosling tratou
de adaptar o código de Oak para WWW, enquanto Naughton preparou um navegador,
mais tarde denominado HotJava. Em dezembro de 1994, uma versão preliminar de Oak
e HotJava foi disponibil izada na Web para um seleto grupo. Três meses depois, Marc
Andreessen, que fundou a Netscape, teve acesso à tecnologia e ficou maravilhado.
Segundo [I.F.S. 2003], por problemas de copyrigth, o nome foi mudado em 1995 para
Java, em homenagem à ilha de Java, de onde vinha o café consumido pela equipe da
Sun. A idéia da Netscape de incorporar Java a seu navegador foi recebida como uma
benção pelos remanescentes do Projeto Green. Mas, sem um plano de licenciamento
ainda definido, a Sun acabou disponibilizando Java para a Netscape por U$750 mil e
sem taxação por cópia de navegador vendido. Uma pechincha, segundo analistas da
época.
Em maio de 1995, a tecnologia Java foi oficialmente lançada pela Sun. Kits de
desenvolvimento, eventos e correlatos foram planejados para sedimentar a tecnologia
como um padrão para a WWW. Isso porque o Microsoft Blackbird foi anunciado para o
início de 1996 e forneceu a mesma funcionalidade propostas por Java. Nesse meio
tempo, Patrick Naughton deixou a empresa por não concordar com a direção dos
negócios relativos a Java. O ponto de discordância foi o fato da Sun querer subjugar a
empresa de Bill Gates, ao passo que Naughton estava interessado apenas no sucesso de
Java. Depois de um bom tempo, o preço da licença do produto foi fixado em U$125 mil
mais U$2 por cópia de produto destinado ao mercado.
3.3 A Evolução
A seguir, é apresentado um cronograma de evolução, conforme [JAY 2005]:
• 1995: em março, surgiu Java, sob a coordenação de James Goslings e da Sun
Micorsystems; em maio, Java foi anunciada oficialmente na conferência SunWorld;
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
34
• 1996: em janeiro, ocorreu a liberação do JDK 1.0 (Java Development Kit); em maio,
ocorreu a primeira conferência para divulgar as novas tecnologias de Java; em
outubro o primeiro compilador Just-inTime (JIT) e API Java (Application Program
Interface Java) foram anunciados; em dezembro, o JDK 1.1 foi anunciado;
• 1997: em janeiro, o JavaBeans Development Kit foi liberado; em fevereiro, o JDK
1.1 foi liberado; em março, o Java Servlet Developers Kit foi liberado;
• 1998: em novembro, Java versão 2 se tornou portável para Linux e, em dezembro, é
disponibil izado para avaliação;
• 1999: em junho, as três edições Java, J2SE (Java 2 Platform Standard Edition),
J2EE (Java 2 Platform Enterprise Edition) e J2ME (Java 2 Platform Micro
Edition), foram anunciadas; em dezembro, a plataforma J2EE foi disponibilizada
para avaliação e a plataforma J2SE foi disponibil izada para o Linux;
• 2000: em fevereiro, API Java foi disponibil izada para pacote opcional XML
(eXtensible Markup Language); em maio, a plataforma J2SE versão 1.3 foi lançada
e foi disponibil izada para a Apple Mac OS X;
• 2001: em fevereiro, J2EE foi anunciada; em março, o catálogo J2EE e o Java Web
Start 1.0 foram liberados; em abril, a plataforma Java 2 Enterprise Edition (J2EE)
SDK 1.3 beta foi liberado;
• 2002: em dezembro, J2EE 1.4 Beta foi liberado;
• 2004: em outubro, Tiger (Java 5.0) foi liberado;
• 2005: em março, comemoração dos 10 anos de Java. Em novembro, Mustang (Java
6.0) foi liberado.
3.4 Algumas Tecnologias
Como uma tecnologia pioneira, Java apresenta uma série de ferramentas que dão
suporte a software de diferentes tipos [GALVÃO 2003]. A seguir, são descritas algumas
delas:
• JSDK – Java Software Development Kit: nome genérico dado para o conjunto de
ferramentas de desenvolvimento Java disponibil izado pela Sun. Em um JSDK, são
incluídos um compilador e um interpretador. Geralmente, são incluídas muitas
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
35
outras ferramentas, como depuradores e geradores de documentação. Um sinônimo
comum é JDK;
• JVM – Java Virtual Machine: abreviação mais usada para a máquina virtual Java, o
mecanismo responsável por grande parte do sucesso (e algumas vezes insucesso) de
Java. A máquina virtual é um software nativo que interpreta os bytecodes (código
intermediário Java) transformando-os em código binário. A primeira versão da JVM
apenas interpretava. Depois, vieram os compiladores Just-in-Time (JIT), que
compilavam parte do código na hora em que era executado, fazendo otimizações e
aumentando o desempenho. Uma evolução foi a introdução da máquina virtual
HotSpot, um JIT especial que usa tecnologias de compilação adaptativa, para
otimizar, dinamicamente, o código usado com mais freqüência e melhorar a
alocação de recursos;
• JRE – Java Runtime Environment: subconjunto do JSDK, direcionado para usuários
finais, que precisam apenas executar o software e não desenvolvê-los. Inclui a JVM
e as classes principais;
• J2SE: chamada apenas de Java Platform. Com o crescimento de Java, vieram o
J2EE e o J2ME. O J2SE contém as classes principais da plataforma Java e é
chamado às vezes de Core Java Platform;
• J2ME: a mais jovem plataforma Java, utilizada para os pequenos dispositivos, de
handhelds a pagers. A plataforma conta com o apoio cada vez maior da comunidade
e da indústria. A vantagem decisiva para o uso de J2ME é a possibil idade de usar a
mesma linguagem e praticamente as mesmas APIs no desenvolvimento para
centenas de dispositivos diferentes;
• J2EE: uma das siglas mais conhecidas do universo de tecnologias Java, tem alter ado
significativamente o desenvolvimento de software distribuído. Ao J2EE, são dados
muitos nomes: plataformas, arquitetura, tecnologia, conjunto de padrões,
especificação entre outras. Na verdade, todos estes são aplicáveis, dependendo do
ponto de vista. O J2EE pode ser considerado uma tecnologia que engloba um
conjunto de tecnologias que fornecem APIs e um ambiente para desenvolvimento e
execução de software corporativo, complexo e distribuído fisicamente. A plataforma
passou por quatro versões e a quinta (J2EE 1.4) está em fase avançada de
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
36
padronização. As tecnologias englobadas pelo J2EE são: JDBC (Java Database
Connectivity) para acesso a dados; JNDI (Java Naming and Directory Interface)
para integração com serviços de nomes e diretórios; JMS (Java Message Service)
para chamadas assíncronas; Servlets e JSP (Java Server Page) para desenvolvimento
Web; EJB (Enterprise JavaBeans) componentes de negócios distribuídos; JavaMail
para envio e recepção de e-mail ; JTS/JTA (Java Transaction Service/Java
Transaction) para gerenciamento de transações distribuídas; JCA (Java
Cryptography Architecture) para integração com sistemas legados; e RMI-IIOP
(Remote Method Invocation- Internet Inter-Orb Protocol) para comunicação entre
componentes;
• JDBC: solução elegante para o acesso multiplataforma a banco de dados.
Praticamente, toda a arquitetura JDBC é baseada em interfaces e especificações;
Isso torna a API tão geral e padronizada para bancos de dados distintos como
Oracle, MySQL e Microsoft SQLServer. O acesso a dados com o JDBC é baseado
em drivers JDBC, que são implementados por conjuntos de classes que conhecem
intimamente a arquitetura e os comandos de banco de dados. Um fato interessante é
os drivers JDBC serem implementados pelos fabricantes dos bancos de dados. A
Sun entra apenas com as especificações. Isso garante que as implementações dos
drivers sejam eficientes e leves. A maioria das empresas fabricantes de bancos de
dados fornece drivers JDBC gratuitamente junto com seus produtos e muitas
disponibil izam esses drivers na internet para download gratuito;
• JSP: usado para a criação de páginas Web dinâmicas. Com JSP, é possível criar
páginas que mesclam código Java e HTML (HyperText Markup Language),
permitindo a criação de templates com regiões dinâmicas e estáticas. Os códigos
JSP são incluídos no código HTML usando tags especiais. São oferecidas APIs
muito ricas para a criação de sites completos com acesso a dados e interação com o
usuário. Em uma evolução da primeira versão do JSP, os tags libraries reduzem o
código Java embutido no HTML simplificando o trabalho de designers e
desenvolvedores;
• Servlets: extensões do puro Java do padrão CGI (Common Gateway Interface). São
usados para a geração de conteúdo dinâmico para a Web. Servlet é uma classe Java
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
37
que conhece o protocolo HTTP (HyperText Transfer Protocol). Assim, um servlet é
capaz de processar solicitações HTTP, ler e processar parâmetros de formulários
HTML e envia respostas HTTP. Nos últimos anos, com a introdução da tecnologia
JSP, o uso de Servlets é reorientado. Em software bem arquitetado para Web, é
recomendado o uso de JSPs para a sua apresentação e de Servlets para a lógica de
validação e controle;
• EJB: sua especificação define um padrão para componentes de negócios
distribuídos. EJB é usado para se referir aos componentes criados seguindo esta
especificação. EJBs são executados em um runtime, que fornece serviços básicos de
gerenciamento de transações, persistência, distribuição e nomes. O runtime é
geralmente implementado pelo Application Servers. Uma das principais vantagens
de usar EJBs é o ganho com produtividade. Várias tarefas complicadas e cansativas,
tais como a implementação de persistência no banco de dados ou a abertura e o
fechamento de transações, são realizadas pelo Application Servers;
• RMI: é uma solução simples para a distribuição de software Java, permitindo a
comunicação entre objetos em máquinas virtuais diferentes. Com RMI, o código
para chamar um método de um objeto remoto é o mesmo para chamar um método
equivalente em um objeto local.
• AWT – Abstract Window Toolkit: acompanha Java desde sua primeira versão. Nesta
API, são definidos eventos, janelas, caixas de diálogo, cores e outros elementos
visuais. A primeira versão do AWT era pesada e pouco prática. Na segunda, que
veio com o Java 1.1, várias questões foram resolvidas, mas um problema crítico da
tecnologia permanecia: os recursos gráficos usados pelo AWT vinham do sistema
operacional. O AWT funcionava apenas como uma casca sobre os elementos visuais
da plataforma. Isso criava muitos problemas de compatibil idade e desempenho.
Além disso, restringia os recursos que podiam ser disponibil izados – apenas as
funções disponíveis em todas as plataformas, ou na maioria delas, podiam ser
utilizadas. Apesar de todas as desvantagens, AWT ainda sobrevive, mas é usado
como uma camada de serviços básicos para a mais moderna API Swing;
• Swing: estende e substitui o AWT. Swing resolve a maior parte das limitações do
AWT – todos os componentes visuais são desenhados diretamente na tela, o que
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
38
retira a dependência dos recursos de interfaces gráficas do sistema operacional. Isso
garante que o software tenha exatamente o mesmo visual e funcionalidade em
plataformas diferentes e aumenta a flexibil idade na criação de interfaces gráficas.
Nas versões iniciais do Swing, software construído com a tecnologia era pesado e
lento, mas aperfeiçoamentos foram feitos em ritmo intenso. Com J2SE 1.4, obteve-
se uma velocidade e leveza aceitável, viabilizando finalmente a criação de software
gráfico usando Java.
3.5 Algumas Características
De acordo com [SILVA 2003], Java é resultado de uma busca por uma
linguagem de programação que pudesse fornecer uma ligação com C++, mas com
segurança. Os primeiros objetivos alcançados com seu desenvolvimento foram a criação
de uma linguagem orientada a objetos, o fornecimento de um ambiente de
desenvolvimento (velocidade no desenvolvimento – eliminando o ciclo de compilar-
linkar-carregar-testar e portabilidade do código – com um interpretador que especifica a
forma do nível do sistema operacional), o não acesso a ponteiros e o dinamismo durante
a manutenção de programas.
Java é notável não apenas porque applets podem ser executadas dentro de
páginas Web, mas é uma linguagem orientada a objetos poderosa e fácil de usar. Java
lida com muitos problemas comuns, porém complexos, que os programadores
encontram ao desenvolver software robusto. Java suporta multiprocessamento com suas
classes thread (linhas de execução) e executa automaticamente a coleta de lixo,
liberando memória que não está mais sendo usada em segundo plano. A API incluída no
JDK fornece aos programadores acesso independente de plataforma para ferramentas
essenciais na programação de software complexo para Internet, como soquetes de rede e
um sistema de janelas gráficas. Poucas linguagens de programação geram o tipo de
interesse que Java tem gerado, mas poucas redefinem o que são programas e o que os
programadores podem fazer [THOMAS et al 1997].
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
39
Como forte critério de decisão pela implementação do software em Java, está
seu conjunto de características que a tornam singular perante outras linguagens de
programação disponíveis [SILVA 2003]:
• Orientada a Objetos. Java é puramente orientada a objetos, pois, com exceção de
seus tipos primitivos de dados, tudo é classe ou instância de uma classe. Java atende
a todos os requisitos necessários para ser considerada orientada a objetos que
resumidamente são oferecer mecanismos de abstração, encapsulamento e herança;
• Independente de Plataforma. Java é independente de plataforma, pois os
programas em Java são compilados para uma forma intermediária de código
denominada bytecodes que utiliza instruções e tipos primitivos de tamanho fixo,
ordenação big-endian e uma biblioteca de classes padronizada. Os bytecodes são
como uma linguagem de máquina destinada a uma única plataforma, a JVM, um
interpretador de bytecodes. Pode-se implementar uma JVM para qualquer
plataforma; assim, um mesmo software em Java pode ser executado em qualquer
arquitetura que disponha de uma JVM;
• Performance. Java foi projetado para ser compacto, independente de plataforma e
para utilização em rede, o que levou a decisão de ser interpretado através de
bytecodes. Como é interpretada, é razoável a performance, não podendo ser
comparada a velocidade de execução de código nativo. Para superar esta limitação,
várias JVMs dispõem de compiladores JIT que compilam os bytecodes para código
nativo durante a execução otimizando a execução, que melhora a performance de
software em Java;
• Segurança. Considerando a possibilidade de software obtido através de uma rede,
Java possui mecanismos de segurança que podem evitar qualquer operação no
sistema de arquivos da máquina-alvo, minimizando problemas de segurança. Tal
mecanismo é flexível o suficiente para determinar se uma applet é considerada
segura especificando diferentes níveis de acesso ao sistema alvo;
• Permite Multithreading. Java oferece recursos para o desenvolvimento de software
capazes de executar múltiplas rotinas concorrentemente e dispõe de elementos para
a sincronização destas várias rotinas. Cada um destes fluxos de execução é
denominado thread, um importante recurso de programação de software mais
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
40
sofisticado. Além disso, Java é robusto, oferece tipos inteiros e ponto flutuante
compatíveis com as especificações IEEE, tem suporte para caracteres UNICODE e é
extensível dinamicamente além de ser naturalmente voltada para o desenvolvimento
de software em rede ou distribuído;
• Garbage Collection. Java não segura áreas de memória que não estão sendo
utilizadas, porque tem uma alocação dinâmica de memória em tempo de execução.
Em outras linguagens de programação, o software é responsável pela
alocação/desalocação da memória. Durante o ciclo de execução do software, Java
verifica se os objetos instanciados estão em uso. Caso não estejam, Java libera
automaticamente esta área que não é utili zada.
Além disso, conforme [SILVA 2003], deve-se salientar também as diferenças de
Java que a tornaram vantajosa em detrimento das outras: i) Java não implementa
ponteiro explicitamente; ii) não tem gabarito; iii ) inexistência de aritmética de
ponteiros; iv) arrays são objetos; v) Strings são objetos; v) não há a necessidade de
desalocação explícita de memória; vi) tamanhos em bits dos tipos primitivos são os
mesmos em todas as plataformas; vii) não há sobrecarga de operadores; viii) não há
métodos com lista de argumentos de tamanho variável; ix) não há diretivas de pré-
compilação; x) não há Templates; xi) não há herança múltipla com classe; e xii) não há
funções, mas apenas métodos de classes.
3.6 Considerações Finais
Tecnologias nascem todos os dias sem um dos três fatores primordiais para o
sucesso: i) grupo de desenvolvedores de primeira linha; ii) mercado disposto a acolher;
e iii) plano de negócios que funcione. Java teve o time vencedor e teve um mercado
ansioso por sua funcionalidade. Mas, se continuará fazendo sucesso, depende de como
os negócios serão conduzidos.
A história de Java é um exemplo do que acontece quando uma grande
companhia “afrouxa as rédeas” dos seus mais talentosos integrantes. É também uma
prova do quão acidental é a natureza do desenvolvimento tecnológico, que vive às
voltas com o confuso e oscilante mercado de negócios.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
41
Nesse contexto, a Sun fatura com Java pelo seguinte motivo: é um padrão
aberto, isto é, qualquer um pode escrever um programa em Java e vendê-lo, mas a JVM
é paga, além de haver um custo por cópia de cada produto vendido com essa JVM. Pois,
sendo um padrão aberto, qualquer um pode criar uma máquina virtual que interprete
bytecodes e disponibilizá-la gratuitamente. É isso que faz a GNU (GNU' s Not UNIX)
que disponibil iza o GJC gratuitamente.
Com todo esse aparato oferecido por Java, acabou por se tornar preferida para
implementar software baseado em Intranet e Internet e para dispositivos que se
comunicam através de uma rede. Não é de surpreender se um novo estéreo e outros
dispositivos domésticos estiverem conectados em rede utilizando Java. Além disso, Java
é particularmente atraente como primeira linguagem de programação. No evento
JavaOneTM, em junho de 2001, foi anunciado que Java é parte obrigatória do currículo
de linguagens de programação de 56% das faculdades e universidades dos EUA.
Ademais, 87% das faculdades e universidades americanas oferecem cursos de Java.
Java também é atraente para escolas de segundo grau. Em 2003, o College Board
estabeleceu Java como padrão para cursos de Ciência da Computação de colocação
antecipada [DEITEL e DEITEL 2003].
Logo, diante desses fatos, a experiência de implementar software em Java se
torna muito importante para usuários e programadores, como forma de inserção no
universo tecnológico.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
42
Capítulo 4 – TBC-AED/WEB, TBC-GRAFOS e TBC-GRAFOS/WEB: Desenvolvimento dos Produt os de Software e seus Reflexos
4.1 Considerações Iniciais
Neste capítulo, são apresentados os produtos de software TBC-AED/WEB,
TBC-GRAFOS e TBC-GRAFOS/WEB. Tais produtos de software são frutos da
pesquisa realizada durante o ano de 2005 na área de Informática na Educação e
desenvolvimento de sistemas em ambiente Java. Na seção 2, é realizada uma breve
análise do desenvolvimento dos produtos de software, considerando obstáculos
enfrentados e vantagens a serem alcançadas. Na seção 3, são apresentadas a estrutura e a
forma de organização dos produtos de software, incluindo recursos utilizados para sua
construção e a forma de estudar algoritmos em estruturas de dados e em grafos pelo
programa. Na seção 4, são descritos os temas abordados pelos programas, apresentando
conceitos e seus modelos de apresentação gráfica. Por fim, são apresentadas as
considerações finais do capítulo.
4.2 Análise metodológica do desenvolvimento
As subseções a seguir apresentam uma breve análise do desenvolvimento dos
produtos de software gerados por esta pesquisa, li stando obstáculos e vantagens visadas.
4.2.1 TBC-AED/WEB
Assimilar o conceito e o desenvolvimento de algoritmos é alvo de muitas
dificuldades enfrentadas pelos alunos de cursos da área de Computação. Alunos que
apresentam deficiências advindas dos ensinos fundamental e médio encontram grandes
dificuldades em aprender conceitos simples de programação de computadores ([ALVES
e COSTA 2004]).
Assim sendo, foi desenvolvido, em 2004, o TBC-AED (Treinamento Baseado
em Computador para Algoritmos e Estruturas de Dados) – ([SANTOS e COSTA
2005a], [SANTOS e COSTA 2005b] e [SANTOS e COSTA 2005c]) –, um produto de
software educacional que vem ao encontro dos objetivos discutidos nos capítulos
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
43
anteriores, buscando corrigir este problema da educação básica (agil idade de
pensamento e raciocínio lógico). Ele procura analisar tópicos básicos de programação,
englobando um conteúdo teórico sintético e direto, acompanhado de processo gráfico
passo-a-passo. Isso facil ita a visualização e o entendimento das informações ora
apresentadas e disponibiliza o tempo que seria gasto em transcrever explicações do
quadro-negro para o caderno para a resolução de exercícios de aplicação e fixação.
Além disso, pode-se alcançar maior interação entre o professor e seus alunos, no sentido
de aumentar o espaço para questionamentos.
Como conseqüência da evolução, intrínseca a qualquer projeto, o TBC-AED foi
disponibil izado via web, através de applets-Java, gerando o TBC-AED/WEB
(Treinamento Baseado em Computador para Algoritmos e Estruturas de Dados via Web)
para que possa ter maior acessibil idade, além de possibilitar a troca de idéias, através da
interatividade com usuários diversos. A idéia de criar o TBC-AED/WEB surgiu para
evitar que o estudante precise fazer o download do TBC-AED para estudar, bastando ter
uma versão do aplicativo apenas em sua estação de trabalho em casa, para trabalhar
offline. Quando estiver em alguma estação conectada à Internet, ele pode executar o
programa diretamente no navegador, desde que esta estação de trabalho tenha a JVM
(Java Virtual Machine) instalada.
Foi observado que o TBC-AED/WEB é um verdadeiro material de coleta de
informações a respeito de programação, algoritmos e estruturas de dados. É um produto
desenvolvido para fins de consumo, gratuito e direcionado aos alunos da área de
Computação e Informática. Além disso, ele visa atender aos alunos que estudam
algoritmos e estruturas de dados básicas, mais especialmente os da disciplina
Algoritmos e Estruturas de Dados II oferecida pelo Departamento de Ciência da
Computação da Universidade Federal de Lavras (DCC/UFLA).
Dentre as vantagens da abordagem construtiva, estão mecanismos para facil itar
o processo de abstração, o fato de a animação refletir a interação com o aprendiz e as
várias facilidades para a detecção visual de erros. Com isso, incentiva-se o processo de
compreensão e autocorreção ([GARCIA, REZENDE e CALHEIROS 1997]). Isso pode
ser facilmente percebido em processos recursivos, os quais são de difícil explicação
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
44
teórica, mas que podem ser vistos facilmente através da animação gráfica disponível em
ambientes que utili zam algum algoritmo desse tipo (como merge sort e quick sort).
Com isso, verifica-se que a organização do TBC-AED/WEB é amplamente
didática e esse fato serve de grande utilidade para o ensino de disciplinas que
apresentam como ementa os tópicos relacionados. Além disso, é uma experiência
desafiadora de graduandos, mestres e doutores tornar o ensino de Computação mais
dinâmico, ao despertar o seu interesse a terem a mesma iniciativa, se possível com igual
dedicação e empenho, para melhorar e aprimorar a formação de recursos humanos para
a tecnologia.
4.2.2 TBC-GRAFOS e TBC-GRAFOS/WEB
Grande parte dos alunos sente dificuldade na implementação dos algoritmos em
grafos, devido à necessidade de um suporte para a implementação, composto por
estruturas de dados e ferramentas de visualização e interação com grafos, e à diferença
de níveis de abstração entre as definições teóricas dos algoritmos e representações
computacionais necessárias para implementá-los ([SOARES et al 2004]).
Com o objetivo de permitir que os alunos sejam capazes de focar o seu estudo e
esforço em compreender o funcionamento de algoritmos clássicos em grafos, que são
largamente estudados em cursos de graduação da área, essa pesquisa propôs o
desenvolvimento de um produto de software educacional para acompanhar esse ensino.
Durante o processo de embasamento teórico-prático, vários exemplos foram
vistos e estudados para que este produto de software educacional pudesse ser elaborado
com cuidado especial, o que, a priori, não despertava qualquer tipo de receio; além
disso, o seu conteúdo era de conhecimento. No entanto, por se tratar de um processo
complexo e inovador e devido às dificuldades de representação gráfica, gerou
dificuldades iniciais expressivas. Estas estavam relacionadas a bibliotecas gráficas da
linguagem de programação Java e tiveram que ser acompanhadas e foram aos poucos
resolvidas. Isso levou a uma aquisição relativamente positiva de novos conhecimentos e
de experiências na resolução de problemas – que são os principais desafios dos
ingressos em cursos superiores na área.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
45
Com a introdução e a sedimentação de informações, o produto de software
educacional começou a ser desenvolvido e passou por várias etapas de melhorias,
aplicadas tanto à forma de apresentação, quanto ao processamento dos algoritmos
propriamente dito.
Dessa forma, surgiu o TBC-GRAFOS (Treinamento Baseado em Computador
para Algoritmos e Teoria dos Grafos) e o TBC-GRAFOS/WEB (Treinamento Baseado
em Computador para Algoritmos e Teoria dos Grafos via Web). O primeiro segue a
mesma linha do TBC-AED ([SANTOS e COSTA 2005a] , [SANTOS e COSTA 2005b]
e [SANTOS e COSTA 2005c]) quanto à organização da tela, além de ser para acesso
off-line, e o segundo é uma adaptação em applets-Java do TBC-GRAFOS, para Internet,
tal como o TBC-AED/WEB para o TBC-AED. Está sendo observado que o TBC-
GRAFOS, mais que uma simples ferramenta, é um verdadeiro material de coleta de
informações a respeito de programação e algoritmos em grafos. Ele representa uma
experiência profissional, uma vez que é um produto software desenvolvido para fins de
consumo que, neste caso, é gratuito e direcionado aos alunos da área de Computação e
Informática. Além disso, ele visa atender aos alunos que estudam algoritmos em grafos,
mais especialmente os da disciplina Técnicas de Programação oferecida pelo
Departamento de Ciência da Computação da Universidade Federal de Lavras
(DCC/UFLA). Isso é importante para tornar maior a interação graduando-computador, o
que propicia estímulos de curiosidade, atenção e eficácia no desenvolvimento de
trabalhos relacionados e do raciocínio lógico.
4.3 Organização e estrutura
As subseções a seguir apresentam a estrutura e a forma de organização dos
produtos de software, incluindo recursos utilizados para sua construção e a forma de
estudar os algoritmos relacionados.
4.3.1 TBC-AED/WEB
Quanto às características relacionadas à funcionalidade e à aparência, o TBC-
AED/WEB não difere do TBC-AED ([SANTOS e COSTA 2005a] , [SANTOS e
COSTA 2005b] e [SANTOS e COSTA 2005c]). Quanto à organização, o TBC-
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
46
AED/WEB está disponível em forma de tópicos, nos sites
www.comp.ufla.br/~rpsantos/ic/2005.html e http://www.dcc.ufla.br/~heitor/Projetos/
TBC_AED_GRAFOS_WEB/TBC_AED_GRAFOS_WEB.html, que direcionam o
usuário ao assunto de seu interesse (Figura 1). Quanto à estrutura, cada tópico foi
elaborado segundo um JApplet3. A Figura 2 mostra uma janela relativa à representação
gráfica do tópico Busca Binária, que apresenta uma breve introdução a respeito do
assunto pesquisado (na parte superior), o algoritmo em Portugol4 (à esquerda), o painel
de animação, onde o algoritmo será executado graficamente (à direita), contendo uma
legenda, e um conjunto de botões (na parte inferior). Exceto este, os demais temas
contém uma janela de mensagem interna (método JOptionPane.showMessageDialog5)
usada para o efeito de passo-a-passo na parte inferior à direita (Figura 3).
Figura 1 – Página principal do TBC-AED/WEB
3 JApplet é uma classe que define os recursos necessários para a criação de um applet simples. A classe JApplet é uma subclasse de Java.swing ([DEITEL e DEITEL 2003]). 4 Por tugol ou pseudocódigo consiste em analisar o enunciado do problema e escrever, por meio de regras predefinidas, os passos a serem seguidos para a resolução do problema ([CAMPOS e ASCENCIO 2003]). 5 O método JOptionPane.showMessageDialog é um método especial da classe JOptionPane do pacote javax.swing. Esse método exibe uma caixa de diálogo para informar o usuário sobre algum evento ([DEITEL e DEITEL 2003]).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
47
Figura 2 – Tela Busca Binária
Figura 3 – Tela Lista Dup lamente Encadeada
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
48
A única tela que se diferencia dos padrões descritos é relativa ao tema Árvore
Binária de Busca que, devido à sua peculiaridade de representação perante aos demais
temas, demandou maior espaço para o processo gráfico (Figura 4). As mudanças
ocorreram no posicionamento interno das informações: o algoritmo em Portugol possui
uma área menor contendo na parte inferior uma janela de mensagem interna, usada para
o efeito de passo-a-passo, e o painel de animação é exibido em uma área maior,
contendo na parte inferior um espaço para a exibição dos elementos quando o usuário
requisitar uma das formas de se imprimir uma árvore binária (pré-ordem, in-ordem ou
pós-ordem) e uma legenda. Enfim, a partir do acesso web, espera-se gerar uma
interatividade maior com outros pesquisadores, difusão da pesquisa, contribuição à
comunidade científica da área e feedback em relação ao trabalho realizado.
Figura 4 – Tela Árvore Binária de Busca
Assim, o TBC-AED/WEB é uma ferramenta valiosa para a formação de alunos,
pois atende a disciplinas que estão no início do curso e que são pré-requisitos
necessários para as disciplinas mais específicas de períodos avançados. Quando feita
uma boa base, o rendimento e o desempenho aumentam, proporcionando melhores
resultados, melhores currículos e melhores profissionais para o mercado.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
49
Uma característica importante do TBC-AED/WEB é ser auto-explicativo,
bastando deslizar com o mouse sobre as partes da tela para ver uma breve mensagem
sobre a região posicionada (Figura 5). Além disso, as janelas nas quais os ambientes
gráficos passo-a-passo são apresentados exibem apenas os botões os quais são de
utilidade para o usuário, dada a parte do processo em que ele se encontra estudando.
Isso deixa o usuário mais à vontade e sem preocupações quanto a quaisquer
peculiaridades, também por se tratar de um produto de software direcionado para alunos
iniciantes aos cursos de Computação.
Figura 5 – Tela Quick Sort
4.3.2 TBC-GRAFOS e TBC-GRAFOS/WEB
Quanto às características relacionadas à funcionalidade e à aparência, o TBC-
GRAFOS e TBC-GRAFOS/WEB não diferem entre si, e são semelhantes ao TBC-
AED e TBC-AED/WEB ([SANTOS e COSTA 2005a] , [SANTOS e COSTA 2005b] e
[SANTOS e COSTA 2005c]), na forma de apresentação (janela do programa) e
funcionalidade (textos introdutórios, algoritmo em Portugol e execução gráfica passo-a-
passo). Quanto à organização do TBC-GRAFOS, este apresenta uma tela principal,
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
50
contendo uma barra de menu separando os temas, que direcionam o usuário para o
assunto de seu interesse (Figura 6). Ao selecionar um desses temas, um submenu é
apresentado, contendo um item explicativo do tema (Figura 7) e outros itens de
representação gráfica do tema. A Figura 8 mostra uma janela relativa à representação
gráfica do tópico Algoritmo de Dijkstra, que apresenta uma breve introdução a
respeito do assunto pesquisado (na parte superior), o algoritmo em Portugol (à
esquerda), o painel de animação, onde o algoritmo será executado graficamente (à
direita), contendo na parte inferior um espaço para a exibição do resultado do algoritmo
(referente ao valor do custo ou ao caminho percorrido ou ainda se o algoritmo funciona
ou não sobre o grafo) e uma legenda, e ainda um conjunto de botões (na parte inferior).
Os tópicos também contêm uma janela de mensagem interna usada para o efeito de
passo-a-passo na parte inferior à direita (Figura 9). Além disso, uma inovação do TBC-
GRAFOS e TBC-GRAFOS/WEB é que o usuário irá desenhar o grafo sobre o qual será
executado o algoritmo, podendo ainda fazer alterações no desenho do grafo, para
melhorar a visualização, antes de iniciar a execução, e também poder reiniciar o
processo sem precisar desenhar o mesmo grafo várias vezes.
Figura 6 – Tela principal do TBC-GRAFOS
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
51
Figura 7 – Janela de mensagem exibida contendo u ma introdução a
respeito do tópico relacionado
Figura 8 – Tela Percurso em Profundidade do TBC-GRAFOS
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
52
Figura 9 – Tela Percurso em Profundidade, com janela de mensagem interna usada para o efeito de passo-a-passo
Figura 10 – O mouse sobre a região de exibição gráfica exibe uma b reve mensagem sobre ela
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
53
Também é importante ressaltar que, assim como no TBC-AED e TBC-
AED/WEB, uma característica importante do TBC-GRAFOS e TBC-GRAFOS/WEB
é ser auto-explicativo. Basta deslizar com o mouse sobre as partes da tela para ver uma
breve mensagem sobre a região posicionada. Além disso, as janelas dos ambientes
gráficos passo-a-passo exibem apenas os botões que têm utili dade para o usuário
(Figura 10).
Quanto à estrutura, o TBC-GRAFOS foi elaborado segundo um JFrame
principal, que se apresentará como a sua tela principal, contendo o nome e o logotipo.
Esta tela contém uma barra de menu, onde estarão os itens de menu e seus sub-itens,
separando os temas, que direcionarão o usuário para o assunto de seu interesse. Os itens
de menu representam os temas lecionados na disciplina (Figura 11) e os seus sub-itens,
um deles como direcionador para uma janela na mensagem explicativa acerca do tema
(Figura 12) e os demais como direcionadores para tópicos de representação gráfica do
tema a ser estudado (Figura 13). Quando o sub-item que direciona para a janela de
mensagem é acionado, uma caixa de diálogo de mensagem é exibida (método
JOptionPane.showMessageDialog), contendo uma introdução a respeito do tópico
relacionado (como mostrado na Figura 9). Quando um sub-item que direciona para uma
tela é acionado, um JInternalFrame6 é exibido (como mostrado na Figura 10).
Figura 11 – Barra de menu do T BC-GRAFOS
Figura 12 – Item explicativo do tema Buscas em Grafos
6 JInternalFrame é uma janela-filha que pode ser alternada com outras de mesmo tipo ou que pode ser fechada, gerenciadas por uma janela-pai e que não alteram-na ([DEITEL e DEITEL 2003]).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
54
Figura 13 – Item de representação gráfica do tóp ico Algoritmo de Kruskal, um dos algoritmos de Árvore Geradora Mínima disponíveis
Quanto à organização,o TBC-GRAFOS/WEB está disponível em forma de
tópicos, nos sites www.comp.ufla.br/~rpsantos/ic/2005.html e
http://www.dcc.ufla.br/~heitor/Projetos/TBC_AED_GRAFOS_WEB/TBC_AED_GRA
FOS_WEB.html, que direcionam o usuário para o assunto de seu interesse (Figura 14).
Quanto à estrutura, cada tópico foi elaborado segundo um JApplet. A Figura 15 mostra
uma janela relativa à representação gráfica do tópico Algoritmo de Bellman-Ford.
Figura 14 - Página principal do TBC-GRAFOS/WEB
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
55
Figura 15 – Tela Algoritmo de Bellman-Ford
4.4 Temas Abordados pelos Produtos de Software: Conceitos e Aplicação
Nesta seção, serão abordados os assuntos que foram o foco das implementações
realizadas pelos produtos de software.
4.4.1 TBC-AED/WEB
O TBC-AED/WEB visa abordar temas envolvidos a um tópico em Ciência da
Computação denominado Tipo Abstrato de Dados, construído a partir dos Tipos de
Dados existentes. Um tipo de dados caracteriza o conjunto de valores a que uma
constante pertence ou que pode ser assumido por uma variável ou expressão, ou que
pode ser gerado por uma função. Por exemplo, variável do tipo Boolean, variável do
tipo inteiro, variável do tipo real. Um tipo abstrato de dados (TAD) pode ser visto como
um modelo matemático acompanhado das operações sobre o modelo. Por exemplo, o
conjunto de inteiros e suas operações (soma, subtração, etc), lista de inteiros e suas
operações (fazer lista vazia, obter o 1º elemento, inserir elemento, remover elemento,
etc).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
56
4.4.1.1 Busca em Vetor
Freqüentemente, o programador trabalhará com grandes quantidades de dados
armazenados em vetores (arrays), análogos em matemática a uma matriz-linha,
definidos cada qual como um novo tipo de dado cujos valores são agregados
homogêneos de um tamanho definido construído sobre um tipo primitivo. Conforme
[DEITEL e DEITEL 2003], pode ser necessário determinar se o array contém um valor
que corresponde a um determinado valor-chave. O processo de localizar o valor de um
elemento particular em um array chama-se pesquisa. Dentre as técnicas de pesquisa,
tem-se a técnica simples da pesquisa linear (busca seqüencial) – que consiste em
percorrer todo o array comparando cada elemento do vetor ao elemento procurado – e a
técnica mais eficiente da pesquisa binária (busca binária).
O algoritmo de pesquisa binária pressupõe que os elementos no array estão
ordenados, por exemplo em ordem crescente, e elimina metade dos elementos no array
que está sendo pesquisado a cada comparação. O algoritmo localiza o elemento do meio
do array e o compara com a chave de pesquisa. Se forem iguais, a chave de pesquisa foi
localizada e a pesquisa binária retorna o valor desse elemento. Caso contrário, a
pesquisa binária reduz o problema, pesquisando metade do array. Se a chave de
pesquisa foi menor que o elemento do meio do array, a primeira metade do array será
pesquisada; caso contrário, a segunda metade do array será pesquisada. Se a chave de
pesquisa não for o elemento do meio do subarray (um pedaço do array original)
especificado, o algoritmo será repetido para um quarto do array original. A pesquisa
continua até que a chave de pesquisa seja igual ao elemento do meio de um subarray ou
até que o subarray consista em apenas um elemento que não é igual à chave de pesquisa
(isto é, a chave de pesquisa não foi localizada). Essa é uma enorme melhora no
desempenho em relação à pesquisa linear que exigia comparação da chave de pesquisa
com todos os elementos existentes em posições subseqüentes, da primeira até a posição
em que se encontra o elemento, ou até a última posição, encontrando-o ou não, no pior
caso ([DEITEL e DEITEL 2003]).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
57
Baseado nestas definições, para agilizar e melhorar a apresentação do tema, o
TBC-AED/WEB apresenta os conceitos e um ambiente gráfico relacionados à busca
em vetor. Analisando o funcionamento do ambiente gráfico:
• ao clicar no item “Busca Binária” (ver site do TBC-AED/WEB na Figura 1), uma
applet é exibido no browser, contendo o ambiente gráfico passo-a-passo, mostrado
na Figura 2. A partir de então, o usuário pode começar a estudar e entender esse
algoritmo;
• ao clicar no botão “Conceitos” , localizado na parte inferior do ambiente gráfico,
uma janela de mensagem é exibida, apresentando os conceitos relacionados ao tema
“Busca em Vetor” e o algoritmo em Portugol do método de busca seqüencial,
conforme Figura 16;
Figura 16 – Janela de mensagem exibida contendo uma introdução a respeito do tópico relacionado
• devido a apenas os botões necessários em dado instante estarem habilitados, ao
iniciar, o usuário deve clicar no botão Informações para que uma janela de
mensagem seja exibida, contendo algumas considerações sobre o funcionamento do
programa (Figura 17);
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
58
Figura 17 – Janela de mensagem exibida ao clicar no bo tão Informações
• ao clicar em OK, o botão Introdução estará livre para que o usuário possa prosseguir
com seus estudos. Ao clicar nele, uma breve introdução é exibida na área superior
do ambiente gráfico, além de uma janela de mensagem direcionando o usuário em
sua forma de prosseguir no programa (Figura 18);
• feito isso, o botão Iniciar estará disponível para que o usuário possa clicar nele para
exibir o algoritmo de busca binária e uma janela de diálogo a fim de que o usuário
entre com o número de elementos do vetor a ser gerado sobre o qual deseja que a
operação seja realizada (Figura 19);
• ao fornecer o tamanho do vetor, o painel superior à direita exibe a estrutura com no
máximo 12 números de dois algarismos gerados aleatoriamente. Uma nova janela de
mensagem é exibida para que o usuário possa fornecer com o valor a ser procurado
na estrutura, usando o processo de busca binária (Figura 20);
• a partir desse momento, uma janela de diálogo contendo uma dica de como
prosseguir durante o processo gráfico é exibida (Figura 21) e o botão Passos do
Processo é habilitado para que o usuário possa acompanhar o processo passo-a-
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
59
passo. Além disso, uma legenda é exibida na parte inferior à direita (Figura 22). Ao
ir pressionando o botão mencionado, alguns sub-vetores são exibidos, mostrando as
partes do vetor original sobre as quais está sendo processada a busca binária e o
elemento mediano de cada parte (Figura 23);
Figura 18 – Ao clicar no bo tão Introdução, a área superior é p reenchida com uma breve introdução e uma janela de mensagem é exibida
Figura 19 – Uma janela de mensagem é exibida para que o u suário entre com o número de elementos
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
60
Figura 20 – Uma janela de mensagem é exibida para que o u suário po ssa entrar com o elemento a ser procurado
Figura 21 – Janela de mensagem exibida quando do advento do processo gráfico
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
61
Figura 22 – O botão Passos do Processo é habilitado p ara iniciar o processo gráfico
Figura 23 – Cada um dos su b -vetores é exibido a c ada clique sobre o bo tão Passos do Processo
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
62
• ao fim da busca, uma janela de mensagem é exibida informando se o elemento foi
ou não encontrado (Figura 24).
Figura 24 – Janela de mensagem contendo o resultado da pesquisa
Analisando o decorrer deste tema do TBC-AED/WEB, percebe-se que há uma
facil idade maior em apresentar o conteúdo e considerações acerca do problema a ser
discutido. Sugere-se como trabalho aos discentes implementar outros tipos de pesquisa
em vetor, por exemplo a busca ternária, para que o aluno possa assimilar o conteúdo e
consolidar seu conhecimento sobre o assunto.
4.4.1.2 Métodos de Ordenação
Os algoritmos de ordenação constituem bons exemplos de como resolver
problemas utili zando computadores. As técnicas de ordenação permitem apresentar um
conjunto amplo de algoritmos distintos para resolver uma mesma tarefa. Dependendo da
aplicação, cada algoritmo considerado possui uma vantagem particular sobre os outros.
Além disso, os algoritmos ilustram muitas regras básicas para a manipulação de
estruturas de dados ([ZIVIANI 1992]).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
63
Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma
ordem ascendente ou descendente. O objetivo principal da ordenação é facil itar a
recuperação posterior de itens do conjunto ordenado. Imagine como seria dif ícil util izar
um catálogo telefônico se os nomes das pessoas não estivessem listados em ordem
alfabética. A atividade de colocar as coisas em ordem está presente na maioria das
aplicações onde os objetos armazenados têm que ser pesquisados e recuperados, tais
como dicionários, índices de livros, tabelas e arquivos ([ZIVIANI 1992]).
No TBC-AED/WEB, foram implementados os seguintes métodos de ordenação:
Select Sort, Insert Sort, Boubble Sort, Merge Sort e Quick Sort. Seus conceitos são
apresentados nas seções subseqüentes.
4.4.1.2.1 Select Sort
Segundo [ZIVIANI 1992], um dos algoritmos mais simples de ordenação é o
método Select Sort, cujo princípio de funcionamento é : selecione o menor item do vetor
e troque-o com o item que está na primeira posição do vetor. Repita estas duas
operações com os n – 1 itens restantes, depois com os n – 2 itens, até que reste apenas
um elemento.
Apesar de ser um método de fácil entendimento, sua apresentação através de um
ambiente gráfico como o TBC-AED/WEB é de grande utilidade, pois permite ao
usuário verificar seus conhecimentos através da movimentação de elementos com cores
diferentes, o que realça os passos do algoritmo. Analogamente, o tópico Select Sort
possui os mesmos procedimentos iniciais do tema Busca Binária, exceto a partir do
funcionamento do processo gráfico. Agora, o usuário terá que clicar em OK dentro de
uma janela de mensagem exibida na parte inferior da área de processo gráfico. Isso pode
ser verificado na Figura 25.
4.4.1.2.2 Insert Sort
Este é o método preferido dos jogadores de cartas, conforme [ZIVIANI 1992].
Em cada passo, a partir de i = 2 (onde i é a posição correspondente a um elemento no
vetor a ser ordenado), o i-ésimo item da seqüência fonte é pego e transferido para a
seqüência destino, sendo inserido no lugar apropriado. Como mostrado na Figura 26,
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
64
este tópico em nada difere do descrito anteriormente no que se refere ao funcionamento
e organização, apesar de ainda ser um dos métodos de ordenação mais simples.
Figura 25 – Tópico Select Sort do tema Métodos de Ordenação
Figura 26 – Tópico Insert Sort do tema Métodos de Ordenação
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
65
4.4.1.2.3 Boubb le Sort
No Boubble Sort, compara-se o último elemento com o penúltimo e troca-se a
posição dos dois, se eles estiverem fora de ordem. Procede-se da mesma maneira com
os outros números até o início da lista, isto é, compara-se o penúltimo com o
antepenúltimo e assim sucessivamente. Se os elementos forem testados desde o último
até o primeiro, sem ser feita nenhuma troca é porque já estão ordenados. Caso contrário,
isto é, toda vez que houver pelo menos uma troca, volta-se ao fim do vetor e repete-se o
mesmo procedimento. Deve-se, no entanto, considerar que no primeiro retorno é
suficiente fazer as comparações, desde o último elemento até o segundo, pois, neste
caso, o menor de todos já borbulhou (método da bolha), isto é, o menor elemento ficou
arrumado na primeira posição do vetor (Figura 27).
Figura 27 – Tópico Boubb le Sort do tema Métodos de Ordenação
4.4.1.2.4 Merge Sort
Foi um dos primeiros algoritmos usados em computadores. O processo chave é
fundir metades ordenadas em um vetor ordenado. No entanto, estas metades precisam
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
66
estar ordenadas primeiro, o que é realizado fundindo as suas metades ordenadas. Isso
pode ser feito de forma recursiva, o que torna mais complexo o entendimento deste
algoritmo. Devido a esse fato, sua implementação demandou um certo tempo. No
entanto, isso foi superado e a tela Merge Sort foi elaborada e apresentada da mesma
forma que os demais métodos de ordenação (Figura 28).
Figura 28 – Tópico Merge Sort do tema Métodos de Ordenação
4.4.1.2.5 Quick Sort
Quick Sort é o algoritmo de ordenação mais rápido que se conhece para uma
ampla variedade de situações, sendo provavelmente mais utilizado do que qualquer
outro algoritmo. Segundo [ZIVIANI 1992], a idéia básica é partir do problema de
ordenar um conjunto com n itens em dois problemas menores. A seguir, os problemas
menores são ordenados independentemente e depois os resultados são combinados para
produzir a solução do problema maior. A parte mais delicada deste método é relativa ao
procedimento partição, o qual tem que rearranjar o vetor A[1..n] através da escolha
arbitrária de um item do vetor chamado pivô, de tal forma que as três condições abaixo
sejam simultaneamente satisfeitas:
• o pivô x é colocado no seu lugar definitivo A[k], para algum índice k do vetor;
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
67
• todos os itens em A[1], A[2], ..., A[k - 1] são menores ou iguais a A[k];
• todos os itens em A[k + 1], A[k + 2], ..., A[n] são maiores ou iguais a A[k].
Este comportamento pode ser descrito pelo seguinte algoritmo: primeiro, escolha
arbitrariamente um item do vetor e coloque-o em um variável x (no TBC-AED, foi
escolhido o primeiro elemento do vetor). A seguir, percorra o vetor a partir da esquerda
até que um item A[ i] �������������� �������������������������������������������� �����"!�# ����$������% �&'�(���
direita até que um item A[ j] ) ���$��������� ���������*+����������,����&%� itens A[ i] e A[ j] estão fora
de lugar no vetor final então troque-os de lugar. Continue este processo até que os
apontadores i e j se cruzem em algum ponto do vetor. Ao final o vetor A está
particionado em uma parte esquerda com chaves menores ou iguais a x e uma parte
direita com chaves maiores ou iguais a x.
Este algoritmo também demandou certo trabalho, pois se trata de outro método
de ordenação que utiliza a recursão como meio facilitador de ser executado. Além disso,
o TBC-AED/WEB trata esse tópico, do ponto da apresentação, como os demais, o que
torna mais fácil sua apresentação gráfica, dada a complexidade de visualização de
algoritmos recursivos (Figura 29).
Figura 29 – Tópico Quick Sort do tema Métodos de Ordenação
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
68
4.4.1.3 Estruturas de Dados de Alocação Estática e Dinâmica de Memória
Tipos abstratos de dados que utilizam alocação estática de memória são aqueles
nos quais o comprimento é definido a priori, através do uso de um vetor. Isso representa
uma limitação em tais tipos. No entanto, a contigüidade de elementos pode representar
uma vantagem, que torna o acesso aos dados mais fácil e rápido. Os tipos abstratos de
dados apresentados neste trabalho e que podem utilizar alocação estática de memória
são: i) lista linear; ii) fila; e iii) pilha.
Os mesmos tipos abstratos de dados podem utilizar alocação dinâmica de
memória, que consiste em alocar espaço em memória à medida que for precisando. Isso
representa uma vantagem em tais tipos. No entanto, não há a contigüidade de elementos
em memória, o que pode representar uma desvantagem, devido a riscos advindos de má
implementação (acesso e operações sobre posições errôneas de memória).
4.4.1.3.1 Listas
Conforme [ZIVIANI 1992], uma das formas mais simples de interligar os
elementos de um conjunto é através de uma lista. Lista é uma estrutura onde as
operações inserir, retirar e localizar são definidas. Uma lista linear é uma seqüência de
um ou mais x1, x2, ..., xn, onde xi é de um determinado tipo e n representa o tamanho da
lista linear. Sua principal propriedade estrutural envolve as posições relativas dos itens
em uma dimensão.
Para criar um tipo abstrato de dados lista, é necessário definir um conjunto de
operações sobre os objetos do tipo lista. O conjunto de operações a ser definido depende
de cada aplicação, não existindo um conjunto de operações que seja adequado a todas as
aplicações.
Quanto à implementação feita deste tópico para o TBC-AED/WEB, uma
diferença relativa é notada. O usuário terá a oportunidade de interagir mais com o
produto de software, uma vez que executará as operações sobre o TAD lista e observará
suas ocorrências passo-a-passo. A escolha da tarefa a ser executada é feita através de
uma janela de diálogo exibida quando o usuário clicar no botão Passos do Processo
(Figura 30).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
69
Figura 30 – Tópico L ista Linear do tema Estruturas Estáticas
No entanto, segundo [ZIVIANI 1992], em uma implementação de listas através
de apontadores, cada item da lista é encadeado com o seguinte através de uma variável
do tipo apontador. Este tipo de implementação permite utilizar posições não contíguas
de memória, sendo possível inserir e retirar elementos sem haver necessidade de
deslocar os itens seguintes da lista. A lista possui um apontador indicando o início da
lista.
A lista é constituída de nós, onde cada nó contém um item da lista (informação)
e um apontador para o nó seguinte. A implementação através de apontadores permite
inserir ou retirar itens do meio da lista a um custo constante, aspecto importante quando
a lista tem que ser mantida em ordem. Em aplicações em que não existe previsão sobre
o crescimento da lista, é conveniente usar listas encadeadas por apontadores, porque,
neste caso, o tamanho máximo da lista não precisa ser definido a priori. A maior
desvantagem deste tipo de implementação é a utili zação de memória extra para
armazenar os apontadores.
No TBC-AED/WEB, foram feitas duas implementações de listas com alocação
de memória dinâmica: lista simplesmente encadeada e lista duplamente encadeada. A
diferença entre elas é que na primeira existe apenas um ponteiro, que indica qual o
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
70
próximo elemento da lista, e na segunda, existe a possibilidade de “caminhar” na lista
em direção aos elementos anteriores e posteriores. Quanto à forma de apresentação da
tela, não há eventuais detalhes em relação às estruturas de dados de alocação estática,
salvo os ponteiros existentes e um ponteiro, que aponta para o primeiro elemento
(Figura 31 e Figura 32).
O tópico lista circular não foi implementado. Segundo [SZWARCFITER e
MARKENZON 1994], uma pequena modificação na estrutura física da lista pode ser de
grande auxílio: obrigar o último nó da lista a apontar para o nó-cabeça, criando assim
uma lista circular encadeada. Com isso, tem-se mais dois tipos derivados de listas: lista
circular simplesmente encadeada e lista circular duplamente encadeada, que seguem a
definição mencionada, somada à forma circular da estrutura de dados. Como trabalho,
sugere-se que o docente solicite aos alunos que implementem esta estrutura de dados,
para fixarem os conceitos adquiridos nas aulas.
Figura 31 – Tópico L ista Simplesmente Encadeada do tema Estruturas Dinâmicas
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
71
Figura 32 – Tópico L ista Duplamente Encadeada do tema Estruturas Dinâmicas
4.4.1.3.2 Filas
Uma fila é uma lista linear em que todas as inserções são realizadas em um
extremo da lista e todas as retiradas e os acessos são realizados no outro extremo da
lista. O modelo intuitivo de uma fila é o de uma fila de espera em que as pessoas no
início da fila são servidas primeiro e as pessoas que chegam, entram no fim da fila. Por
esta razão, as filas são chamadas de listas fifo, termo formado a partir de first-in, first-
out. Existe uma ordem linear para filas que é a “ordem de chegada”. Filas são utilizadas
quando se deseja processar itens de acordo com a ordem “primeiro que chega, primeiro
atendido” . Sistemas operacionais utili zam filas para regular a ordem na qual tarefas
devem receber processamento e recursos devem ser alocados a processos ([ZIVIANI
1992]).
A sua implementação pelo TBC-AED/WEB segue os mesmos passos da tópico
li sta linear, descrito anteriormente, com a participação ativa do usuário durante as
operações realizadas sobre o tipo abstrato de dados (Figura 33).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
72
Figura 33 – Tópico Fila do tema Estruturas Estáticas
A fila, implementada com uso de alocação dinâmica de memória, possui dois
apontadores indicando o início e o final da fila. Quando a fila está vazia, os apontadores
“ frente” e “ trás” são “aterrados” . Para enfileirar um novo item, basta criar um nó, ligá-lo
após o último nó na fila, colocar nele o novo item e fazer o apontador “trás” apontar
para ele. Para desenfileirar um item, basta fazer o apontador “ frente” apontar para o
segundo nó e desligar o nó a ser retirado do segundo nó. A fila é implementada através
de nós, onde cada nó contém uma(informação) da fila e um apontador para outro nó.
No TBC-AED/WEB, a implementação deste tópico não difere da estrutura fila
de alocação estática de memória, quanto à funcionalidade, mas apresenta ponteiros que
a classificam como estruturas de alocação dinâmica de memória (Figura 34).
4.4.1.3.3 Pilhas
Uma pilha é uma lista linear em que todas as inserções, retiradas e, geralmente,
todos os acessos são feitos em apenas um extremo da lista.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
73
Figura 34 – Tópico Fila do tema Estruturas Dinâmicas
Os itens em uma pilha estão colocados um sobre o outro, com o item inserido
mais recentemente no topo e o item inserido menos recentemente no fundo. O modelo
intuitivo de uma pilha é o de um monte de pratos em uma prateleira, sendo conveniente
retirar pratos ou adicionar novos pratos na parte superior. Esta imagem está
freqüentemente associada com a teoria de autômatos, onde o topo de uma pilha é
considerado como o receptáculo de uma cabeça de leitura/gravação que pode empilhar e
desempilhar itens da pilha ([HOPCROFT e ULLMAN 1969 apud ZIVIANI 1992]).
As pilhas possuem a seguinte propriedade: o último item inserido é o primeiro
item que pode ser retirado da lista. Por esta razão as pilhas são chamadas de listas li fo,
termo formado a partir de last-in, first-out. Existe uma ordem linear para pilhas, que é a
ordem do “mais recente para o menos recente”. Esta propriedade torna a pilha uma
ferramenta ideal para processamento de estruturas aninhadas de profundidade
imprevisível. A qualquer instante uma pilha contém uma seqüência de obrigações
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
74
adiadas, cuja ordem de remoção da pilha garante as estruturas mais internas serão
processadas antes das estruturas mais externas. As pilhas ocorrem também em conexão
com algoritmos recursivos e estruturas de natureza recursiva, tais como as árvores.
No caso do tópico implementado pelo TBC-AED/WEB, a metodologia de
apresentação é a mesma das demais estruturas de alocação estática de memória,
conforme apresentado na Figura 35.
Figura 35 – Tópico Pilha do tema Estruturas Estáticas
A pilha, implementada com uso de alocação dinâmica de memória, possui um
apontador indicando o topo da pilha. Para desempilhar o item xn, basta o apontador do
topo da pilha apontar para o nó seguinte. Para empilhar um novo item, basta fazer a
operação contrária, criando um novo nó, colocando o novo item no novo nó e fazendo-o
como o primeiro nó da pilha (o apontador do topo da pilha aponta para o novo nó). Cada
nó de uma pilha contém um item (informação) da pilha e um apontador para outro nó.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
75
Dessa forma, a implementação deste tópico também segue o padrão das
estruturas de alocação estática de memória (Figura 36).
Figura 36 – Tópico Pilha do tema Estruturas Dinâmicas
4.4.1.4 Árvores
As listas ligadas geralmente fornecem maior flexibil idade que as matrizes, mas
são estruturas lineares e é difícil usá-las para organizar uma representação hierárquica.
Embora as pilhas e as filas possuam alguma hierarquia, são limitadas a uma dimensão.
Para superar essa limitação, criou-se um novo tipo abstrato de dados chamado árvore. A
definição de uma árvore não impõe qualquer condição sobre o número de filhos de um
nó. Esse número pode variar de zero a qualquer inteiro.
Segundo [SZWARCFITER e MARKENZON 1994], em diversas aplicações,
necessita-se de estruturas mais complexas do que puramente seqüenciais, as quais foram
examinadas. Entre essas, destacam-se as árvores, por existirem inúmeros problemas
práticos que podem ser modelados através delas. Além disso, as árvores, em geral,
admitem um tratamento computacional simples e eficiente.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
76
Da mesma forma que as listas lineares, árvores são estruturas de dados que
caracterizam uma relação entre os dados que a compõem. Neste caso, a relação
existente entre os dados (denominados nós) é uma relação de hierarquia ou de
composição, onde um conjunto de dados é hierarquicamente subordinado a outro
([VELOSO et al 1986]).
Segundo [VELOSO et al 1986], árvores binárias são estruturas do tipo árvore,
onde o grau (quantidade de filhos) de cada nó é menor ou igual a dois. No caso de
árvores binárias, distinguem-se as subárvores de um nó entre subárvore da esquerda e
subárvore da direita. Assim, se o grau de um nó for igual a 1, deve ser especificado se a
sua subárvore é a da esquerda ou a da direita. Uma árvore binária também pode ser
vazia, isto é, não possuir nenhum nó. Entretanto, deve ser considerado que uma árvore
binária não é um caso especial de árvore ([SZWARCFITER e MARKENZON 1994]).
A estrutura de árvore é utilizada em casos onde os dados ou objetos a serem
representados possuem relações hierárquicas entre si. Considere, por exemplo, a
estrutura de uma universidade, composta de centros. Cada centro composto por um
certo número de departamentos. Cada departamento oferece um conjunto de
disciplinas nas quais são matriculados os alunos. Outra aplicação é a representação de
expressões aritméticas, que podem ser representadas sob a forma de árvores binárias, de
tal forma que a hierarquia (prioridade) dos operadores fique clara (bem definida). Pode-
se ainda utilizar árvores binárias para armazenar dados de maneira tal que, ao final da
operação de armazenamento, os dados estejam ordenados, segundo um dado critério,
independente da ordem de armazenamento ([VELOSO et al 1986]).
A estrutura do tópico árvore binária implementada pelo TBC-AED/WEB não
segue a risca o padrão dos demais tópicos abordados. Como já foi mencionado na seção
4.3.1, ocorrem algumas mudanças na apresentação, além das estratégias utilizadas para
a exibição de deste tipo abstrato de dados, as quais demandaram cálculos matemáticos
envolvidos com a representação geométrica. Entretanto, com relação à funcionalidade,
nada de especial está agregado ao tópico (Figura 37).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
77
Figura 37 – Tópico Árvore Binária de Busca do tema Árvores
4.4.2 TBC-GRAFOS e TBC-GRAFOS/WEB
Os grafos são estruturas de dado sempre presentes em Ciência da Computação, e
os algoritmos para trabalhar com eles são fundamentais na área. Existem centenas de
problemas computacionais interessantes definidos em termos de grafos. Nesse sentido, o
TBC-GRAFOS e sua evolução, o TBC-GRAFOS/WEB, visam abordar alguns dos
mais significativos algoritmos em grafos, relacionados a buscas em grafos
(profundidade e largura), cálculo de árvore geradora mínima (Kruskal e Prim) e
caminho mínimo entre vértices (Dijkstra e Bellman-Ford).
4.4.2.1 Buscas e m Grafos
O percurso visa resolver um problema básico: explorar um grafo. Ou seja, dado
um grafo, deseja-se obter um processo sistemático de como caminhar pelos seus
vértices e suas arestas.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
78
Embora existam diversas maneiras de realizar o percurso sistematicamente,
alguns processos ou algoritmos de percurso ocorrem com bastante freqüência, e são: i)
percurso em largura; e ii ) percurso em profundidade. Segundo [CORMEN et al 2002],
tais algoritmos demandam métodos para representar um grafo e para pesquisar um
grafo. Um algoritmo de pesquisa de grafo pode descobrir muito sobre a estrutura de um
grafo. Muitos algoritmos começam pesquisando seu grafo de entrada para obter
informações estruturais. Outros algoritmos de grafos são organizados como elaborações
simples de algoritmos básicos de pesquisa de grafos. As técnicas para pesquisar um
grafo estão no núcleo do campo de algoritmos de grafos.
O TBC-GRAFOS apresenta os conceitos e dois ambientes gráficos relacionados
às buscas em grafos. Dentro do menu “Buscas em Grafos” , o submenu “Buscas”
apresenta conceitos teóricos sobre buscas em grafos (conforme mostrado na Figura 7), e
os outros dois apresentam os ambientes gráficos para os algoritmos de percurso em
profundidade e percurso em largura. O TBC-GRAFOS/WEB apresenta os mesmos
tópicos de buscas em grafos tratados no TBC-GRAFOS (percurso em profundidade e
percurso em largura), com o único diferencial de ser via web.
4.4.2.1.1 Percurso em Profundidade
A estratégia seguida pela pesquisa em profundidade é, como seu nome implica,
procurar “mais fundo” no grafo sempre que possível. Conforme [CORMEN et al 2002],
na pesquisa primeiro na profundidade, as arestas são exploradas a partir do vértice v
mais recentemente descoberto que ainda tem arestas inexploradas saindo dele. Quando
todas as arestas de v são exploradas, a pesquisa “regressa” para explorar as arestas que
deixam o vértice a partir do qual v foi descoberto. Esse processo continua até se
descobrir todos os vértices acessíveis a partir do vértice de origem inicial. Se restarem
quaisquer vértices não descobertos, então um deles será selecionado como uma nova
origem, e a pesquisa se repetirá a partir daquela origem. Esse processo inteiro será
repetido até que todos os vértices sejam descobertos. Neste caso, deve-se escolher um
vértice inicial e o percurso é feito em grafos não direcionados.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
79
Baseado nestas definições, para agilizar e melhorar a apresentação do tema, o
TBC-GRAFOS e TBC-GRAFOS/WEB apresentam um ambiente gráfico relacionado ao
percurso em profundidade. Analisando o funcionamento do ambiente gráfico:
• ao clicar no item de menu “Buscas em Grafos” , sub-item “Percurso em
Profundidade”, uma janela interna é exibida, contendo o ambiente gráfico passo-a-
passo, mostrado na Figura 8. A partir de então, o usuário pode começar a estudar e
entender esse algoritmo;
• devido a apenas os botões necessários em dado instante estarem habilitados, ao
iniciar, o usuário deve clicar no botão Informações para que uma janela de
mensagem seja exibida, contendo algumas considerações sobre o funcionamento do
programa (Figura 38);
Figura 38 – Janela de mensagem exibida ao clicar no bo tão Informações
• ao clicar em OK, o botão Introdução estará livre para que o usuário possa prosseguir
com seus estudos. Ao clicar nele, uma breve introdução é exibida na área superior
do ambiente gráfico, além de uma janela de mensagem direcionando o usuário em
sua forma de prosseguir no programa (Figura 39);
• feito isso, o botão Iniciar estará disponível para que o usuário possa clicar nele para
exibir o algoritmo de percurso em profundidade e uma janela de diálogo a fim de
que o usuário entenda o que deve fazer para prosseguir no ambiente. Neste caso, ele
terá que desenhar o grafo desejado no painel cinza à direita e clicar no botão Opções
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
80
para entender como fazê-lo. Nesse momento, uma legenda aparecerá na parte
inferior do painel de desenho de grafos para indicar as cores que os nós do grafo
desenhado poderão assumir quando da execução do algoritmo (Figura 40 e Figura
41);
Figura 39 – Ao clicar no bo tão Introdução, a área superior é p reenchida com uma breve introdução e uma janela de mensagem é exibida
Figura 40 – Uma janela de mensagem é exibida para que o u suário entenda o que deve fazer para prossegu ir no ambiente
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
81
Figura 41 – Ao clicar no bo tão Opções, o usuário visualiza quais ações deve fazer para montar seu grafo
• a partir disso, o usuário deverá desenhar seu grafo, inserindo e/ou removendo nós e
arestas, configurando os pesos destas quando o algoritmo assim o permitir (não é o
caso deste algoritmo de percurso em profundidade), reposicionando nós para
melhorar visualização e ainda alterar o nó inicial, também quando o algoritmo assim
o permitir. O botão Passos do Processo é habilitado para que o usuário possa iniciar
o processo passo-a-passo (Figura 42);
• ao clicar no botão Passos do Processo, uma janela de mensagem interna é exibida no
canto inferior esquerdo do ambiente, para que, a cada clique em OK, o usuário
prossiga nos passos do algoritmo executado sobre o grafo desenhado (Figura 43).
Nesse processo, o painel de desenho estará travado para qualquer alteração do grafo,
devendo-se terminar a execução do algoritmo;
• após o término da execução do algoritmo, o usuário poderá cli car no botão Reiniciar
para que possa exibir o grafo originalmente desenhado, antes do processo gráfico.
Nesse caso, ele poderá fazer alterações sobre o grafo e/ou iniciar o algoritmo sobre
ele novamente (Figura 44). Ao invés disso, o usuário ainda poderá continuar no
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
82
ambiente e clicar no botão Novo Grafo para limpar o painel de desenho de grafos e
montar uma nova estrutura para a execução do algoritmo (Figura 45).
Figura 42 – Montagem do g rafo no p ainel cinza à direita
Figura 43 – Ao clicar no bo tão Passos do Process o, uma janela de mensagem interna é exibida na parte inferior à esquerda, para efeito de
passo-a-passo
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
83
Figura 44 – Ao clicar no bo tão Reiniciar, o usuário terá o mesmo grafo que desenhou antes de iniciar o algoritmo, podendo fazer alterações
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
84
Figura 45 – Ao clicar no bo tão Novo Grafo, o usuário continuará no ambiente, mas terá que desenhar um novo grafo para iniciar o algoritmo
O TBC-GRAFOS/WEB funciona de forma análoga ao TBC-GRAFOS. As
diferenças são as seguintes:
• ao clicar no item “Percurso em Profundidade” (ver site do TBC-GRAFOS/WEB na
Figura 14), uma applet é exibido no brownser, contendo o ambiente gráfico passo-a-
passo, mostrado na Figura 15. A partir de então, o usuário pode começar a estudar e
entender esse algoritmo;
• ao clicar no botão “Conceitos” , localizado na parte inferior do ambiente gráfico,
uma janela de mensagem é exibida, apresentando os conceitos relacionados ao tema
“Buscas em Grafos” (Figura 46).
Figura 46 - Janela de mensagem exibida contendo uma introdução a respeito do tópico relacionado
4.4.2.1.2 Percurso em Largura
De acordo com [CORMEN et al 2002], a pesquisa primeiro na extensão, ou
percurso em largura, é um dos algoritmos mais simples para se pesquisar um grafo e é o
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
85
arquétipo de muitos algoritmos de grafos importantes. O algoritmo de caminhos mais
curtos de origem única de Dijkstra e o algoritmo de árvore de amplitude mínima de
Prim utilizam idéias semelhantes às que aparecem na pesquisa primeiro em extensão.
Dado um grafo G = (V,E) e um vértice de origem distinta s, o percurso em
largura explora sistematicamente as arestas de G até “descobrir” cada vértice acessível a
partir de s. O algoritmo calcula a distância (menor número de arestas) desde s até todos
os vértices acessíveis desse tipo. Ele também produz uma “árvore primeiro na extensão”
com raiz s que contém todos os vértices acessíveis. Para qualquer vértice v acessível a
partir de s, o caminho na árvore primeiro na extensão de s até v corresponde a um
caminho mais curto de s até v em G, ou seja, um caminho que contém o número mínimo
de arestas. O algoritmo funciona sobre grafos direcionados e também não direcionados.
No TBC-GRAFOS e TBC-GRAFOS/WEB, o percurso em largura é feito em grafos não
direcionados.
O percurso em largura recebe esse nome porque expande a fronteira entre
vértices descobertos e não descobertos uniformemente ao longo da extensão da
fronteira. Isto é, o algoritmo descobre todos os vértices à distância k a partir de s, antes
de descobrir quaisquer vértices à distância k + 1. Neste caso, dentre todos os vértices a
partir do qual será realizada a próxima exploração de aresta e incidente a alguma aresta
ainda não explorada, deve-se escolher aquele menos recentemente alcançado no
percurso.
O TBC-GRAFOS e TBC-GRAFOS/WEB tratam o percurso em largura de
forma análoga ao percurso em profundidade, com alterações apenas no algoritmo em si
(Figura 47 e Figura 48).
4.4.2.2 Árvore Geradora Mínima
No projeto de circuitos eletrônicos, freqüentemente é necessário tornar os pinos
de vários componentes eletricamente equivalentes, juntando a fiação de todos eles. Para
interconectar um conjunto de n pinos, podemos usar um arranjo de n – 1 fios, cada qual
conectando dois pinos. De todos os arranjos possíveis, aquele que utiliza a quantidade
mínima de fio é normalmente o mais desejável.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
86
Figura 47 – Tela Percurso em Largura do TBC-GRAFOS
Figura 48 – Tela Percurso em Largura do TBC-GRAFOS/WEB
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
87
Podemos modelar esse problema de fiação com um grafo conectado não
orientado G = (V,E), onde V é o conjunto de pinos, E é o conjunto de interconexões
possíveis entre pares de pinos e, para cada aresta (u,v) � E, temos um peso w(u,v)
especificando o custo (a quantidade de fio necessária) para conectar u e v. Então,
desejamos encontrar um subconjunto acíclico T está contido ou igual a E que conecte
todos os vértices e cujo peso total w(T) – somatório dos pesos w(u,v) de todas as arestas
pertencentes a T – seja minimizado. Tendo em vista que T é acíclico e conecta todos os
vértices, ele deve formar uma árvore, que é chamada árvore de amplitude (árvore
geradora), pois “se estende” pela amplitude do grafo G. Chama-se ao problema de se
determinar a árvore T de problema da árvore de amplitude mínima – árvore geradora
mínima ([CORMEN et al 2002]).
Seja um grafo não-direcionado conexo G = (V,E). Um subgrafo de G é um grafo
G’ = (V’ ,E’) onde V’ está contido ou é igual a V e E’ está contido ou é igual a E. Um
subgrafo minimal de G é chamado árvore geradora. Uma árvore geradora tem as
seguintes propriedades: i) V’ = V; ii) não tem ciclo; e iii) é conexo.
Ao percorrer um grafo não direcionado e conexo, todos os vértices são visitados,
independente de onde se inicia o percurso. Neste processo, algumas arestas são
percorridas, outras não. O conjunto de arestas percorridas constitui uma árvore
geradora. O custo total de um grafo não direcionado com arestas ponderadas (com peso)
é o somatório dos pesos. Uma árvore geradora de custo mínimo (AGM) de um grafo é
uma árvore geradora desse grafo que possui o menor custo total.
O TBC-GRAFOS apresenta os conceitos e dois ambientes gráficos relacionados
a árvore geradora mínima em grafos. Dentro do menu “Árvore Geradora Mínima”, o
submenu “Árvore Geradora Mínima” apresenta conceitos teóricos sobre o tema, e os
outros dois apresentam os ambientes gráficos para os algoritmos de Kruskal e de Prim.
O TBC-GRAFOS/WEB apresenta os mesmos tópicos de árvore geradora mínima em
grafos tratados no TBC-GRAFOS (algoritmos de Kruskal e de Prim). Os dois ambientes
que relacionam estes algoritmos têm as suas formas de apresentação e funcionamento
semelhantes aos ambientes de buscas em grafos, com algumas adaptações referentes à
execução dos algoritmos.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
88
4.4.2.2.1 Algoritmo de Kruska l
É um algoritmo utilizado para se encontrar a árvore geradora mínima de um
grafo não direcionado e conexo. Seu princípio de funcionamento é o seguinte:
inicialmente, cada vértice do grafo é uma subárvore. Se duas subárvores analisadas não
estão conectadas entre si, elas são fundidas. O algoritmo prossegue até que todos os
vértices estejam pertencentes à mesma subárvore, que é a AGM.
No TBC-GRAFOS e TBC-GRAFOS/WEB, o usuário deverá ponderar as arestas
no ambiente gráfico Algoritmo de Kruskal, em uma escala de 0 a 100 (ao clicar no
botão Opções, na parte inferior da tela do ambiente, uma lista de instruções explica
como fazer a mudança de peso em uma aresta). Além disso, neste algoritmo, não é
necessário informar um nó inicial – ou nó de origem (Figura 49). Nesse algoritmo, é
informado, em um pequeno painel acima da legenda, o resultado do algoritmo, que é o
custo da árvore geradora mínima. Isso pode ser visto na Figura 50.
Figura 49 – Tela Algoritmo de Kruskal do TBC-GRAFOS
4.4.2.2.2 Algoritmo de Prim
É um algoritmo utilizado para se encontrar a árvore geradora mínima de um
grafo não direcionado e conexo. Seu princípio de funcionamento é o seguinte:
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
89
inicialmente, cada vértice do grafo tem uma chave (custo) infinito e são colocados em
uma fila de prioridade, onde o primeiro elemento tem sempre a menor chave. A partir
de cada um dos elementos retirados desta fila, são analisados seus adjacentes e
verificados os custos para atingi-los a partir do elemento retirado da fila. O algoritmo
prossegue até que seja encontrada a AGM final.
Figura 50 - Tela Algoritmo de Kruskal do TBC-GRAFOS/WEB
No TBC-GRAFOS e TBC-GRAFOS/WEB, o usuário deverá ponderar as arestas
no ambiente gráfico Algoritmo de Prim, tal como no ambiente gráfico Algoritmo de
Kruskal. Neste algoritmo, é necessário informar um nó inicial. (Figura 51). Nesse
algoritmo, é informado, em um pequeno painel acima da legenda, o resultado do
algoritmo, que é o custo da árvore geradora mínima, tal como no ambiente gráfico
Algoritmo de Kruskal. Isso pode ser visto na Figura 52.
4.4.2.3 Caminho Mínimo
Um motorista deseja encontrar a rota mais curta possível do Rio de Janeiro a São
Paulo. Dado um mapa rodoviário do Brasil no qual a distância entre cada par de
interseções adjacentes esteja marcada, como podemos determinar essa rota mais curta?
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
90
Figura 51 - Tela Algoritmo de Prim do TBC-GRAFOS
Figura 52 - Tela Algoritmo de Prim do TBC-GRAFOS/WEB
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
91
Um modo possível é enumerar todas as rotas do Rio de Janeiro a São Paulo,
somar as distâncias em cada rota e selecionar a mais curta. Porém, é fácil ver que até
mesmo se deixarmos de lado as rotas que contêm ciclos, haverá milhões de
possibilidades, a maioria das quais simplesmente não valerá a pena considerar. Por
exemplo, uma rota do Rio de Janeiro a Brasília e daí a São Paulo é sem dúvida uma
escolha ruim, porque Brasília está a alguns milhares de qui lômetros fora do caminho.
Nesta seção, é apresentada uma forma de resolver tais problemas de forma
eficiente. Em um problema de caminhos mais curtos, conforme ([CORMEN et al
2002], tem-se um grafo orientado ponderado G = (V,E), com função peso w: E � R
mapeando arestas para pesos de valores reais. O peso do caminho p = <v0, v1, ..., vk> é o
somatório dos pesos de suas arestas. Define-se o peso do caminho mais curto desde u
até v como sendo a menor opção (de menor custo) ou então infinito, caso não haja
caminho entre tais vértices. Um caminho mais curto desde o vértice u até o vértice v é
então definido como qualquer caminho p com peso ��� ������� ��� ��� .
No exemplo da rota desde o Rio de Janeiro até São Paulo, pode-se modelar o
mapa rodoviário como um grafo: os vértices representam interseções, as arestas
representam segmentos de estradas entre interseções e pesos de arestas representam
distâncias rodoviárias. Nossa meta é encontrar um caminho mais curto desde uma dada
interseção no Rio de Janeiro (a esquina da rua México com a rua Santa Luzia, por
exemplo) até uma dada interseção em São Paulo (avenida Paulista com rua Augusta, por
exemplo).
Os pesos de arestas podem ser interpretados como medidas, em vez de
distâncias. Eles são usados com freqüência para representar tempo, custo, penalidades,
perdas ou qualquer outra quantidade que se acumule linearmente ao longo de um
caminho e que alguém deseje minimizar.
O algoritmo de percurso em largura é um algoritmo de caminhos mínimo que
funciona sobre grafos não ponderados, isto é, grafos nos quais cada aresta pode ser
considerada como tendo um peso unitário.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
92
Em síntese, os grafos a serem considerados possuem arestas com peso e são
direcionados. Os pesos são relativos ao custo de atravessar as arestas. O problema de
caminho mínimo pode ser aplicado, por exemplo, para resolver problemas que
envolvem uma rede de aeroportos. Neste caso, os aeroportos são os vértices, e as arestas
correspondem aos vôos entre os aeroportos. Sendo assim, se o interesse é:
• tempo de viagem >>> considerar TEMPO GASTO
• financeiro >>> considerar CUSTO
• distância >>> considerar COMPRIMENTO (km)
• transmissão >>> considerar TAXA DE TRANSMISSÃO
O TBC-GRAFOS apresenta os conceitos e dois ambientes gráficos relacionados
a caminho mínimo em grafos. Dentro do menu “Caminho Mínimo”, o submenu
“Caminho Mínimo” apresenta conceitos teóricos sobre o tema, e os outros dois
apresentam os ambientes gráficos para os algoritmos de Dijkstra e de Bellman-Ford. O
TBC-GRAFOS/WEB apresenta os mesmos tópicos de caminho mínimo em grafos
tratados no TBC-GRAFOS (algoritmos de Dijkstra e de Bellman-Ford). Os dois
ambientes que relacionam estes algoritmos têm as suas formas de apresentação e
funcionamento semelhantes aos ambientes de buscas em grafos, com algumas
adaptações referentes à execução dos algoritmos.
4.4.2.3.1 Algoritmo de Dijks tra
Este algoritmo soluciona o problema de caminho mínimo em um grafo
direcionado com peso não-negativo nas arestas. Ele encontra os caminhos mais curtos
de um vértice inicial a todos os outros vértices do grafo. A característica essencial deste
algoritmo é a ordem na qual os caminhos são encontrados. Estes caminhos são
encontrados na ordem do peso das arestas, começando pelo mais curto até o mais
comprido.
No TBC-GRAFOS e TBC-GRAFOS/WEB, o usuário deverá ponderar as
arestas, tal como nos ambientes relacionados ao tema árvore geradora mínima em
grafos. Entretanto, as arestas agora são direcionadas e deverão ser traçadas do nó de
origem para o nó de destino, ou seja, poderão haver arestas saindo e chegando em um
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
93
nó s a partir de um mesmo nó t. Neste algoritmo, também é necessário informar um nó
inicial. (Figura 53). Nesse algoritmo, é informado, em um pequeno painel acima da
legenda, o resultado do algoritmo, que é o caminho mínimo S. Isso pode ser visto na
Figura 54.
Figura 53 - Tela Algoritmo de Dijkstra do TBC-GRAFOS
Figura 54 - Tela Algoritmo de Dijkstra do TBC-GRAFOS/WEB
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
94
4.4.2.3.2 Algoritmo de Bellman-Ford
Este algoritmo soluciona o problema de caminho mínimo em um grafo
direcionado no caso mais geral em que as arestas podem ter peso negativo. Dado um
grafo direcionado G = (V,E), com peso nas arestas, o algoritmo retorna um booleano
indicando se existe ou não um ciclo com peso negativo. Caso exista, o algoritmo indica
que não há solução. Caso contrário, ele produz o resultado.
No TBC-GRAFOS e TBC-GRAFOS/WEB, o usuário deverá ponderar as
arestas, direcionadas, e estas deverão ser traçadas do nó de origem para o nó de destino,
tal como no ambiente gráfico Algoritmo de Dijkstra. Nesse caso, no ambiente gráfico
Algoritmo de Bellman-Ford, o usuário poderá ponderar as arestas com pesos negativos.
Também será necessário informar um nó inicial. (Figura 53). Nesse algoritmo, é
informado, em um pequeno painel acima da legenda, o resultado do algoritmo, que é o
caminho mínimo S. Isso pode ser visto na Figura 54.
Figura 55 - Tela Algoritmo de Bellman-Ford do TBC-GRAFOS
4.5 Considerações Finais
Apesar de todas as vantagens alcançadas pelo TBC-AED/WEB, é importante
ressaltar que alguns temas também envolvidos com algoritmos e estruturas de dados não
foram abordados, como listas circulares, balanceamento de árvores binárias e outros
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
95
métodos de ordenação. Isso é deixado aos docentes para sugerir aos alunos como
pesquisa, para aprofundar conhecimentos e permitir maior discussão durante as aulas ou
para trabalhos futuros. Isso considerando que haverá uma economia de tempo a ser
utilizada para resolução de aplicações reais e esclarecimento de dúvidas.
Figura 56 - Tela Algoritmo de Bellman-Ford do TBC-GRAFOS/WEB
Com relação ao TBC-GRAFOS e ao TBC-GRAFOS/WEB, não foram
abordados os temas caminho mínimo entre todos os pares de vértices (caminho mínimo
geral – algoritmo de Floyd-Waeshall) e fluxo máximo (método de Ford-Fulkerson). Tais
temas não pertenceram ao escopo desta pesquisa, mas é proposto no capítulo 6 como
trabalhos futuros.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
96
Capítulo 5– Considerações Finai s
Neste capítulo, são apresentados alguns aspectos resultantes da pesquisa. Na
seção 1, é apresentada uma breve conclusão da relevância do trabalho. Na seção 2, são
citadas algumas contribuições que a pesquisa gerou em seu desenvolvimento. Por fim,
na seção 3, é feita uma síntese dos trabalhos a serem desenvolvidos com base nesta
pesquisa.
5.1 Conclusões
Sob todo conjunto de informações obtidas até o presente momento, pode-se
perceber que existe uma gama de recursos que possibilitam o desenvolvimento de
ferramentas computacionais para o auxílio da educação superior em Computação, com
destaque para a linguagem de programação Java, que conta com a portabilidade e forte
suporte para técnicas adequadas de Engenharia de Software. Isso faz com que as novas
tecnologias atinjam mais rapidamente seu público alvo.
Além disso, observou-se que o uso de produtos de software para o ensino de
programação e algoritmos é uma idéia inteligente, se for amadurecida e desenvolvida de
forma cuidadosa e estruturada. Isso fornece novas experiências para professores e
alunos, que se proponham a trabalhar em cima desse tema. Além disso, eles terão sua
qualidade de ensino elevada e poderão ser capazes de avançar mais rapidamente no
campo do conhecimento, através da agil idade de processos didáticos e da participação
ativa do docente da área.
Conclui-se também que uma boa elaboração de produtos tecnológicos que
facil item a transmissão de conhecimentos em Computação deve ser acompanhada de
expressiva pesquisa no campo de novas metodologias de ensino. A principal finalidade
disso é cada vez mais haver contribuições que incorram no aprimoramento do ensino
superior e na formação de profissionais melhor qualificados para o mercado. Isso reflete
principalmente sobre futuros professores, uma vez que aqueles que têm passado por
esse tipo de experiência durante a graduação terão grande interesse em executar o
mesmo processo quando estiverem lecionando.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
97
Dessa forma, compreende-se que a educação precisa ser reavaliada, pois
representa a base da atual sociedade mundial e o único instrumento que pode
desenvolver o ser humano e torná-lo digno de constituir sua vida e seu ambiente. Isso
deve ser acompanhado por uma atitude crítica da comunidade científica formada, que é
a maior interessada em manter e prosseguir com avanços que contribuam para a
melhoria da qualidade de vida.
5.2 Contribuições
Os problemas apresentados na compreensão de conceitos abstratos de
programação encontram sua raiz ainda durante a formação básica, o que caracteriza uma
importante linha de pesquisa na metodologia educacional. Com certeza, sem uma
radical mudança cultural de atitude e comportamento, um indivíduo dif icilmente poderá
ser um profissional de Computação adequado, visto que é preciso desenvolver a
capacidade de buscar respostas através de novas perguntas que levem à resposta da
questão original. A formação do profissional em Computação deve incitar o
desenvolvimento de raciocínio crítico, a solução de problemas, a aplicação de métodos
de pesquisa e o desenvolvimento profissional contínuo.
Uma outra linha de pesquisa realizada é aquela direcionada para a tendência de
utilizar ferramentas computacionais como ambientes de estudo, a partir de observações
dentro de disciplinas de graduação, percebe-se também um melhor resultado no
aprendizado por meio de atividades práticas de desenvolvimento de simuladores e
ferramentas visuais didáticas de representação de conceitos abstratos. Além disso,
acompanhando esse desenvolvimento, a linha acopla contribuições dos pesquisadores
para novas estratégias de transmissão de conhecimentos, promovendo a ampliação do
acervo existente e a melhor organização de currículos para o mercado de trabalho, e
acesso facil itado de tais recursos inovadores através de suporte via web.
Dessa forma, a pesquisa deixa como contribuição produtos de software web,
TBC-AED/WEB e TBC-GRAFOS/WEB, além do TBC-GRAFOS (versão para
download), que englobam temas relacionados a algoritmos, estruturas de dados e grafos.
Além disso, faz uma revisão da literatura envolvendo análi se de metodologias de ensino
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
98
em Computação para aprendizagem de algoritmos e programação. A pesquisa aborda
também tópicos de Teoria dos Grafos e Linguagem de Programação Java. Isso tem
como objetivo estimular mudanças na educação de cursos que formam recursos
humanos para a área tecnológica e incentivar docentes a melhorarem sua forma de
pesquisa e ensino envolvendo Computação e Informática.
Com relação ao uso do TBC-AED e TBC-AED/WEB, alguns seminários e
simulações de recursos foram realizados durante o 1° semestre de 2005 aos alunos que
cursaram a disciplina e aos que a estavam cursando no 2° semestre letivo de 2005.
Até o momento, o TBC-AED (e TBC-AED/WEB) atende às expectativas, pois
se notou que os alunos ficaram mais motivados e mais atentos, uma vez que utilizam o
computador diretamente. Além disso, a ferramenta está disponível aos alunos, que
podem acessar exemplos práticos extraclasse, ou seja, em casa ou outro lugar que não
seja no horário da aula.
Foi observado que a ferramenta altera o ânimo dos alunos, pois conceitos
abstratos passam a ser melhor visualizados e compreendidos, melhorando a
dinamização do ensino. Isso contribuiu para um tempo maior reservado à resolução de
exercícios, levando à sedimentação da teoria. Isso resulta em maior expectativa do
aumento do índice de aprovação em uma disciplina importante para a Computação.
Com a apresentação e disponibil ização do TBC-AED (e TBC-AED/WEB), os
alunos que a utilizaram obtiveram êxito, perfazendo um total geral de aprovação
superior àqueles que não a utili zaram. Assim, para melhorar os resultados, pensa-se em
dividir a carga horária da disciplina, antes apenas teórica, em teóricas e de laboratório a
partir de 2006.
O TBC-AED/WEB permite maior acessibilidade, além de possibil itar a troca de
idéias, através da interatividade com usuários diversos. Com relação aos primeiros
resultados da aplicação da ferramenta, estão sendo notadas maior atenção e facil idade
de aprendizagem. Dessa forma, o produto de software educacional desenvolvido
continuará a ser utili zado nas aulas ministradas, incluindo questionários e análise dos
resultados das avaliações.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
99
A partir disso, para o 1º semestre letivo de 2006, o TBC-GRAFOS e o TBC-
GRAFOS/WEB serão apresentados aos alunos através de seminários, para que sejam
utilizados na disciplina Técnicas de Programação, oferecida pelo Departamento de
Ciência da Computação da Universidade Federal de Lavras (DCC/UFLA), para o ensino
de algoritmos em grafos. Dessa forma, serão verificados os primeiros resultados da
aplicação da nova ferramenta e a validação do sistema de informação educacional. Com
isso, novos artigos poderão ser elaborados e submetidos para difundir a pesquisa.
5.3 Trabalhos Futuros
Finalmente, como trabalhos futuros, é interessante realizar um estudo acerca de
algoritmos em grafos mais elaborados, tais como os algoritmos de Floyd-Warshall
(caminho mínimo entre todos os pares de vértices) e de Ford-Fulkerson (fluxo máximo),
além de suas aplicações. Esses algoritmos demandam maior complexidade de
representação, o primeiro por utilizar matrizes durante seu processamento e o segundo
por utilizar mais de um grafo durante o processo e por utilizar outro algoritmo a priori
para obter um caminho no grafo para iniciar sua execução.
Além disso, é importante que, dado este passo em direção às estruturas de dados
e a algoritmos em grafos, deve-se analisar o currículo-base dos cursos de Computação e
Informática, para verificar quais outros tópicos podem ser alvo desse processo de
informatização educacional. Seria viável e bem atrativa a idéia de se montar um CD
com produtos de software que abrangessem as disciplinas da área, ou até mesmo de um
curso específico, como Ciência da Computação, Sistemas de Informação, Engenharia da
Computação ou Licenciatura de Computação. Dessa forma, o curso seria definido em
cima de seu próprio foco de atuação, com a idéia de meta-educação.
Sobre toda essa discussão, percebe-se que ainda há muito que se fazer para a
melhoria do ensino de Computação, não só por se tratar de uma área relativamente
recente, mas por ser amplamente dinâmica e tecnológica. Isso é importante, sobretudo,
para atrair cada vez mais novos aprendizes, visando fortalecer a formação de novos
recursos humanos da área e propiciando o progresso e sucesso do país.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
100
Referências Bibliográficas Alves, A. A. e Costa, M. R. (2004) “algolPUC: Uma Ferramenta de Apoio à
Programação para Iniciantes” , III Workshop de Educação em Computação e Informática do estado de Minas Gerais (WEIMIG’ 2004). Belo Horizonte, MG, Brasil .
Azeredo, P. A. (2000) “Uma proposta de Plano Pedagógico para a Matéria de Programação”, Anais do II Curso: Qualidade de Cursos de Graduação da Área de Computação e Informática (WEI’ 2000). Editora Universitária Champagnat.
Azul, A. A. e Mendes, A. J. “EDDL: Um Programa Didático sobre Estruturas de Dados Dinâmicas Lineares” , 3º Simpósio Investigação e Desenvolvimento de Software Educativo – 1998. Évora, Portugal. Disponível em: http://www.minerva.uevora.pt/simposio/comunicacoes/Mendes/Eddl.html. Acesso: 15 jun 2005.
Bank, D. (1995) “The Java Saga”. Wired Magazine. Disponível em http://www.wired.com/wired/archive/ 3.12/java.saga.html. Acesso: 20 jun 2005.
Black, P. E. “Dictionary of Algorithms and Data Structures” . NIST (National Institute of Standards and Technology). Disponível em http://www.nist.gov/dads/. Acesso: 15 jun 2005.
Borges, K. S. e Filho, H. B. R. (2005) “A Importância dos Grupos de Estudos na Formação Acadêmica”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
Buzin, P. F. W. K. (2001) “A epistemologia da Ciência da Computação: Desafio do Ensino dessa Ciência”, Revista de Educação, Ciência e Cultura, v. 6, nº 2. Centro Universitário La Salle. Canoas, RS, Brasil .
Campos, E. A. V. e Ascencio, A. F. G. (2003) “Fundamentos da Programação de Computadores” . Editora Prentice Hall.
Cormen, T. H., Leiserson, C. E., Rivest, R. L. e Stein, C. (2002) “Algoritmos: Teoria e Prática”. 2ª edição. Editora Campus.
Dagdilelis, V. e Stratzemi, M. (1998) “DIDAGRAPH: Software for Teaching Graph Theory Algoritms” . ITiCSE 1998, Integrating Technology into Computer Science Education. Dublin, Ireland, 1998.
Deitel, H. M. e Deitel, P. J. (2003) “Java Como Programar” . Bookman Companhia ed Informática.
Faria, E. S. J. e Coello, J. M. A. (2005) “Um Estudo Empírico dos Efeitos do Uso de Trabalho Colaborativo no Aprendizado de Programação em Cursos de Graduação em Computação”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil .
Faria, E. S. J., Vilela, J. M. e Coello, J. M. A. (2005) “Um Sistema de Aprendizado Colaborativo de Programação Baseado em Agentes chamado Learn In Group”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil .
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
101
Fernandes, F. B., Júnior, J. J. L. D., Salvador, E. M., Tanure, C. M. e Bezerra, E.P. (2004) “Biblioteca Digital na Era da TV Interativa”. Trabalho apresentado no II Simpósio Internacional de Bibliotecas Digitais, Campinas, 2004. Disponível em http://libdigi.unicamp.br/document/?code=8296. Acesso: 30 nov 2005.
Flávio, D. “TED - Tutorial de Estruturas de Dados” , desenvolvido durante estágio supervisionado na Universidade do Vale do Itajaí - 2004. Disponível em http://www.tutorialdeestruturadedados.8m.com/. Acesso: 20 jun 2005.
Galvão, L. (2003) “Mapa de Tecnologias” . Java Magazine. 1ª ed., Ano I. Neofício Editora.
Garcia, I. C., Rezende, P. J. e Calheiros, F. C. (1997) “Astral: Um Ambiente para Ensino de Estruturas de Dados através de Animações de Algoritmos” , Revista Brasileira de Informática na Educação (RBIE’1997) nº 01, http://www.inf.ufsc.br/sbc-ie/revista/nr1/garcia.htm, 28 abr 2004.
Giraffa, L., Marczak, S. e Almeida, G. (2003) “O Ensino de Algoritmos e Programação mediado por uma Ambiente Web”, Congresso Nacional da Sociedade Brasileira de Computação (SBC’2003). Campinas, SP, Brasil.
Giraffa, L., Marczak, S. e Prikladnicki, R. (2005) “PSD-E: Em Direção a um Processo para Desenvolvimento de Software Educacional” . XI Workshop de Informática na Escola (WIE’2005). São Leopoldo, RS, Brasil.
Gosling, J. (2001) “Seminar for the Computer Museum”. Disponível em http://today.java.net/jag/old/ Presentations/TheStoryOfJava/. Acesso: 25 jun 2005.
I.F.S. (2003) “Linguagem JAVA”. Artigo escrito e publicado sob autorização de I.F.S. no Info Wester. Disponível em http://www.infowester.com/lingjava.php. Acesso: 30 nov 2005.
Jay (2005) “Java Timeline - 10 years of Java”. Disponível em http://www.javarss.com/java-timeline-10years.html. Acesso: 22 jun 2005.
Júnior, J. C. R. P. e Rapkiewicz, C. E. (2004) “O Processo de Ensino e Aprendizagem de Algoritmos e Programação: Uma Visão Crítica da Literatura”, II I Workshop de Educação em Computação e Informática do estado de Minas Gerais (WEIMIG’ 2004). Belo Horizonte, MG, Brasil.
Júnior, J. C. R. P., Rapkiewicz, C. E., Delgado, C. e Xexeo, J. A. M. (2005) “Ensino de Algoritmos e Programação: Uma Experiência no Nível Médio” . XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
Khuri, S. e Holzapfel, K. (2001) “An Education Visualization Environment for Graph Algoritms” . Proceedings of ITiCSE 2001, The 6th Annual Conference on Innovation and Technology in Computer Sciene Education. Canterbury, UK, 2001.
Koslowski, S. R. e Nunes, M. A. S. N. (2001) “O Computador como Ferramenta Pedagógica nas Séries Iniciais” , Informática na Educação – Artigos Científicos. Universidade Regional Integrada do Alto Uruguai e das Missões – URI – RS.
Lucas, J. M. e Naps, T. L. (2003) “VisualGraph – A Graph Class Designed for Both Undergraduate Students and Educators” . SIGCSE 2003, Special Interest Group on Computer Science Education. Reno, Nevada, USA, 2003.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
102
Marshall, G. M. M. S. e Herman, I. (2003) “An Object-Oriented Design for Graph Visualization (GVF)” . CWI.
Menezes, C. e Nobre, I. (2002) “Suporte à Cooperação em um Ambiente de Aprendizagem para Programação (SambA)” . XIII Simpósio Brasileiro de Informática na Educação (SBIE’2002). São Leopoldo, RS, Brasil.
Pimentel, E. P., França, V. F. e Omar, N. (2003) “A Caminho de um Ambiente de Avaliação e Acompanhamento Contínuo de Aprendizagem em Programação de Computadores” , II Workshop de Educação em Computação e Informática do Estado de Minas Gerais (WEIMIG’2003). Poços de Caldas, MG, Brasil.
Quinteiro, L. (2005) “História da Linguagem Java”. Disponível em http://www.htmlstaff.org/java/ java15.ph. Acesso: 30 nov 2005.
Raabe, A. L. A. e Silva, J. M. C. (2005) “Um Ambiente para Atendimento das Dificuldades de Aprendizagem de Algoritmos” . XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
Rodrigues, M. C. (2002) “Como Ensinar Programação?”. Informática – Boletim Informativo Ano I nº 01, ULBRA. Canoas, RS, Brasil .
Santos, J. P. O., Mello, M. P., Muradi, I. T. C. (1995) “Introdução à Análise Combinatória”. Editora da UNICAMP.
Santos, R. P. e Costa, H. A. X. (2005a) “TBC-AED e TBC-AED/WEB: Um Desafio no Ensino de Algoritmos, Estruturas de Dados e Programação”. IV Workshop de Educação em Computação e Informática do estado de Minas Gerais (WEIMIG’2005). Varginha, MG, Brasil.
Santos, R. P. e Costa, H. A. X. (2005b) “TBC-AED: Um Software Gráfico para Apresentação de Algoritmos e Estruturas de Dados aos Iniciantes em Computação e Informática”. I Congresso de Computação do Sul do Mato Grosso (COMPSULMT’2005). Rondonópolis, MT, Brasil.
Santos, R. P. e Costa, H. A. X. (2005c) “Desenvolvimento de um Software Educacional para o Ensino de Algoritmos, Estruturas de Dados e Programação”. Relatório Final apresentado à Universidade Federal de Lavras, como parte das exigências do PBIICT/FAPEMIG, referente ao período de março/2004 a fevereiro/2005. Lavras, MG, Brasil.
Setubal, J. C. (2000) “Uma proposta de Plano Pedagógico para a Matéria de Computação e Algoritmos” , Anais do II Curso: Qualidade de Cursos de Graduação da Área de Computação e Informática (WEI 2000). Editora Universitária Champagnat.
Sherstov, A. A. (2003) “Distributed Visualization of Graph Algoritms” . SIGCSE 2003. Special Interest Group on Computer Science Education. Reno, Nevada, USA, 2003.
Silva, W. (2003) “Apostila do Curso de Extensão – Linguagem de Programação Java e Orientação a Objetos” , DCC – Departamento de Ciência da Computação – UFLA.
Soares, T. C. A. P., Cordeiro E. S., Stefani Í. G. A., Tirelo, F. (2004) “Uma Proposta Metodológica para o Aprendizado de Algoritmos em Grafos Via Animação Não-
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
103
Intrusiva de Algoritmos” , III Workshop de Educação em Computação e Informática do Estado de Minas Gerais (WEIMIG’ 2004). Belo Horizonte, MG, Brasil .
Szwarcfiter, J. L., Markenzon, L. (1994) “Estruturas de Dados e seus Algoritmos” . Editora LTC.
Thomas, M. D., Patel, P. R., Hudson, A. D., Ball, D. A. Jr. (1997) “Programando em Java para Internet” . Editora Markron Books.
Tobar, C. M., Rosa, J. L. G., Coelho, J. M. A. e Pannain, R. (2001) “Uma Arquitetura de Ambiente Colaborativo para o Aprendizado de Programação”, XII Simpósio Brasileiro de Informática na Educação (SBIE’2001). Vitória, ES, Brasil.
Veloso, P., Santos, C. dos, Azeredo P., Furtudo, A. (1986) “Estruturas de Dados” . Editora Campus. 4ª edição.
Yamamoto, F. S., Silva, A. F., Zanutto, J. e Zampirolli, F. A. (2005) “Interdisciplinaridade no Ensino de Computação”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
Wirth, N. (1989) “Algoritmos e Estruturas de Dados” . LTC Informática-Programação.
Ziviani, N. (1992) “Projeto de Algoritmos com Implementações em Pascal e C”. Editora Pioneira Thompson.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
104
Anexo A – Artigos Publicados
Como anexos, serão inseridos os quatro artigos (um resumido e três completos),
três destes apresentados em 2005 em congressos nacionais e um publicado em revista.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
105
O resumo a seguir foi publicado no CD de Resumos do XVII Congresso de
Iniciação Científica, XII Seminário de Avaliação do PIBIC/CNPq-UFLA, VII
Seminário de Avaliação do PBIICT/FAPEMIG-UFLA, ocorrido na UFLA/Lavras/MG
em 2005.
DESENVOLVIMENTO DE UM SOFTWARE EDUCACIONAL PARA O ENSINO DE ALGORITMOS, ESTRUTURAS DE DADOS E PROGRAMAÇÃO*
Rodrigo Pereira dos Santos, bolsista do PBIICT/FAPEMIG, 5o módulo de Ciência da Computação; Heitor Augustus Xavier Costa, Orientador – DCC. *Financiado pela FAPEMIG
A busca por melhores métodos de educação para cursos que se embasam em Computação e Informática é uma preocupação constante de professores e coordenadores de curso na área. A cada dia, novas tecnologias são desenvolvidas e novos conceitos precisam ser incorporados à formação universitária, para que sejam formados bons profissionais para o mercado. Um grande desafio que está vinculado à essa formação de novos recursos humanos para a área é a forma de estruturar o ensino de programação e desenvolvimento de algoritmos. Atualmente, o ensino de algoritmos busca nas Ciências Exatas seu pilar de sustentação, pois disciplinas nessa área despertam o raciocínio lógico-matemático para resolução de problemas. Mas isso deve ser mais uma das ferramentas para o estudante e não a sua única fonte, pois a sua formação futura será muito ampla. O conceito de programação é a arte ou técnica de construir algoritmos de uma forma sistemática. Esse conceito induz que o ingresso tem um dom (arte) de programar ou ele pode aprender as técnicas necessárias a aprimorar seu conhecimento. Logo, ao ingressar em um curso superior na área, ele deve ter sua base bem sedimentada, para que fique apto a prosseguir de maneira positiva durante os seus estudos. Com isso, professores de disciplinas relacionadas à programação e coordenadores de curso sentem a grande responsabilidade de estar buscando e aperfeiçoando sua maneira de conduzir a estrutura disciplinar dos graduandos em seus estágios iniciais na universidade. Dessa forma, nesta pesquisa foi realizado um estudo na área de algoritmos e estruturas de dados, para o desenvolvimento de uma ferramenta computacional didática – TBC-AED. Seu objetivo é tornar o ensino desse conteúdo – básico para o estudo em Computação – mais prático e abrangente. Assim, desperta o interesse do aluno, o seu espírito de pesquisa e a busca de informações que possam torná-lo um profissional crítico e de opinião sólida. Seu rendimento ao longo do curso aumenta, melhorando o seu desempenho em disciplinas mais específicas.
Palavras-chave: algoritmos e estruturas de dados; informática na educação; java
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
106
O artigo completo a seguir foi publicado no CD de Resumos do IV WEIMIG –
Workshop em Educação em Computação e Informática do Estado de Minas Gerais,
ocorrido no UNIS/Varginha/MG em 2005.
TBC-AED e TBC-AED/WEB: Um Desafio no Ensino de Algor itmos, Estruturas de Dados e Programação *
Rodrigo Pereira dos Santos1, Heitor Augustus Xavier Costa2
Departamento de Ciência da Computação – Universidade Federal de Lavras (UFLA) Caixa Postal 3037 – 37.200-000 – Lavras – MG – Brasil [email protected], [email protected]
Abstract. The paper objective is to present TBC-AED and its evolution, TBC-AED/WEB, an educational information system that contains a lot of themes related to the taught contents to students in Computation, now available in applets-Java for Web. The paper contributes to literature and to teachers concerning the importance of a good teaching of algorithms and programming and of the use of software in the education. Therefore, teaching strategies and computing tools are united, trying to help the improvement of teaching quality of programming, algorithms and data structures in the graduation courses in Computing.
Key-words: algorithms and data structures, programming, computing in education.
Resumo. Este artigo tem o objetivo de apresentar o TBC-AED e sua evolução, o TBC-AED/WEB, que consistem em um sistema de informação educacional que contém vários temas relacionados aos conteúdos lecionados aos iniciantes em Computação, agora disponíveis em applets-Java para Web. Procura também deixar uma contribuição à literatura e aos docentes da área acerca da importância de um bom ensino de algoritmos e programação e do uso de produtos de software na educação. Portanto, estratégias de ensino e ferramentas computacionais são unidas, buscando contribuir para a melhoria da qualidade de ensino de programação, algoritmos e estruturas de dados nos cursos de graduação em Computação e Informática.
Palavras-chaves: algoritmos e estruturas de dados, programação, informática na educação.
1. Introdução
A crescente quantidade de informação e a tecnologia gerada tornam necessária a presença de profissionais de caráter persuasivo e inovador, que sejam capazes de unir inteligência e dinamismo na busca de melhores soluções para o mercado. Isso encontra * Apoio PBIICT/FAPEMIG.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
107
sua principal base nas metodologias de ensino aplicadas durante o estágio universitário, principalmente na área de Computação e Informática, que envolve tecnologias em constante desenvolvimento.
Com o intuito de produzir melhores resultados no processo de aprendizagem nessas áreas, faz-se constante a necessidade do uso de didáticas de ensino de forma geral. O objetivo é procurar transformar processos abstratos em concretos, através de produtos de software que possibil item melhor compreensão dos tópicos abordados e maior interação entre aluno-objeto de trabalho (neste caso, o computador). Isso encontra sua maior barreira nos estágios iniciais dos cursos relacionados, quando do contato com o estudo de algoritmos, o raciocínio lógico e a programação.
Atualmente, o ensino de algoritmos busca nas Ciências Exatas seu pilar de sustentação, pois disciplinas nessa área despertam o raciocínio matemático-lógico para resolução de problemas. A título de exemplo, conforme [Júnior e Rapkiewicz 2004], alguns autores preconizam a necessidade de domínio de habilidades matemáticas prévias ou ao menos integradas, ou pelo menos desejável, sendo considerado até um bom indicador de sucesso para o processo. Para outros, o próprio nível de conhecimento prévio de lógica matemática é discutido. Mas, isso deve ser mais uma das ferramentas para o estudante e não a sua única fonte, pois a sua formação futura será muito ampla.
O conceito de programação, segundo [Wirth 1989], é a arte ou a técnica de construir e formular algoritmos de uma maneira sistemática. Esse conceito induz que o ingresso tem um dom de programar ou ele pode aprender as técnicas necessárias a aprimorar seu conhecimento. Logo, o iniciante deve ter sua base bem sedimentada, para que fique apto a prosseguir de maneira positiva durante os seus estudos. Com isso, professores de disciplinas relacionadas à programação sentem a grande responsabil idade de estar aperfeiçoando sua maneira de conduzir a estrutura disciplinar dos graduandos em seus estágios iniciais da universidade.
Uma linha de pesquisa, visando melhorias no ensino básico em Computação e Informática é direcionada para a tendência de utilizar ferramentas computacionais como ambientes de estudo. Segundo [Soares et al. 2004], a partir de observações dentro de disciplinas de graduação, percebe-se também um melhor resultado no aprendizado por meio de atividades práticas de desenvolvimento de simuladores e ferramentas visuais didáticas de representação de conceitos abstratos. Além disso, a linha acopla contribuições dos pesquisadores a novas estratégias de transmissão de conhecimentos. Isso promove a ampliação do acervo existente, a melhor organização de currículos para o mercado de trabalho e o acesso facilitado destes recursos através de suporte via Web.
Em um estudo anterior, foi desenvolvido o TBC-AED (Treinamento Baseado em Computador para Algoritmos e Estruturas de Dados), que foi utili zado pela primeira vez na turma de 2º período do Curso de Ciência da Computação da Universidade Federal de Lavras (1º semestre de 2005). Ele é um ambiente computacional didático, fruto de um estudo sobre algoritmos, estruturas de dados e programação. O TBC-AED visa tornar o ensino deste conteúdo mais prático e abrangente, de forma a despertar o interesse do aluno e o seu espírito de pesquisa. Assim, seu rendimento ao longo do curso aumentará, melhorando o seu desempenho em disciplinas mais específicas. Pôde-se notar que o TBC-AED despertou a atenção dos alunos de forma inesperada, devido à inovação e à dinamização, que foram injetadas às aulas.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
108
O objetivo deste artigo é apresentar o TBC-AED e sua evolução, o TBC-AED/WEB, além de relatar a importância de construir uma boa base de algoritmos e programação para uma melhor conduta em períodos avançados de cursos de Computação. Também retrata algumas implicações acerca do uso de informática em educação. Dessa forma, pretende-se possibil itar maior disseminação do conhecimento e promover a interatividade entre docentes e graduandos da área, enriquecendo a pesquisa com críticas e sugestões.
O artigo está organizado da seguinte forma: a seção 2 apresenta a importância da programação e dos algoritmos no ensino de Computação; a seção 3 conceitua Informática na Educação e analisa os impactos do uso de produtos de software no ensino; a seção 4 retrata a importância do uso de ferramentas computacionais no ensino e detalha algumas ferramentas disponíveis atualmente para o ensino de algoritmos, estruturas de dados e programação; a seção 5 apresenta o TBC-AED e o TBC-AED/WEB; e a seção 6 inclui resultados iniciais de sua aplicação. Por fim, são apresentadas as conclusões e algumas sugestões de trabalhos futuros.
2. Programação e Algor itmos: a Base da Computação
Segundo a estrutura curricular presente nas Diretrizes Curriculares do MEC [Azeredo 2000], a matéria de Programação faz parte da área de formação básica em Ciência da Computação. Seu conteúdo abrange, além do ensino de linguagens de programação, os conceitos, os princípios e os modelos de programação e o estudo de estruturas de dados e de métodos de classificação e pesquisa de dados. Conforme consta na caracterização da matéria programação de computadores, é uma atividade voltada à solução de problemas. Ela está relacionada com uma variada gama de outras atividades como especificação, projeto, validação, modelagem e estruturação de programas e dados, utilizando-se das linguagens de programação como ferramentas.
Ao contrário do que se apregoava há alguns anos, a atividade de programação deixou de ser uma arte para se tornar uma ciência, envolvendo um conjunto de princípios, técnicas e formalismos que visam à produção de produtos de software bem estruturados e confiáveis. Cite-se, dentre estes, os princípios da abstração e do encapsulamento e as técnicas de modularização e de programação estruturada.
Portanto, o estudo de programação não se restringe ao estudo de linguagens de programação. As linguagens de programação constituem-se em uma ferramenta de concretização de produtos de software, que representa o resultado da aplicação de uma série de conhecimentos que transformam a especif icação da solução de um problema em um programa de computador que efetivamente resolve aquele problema. Deve ser dada ênfase aos aspectos funcionais e estruturais das linguagens, em detrimento aos detalhes de sintaxe. O estudo de linguagens deve ser precedido do estudo dos principais paradigmas de programação, notadamente a programação imperativa, a funcional, a baseada em lógica e a orientada a objetos.
O desenvolvimento de algoritmos e o estudo de estruturas de dados devem receber especial atenção na abordagem do tema programação. Igualmente, deve ser dada ênfase ao estudo das técnicas de especificação, projeto e validação de programas. Deve-se entender que ensinar programação não é apenas ensinar uma linguagem de programação. Este ensino envolve entender problemas e descrever formas de resolução,
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
109
de maneira imparcial, para que então sejam codificadas em uma linguagem. Ou seja, somente após o aprendizado dos conceitos de algoritmo e fundamentos de lógica, o estudante pode travar contato com uma linguagem de programação. Além disso, o estudo de programação deve passar efetivamente pelo estudo de estruturas de dados. Ou seja, quando se projeta um programa, deve-se pensar tanto nos algoritmos que manipulam os dados como também na forma de estruturar estes dados. Desta maneira, as duas coisas se complementam.
De acordo com [Azeredo 2000], dentro do ensino de estruturas de dados, deve-se dar destaque à parte conceitual e comportamental das estruturas, antes de pensar em implementação. Por exemplo, no ensino de estruturas lineares, deve-se transmitir ao aluno o seu conceito, através das operações aplicáveis, como criar, acrescentar, consultar e remover elementos. Finalmente, discutem-se formas de implementações ou representações físicas das listas. Deve ser dada ênfase especial no estudo de estruturas encadeadas. Nas estruturas encadeadas, o aluno apresenta maior dificuldade de assimilação do conceito, uma vez que o encadeamento não é um conceito muito freqüente na vida real, dificultando sua compreensão. Dessa forma, é recomendável que as disciplinas de estruturas de dados possuam significativa atividade prática em laboratório.
Quanto ao sistema de avaliação aplicado, é o mesmo adotado tradicionalmente na maioria dos cursos de natureza teórico-prática. Além de provas periódicas, são realizados alguns trabalhos de programação para fixação. Uma sugestão do uso de um produto de software durante as aulas é a redução do peso em provas teóricas, normalmente elaboradas sobre um conteúdo denso.
Com relação aos cursos na área de Computação e Informática, os cursos de licenciatura visam a formação de educadores para o ensino médio. Os cursos de Bacharelado em Ciência da Computação e em Engenharia de Computação são voltados para a formação de recursos humanos para o desenvolvimento científico e tecnológico da computação. Não necessariamente devem sair dos cursos com o perfil de programadores. Os cursos de Sistemas de Informação incluem a formação de programadores entre seus objetivos. Em um curso de Licenciatura em Computação, o aluno poderá ter uma carga de prática de programação menor, sem prejuízo da parte conceitual da matéria. Deve haver uma diferenciação entre os casos de cursos de atividade fim e atividade meio. Para este último, recomenda-se uma ênfase maior no conhecimento de linguagens de programação e atividades práticas.
Assim, a programação é, pois, um dos pontos chaves em um curso de Computação, pois é a atividade que supre o computador com meios para servir ao usuário. Seu uso adequado e o entendimento de conceitos, princípios, teorias e tecnologias podem conduzir à produção de produtos de software de qualidade, objetivo final, tanto quando se tem a computação como um meio como quando a computação é tida como um fim. Com esse intuito, [Setúbal 2000] apresenta algumas recomendações genéricas a serem aplicadas no ensino de disciplinas relacionadas a algoritmos: • coerência com os objetivos fundamentais. Por coerência, entende-se que o
professor deve: i) expressar claramente as idéias, os conceitos e as técnicas perante os alunos (se o professor coloca algoritmos confusos na lousa ou em transparências, ele não pode esperar algoritmos claros nas respostas dos alunos); ii) destacar a
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
110
importância dos resultados teóricos e mostrar rigor formal toda vez que isto se fizer necessário; e iii) valorizar o uso de técnicas na resolução de problemas;
• ênfase no pensamento crítico. Deve-se ter um cuidado especial, pois os alunos que têm pouca maturidade matemática tendem a acreditar em qualquer demonstração. Tal comportamento deve ser desestimulado. É essencial que os alunos duvidem daquilo que é apresentado a eles e é com dúvidas saudáveis e sua resolução que a percepção da importância do resultado teórico poderá ser consolidada. Nesse sentido, considera-se um recurso valioso o conjunto de exercícios que pedem para os alunos identificarem falhas de argumentação, erros em algoritmos ou erros em notícias da imprensa;
• a teoria na prática. A experiência mostra que os alunos em geral não se sentem atraídos, por considerarem-na muito abstrata. Por esse motivo, crê-se ser importante usar como recurso didático exemplos reais. A inclusão de projetos de implementação, em disciplinas teóricas ou em disciplinas específicas, torna a matéria menos abstrata. De resto, é importante salientar para os alunos o grande impacto que os resultados teóricos têm alcançado na prática.
3. Informática na Educação e Software Educacional
Informática na Educação é uma das áreas de Computação e Informática, a qual trata da utilização de computadores para o ensino, como forma de ampliar a difusão de conhecimentos e facil itar a assimilação de informações.
Entretanto, conforme [Zambalde e Alves 2002], a incorporação da informática nos ambientes educacionais provoca mudanças. Nesse sentido, deve-se sempre questioná-las e nem sempre adotá-las. O objetivo da introdução da informática no ambiente educacional não deve ser o modismo ou a atualização com relação às inovações tecnológicas e ao mercado. O questionamento é imprescindível, visto que as alterações podem alcançar estrutura física, equipamentos, cultura, forma de aprendizado, modos de comunicação, enfim, processos dos mais variados tipos.
Para [Almeida e Nogueira 2001], a utili zação de computadores na escola pode contribuir muito para um ensino de melhor qualidade, além de facil itar a aprendizagem. Para isso, é necessário que os professores sintam-se estimulados e preparados para enfrentar esta nova realidade. É preciso oferecer subsídios, recursos e capacitação. Com isto, poderão sentir-se capazes de criar seus próprios produtos de software, suas próprias home-pages, conforme sua metodologia e disciplina, visto que é difícil encontrar alunos que não utili zam o computador para realizar tarefas escolares, pesquisa e/ou lazer. Cabe à escola preparar seus docentes para enfrentar esta nova realidade.
De fato, sabe-se que a informática está sendo inserida na educação pela necessidade de transpor barreiras do educar convencional, pois tudo se modernizou na educação. Até o advento da informática se tornou convencional, frente a esta nova forma pedagógica de educação, oportunizando às escolas uma renovação de trabalhar os conteúdos programáticos, propiciando ao aluno eficiência na construção do conhecimento, convertendo a aula em um espaço real de interação, de troca de resultados, adaptando os dados à realidade do educando ([Koslowski e Nunes 2001]).
Entretanto, em [Koslowski e Nunes 2001], o uso da informática na educação não significa a soma da informática e da educação, mas a integração destas duas áreas. Para
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
111
haver integração, é necessário o domínio dos assuntos que estão sendo integrados. Seguindo esta linha de pensamento, pensar em computadores na educação não significa pensar na máquina, mas sim na educação. Educação e Informática devem ser consideradas como um todo, visando o benefício da sociedade. Apesar dos aspectos positivos da utilização da informática na escola, percebe-se que a maioria das escolas ainda está a passos lentos e tem dúvidas sobre a real contribuição dos computadores ao ensino.
No entanto, a mesma forma aditiva pela qual tem sido pensada a introdução de computadores na educação também vem se aplicando ao processo de preparação de professores. Tal preparação realiza-se através de cursos ou treinamentos de pequena duração, para exploração de determinados produtos de software. Resta ao professor desenvolver atividades com essa nova ferramenta junto aos alunos, mesmo sem ter a oportunidade de analisar as dificuldades e as potencialidades de seu uso na prática pedagógica. Os alunos, por crescerem em uma sociedade permeada de recursos tecnológicos, são hábeis manipuladores da tecnologia e a dominam com maior rapidez e desenvoltura que seus professores. Mesmo os alunos pertencentes a camadas menos favorecidas têm contato com recursos tecnológicos na rua e na televisão e a sua percepção sobre tais recursos é diferente da percepção de uma pessoa que cresceu em uma época em que o convívio com a tecnologia era muito restrito ([Almeida 2000]). Portanto, deve-se levar em consideração ainda que os professores treinados apenas para o uso de certos recursos computacionais são rapidamente ultrapassados por seus alunos, que têm condições de explorar o computador de forma mais criativa, e isso provoca diversas indagações quanto ao papel do professor e da educação.
Nesse contexto, surge o instrumento computacional a ser utilizado para educar pessoas. Tal recurso é o produto de software educacional. Consoante [Zambalde e Alves 2002], o produto de software educacional é um programa desenvolvido para atender aos objetivos educacionais previamente estabelecidos e, para que ele seja efetivo e esteja à altura das necessidades pedagógicas, é necessário que seu desenvolvimento conte com especialistas das áreas de Educação e Informática. Mas os produtos de software educacionais possuem pontos fortes e limitações. É preciso saber quando ele é adequado para os objetivos curriculares e pode, por isso, ser integrado ao contexto educacional. O professor deve adotar o produto de software que instigue as habil idades cognitivas dos alunos e, acima de tudo, lhes ofereça situações para que possam transferir seus conhecimentos para a solução de novos problemas ([Zambalde e Alves 2002]).
Entende-se que várias são as ferramentas de autoria encontradas para facilitar a criação de aplicações educacionais nas mais diversas áreas do ensino, mas em geral todas buscam a criação de produtos de software multimídia. O uso dessas ferramentas aplicadas à educação teve um elevado crescimento nos últimos anos, mas, apesar da riqueza visual e sonora que comporta, faz com que o aprendiz interaja com o ambiente como se estivesse manuseando um livro eletrônico. Na maioria dos casos, é pouca ou quase nula a possibil idade do aprendiz intervir nesse ambiente para criar ou interagir de forma ativa sobre o objeto de conhecimento. Diante disso, buscou-se um paradigma alternativo, onde o aprendiz interage ativamente na construção de conhecimento, em ambientes tais como o de jogos, nos quais os participantes são personagens de uma história que se desenrola e suas ações vão modificar esta história à medida que ela acontece ([Souza e Wazlawick 1997]).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
112
Dessa forma, existem diferentes formas de utilizar o computador na educação e, infelizmente, é mais comum encontrar a sua utili zação como objeto de estudo, como facil itador na realização de determinadas tarefas ou como máquina de ensinar que repetem os métodos tradicionais de ensino, conhecidos como instrucionistas. Está-se interessado no uso do computador como objeto que contribua no processo de aprendizagem. Isso ocorre por vários motivos. Em primeiro lugar, existe uma exigência muito grande da sociedade para que os indivíduos saibam manipular o computador, pois ele está presente em quase todas as nossas atividades diárias e, portanto, uma pessoa que não consiga conviver com esse objeto ficará inevitavelmente à margem de um mundo cada vez mais dominado por recursos tecnológicos. Esse argumento tem a sua verdade, mas por outro lado, os educadores não podem se preocupar apenas com esse lado da questão, bastante limitada, voltada apenas para o treinamento de indivíduos na utilização de produtos de software. Em segundo lugar, cresce cada vez mais o interesse em conseguir novos mercados de consumidores de produtos de software educativos e esses aparecem com os mais variados atrativos gráficos, porém pobres do ponto de vista pedagógico. Diante da falta de conhecimento por parte da população, essa indústria tem encontrado um campo bastante receptivo a esse tipo de produto.
Ainda assim, não se deve considerar como digno de uso no ambiente escolar apenas os produtos de software construídos especificamente para fins pedagógicos. Além disso, às vezes, eles não possuem uma proposta pedagógica clara. Dentro da visão que se tem de informática educativa, onde o computador deve ser usado com ferramenta cognitiva, entende-se que deve selecionar aplicativos que viabilizem esta forma de uso.
Mas, para usufruir todo o aparato tecnológico disponível, deve-se considerar que uma inovação imposta ou planejada por organismos externos à instituição é incompatível com a concepção dialética de inovação, pois tende a produzir rejeição ou a adicionar quantitativamente o novo instrumento ao arsenal disponível. As práticas impostas visam à otimização do ensino e não deixam espaço para o desenvolvimento de processos criativos. Isso foi observado com a introdução dos recursos audiovisuais nas escolas e, hoje, muitas instituições adotam esse procedimento em relação aos microcomputadores ([Almeida 2000]). Isso leva à necessidade de preparação de pessoal que saiba lidar com a iniciação à tecnologia, sobretudo professores do 2o e 3o graus. Logo, a preocupação com a formação de professores é uma constante nas universidades que desenvolvem trabalhos relacionados ao uso do computador em educação. O desenvolvimento de atividades de formação se faz por caminhos diferentes, que variam desde a criação de disciplinas específicas que tentam integrar informática e educação até a realização de cursos de pós-graduação.
Além disso, deve considerar que a formação não se encerra com a conclusão de cursos, oficinas ou outros eventos, pois deve ter o caráter de continuidade, que se concretiza por meio de reuniões periódicas, seminários, encontros presenciais e oficinas. Quaisquer que sejam as modalidades de formação escolhidas, sua concretização deve ser coerente com as necessidades do grupo em formação e prever espaço para o estabelecimento de conexões entre teoria, prática e domínio de recursos computacionais. Isso promove uma reorganização e uma transformação da prática pedagógica, segundo a reflexão favorecida pelo ciclo descrição-execução-reflexão-depuração.
4. A Impor tância do Uso de Ferramentas Computacionais no Ensino
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
113
Nesta seção, são apresentas algumas ferramentas computacionais presentes na literatura e suas contribuições ao ensino de algoritmos, estruturas de dados e programação. Contudo, é importante ter em mente alguns pontos especiais: • a aula de uma disciplina que relaciona programação, algoritmos e estruturas de
dados deve ser realizada em laboratórios para que os alunos possam entender as abstrações apresentadas. Deve ser composta de uma parte teórica, onde conceitos são transmitidos, e uma parte prática, onde são entendidos comandos e tópicos ministrados. Deve também haver questões-desafio, para que os discentes sejam acostumados a usar de agil idade e criatividade na solução de problemas;
• o uso de produtos de software educacionais, que enfatizam animação gráfica, é de extrema importância como facil itador do processo de aprendizagem, uma vez que a apresentação de conceitos abstratos se torna mais viável e didática, melhorando a qualidade do material das aulas;
• normalmente, um aluno se interessa por aulas diferenciadas e isso não só prende sua atenção, como também influenciam positivamente nas avaliações;
• uma economia de tempo pode ser conseguida e esta seria direcionada para maiores explicações e resoluções de exercícios, uma vez que o material didático seria virtual, evitando uma explanação cansativa através do quadro-negro;
• o aluno teria acesso livre ao material virtual para que pudesse estudar em casa. Além disso, ele possuirá um valioso projeto, para consultas futuras, em caso de necessidade – a tendência em abstrair detalhes, com o passar do tempo, sempre leva a dúvidas e estas a novas pesquisas em estruturas básicas ora aprendidas. Além disso, a existência de material via Web para estudos e pesquisas estimula maior contribuição tecnológica para a sociedade e maior alcance ao público. A divulgação das propostas de melhorias de processos educacionais visa injetar e obter informações para ampliação da literatura disponível;
• a transição de educadores seria facil itada, uma vez que existiria uma base pronta para ser apreciada, mantendo a qualidade de ensino e aprendizagem do conteúdo.
A seguir, são apresentados alguns projetos relacionados ao uso do computador para o ensino de algoritmos, estruturas de dados e programação. São eles: • ASTRAL (Animation of Data Structures and Algorithms). É um ambiente de
programação para produção de animações de algoritmos e de estruturas de dados com propósito instrucional. O ambiente foi desenvolvido no Instituto de Computação da UNICAMP. O uso do ASTRAL em disciplinas de graduação sobre estruturas de dados com componente de programação foi muito bem sucedido durante vários semestres ([Garcia et al. 1997]);
• EDDL (Estruturas de Dados Dinâmicas Lineares). Surgiu de uma discussão sobre estratégias de ensino das estruturas de dados e tipos de dados abstratos utilizados em programação. A sua estruturação e a concepção da sua funcionalidade englobam: i) uma abordagem introdutória aos conceitos ou especificação dos tipos de estruturas; ii) as técnicas de implementação; e iii) a utilização dessas estruturas na resolução de problemas. Oferece um conjunto de ferramentas de programação que o revelam ser ao mesmo tempo intuitivo e de fácil manipulação, diversificado, versátil e eficaz para o desenvolvimento de projetos, principalmente quando o aspecto gráfico é uma das componentes importantes a ter em conta ([Azul e Mendes 1998]);
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
114
• TED (Tutorial de Estruturas de Dados). É um tutorial para dinamizar o ensino na disciplina de estrutura de dados. Tem o objetivo de permitir uma maior interação entre o professor e o aluno, servindo como uma ferramenta de apoio ao aprendizado. Ele subdivide-se em várias estruturas de dados, permitindo ao aluno ter uma visão individualizada dos conteúdos, sem perder a visão do todo. Através de conceitos de dinamização de aprendizagem, como a visualização dos acontecimentos simultaneamente com o que é executado, o aluno cria uma visão de totalidade do sistema. O tutorial apresenta os algoritmos das estruturas de dados, ao mesmo tempo em que demonstra a sua implementação lógica através de exemplos visuais permitindo ao aluno acompanhar todos os passos simultaneamente ao que é executado ([Flávio 2004]);
• Dictionary of Algorithms and Data Structures. É um site que contém parte do Software Quality Group do Software Diagnostics and Conformance Testing Division, Information Technology Laboratory, que tem um dicionário de algoritmos, técnicas algorítmicas, estruturas de dados, problemas atípicos e definições relativas. Alguns tópicos têm links para implementações ([Black 2005]).
5. TBC-AED e TBC-AED/WEB
Assimilar o conceito e o desenvolvimento de algoritmos é alvo de muitas dificuldades enfrentadas pelos alunos de cursos da área de Computação. Alunos que apresentam deficiências advindas dos ensinos fundamental e médio encontram grandes dificuldades em aprender conceitos simples de programação de computadores [Alves e Costa 2004].
Visando contribuir para a melhora deste quadro, em 2004 foi desenvolvido o TBC-AED, um produto de software que vem ao encontro dos objetivos discutidos até o presente momento. Ele analisa tópicos básicos de programação, englobando um conteúdo teórico sintético e direto, acompanhado de processo gráfico passo a passo. Isso facil ita a visualização e o entendimento das informações apresentadas e disponibiliza maior tempo para a resolução de exercícios de aplicação e fixação. Além disso, pode-se alcançar maior interação entre o professor e os seus alunos, no sentido de aumentar o espaço para questionamentos.
Foi observado que o TBC-AED, mais que uma simples ferramenta, é um verdadeiro material de coleta de informações a respeito de programação, algoritmos e estruturas de dados. Ele representa uma experiência profissional, pois foi desenvolvido para fins de consumo, é gratuito e direcionado para alunos de área de Computação e Informática. Além disso, ele visa atender aos alunos que estudam algoritmos e estruturas de dados básicas. Isso é importante para tornar maior a interação graduando-computador, o que propicia estímulos de curiosidade, atenção e eficácia no desenvolvimento de trabalhos relacionados e do raciocínio lógico.
Durante o processo de embasamento teórico-prático, vários exemplos foram vistos e estudados para que o TBC-AED pudesse ser elaborado com cuidado especial, o que, a priori, não despertava qualquer tipo de receio; além disso, o seu conteúdo era de conhecimento. Com a introdução e a sedimentação de informações, o TBC-AED começou a ser desenvolvido e passou por várias etapas de melhorias, aplicadas tanto à forma de apresentação, quanto ao processamento dos algoritmos propriamente dito.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
115
Enfim, o TBC-AED possui, diferentemente dos demais ambientes de ensino discutidos na seção anterior, algumas características, tais como: i) links explicativos, evitando a necessidade de aprendizagem via tutorial; ii) a usabilidade da interface gráfica é razoável, possibil itando ao professor apresentar conceitos iniciais, conteúdos teóricos e práticos aos poucos, como apresentaria em transparências; iii ) conteúdo teórico simples, de forma a famil iarizar melhor o aluno com o assunto; iv) processo gráfico passo a passo, com elementos numéricos, o que melhora a visualização e o entendimento; e v) legendas explicativas, que ilustram as etapas do processo de apresentação de algoritmos. Estas características facil itam o aprendizado e englobam aulas teóricas e práticas, ao envolver uma nova forma de transmitir conhecimento.
Quanto ao desenvolvimento, o TBC-AED apresenta os seguintes temas: Busca em Vetor (Busca Binária), Métodos de Ordenação (Select Sort, Insert Sort, Boubble Sort, Merge Sort e Quick Sort), Estruturas de Alocação Estática e Dinâmica de Memória (Lista, Fila e Pilha) e Árvores (Árvore Binária de Busca). Ele foi elaborado usando a linguagem de programação Java (devido principalmente à portabilidade) e o ambiente de desenvolvimento NetBeans. A Figura 1 apresenta a tela principal do TBC-AED.
Ao selecionar um desses temas, um submenu é apresentado, contendo um item explicativo do tema (Figura 2) e outros itens de representação gráfica do tema. A Figura 3 mostra uma janela relativa à representação gráfica do tópico Busca Binária, o qual apresenta uma breve introdução a respeito do assunto pesquisado (na parte superior), o algoritmo em Portugol (à esquerda), o painel de animação, onde o algoritmo será executado graficamente (à direita), contendo uma legenda e um conjunto de botões (na parte inferior). Exceto este, os demais tópicos contém uma janela de mensagem interna usada para o efeito de passo a passo na parte inferior à direita (Figura 4).
Figura 1. Tela principal do TBC-AED
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
116
Figura 2. Janela de mensagem contendo uma introdução do
tóp ico relacionado
A única tela que se diferencia dos padrões descritos anteriormente é relativa ao tópico Árvore Binária de Busca que, devido à sua peculiaridade de representação perante aos demais temas, demandou maior espaço para o processo gráfico (Figura 5). As mudanças ocorreram no posicionamento interno das informações: o algoritmo em Portugol possui uma área menor contendo na parte inferior uma janela de mensagem interna usada para o efeito de passo a passo, e o painel de animação é exibido em uma área maior, contendo na parte inferior um espaço para a exibição dos elementos quando o usuário requisitar uma das formas de imprimir uma árvore binária (pré-ordem, in-ordem ou pós-ordem) e uma legenda.
Figura 3. Tela Busca Binária
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
117
Figura 4. Tela Merge Sort com janela de mensagem interna
Uma característica importante do TBC-AED é ser auto-explicativo, bastando deslizar com o mouse sobre as partes da tela para ver uma breve descrição sobre a região posicionada. Isso deixa o usuário mais à vontade e sem preocupações quanto a quaisquer peculiaridades, também por se tratar de um produto de software direcionado para alunos iniciantes em cursos de Computação.
Dentre as vantagens da abordagem construtiva, estão mecanismos para facil itar o processo de abstração, o fato de a animação refletir a interação com o aprendiz e as várias facilidades para a detecção visual de erros. Com isso, incentiva-se o processo de compreensão e autocorreção [Garcia et al. 1997]. Isso pode ser facilmente percebido em processos recursivos, os quais são de difícil explicação teórica, mas que podem ser vistos facilmente através da animação gráfica disponível em ambientes que utilizam algum algoritmo desse tipo (como merge sort e quick sort).
Com isso, verifica-se que a organização do TBC-AED é amplamente didática e esse fato serve de grande utilidade para o ensino de disciplinas que apresentam como ementa os tópicos relacionados. Além disso, é uma experiência desafiadora de graduandos, mestres e doutores tornar o ensino de Computação mais dinâmico, ao despertar o seu interesse a terem a mesma iniciativa, se possível com igual dedicação e empenho, para melhorar e aprimorar a formação de recursos humanos para a tecnologia.
Figura 5. Tela Árvore Binária com suas peculiaridades
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
118
Como conseqüência da evolução, intrínseca a qualquer projeto, o TBC-AED foi disponibil izado via Web, através de applets7, gerando o TBC-AED/WEB (Treinamento Baseado em Computador para Algoritmos e Estruturas de Dados via Web) para que possa ter maior acessibilidade, além de possibil itar a troca de idéias, através da interatividade com usuários diversos. A idéia de criar o TBC-AED/WEB surgiu para evitar que o estudante não precise fazer o download do TBC-AED para estudar, bastando ter uma versão do aplicativo apenas em sua estação de trabalho em casa, para trabalhar offline. Quando estiver em alguma estação conectada à Internet, ele pode executar o programa diretamente no navegador, desde que esta estação possua a JVM (Java Virtual Machine) instalada.
Quanto às características relacionadas à funcionalidade e à aparência, o TBC-AED/WEB não difere do TBC-AED. Dessa forma, a partir do acesso Web, espera-se gerar uma interatividade maior ainda com outros pesquisadores, difusão da pesquisa, contribuição à comunidade científica da área e feedback em relação ao trabalho realizado.
Assim sendo, o TBC-AED e o TBC-AED/WEB é uma ferramenta valiosa para a formação de alunos, pois atende a disciplinas que estão no início do curso e que são pré-requisitos necessários para as disciplinas mais específicas de períodos avançados. Quando feita uma boa base, o rendimento e o desempenho aumentam, proporcionando melhores resultados, melhores currículos e melhores profissionais para o mercado.
6. TBC-AED em Uso
Alguns seminários de apresentação e simulação de recursos disponíveis no programa foram realizados durante o primeiro semestre de 2005 aos alunos que cursavam a disciplina e aos alunos que a util izariam no segundo semestre, agora com a aplicação contínua da ferramenta.
Até o momento, o uso da ferramenta atende às expectativas, pois foi notado que os alunos ficaram mais motivados e mais atentos, uma vez que estão utilizando o computador diretamente. Além disso, a ferramenta foi disponibilizada aos alunos, os quais podem acessar exemplos práticos extraclasse, ou seja, em casa ou em outro lugar que não seja durante o horário da aula.
Foi observado que a ferramenta altera o ânimo dos alunos, devido ao fato de que conceitos abstratos passam a ser melhor visualizados e compreendidos, melhorando a dinamização do ensino. Isso também contribuiu para um tempo maior reservado à resolução de exercícios, levando à sedimentação da teoria. Isso resulta em maior expectativa do aumento do índice de aprovação em uma disciplina importante para a Computação.
A partir da apresentação e disponibil ização da ferramenta aos alunos, aqueles que a utilizaram obtiveram êxito na disciplina, perfazendo um total geral de aprovação superior àqueles que não a utilizaram. Devido a esse fato, para melhorar os resultados, optou-se por dividir a carga horária da disciplina, antes apenas teórica, em aulas
7 Applets são programas Java que podem ser embutidos em documentos HTML. Quando um navegador carrega uma página da Web que contém um applet, o applet é executado ([DEITEL, 2003]).
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
119
expositivas (teóricas) e de laboratório (uso da ferramenta, incluindo exercícios de programação) para o segundo semestre de 2005.
7. Conclusões e Trabalhos Futuros
Sob todo conjunto de informações obtidas até o presente momento, pode-se perceber que existe uma gama de recursos que possibil itam o desenvolvimento de ferramentas computacionais para o auxílio da educação superior em Computação, com destaque para a linguagem de programação Java, que conta com a portabilidade. Isso faz com que as novas tecnologias atinjam mais rapidamente seu público alvo.
Além disso, observou-se que o uso de produtos de software para o ensino de programação e algoritmos é uma idéia interessante, se for amadurecida e desenvolvida de forma cuidadosa e estruturada. Isso fornece novas experiências para professores e alunos, que se proponham a trabalhar com esse tema. Além disso, eles terão sua qualidade de ensino elevada e poderão ser capazes de avançar mais rapidamente no campo do conhecimento, através da agil idade de processos didáticos e da participação ativa do docente da área.
Conclui-se também que uma boa elaboração de produtos tecnológicos que facil item a transmissão de conhecimentos em Computação deve ser acompanhada de expressiva pesquisa no campo de novas metodologias de ensino. A principal finalidade disso é cada vez mais haver contribuições que incorram no aprimoramento do ensino superior e na formação de profissionais melhor qualificados para o mercado. Isso reflete principalmente sobre futuros professores, uma vez que aqueles que têm passado por esse tipo de experiência durante a graduação terão grande interesse em executar o mesmo processo quando estiverem lecionando.
Este trabalho deixa como contribuição o TBC-AED e o TBC-AED/WEB que englobam temas relacionados a algoritmos e estruturas de dados. Além disso, faz uma revisão da literatura envolvendo a importância de um bom ensino de algoritmos e programação e tópicos de Informática na Educação. Isso estimula mudanças na educação em cursos que formam profissionais para a área tecnológica e incentivam docentes a melhorarem sua forma de pesquisa e ensino envolvendo Computação e Informática.
Com relação aos primeiros resultados da aplicação da ferramenta, estão sendo notadas maior atenção e facil idade de aprendizagem. Dessa forma, o sistema continuará a ser utilizado ao longo das aulas ministradas para a disciplina Algoritmos e Estruturas de Dados II , oferecida pelo DCC/UFLA, incluindo questionários e análise dos resultados das avaliações.
Com o TBC-AED/WEB, pretende-se alcançar maior acessibil idade e troca de idéias, dada a interatividade com usuários diversos. A partir disso, também é interessante atacar outro assunto de grande importância, a teoria dos grafos, a fim de ampliar o conhecimento e contribuir para a melhoria do ensino na área, através de novas ferramentas para o ensino de Computação.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
120
Referências
Almeida, M. E. (2000) “Informática e Formação de Professores”, Série de Estudos – Educação à Distância (ProInfo). Ministério da Educação. Secretária de Educação à Distância. v. 2
Almeida, M. S. e Nogueira, C. R. D. (2001) “A Internet no Trabalho Pedagógico dos Professores”, Informática na Educação – Artigos Científicos. Universidade Regional Integrada do Alto Uruguai e das Missões – URI – RS.
Alves, A. A. e Costa, M. R. (2004) “algolPUC: Uma Ferramenta de Apoio à Programação para Iniciantes”, III Workshop de Educação em Computação e Informática do estado de Minas Gerais (WEIMIG’ 2004). Belo Horizonte, MG, Brasil .
Azeredo, P. A. (2000) “Uma proposta de Plano Pedagógico para a Matéria de Programação”, Anais do II Curso: Qualidade de Cursos de Graduação da Área de Computação e Informática (WEI 2000). Editora Universitária Champagnat.
Azul, A. A. e Mendes, A. J. “EDDL: Um Programa Didático sobre Estruturas de Dados Dinâmicas Lineares”, 3º Simpósio Investigação e Desenvolvimento de Software Educativo – 1998. Évora, Portugal. Disponível em: http://www.minerva.uevora.pt/ simposio/comunicacoes/Mendes/Eddl.html. Acesso: 15 jun 2005.
Black, P. E. “Dictionary of Algorithms and Data Str uctures”. NIST ( National Institute of Standards and Technology). Disponível em http://www.nist.gov/dads/. Acesso: 15 jun 2005.
Borges, K. S. e Filho, H. B. R. (2005) “A Importância dos Grupos de Estudos na Formação Acadêmica”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
Faria, E. S. J. e Coello, J. M. A. (2005) “Um Estudo Empírico dos Efeitos do Uso de Trabalho Colaborativo no Aprendizado de Programação em Cursos de Graduação em Computação”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil .
Faria, E. S. J., Vilela, J. M. e Coello, J. M. A. (2005) “Um Sistema de Aprendizado Colaborativo de Programação Baseado em Agentes chamado Learn In Group”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil .
Flávio, D. “TED - Tutorial de Estruturas de Dados”, desenvolvido durante estágio supervisionado na Universidade do Vale do Itajaí - 2004. Disponível em http://www.tutorialdeestruturadedados.8m.com/. Acesso: 20 jun 2005.
Garcia, I. C., Rezende, P. J. e Calheiros, F. C. (1997) “Astral: Um Ambiente para Ensino de Estruturas de Dados através de Animações de Algoritmos”, Revista Brasileira de Informática na Educação (RBIE’1997) nº 01, http://www.inf.ufsc.br/sbc-ie/revista/nr1/garcia.htm. Ambiente ASTRAL disponível em: http://www.dcc.unicamp.br/~rezende/ASTRAL/. Acesso: 28 abr 2005.
Giraffa, L., Marczak, S. e Prikladnicki, R. (2005) “PSD -E: Em Direção a um Processo para Desenvolvimento de Software Educacional”. XI Workshop de Informática na Escola (WIE’2005). São Leopoldo, RS, Brasil.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
121
Júnior, J. C. R. P. e Rapkiewicz, C. E. (2004) “O Processo de Ensino e Aprendizagem de Algoritmos e Programação: Uma Visão Crítica da Literatura”, III Workshop de Educação em Computação e Informática do estado de Minas Gerais (WEIMIG’ 2004). Belo Horizonte, MG, Brasil.
Júnior, J. C. R. P., Rapkiewicz, C. E., Delgado, C. e Xexeo, J. A. M. (2005) “Ensino de Algoritmos e Programação: Uma Experiência no Nível Médio”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
Koslowski, S. R. e Nunes, M. A. S. N. (2001) “O Computador como Ferramenta Pedagógica nas Séries Iniciais”, Informática na Educação – Artigos Científicos. Universidade Regional Integrada do Alto Uruguai e das Missões – URI – RS.
Raabe, A. L. A. e Silva, J. M. C. (2005) “Um Ambiente para Atendimento das Dificuldades de Aprendizagem de Algoritmos”. XII I Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
Setúbal, J. C. (2000) “Uma proposta de Plano Pedagógico para a Matéria de Computação e Algoritmos”, Anais do II Curso: Qualidade de Cursos de Graduação da Área de Computação e Informática (WEI 2000). Editora Universitária Champagnat.
Soares, T. C. A. P., Cordeiro E. S., Stefani Í. G. A., Tirelo, F. (2004) “Uma Proposta Metodológica para o Aprendizado de Algoritmos em Grafos Via Animação Não-Intrusiva de Algoritmos”, II I Workshop de Educação em Computação e Informática do Estado de Minas Gerais (WEIMIG’ 2004). Belo Horizonte, MG, Brasil .
Souza, P. C. e Wazlawick, R. S. (1997) “Ferramenta de Autoria para a Criação de Ambientes Construtivistas em Realidade Virtual”. Anais do VIII Simpósio Brasileiro de Informática na Educação. Instituto Tecnológico de Aeronáutica (ITA), v. 1.
Wirth, N. (1989) “Algoritmos e Estruturas de Dados”. LTC Informática-Programação.
Yamamoto, F. S., Silva, A. F., Zanutto, J. e Zampirolli, F. A. (2005) “Interdisciplinaridade no Ensino de Computação”. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
Zambalde, A. L. e Alves, R. M. (2002) “Introdução à Informática Educativa”, Textos Acadêmicos para o Curso de Pós-Graduação ‘Lato Sensu’ (Especialização) à Distância – Informática em Educação. UFLA/FAEPE.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
122
O artigo completo a seguir foi publicado em Anais do I COMPSULMT - I
Congresso de Computação do Sul do Mato Grosso, ocorrido na
UFMT/Rondonópolis/MT em 2005.
TBC-AED: Um Software Gráfico para Apresentação de Algor itmos e Estruturas de Dados aos Iniciantes em
Computação e Informática*
Rodrigo Pereira dos Santos1, Heitor Augustus Xavier Costa2
Universidade Federal de Lavras – Departamento de Ciência da Computação – Caixa Postal 3037 – 37.200-000 – Lavras – MG – Brasil
[email protected], [email protected]
Resumo. Este artigo tem o objetivo de apresentar o TBC-AED, um sistema de informação educacional que contem vários temas relacionados aos conteúdos lecionados aos iniciantes em Computação, procurando deixar uma contribuição à literatura e aos docentes da área. Com isso, o TBC-AED busca contribuir para a melhoria da qualidade de ensino de programação, algoritmos e estruturas de dados nos cursos de graduação em Computação e Informática.
Palavras-chaves: algoritmos e estruturas de dados, programação, informática na educação.
Abstract. This paper has the objective to present the TBC-AED, an educational information system that contains a lot of themes related to subjects instructed to beginner students in Computing, and also trying to contribute to literature and to teachers. So, TBC-AED tries to help the improvement of teaching quality of programming, algorithms and data structures in the graduation courses in Computing.
Key-words: algorithms and data structures, programming, computing in education.
1. Introdução
A busca por melhores métodos educacionais para cursos que se embasam em Computação e Informática é uma preocupação constante de professores e coordenadores de curso. A cada dia novas tecnologias são desenvolvidas e novos conceitos precisam ser incorporados à formação universitária, para que sejam formados bons profissionais para o mercado.
* Apoio PBIICT/FAPEMIG.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
123
Um grande desafio que está vinculado a essa formação é a maneira de estruturar o ensino de desenvolvimento de algoritmos, em quaisquer dos cursos escolhidos de Computação e Informática.
Segundo [Ascencio apud Campos et al 2003], algoritmo é a descrição de uma seqüência de passos que deve ser seguida para a realização de uma tarefa, e para [Farrer apud Campos et al 2003], ação é um acontecimento que, a partir de um estado inicial, após um período de tempo finito, produz um estado final previsível e bem definido. Assim, um algoritmo é a descrição de um conjunto de comandos que, obedecidos, resultam em uma sucessão finita de ações.
Atualmente, o ensino de algoritmos busca nas Ciências Exatas seu pilar de sustentação, pois disciplinas nessa área despertam o raciocínio matemático-lógico para resolução de problemas. Mas, isso deve ser mais uma das ferramentas para o estudante e não a sua única fonte, pois a sua formação futura será muito ampla.
O conceito de programação, segundo [Wirth 1989], é arte ou técnica de construir e formular algoritmos de uma forma sistemática. Esse conceito induz que o ingresso tem um dom de programar ou ele pode aprender as técnicas necessárias a aprimorar seu conhecimento. Logo, ao ingressar em um curso superior na área, ele deve ter sua base sedimentada, para que fique apto a prosseguir de maneira positiva durante seus estudos. Com isso, professores de disciplinas relacionadas à programação e coordenadores de curso sentem a grande responsabil idade de buscar e aperfeiçoar sua maneira de conduzir a estrutura disciplinar e curricular dos graduandos em seus estágios iniciais da universidade.
Este artigo tem por objetivo apresentar uma ferramenta computacional didática – TBC-AED (Treinamento Baseado em Computador para Algoritmos e Estruturas de Dados) – fruto de um estudo sobre algoritmos, estruturas de dados e programação. Esta ferramenta visa tornar o ensino deste conteúdo mais prático e abrangente, despertando o interesse do aluno, o seu espírito de pesquisa e a busca de informações que possam torná-lo um profissional crítico e de opinião sólida. Assim, seu rendimento ao longo do curso aumentaria, melhorando o seu desempenho em disciplinas mais específicas.
O artigo está organizado da seguinte forma: seção 2 apresenta um breve relato sobre os problemas acerca do ensino de Computação, algumas soluções e considerações; seção 3 retrata a importância do uso de ferramentas computacionais no ensino; seção 4 detalha algumas ferramentas disponíveis para o ensino de algoritmos, estruturas de dados e programação; e seção 5 apresenta o TBC-AED e alguns resultados iniciais de sua aplicação. Por fim, são apresentadas conclusões e listados trabalhos futuros.
2. Análise de metodologias de ensino de Computação
Dentro da esfera de discussão dos métodos educacionais como ferramentas para a formação de profissionais de qualidade para o mercado, este trabalho se propõe a dar sua contribuição. Entretanto, ele analisa um tema mais abrangente e complexo: as áreas de Computação e Informática, que apresentam inovações constantes e grande transformação de preceitos existentes. Sabe-se que é complicado promover mudanças na educação básica e, ao se tratar de cursos de graduação baseados na produção de tecnologia, o problema é ainda maior. O que se pode perceber são cursos exercendo
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
124
grande atração sobre os ingressantes em uma faculdade, o que mostra a concorrência elevada em processos seletivos. No entanto, vencido o obstáculo de entrada, vêm o início da fase universitária e um dos maiores dilemas: contato com disciplinas básicas que prepararão o ingresso para atuar em áreas específicas. Esse contato, sobretudo em cursos de Computação, pode gerar afinidade e repulsa, o que acontece com freqüência expressiva, conforme [Rodrigues 2002; Schultz 2003; Chaves de Castro et al 2003; Delgado et al 2004 apud Júnior e Rapkiewicz 2004].
Dessa forma, a falta de compreensão do raciocínio lógico pode ser a principal razão pelo alto índice de reprovação nas disciplinas de Algoritmos e Programação e, em alguns casos, pela desistência de um curso. Em parte, isso é decorrência da dificuldade encontrada pelos professores para acompanharem as atividades laboratoriais de programação, dado o alto número de estudantes sob sua supervisão [Tobar et al 2001]. Dentro desse paradigma, pode-se destacar a forma como os alunos estudam para a disciplina, memorizando, e a falta de pré-requisitos em conteúdos relacionados [Júnior e Rapkiewicz 2004].
[Rodrigues 2002] relata outros problemas associados a este processo: i) a falta de motivação do aluno criada pelo despreparo e o desânimo quando há a crença de que a disciplina constitui um obstáculo extremamente difícil de ser superado; ii) o processo tradicional de avaliação pode deixar o aluno tenso prejudicando o aprendizado; ii i) o relacionamento entre professor e aluno pode ser um problema quando o primeiro preocupa-se em mostrar o que sabe desconsiderando um ambiente de aprendizagem descontraído e colaborativo; e iv) a didática ou a falta de metodologia de ensino dificulta o aprendizado dos novos e diversos conceitos. Inclui-se a grave falta de comunicação entre professores das várias disciplinas que permitiria identificar conteúdos afins ou superposição de tópicos, auxil iando na integração do trabalho e no processo de ensino e aprendizagem [Giraffa, Marczak e Almeida 2003; Pimentel, França e Omar 2003].
[Rodrigues 2002] ainda afirma que o professor deve ser capaz de fazer o aluno compreender a abstração envolvida com toda a simbologia utilizada. Para isto, deve utilizar sua criatividade e tentar resolver cada problema baseando-se em situações do cotidiano. Assim, o aluno começa a ter raciocínio lógico e ordem de pensamento.
No entanto, para [Buzin 2001], o iniciante do curso superior traz uma bagagem cultural que não apenas não serve para o apropriado desenvolvimento de um estudo acadêmico, mas atrapalha o desenvolvimento desse estudo. Ele vem de uma experiência de estudante de disciplinas desenvolvidas em torno do paradigma de apresentação de resposta e soluções, usualmente da velha e surrada didática diretiva, ao invés de focar no processo de questionamento. Com certeza, sem uma radical mudança cultural de atitude e comportamento, este indivíduo não será um profissional de computação adequado, pois é preciso desenvolver a capacidade de buscar a resposta através de novas perguntas que levem à resposta da questão original. A formação do profissional em computação deve incitar desenvolvimento de raciocínio crítico, solução de problemas, aplicação de métodos de pesquisa e desenvolvimento profissional contínuo. Assim, mais uma das vertentes do problema educacional na área de Computação encontra-se na sua formação básica.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
125
Mas, considerando o campo universitário, o nível de maturidade do aluno é importante para que o professor possa adequar o processo pedagógico no sentido de acompanhar o amadurecimento do aluno, permitindo aplicar técnicas de ensino e aprendizagem [Júnior e Rapkiewicz 2004]. Entretanto, o acompanhamento contínuo do aprendiz e o tratamento personalizado ao estudante, em turma com um número elevado de alunos, serão possíveis se forem apoiados por sistemas inteligentes, ou seja, auxil iados por computador [Pimentel, França e Omar 2003]. Logo, a idéia de usar produtos de software para o ensino de programação é de grande valia e ainda poderá transformar o ensino de disciplinas avançadas em algo mais primoroso e tecnológico.
A partir de todo esse desafio problemático, mudanças passaram a ser consideradas por graduados, mestres e doutores que trabalham com o ensino de algoritmos e programação. A análise da literatura feita por [Júnior e Rapkiewicz 2004] mostrou que há três vertentes na busca de soluções para os problemas apontados: i) Ferramentas, incluem trabalhos que apresentam ferramentas computacionais visando facil itar o processo de ensino e aprendizagem; ii) Estratégias, incluem trabalhos que discutem estratégias de ensino e/ou de avaliação de competências; e iii) Ferramentas e Estratégias, são os trabalhos que discutem alguma estratégia suportada por ferramentas computacionais.
Assim, a linha deste trabalho vem ao encontro com o terceiro tópico. Além do desenvolvimento do produto de software (ferramenta computacional), ocorre também uma discussão a respeito do uso de ferramentas computacionais nas aulas, visando melhorar o ensino de programação, algoritmos e estruturas de dados. Pois, estes são pontos fortes para a formação de profissionais nas áreas de Computação e Informática.
3. A impor tância do uso de ferr amentas computacionais no ensino
É importante salientar alguns pontos especiais: • a aula de uma disciplina que relaciona programação, algoritmos e estruturas de dados
deve ser realizada em laboratórios para que os alunos possam entender as abstrações apresentadas. Deve ser composta de uma parte teórica, onde conceitos são transmitidos, e uma parte prática, onde são entendidos comandos e tópicos ministrados. Deve também haver questões-desafio, para que os discentes sejam acostumados a usar de agil idade e criatividade na solução de problemas [Júnior e Rapkiewicz 2004];
• o TBC-AED, que enfatiza animação gráfica, é de extrema importância como facil itador do processo de aprendizagem, visto que a apresentação de conceitos abstratos se torna mais viável e didática, melhorando a qualidade do material das aulas [Soares et al 2004];
• normalmente, um aluno se interessa por aulas diferenciadas e isso não só prende sua atenção, como também influenciam positivamente nas avaliações [Buzin 2001];
• uma economia de tempo pode ser conseguida e esta seria direcionada para maiores explicações e resoluções de exercícios, uma vez que o material didático seria virtual, evitando uma explanação cansativa através do quadro-negro [Santos e Costa 2005];
• o aluno tem acesso livre ao material virtual para estudar em casa. Além disso, ele possuirá um valioso projeto, para consultas futuras, em caso de necessidade – a tendência em abstrair detalhes, com o passar do tempo, sempre leva a dúvidas e estas
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
126
a novas pesquisas em estruturas básicas ora aprendidas [Garcia, Rezende e Calheiros 1996];
• a transição de educadores também seria facil itada, uma vez que existiria uma base pronta para ser apreciada, mantendo a qualidade de ensino e aprendizagem do conteúdo.
Assim, o TBC-AED é um subsídio valioso para a formação de alunos, ajudando-os a concluírem seu curso, pois atende a disciplinas que estão no início do curso e são pré-requisitos necessários para as disciplinas mais específicas de períodos avançados. Quando feita uma boa base, rendimento e desempenho aumentam, proporcionando melhores resultados, melhores currículos e melhores profissionais para o mercado.
4. Ferramentas para o ensino de algor itmos, estruturas de dados e programação
Para o desenvolvimento de qualquer trabalho, faz-se necessário discutir o que realmente há de contribuição ao universo acadêmico. Nesta seção, são citados alguns projetos relacionados. Deve-se ressaltar, contudo, que não houve pretensão de fazer uma análise exaustiva de tais projetos. São eles: • ASTRAL (Animation of Data Structures and Algorithms) [Garcia, Rezende e
Calheiros 1997]. É um ambiente de programação para produção de animações de algoritmos e estruturas de dados com propósito instrucional. O ambiente foi desenvolvido no Instituto de Computação da UNICAMP em 1995-97 para plataforma Macintosh e recentemente portado para Windows. Utilizando o ambiente, um usuário pode implementar uma variedade de estruturas de dados e algoritmos e, através de chamadas de algumas rotinas específicas do ambiente, é possível visualizar graficamente as estruturas de dados bem como animações dos algoritmos. Isso se dá através de uma biblioteca de suporte gráfico que é parte do ASTRAL. A abordagem de animação de algoritmos tem duas vantagens imediatas: aprendizado, beneficia da observação dinâmica do funcionamento das estruturas de dados e proporciona um nível de abstração maior, e depuração, que é facilitada pela visualização gráfica, deixando claro ao usuário-programador, no momento da execução, em que parte da implementação da estrutura ou do algoritmo os erros ocorrem. Estas vantagens são interessantes aos alunos de disciplinas de estruturas de dados e algoritmos. O uso do ASTRAL em disciplinas de graduação sobre estruturas de dados com componente de programação foi muito bem sucedido em vários semestres;
• EDDL (Estruturas de Dados Dinâmicas Lineares) [Azul e Mendes 1998]. Surgiu de uma discussão sobre estratégias de ensino das estruturas de dados e tipos de dados abstratos utili zados em programação. A estruturação do programa EDDL e a concepção da sua funcionalidade englobam as seguintes componentes: 1) abordagem introdutória aos conceitos ou especificação dos tipos de estruturas; 2) técnicas de implementação; 3) utilização dessas estruturas na resolução de problemas. Pode-se utilizar como ferramenta introdutória ou de revisão, exercitação e auto-avaliação. Após o desenvolvimento dos primeiros protótipos, o EDDL adquiriu uma configuração global em que uma tela principal dá acesso aos módulos principais do programa, que são: conceitos introdutórios, pilhas, filas, listas lineares e exercícios. Em cada uma dessas seções, são analisadas em detalhes as operações mais usuais com estes tipos de estruturas, tais como: criação e destruição da estrutura, inserção e
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
127
remoção de elementos na estrutura e verificação do estado da estrutura. O processo de avaliação do programa em situações concretas de ensino/aprendizagem está em curso. Oferece um conjunto de ferramentas e recursos de programação que revelam ser ao mesmo tempo intuitivo e de fácil manipulação, diversificado, versátil e eficaz para o desenvolvimento de projetos, principalmente quando o aspecto gráfico é uma das componentes importantes a considerar;
• TED (Tutorial de Estruturas de Dados) [Flávio 2004]. É um tutorial para dinamizar o ensino na disciplina de estrutura de dados e é um software educacional com o objetivo de permitir uma maior interação professor-aluno, servindo como uma ferramenta de apoio ao aprendizado. O tutorial subdivide-se nas várias estruturas apresentadas durante a disciplina, permitindo ao aluno ter uma visão individualizada dos conteúdos, mas sem perder a visão do todo. Através de conceitos de dinamização de aprendizagem, como a visualização dos acontecimentos simultaneamente com o que é executado, o aluno cria uma visão de totalidade do sistema. O tutorial apresenta algoritmos das estruturas de dados, ao mesmo tempo que demonstra a sua implementação lógica através de exemplos visuais permitindo ao aluno acompanhar os passos simultaneamente ao que é executado;
• Dictionary of Algor ithms and Data Structures [Black 2005]. Este site contém uma parte do Software Quality Group do Software Diagnostics and Conformance Testing Division, Information Technology Laboratory. Este é um dicionário de algoritmos, técnicas algorítmicas, estruturas de dados, problemas atípicos e definições relativas. Os algoritmos incluem funções comuns e os problemas incluem alguns como o caixeiro viajante. Alguns tópicos têm links para implementações e mais informações. A página de índice relaciona os tópicos por tipo ou em ordem alfabética. Apresenta o funcionamento dos algoritmos como animações sendo executadas ao se definirem os seus parâmetros.
5. O “ TBC-AED” – Desenvolvimento do produto de software e seus reflexos
O TBC-AED é o produto de software que vem ao encontro dos objetivos discutidos até o momento. Ele procura analisar tópicos básicos de programação, englobando conteúdo teórico sintético e direto, acompanhado de processo gráfico passo a passo, representando um repositório didático com visualização gráfica. Isso facil ita visualização e entendimento das informações apresentadas e economiza o tempo gasto em transcrever explicações do quadro-negro para o caderno para resolução de exercícios de aplicação e fixação. Além disso, pode-se alcançar maior interação professor-aluno, aumentando o espaço para questionamentos.
Foi observado que o TBC-AED, mais que uma simples ferramenta, é um verdadeiro material de coleta de informações a respeito de programação, algoritmos e estruturas de dados. Ele representa uma experiência profissional, pois foi desenvolvido para fins de consumo que, neste caso, é gratuito e direcionado aos alunos de área de Computação e Informática. Além disso, ele visa atender aos alunos que estudam algoritmos e estruturas de dados básicas. Isso é importante, pois aumenta a interação aluno-computador, o que propicia estímulos de curiosidade, atenção e eficácia no desenvolvimento de trabalhos relacionados e do raciocínio lógico.
Durante o processo de embasamento teórico-prático, vários exemplos foram vistos e estudados para que o TBC-AED pudesse ser elaborado com cuidado especial, o que
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
128
não despertava qualquer tipo de receio; além disso, o seu conteúdo era de conhecimento. Com a introdução e a sedimentação de informações, o TBC-AED começou a ser desenvolvido e passou por várias etapas de melhorias, aplicadas à forma de apresentação e ao processamento dos algoritmos propriamente dito.
Enfim, o TBC-AED possui, diferentemente dos demais ambientes de ensino discutidos na seção anterior, algumas características, tais como: links explicativos, evitando a necessidade de aprendizagem via tutorial; a usabil idade da interface gráfica é razoável, possibil itando ao professor apresentar conceitos iniciais, conteúdos teóricos e práticos aos poucos, como apresentaria em transparências; conteúdo teórico simples, familiarizando melhor o aluno com o assunto; processo gráfico passo a passo, com elementos numéricos, melhorando a visualização e o entendimento; e legendas explicativas, ilustrando as etapas do processo de apresentação de algoritmos, facil itando o aprendizado e englobando aulas teóricas e práticas, ao envolver uma nova forma de transmitir conhecimento.
Quanto ao desenvolvimento, o TBC-AED apresenta 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. Ele foi elaborado usando a linguagem de programação Java (devido à portabili dade) e o ambiente de desenvolvimento NetBeans, ambos disponíveis em (www.sun.com). Ele se organiza segundo uma tela principal, contendo uma barra de menu separando os temas, que direcionam o usuário para o assunto de seu interesse (Figura 1).
Figura 1. Tela principal do TBC-AED
Ao selecionar um desses temas, um submenu é apresentado, contendo um item explicativo do tema (Figura 2) e outros itens de representação gráfica do tema. A Figura 3 mostra uma janela relativa à representação gráfica do tópico Busca Binária, o qual apresenta uma breve introdução a respeito do assunto pesquisado (na parte superior), o algoritmo em Portugol8 (à esquerda), o painel de animação, onde o algoritmo será executado graficamente (à direita), contendo uma legenda e um conjunto de botões (na parte inferior).
8 Por tugol ou pseudocódigo consiste em analisar o enunciado do problema e escrever, por meio de regras predefinidas, os passos a serem seguidos para a resolução do problema [Campos et al 2003].
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
129
Figura 2. Janela de mensagem exibida contendo uma introduç ão a respeito do tópico relacionado
A única tela que se diferencia dos padrões descritos anteriormente é relativa ao tópico Árvore Binária de Busca que, devido à sua peculiaridade de representação perante aos demais temas, demandou maior espaço para o processo gráfico (Figura 4). As mudanças ocorreram no posicionamento interno das informações: o algoritmo em Portugol possui uma área menor contendo na parte inferior uma janela de mensagem interna usada para o efeito de passo a passo, e o painel de animação é exibido em uma área maior, contendo na parte inferior um espaço para a exibição dos elementos quando o usuário requisitar uma das formas de imprimir uma árvore binária (pré-ordem, in-ordem ou pós-ordem) e uma legenda.
Figura 3. Tela Busca Binária
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
130
Figura 4. Tela Árvore Binária com suas peculiaridades
Uma característica importante do TBC-AED é ser auto-explicativo. Para isto, basta deslizar com o mouse nas partes da tela para ver uma breve descrição sobre a região posicionada. Isso deixa o usuário à vontade e sem preocupações quanto a qualisquer peculiaridades, também por se tratar de um produto de software direcionado para alunos iniciantes em cursos de Computação.
Dentre as vantagens da abordagem construtiva definida por [Garcia, Rezende e Calheiros 1996], estão mecanismos para facilitar o processo de abstração, o fato da animação refletir a interação com o aprendiz e as várias facil idades para a detecção visual de erros. Com isso, incentiva-se o processo de compreensão e autocorreção. Isso pode ser facilmente percebido em processos recursivos, os quais são de difícil explicação teórica, mas que podem ser vistos facilmente através da animação gráfica disponível em ambientes que utili zam algum algoritmo desse tipo (como merge sort e quick sort).
Com isso, verifica-se que a organização do TBC-AED é amplamente didática e esse fato serve de grande utilidade para o ensino de disciplinas que apresentam como ementa os tópicos relacionados. Além disso, é uma experiência desafiadora para graduandos, mestres e doutores tornar o ensino de Computação mais dinâmico, ao despertar o seu interesse a terem a mesma iniciativa, se possível com igual dedicação e empenho, para melhorar e aprimorar a formação de recursos humanos para a tecnologia.
6. Conclusões e trabalhos futuros
Sob todo conjunto de informações obtidas até o momento, pode-se perceber que existe uma gama de recursos que possibilitam o desenvolvimento de ferramentas computacionais para o auxílio da educação superior em Computação, com destaque para a linguagem de programação Java, que conta com a portabili dade e forte suporte para técnicas adequadas de Engenharia de Software [Deitel e Deitel 2003]. Isso faz com que novas tecnologias atinjam mais rapidamente seu público alvo.
Além disso, observou-se que o uso de produtos de software para o ensino de programação e algoritmos é uma idéia interessante, se for amadurecida e desenvolvida de forma cuidadosa e estruturada. Isso fornece novas experiências para professores e alunos, que se proponham a trabalhar com esse tema. Além disso, eles terão sua qualidade de ensino elevada e poderão ser capazes de avançar mais rapidamente no
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
131
campo do conhecimento, através da agil idade de processos didáticos e da participação ativa do docente da área.
Conclui-se também que uma boa elaboração de produtos tecnológicos que facil item a transmissão de conhecimento em Computação deve ser acompanhada de expressiva pesquisa no campo de novas metodologias de ensino. A principal finalidade é cada vez mais ter contribuições que incorram no aprimoramento do ensino superior e na formação de profissionais qualificados para o mercado. Isso reflete principalmente sobre futuros professores, uma vez que aqueles que têm passado por esse tipo de experiência durante a graduação terão grande interesse em executar o processo quando estiverem lecionando.
Dessa forma, compreende-se que a educação precisa ser reavaliada, pois representa a base da atual sociedade mundial e o único instrumento que pode desenvolver o ser humano e torná-lo digno de constituir sua vida e seu ambiente. Isso deve ser acompanhado por uma atitude crítica da comunidade científica formada, que é a maior interessada em manter e prosseguir com avanços que contribuam para a melhoria da qualidade de vida.
Com relação ao uso do TBC-AED, alguns seminários de apresentação e simulações de recursos foram realizados durante o 1° semestre de 2005 aos alunos que cursavam a disciplina e aos que a utilizariam no 2° semestre, agora com o seu uso contínuo.
Até o momento, o TBC-AED atende às expectativas, pois se notou que os alunos ficaram mais motivados e mais atentos, uma vez que utilizam o computador diretamente. Além disso, a ferramenta está disponível aos alunos, que podem acessar exemplos práticos extraclasse, ou seja, em casa ou outro lugar que não seja no horário da aula.
Foi observado que a ferramenta altera o ânimo dos alunos, pois conceitos abstratos passam a ser melhor visualizados e compreendidos, melhorando a dinamização do ensino. Isso também contribuiu para um tempo maior reservado à resolução de exercícios, levando à sedimentação da teoria. Isso resulta em maior expectativa do aumento do índice de aprovação em uma disciplina importante para a Computação.
Com a apresentação e disponibil ização do TBC-AED, os alunos que a utilizaram obtiveram êxito, perfazendo um total geral de aprovação superior àqueles que não a utilizaram. Assim, para melhorar os resultados, optou-se em dividir a carga horária da disciplina, antes apenas teórica, em teóricas e de laboratório para o 2° semestre de 2005.
Como trabalhos futuros, está-se disponibil izando o TBC-AED/Web, para se ter maior acessibil idade, além de possibil itar a troca de idéias, através da interatividade com usuários diversos. A partir disso, também é interessante atacar outro assunto de grande importância, algoritmos em grafos, a fim de ampliar o conhecimento e contribuir para a melhoria do ensino na área, através de novas ferramentas para o ensino de Computação.
Referências Azul, A. A. e Mendes, A. J. EDDL: Um Programa Didático sobre Estruturas de Dados
Dinâmicas Lineares, 3º Simpósio Investigação e Desenvolvimento de Software
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
132
Educativo – 1998. Évora, Portugal. Disponível em: http://www.minerva.uevora.pt/ simposio/comunicacoes/Mendes/Eddl.html. Acesso: 15 jun 2005.
Black, P. E. Dictionary of Algorithms and Data Structures. NIST (National Institute of Standards and Technology). Disponível em http://www.nist.gov/dads/. Acesso: 15 jun 2005.
Buzin, P. F. W. K. (2001) A epistemologia da Ciência da Computação: Desafio do Ensino dessa Ciência, Revista de Educação, Ciência e Cultura, v. 6, nº 2. Centro Universitário La Salle. Canoas, RS, Brasil.
Campos, E. A. V. e Ascencio, A. F. G. (2003) Fundamentos da Programação de Computadores. Editora Prentice Hall.
Deitel, H. M. e Deitel, P. J. (2003) Java Como Programar. Bookman Companhia ed Informática.
Flávio, D. TED - Tutorial de Estruturas de Dados, desenvolvido durante estágio supervisionado na Universidade do Vale do Itajaí - 2004. Disponível em http://www.tutorialdeestruturadedados.8m.com/. Acesso: 20 jun 2005.
Garcia, I. C., Rezende, P. J. e Calheiros, F. C. (1997) Astral: Um Ambiente para Ensino de Estruturas de Dados através de Animações de Algoritmos. Revista Brasileira de Informática na Educação nº 01, http://www.inf.ufsc.br/sbc-ie/revista/nr1/garcia.htm. Ambiente ASTRAL disponível em: http://www.dcc.unicamp.br/~rezende/ASTRAL/. Acesso: 28 abr 2005.
Giraffa, L., Marczak, S. e Almeida, G. (2003) O Ensino de Algoritmos e Programação mediado por uma Ambiente Web, Congresso Nacional da Sociedade Brasileira de Computação (SBC’2003). Campinas, SP, Brasil.
Júnior, J. C. R. P. e Rapkiewicz, C. E. (2004) O Processo de Ensino e Aprendizagem de Algoritmos e Programação: Uma Visão Crítica da Literatura. II I Workshop de Educação em Computação e Informática do estado de Minas Gerais. Belo Horizonte, MG, Brasil.
Pimentel, E. P., França, V. F. e Omar, N. (2003) A Caminho de um Ambiente de Avaliação e Acompanhamento Contínuo de Aprendizagem em Programação de Computadores. II Workshop de Educação em Computação e Informática do Estado de Minas Gerais. Poços de Caldas, MG, Brasil .
Rodrigues, M. C. Como Ensinar Programação?. Informática – Boletim Informativo Ano I nº 01, ULBRA. Canoas, RS, Brasil.
Santos, R. P. e Costa, H. A. X. (2005) TBC-AED e TBC-AED/WEB: Um Desafio no Ensino de Algoritmos, Estruturas de Dados e Programação, IV Workshop de Educação em Computação e Informática do estado de Minas Gerais. Varginha, MG, Brasil
Soares, T. C. A. P., Cordeiro, E. S., Stefani, I. G. A. e Tirelo, F. (2004) Uma Proposta Metodológica para o Aprendizado de Algoritmos em Grafos Via Animação Não-intrusiva de Algoritmos, II I Workshop de Educação em Computação e Informática do estado de Minas Gerais. Belo Horizonte, MG, Brasil .
Tobar, C. M., Rosa, J. L. G., Coelho, J. M. A. e Pannain, R. (2001) Uma Arquitetura de Ambiente Colaborativo para o Aprendizado de Programação, XII Simpósio Brasileiro de Informática na Educação. Vitória, ES, Brasil.
Wirth, N. (1989) Algoritmos e Estruturas de Dados. LTC Informática-Programação.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
133
O artigo completo a seguir foi publicado na Revista INFOCOMP – Journal of
Computer Science, Volume 5, Número 1, edição de março de 2006.
Análise de Metodologias e Ambientes de Ensino para Algor itmos, Estruturas de Dados e Programação aos
iniciantes em Computação e Informática*
Rodr igo Pereira dos Santos1
Heitor Augustus Xavier Costa2
UFLA – Universidade Federal de Lavras
DCC – Departamento de Ciência da Computação Cx Postal 37 – CEP 37200-000 – Lavras (MG)
Resumo. Este artigo tem o objetivo de apresentar a importância de um bom ensino de fundamentos de algoritmos e programação em cursos de graduação em Computação e Informática. Para isso, serão listados alguns problemas de ensino de tais conteúdos, juntamente com algumas estratégias pesquisadas na literatura para tentar saná-los. Dessa forma, tenta deixar uma contribuição à literatura e aos docentes da área.
Palavras-chaves: Metodologias de Ensino de Computação, Algoritmos e Estruturas de Dados, Programação.
Methodologies Analysis and Environment of Teaching for Algor ithms, Data Structures and Programming to beginners in Computing
Abstract. This paper has the objective to present the importance of a good teaching of algorithms and programming foundations in graduation courses in Computing. For that, some problems of teaching of such contents will be presented, together with some strategies researched in the li terature to try solving them. In that way, it tries to leave a contribution to the literature and the teachers of the field.
Key-words: Computing Teaching Methodologies, Algorithms and Data Structures, Programming.
(Received December 07, 2005 / Accepted January 24, 2006)
* Apoio PBIICT/FAPEMIG
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
134
1. Introdução
A crescente quantidade de informação e a tecnologia gerada atualmente tornam necessária a presença de profissionais de caráter persuasivo e inovador, que sejam capazes de unir inteligência e dinamismo na busca por melhores soluções de problemas. Isso encontra sua principal base nas metodologias de ensino aplicadas durante o estágio universitário, principalmente na área de Computação e Informática, que envolve tecnologias em constante desenvolvimento.
Com o intuito de produzir melhores resultados no processo de aprendizagem nessas áreas, faz-se constante a necessidade de atualização das didáticas de ensino de forma geral. O objetivo disso é transformar processos abstratos em concretos, através de produtos de software que possibilit em melhor compreensão dos tópicos abordados e maior interação entre aluno-objeto de trabalho (neste caso, o computador). Isso encontra sua maior barreira nos estágios iniciais dos cursos relacionados, quando do contato com o estudo de algor itmos, raciocínio lógico e programação.
Segundo [6], algoritmo é a descrição de uma seqüência de passos que deve ser seguida para a realização de uma tarefa e ação é um acontecimento que, a partir de um estado inicial, após um período de tempo finito, produz um estado final previsível e bem definido. Assim, um algoritmo é a descrição de um conjunto de comandos que, obedecidos, resultam em uma sucessão finita de ações.
Atualmente, o ensino de algoritmos busca nas Ciências Exatas seu pilar de sustentação, pois disciplinas nessa área despertam o raciocínio matemático-lógico para resolução de problemas. A título de exemplo, conforme [14], alguns autores preconizam a necessidade de domínio de habili dades matemáticas prévias ou ao menos integradas, ou pelo menos desejável, sendo considerado até um bom indicador de sucesso para o processo. Para outros, o próprio nível de conhecimento prévio de lógica matemática é discutido. Mas, isso deve ser mais uma das ferramentas para o estudante e não a sua única fonte, pois a sua formação futura será muito ampla.
O conceito de programação, segundo [26], é a arte ou a técnica de construir e formular algoritmos de uma forma sistemática. Esse conceito induz que o ingresso tem um dom (arte) de programar ou ele pode aprender as técnicas necessárias a aprimorar seu conhecimento. Logo, ao ingressar em um curso superior na área, ele deve ter sua base bem sedimentada, para que fique apto a prosseguir de maneira positi va durante os
seus estudos. Com isso, professores de disciplinas relacionadas à programação e coordenadores de curso sentem a grande responsabili dade de buscar e aperfeiçoar sua maneira de conduzir a estrutura disciplinar e curricular dos graduandos em seus estágios iniciais da universidade.
Com toda esta bagagem a ser assimilada, uma linha de pesquisa, visando melhorias no ensino básico em Computação e Informática, é aquela direcionada para a tendência de utilizar ferramentas computacionais como ambientes de estudo. Segundo [24], a partir de observações dentro de disciplinas de graduação, percebe-se também um melhor resultado no aprendizado por meio de atividades práticas de desenvolvimento de simuladores e ferramentas visuais didáticas de representação de conceitos abstratos. Além disso, acompanhando esse desenvolvimento, a linha acopla contribuições dos pesquisadores para novas estratégias de transmissão de conhecimentos. Isso promove a ampliação do acervo existente, a melhor organização de currículos para o mercado de trabalho e o acesso facilit ado de tais recursos inovadores através de suporte via web.
No entanto, a elaboração de uma ferramenta computacional didática deve tornar o ensino do conteúdo abordado mais prático e abrangente, de forma a despertar o interesse do aluno, o seu espírito de pesquisa e a busca de informações que possam torná-lo um profissional crítico e de opinião sólida. Assim, seu rendimento ao longo do curso aumentaria, melhorando o seu desempenho em disciplinas mais específicas. Além disso, deve despertar a atenção dos alunos, pela inovação e dinamização injetadas às aulas, com sua utilização ([20]).
Este artigo tem por objetivo apresentar a importância de um bom ensino de fundamentos de algoritmos e programação em cursos de graduação em Computação e Informática, listando alguns problemas de ensino de tais conteúdos, juntamente com algumas estratégias pesquisadas na literatura para tentar saná-los. Isso possibilit a maior disseminação do conhecimento e promove a interatividade entre docentes e graduandos da área, enriquecendo a pesquisa com críticas e sugestões. Para alcançar este objetivo, são relatados alguns ambientes existentes de ensino a distância.
O artigo está organizado da seguinte forma: a seção 2 apresenta a importância da programação e dos algoritmos no ensino de Computação; a seção 3 apresenta um breve relato sobre os problemas acerca do ensino de Computação, li stando algumas pesquisas, com soluções e considerações; a seção 4 retrata a importância do uso de ferramentas computacionais no ensino, com suas vantagens; e a seção 5 detalha algumas ferramentas disponíveis
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
135
atualmente para o ensino de algoritmos, estruturas de dados e programação. Por fim, na seção 6, são apresentadas conclusões. 2. Programação e Algor itmos: a Base da Computação
Segundo a estrutura curricular constante nas
Diretrizes Curriculares do MEC ([1]), a matéria de Programação faz parte da área de formação básica em Ciência da Computação, juntamente com as matérias Computação e Algoritmos e Arquitetura de Computadores. Seu conteúdo abrange, além do ensino de linguagens de programação propriamente ditas, os conceitos, os princípios e os modelos de programação e o estudo de estruturas de dados e de métodos de classificação e pesquisa de dados. Conforme consta na caracterização da matéria programação, entendida como programação de computadores, ela é uma atividade voltada à solução de problemas. Nesse sentido, ela está relacionada com uma variada gama de outras atividades como especificação, projeto, validação, modelagem e estruturação de programas e dados, utilizando as linguagens de programação como ferramentas.
Ao contrário do que se apregoava há alguns anos, a atividade de programação deixou de ser uma arte para se tornar uma ciência, envolvendo um conjunto de princípios, técnicas e formalismos que visam ao desenvolvimento de produtos de software bem estruturados e confiáveis. Cite-se, dentre estes, os princípios da abstração e do encapsulamento e as técnicas de modularização e de programação estruturada.
Portanto, o estudo de programação não se restringe ao estudo de linguagens de programação. As linguagens de programação constituem-se em uma ferramenta de concretização de produto de software, que representa o resultado da apli cação de uma série de conhecimentos que transformam a especificação da solução de um problema em um programa de computador que efetivamente resolve aquele problema.
No estudo de linguagens de programação, deve ser dada ênfase aos seus aspectos funcionais e estruturais, em detrimento aos detalhes de sintaxe. Conceitos como o significado de associação, avaliação, atribuição, chamada de procedimento, envio de mensagens, passagem de parâmetros, herança, polimorfismo e encapsulamento devem ser enfatizados. O estudo de linguagens de programação deve ser precedido do estudo dos principais paradigmas de programação, notadamente a programação imperativa, a funcional, a baseada em lógica e a orientada a objetos.
O desenvolvimento de algoritmos e o estudo de estruturas de dados devem receber especial atenção na abordagem do tema programação. Igualmente, deve ser dada ênfase ao estudo das técnicas de especificação, projeto e validação de programas. Um excelente campo para o exercício da programação é constituído pelo estudo de pesquisa em tabelas e de técnicas de ordenação (deve-se acrescentar o uso de estruturas de dados para o exercício da programação).
Dessa forma, deve-se entender que ensinar programação não é simplesmente ensinar uma linguagem de programação. Este ensino envolve sobretudo entender problemas e descrever formas de resolução, de maneira imparcial, para que então sejam codificadas em uma linguagem de programação. Ou seja, somente após o aprendizado dos conceitos de algoritmos e fundamentos de lógica, o estudante pode travar contato com uma linguagem de programação concreta para experimentar aqueles conceitos.
Além disso, o estudo de programação deve passar efetivamente pelo estudo de estruturas de dados. Assim, quando se projeta um programa, deve-se pensar nos algoritmos que manipulam os dados e na forma de estruturar estes dados. Desta maneira, as duas coisas se complementam.
De acordo com [1], no ensino de estruturas de dados, deve ser dado destaque à parte conceitual e comportamental das estruturas, antes de pensar em implementação. Por exemplo, no ensino de estruturas lineares, deve-se transmitir ao aluno o conceito desta estrutura, através das operações aplicáveis, como criar, acrescentar, consultar e remover elementos de uma lista encadeada. Em um curso de Ciência da Computação, esta parte pode ser apresentada através de uma especificação algébrica, por exemplo. Em seguida, discutem-se formas de implementações ou representações físicas das li stas (contigüidade, encadeamento, circulares, duplamente encadeada, com/sem descritor, etc). Este tópico é onde normalmente o aluno apresenta maior dificuldade de assimilação do conceito, uma vez que o encadeamento não é um conceito muito freqüente na vida real, dificultando sua compreensão. Dessa forma, é recomendável que as disciplinas de estruturas de dados possuam significativa atividade prática em laboratório.
Com relação aos cursos na área de Computação e Informática, os cursos de li cenciatura visam à formação de educadores para o ensino médio. Os cursos de Ciência da Computação e Engenharia de Computação são voltados para a formação de recursos humanos para o desenvolvimento científico e tecnológico da computação. Embora conhecedores da matéria, não necessariamente devem sair dos cursos com o perfil
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
136
de programadores. Os cursos de Sistemas de Informação incluem a formação de programadores entre seus objetivos. Nesse sentido, em um curso de Licenciatura em Computação, o aluno poderá ter uma carga de prática de programação menor do que a exigida nos demais cursos, sem prejuízo da parte conceitual da matéria. Deve haver uma diferenciação entre os casos de cursos de atividade fim e de atividade meio. Para este último, recomenda-se uma ênfase maior no conhecimento de linguagens de programação e atividades práticas.
Assim, a programação é, pois, um dos pontos chaves em um curso de Computação, pois é a atividade que supre o computador com meios para servir ao usuário. Seu uso adequado e o entendimento de conceitos, princípios, teorias e tecnologias podem conduzir ao desenvolvimento de produtos de software de qualidade, objetivo final, tanto quando se tem a computação como uma atividade meio como quando a computação é tida como uma atividade fim.
Com esse intuito, [23] apresenta algumas recomendações genéricas a serem aplicadas no ensino de disciplinas relacionadas a algoritmos e computação: • coerência com os objetivos fundamentais. Por
coerência, entende-se que o professor deve: i) expressar claramente as idéias, os conceitos e as técnicas perante os alunos (se o professor coloca algoritmos confusos na lousa ou em transparências, ele não pode esperar algoritmos claros nas respostas dos alunos); ii) destacar a importância dos resultados teóricos e mostrar rigor formal toda vez que isto se fizer necessário; e iii) procurar valorizar o uso de técnicas na resolução de problemas. Esta última coerência pode ser alcançada em particular usando a técnica de descobrir a solução de um problema junto com os alunos, ao invés de simplesmente apresentar e explicar soluções prontas;
• ênfase no pensamento crítico. Este é papel de toda educação, porém, nesta matéria, um cuidado especial deve ser necessário dada sua natureza teórica com forte componente matemático. Em outras palavras, os alunos que têm pouca maturidade matemática tendem a acreditar em qualquer demonstração que lhes é apresentada. Tal comportamento deve ser desestimulado. É essencial que os alunos duvidem daquilo que lhes é apresentado e é com dúvidas saudáveis e sua resolução que a percepção da importância do resultado teórico poderá ser consolidada. Nesse sentido, considera-se um recurso valioso o conjunto de
exercícios que pedem para os alunos identificarem falhas de argumentação (por exemplo, em uma demonstração errada), erros em algoritmos ou erros em notícias da imprensa;
• a teoria na prática. A experiência com o ensino dessas disciplinas de Computação mostra que os alunos, em geral, não se sentem atraídos por elas, por considerarem-nas muito abstratas. Por esse motivo, crê-se ser importante usar como recurso didático sempre que possível um grande número de exemplos da vida real. A inclusão de projetos de implementação, seja dentro das disciplinas teóricas, seja dentro de uma disciplina específica, também visa a tornar a matéria menos abstrata. De resto, é importante salientar para os alunos o grande impacto que os resultados teóricos têm alcançado na prática.
3. Análise de Metodologias de Ensino de Computação abordando problemas e soluções
Dentro da esfera de discussão dos métodos
educacionais como ferramentas para a formação de profissionais de qualidade para o mercado, o presente trabalho se propõe a dar sua contribuição. Entretanto, ele analisará um tema mais abrangente e complexo: as áreas de Computação e Informática, que apresentam inovações constantes e grande transformação de preceitos existentes. Sabe-se que é complicado promover mudanças na educação básica e, ao se tratar de cursos de graduação baseados na produção de tecnologia, o problema é ainda maior. O que se pode perceber é esses cursos exercerem grande atração sobre os futuros ingressos em uma faculdade, o que se mostra pela concorrência elevada em processos seletivos. No entanto, vencido o obstáculo de entrada, vêm o início da fase universitária e um dos maiores dilemas: o contato com disciplinas básicas que vão preparar o ingresso para atuar em áreas específicas. Esse contato, sobretudo em cursos de Computação, pode gerar tanto afinidade quanto repulsa, o que acontece com freqüência expressiva, conforme [14].
Os problemas apresentados na compreensão de conceitos abstratos de programação, conforme [5], encontra sua raiz ainda durante a formação básica, o que caracteriza uma importante linha de pesquisa na metodologia educacional. Com certeza, sem uma radical mudança cultural de atitude e comportamento, um indivíduo dificilmente será um profissional de Computação adequado, visto que é preciso desenvolver a capacidade de buscar respostas através de novas perguntas que levem à resposta da questão original. A formação do profissional em Computação deve incitar o desenvolvimento de raciocínio crítico, a solução de
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
137
problemas, a apli cação de métodos de pesquisa e o desenvolvimento profissional contínuo.
Dessa forma, a falta de compreensão do raciocínio lógico pode ser a principal razão pelo alto índice de reprovação nas disciplinas de Algoritmos e Programação e, em alguns casos, pela desistência de um curso. Em parte, isso é decorrência da dificuldade encontrada pelos professores para acompanharem efetivamente as atividades laboratoriais de programação, dado o grande número de estudantes geralmente sob sua supervisão ([25]). Dentro desse paradigma, pode-se destacar a forma como os alunos estudam para a disciplina, geralmente memorizando, e a falta de pré-requisitos em conteúdos relacionados ([14]).
Em [19], são relatados outros problemas associados a este processo: • a falta de motivação do aluno criada pelo
despreparo, citado anteriormente, e o desânimo quando há, principalmente, na crença de que a disciplina constitui um obstáculo extremamente difícil de ser superado;
• o processo tradicional de avaliação pode deixar o aluno tenso prejudicando o aprendizado ([5]);
• o relacionamento entre professor e aluno pode ser um problema quando o primeiro preocupa-se em mostrar o que sabe desconsiderando um ambiente de aprendizagem descontraído e colaborativo;
• a didática ou a falta de metodologia de ensino dificulta o aprendizado dos novos e diversos conceitos. Inclui-se a grave falta de comunicação entre os professores das várias disciplinas que permitiria identificar conteúdos afins ou superposição de tópicos tornando o trabalho realizado mais integrado auxil iando o processo de ensino e aprendizagem ([12 e 17]).
Em [19], afirma-se que o professor deve ser capaz de fazer o aluno compreender a abstração envolvida com toda a simbologia utili zada. Para isto, deve util izar sua criatividade e tentar resolver cada problema baseando-se em situações do cotidiano. Assim, o aluno começa a ter raciocínio lógico e ordem de pensamento.
Segundo [16], algumas das dificuldades vivenciadas pelo professor no processo são: i) reconhecer as habili dades inatas de seus alunos; ii ) apresentar técnicas para soluções de problemas; iii ) trabalhar a capacidade de abstração do aluno, tanto na busca das possíveis soluções como na escolha da estrutura de dados a ser util izada; e iv) promover a cooperação e a colaboração entre os alunos.
No entanto, para [5], o iniciante do curso superior traz uma bagagem cultural que não apenas não serve para o apropriado desenvolvimento de um estudo acadêmico, mas pode atrapalhar o desenvolvimento desse estudo. Ele vem de uma experiência de estudante de disciplinas desenvolvidas em torno do paradigma de apresentação de respostas e soluções, usualmente da velha e surrada didática diretiva, ao invés de focar no processo de questionamento. Assim, mais uma das vertentes do problema educacional na área de Computação encontra-se na sua formação básica.
Mas, considerando o campo universitário, o nível de maturidade do aluno é importante neste ponto para que o professor possa adequar o processo pedagógico no sentido de acompanhar o amadurecimento do aluno, permitindo aplicar técnicas de ensino e aprendizagem ([14]).
O acompanhamento contínuo de cada aprendiz e o tratamento personalizado a cada estudante, principalmente em turma com um número elevado de alunos, serão possíveis se forem apoiados por sistemas inteligentes, ou seja, auxiliados por computador ([17]). Logo, a idéia de usar produtos de software para o ensino de programação é de grande valia e ainda poderá transformar o ensino de disciplinas avançadas em algo mais primoroso e tecnológico.
A partir de todo esse problemático desafio, mudanças passaram a ser consideradas por graduados, mestres e doutores que trabalham com o ensino de algoritmos e programação. A análise da literatura feita por [14], independente de ser nacional ou internacional, mostrou que há três vertentes na busca de soluções para os problemas apontados: • Ferramentas, que incluem trabalhos que
apresentam ferramentas computacionais visando facilit ar o processo de ensino e aprendizagem;
• Estratégias, que incluem trabalhos que discutem estratégias de ensino e/ou de avaliação de competências;
• Ferramentas e Estratégias, que são os trabalhos que discutem alguma estratégia suportada por ferramentas computacionais.
Juntamente com o uso de uma ferramenta computacional, deve-se tentar ajustar algumas propostas pedagógicas de trabalho disciplinar, cada vez mais foco de pesquisas na área de Computação, principalmente no âmbito internacional ([14]). Alguns trabalhos nacionais relacionados aos problemas de ensino de algoritmos e programação estão li stados a seguir: • em [8], percebendo os problemas e procurando
solucioná-los, ou pelo menos amenizá-los, foi proposto o uso de uma abordagem de
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
138
aprendizagem baseada na colaboração. Esta abordagem colaborativa parte do princípio de que o conflito sócio-cogniti vo entre os aprendizes pode melhorar o seu aprendizado. Para suportar o aprendizado colaborativo, foi desenvolvido um avaliador de programas em C, chamado Verificador de Diferenças Significativas entre Programas – VDSP. O VDSP avalia os programas dos alunos, pontuando-os. A pontuação é util izada para montar grupos de alunos que deverão refazer o programa, trocando pontos de vista e considerações. O VDSP foi experimentado com alunos do curso de Sistemas de Informação da PUC Minas Arcos, especificamente, alunos da disciplina Algoritmos e Estruturas de Dados, com resultados positi vos em relação à formação de grupos de trabalho homogêneos e heterogêneos sob mediação do professor em detrimento de um trabalho individual;
• em [18], o aprendizado de algoritmos é considerado desafiador pelos estudantes de cursos tecnológicos. Os principais motivos para este fato são: o alto nível de abstração do conteúdo e a dificuldade dos docentes em detectar e atender as dificuldades de aprendizagem dos alunos. Dessa forma, propuseram um ambiente que auxilia no atendimento às dificuldades de aprendizagem da disciplina de Algoritmos utilizando o paradigma de Assistentes Inteligentes de Ensino. Estes assistentes auxiliam o professor em sua tarefa de monitorar, assistir e analisar os alunos. Os resultados da utilização do ambiente apontam para a viabil ização da tarefa de acompanhamento individualizado dos alunos e uma maior eficiência na identificação e atendimento às dificuldades de aprendizagem;
• em [4], discute-se que grupos de estudo têm surgido como uma alternativa para complementar os conteúdos vistos em sala de aula e desenvolver/aprimorar habilidades. Neste contexto, apresentaram a importância dos grupos de estudo na formação dos futuros profissionais da área de computação. Relataram a experiência com o grupo de estudos de Java da Universidade Luterana do Brasil (ULBRA). Ao contrário do que se possa imaginar, a diferença de nível entre os alunos não constituiu obstáculos para o andamento dos trabalhos. Observou-se uma forte interação entre os componentes do grupo e o prazer em dividir o conhecimento adquirido. Relações se estabeleceram a partir da
experiência de pesquisar, aprender e resolver problemas juntos;
• em [9], foram concluídos, após diversos estudos sobre Ambientes de Aprendizado Colaborativo Suportado por Computador, que eles podem trazer melhorias ao processo de aprendizado e contribuir para torná-lo mais prazeroso e socializador. Então, desenvolveram um produto de software verificador de diferenças significativas entre programas e o utilizaram para a montagem de grupos para o aprendizado colaborativo de programação de computadores. Chegaram à conclusão de que o aprendizado colaborativo é viável e eficaz nesse contexto, mas difícil de implantar sem a presença de um mediador. Logo, estudaram o Learn in Group, um sistema baseado na Web para o suporte ao aprendizado colaborativo de programação. O sistema conta com dois agentes mediadores, um para a constituição de grupos de trabalho colaborativo e o outro para acompanhar e estimular a participação dos membros dos grupos;
• em [15], foi citado que o Grupo de Trabalho de Licenciatura em Computação (GT-3) da Sociedade Brasileira de Computação (SBC) estabeleceu, entre as metas para 2004-2005, desenvolver experiências relativas ao ensino de programação no nível médio. Isso visando melhorar o comportamento dos futuros ingressos em cursos de Computação e Informática, tentando sanar os problemas relacionados ao pensamento algorítmico mais cedo. A partir dessa idéia, pesquisadores da área da Universidade Estadual Norte Fluminense (UENF) idealizaram uma proposta para ser aplicada em uma escola pública de Cardoso Moreira – RJ, através de uma oficina que permitiu identificar os pontos de dificuldade no processo e a necessidade de trabalhar mais a informática de modo interdisciplinar. Apesar da elevada evasão, o resultado obtido na avaliação dos concluintes da oficina permite projetar as expectativas da inclusão do tema algoritmos e programação na matriz curricular. A oficina permitiu comprovar que a idéia do GT-3 é factível, ou seja, que alunos do ensino médio são capazes de desenvolver tal conteúdo sem necessariamente estarem inseridos em um curso técnico, o que pode estimular o professor por aproveitar a nova competência do aluno para promover o aprofundamento de conteúdos de sua disciplina e, conseqüentemente, a interdisciplinaridade;
• em [27], foi discutida a experiência do uso de projetos integrados para promover a
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
139
interdisciplinaridade no curso de Ciência da Computação. A integração tanto ocorre entre disciplinas de um mesmo período quanto entre disciplinas de diferentes períodos. Esta última integração foi altamente favorável entre as disciplinas que formam os pacotes de disciplinas optativas, ofertadas a partir do sexto semestre. Cada projeto visou transpor as barreiras da fragmentação do conhecimento (não se trata de uma colagem fragmentada de saberes), o aluno foi posto diante de problemas que exigem a apli cação dos conhecimentos de uma disciplina em outra, para posteriormente utilizá-los na resolução dos problemas. Esse processo visou estabelecer o valor das competências e habili dades em converter o conhecimento específico da área de formação para outras áreas de estudo. Os resultados mais expressivos se refletiram no comportamento dos alunos: criou-se uma cultura do ensino-aprendizado pelo próprio esforço, de que o processo de aprendizado deve ser, em grande parte, construído pelo próprio aluno. Para os docentes, ficou claro que devem estar aptos a aceitarem novos papéis e ficarem atentos ao processo dinâmico que é o ensino da Ciência da Computação. Os projetos iniciaram uma série de discussões sobre a fragmentação das disciplinas envolvidas nos projetos. Foram exibidas inúmeras deficiências de disciplinas dos períodos anteriores ao quarto período. Foi proposto um questionamento dos conteúdos programáticos de diversas disciplinas e suas formas de abordagens. Finalmente, foram relevantes nas discussões sobre as novas propostas para uma total reestruturação curricular do curso de Bacharelado em Ciência da Computação, visando melhorar a metodologia de ensino;
• em [13], afirmou-se que os programas educacionais, conforme a metodologia utilizada pelo professor, podem ser explorados de diferentes formas. Neste sentido, estes ambientes requerem um conjunto de funções para atender os aspectos pedagógicos, identificados pelos professores especiali stas. Como esta tarefa não é de fácil execução, dado o perfil diferenciado da equipe interdisciplinar, fez-se necessário a util ização de uma metodologia para guiar e organizar todo o projeto de desenvolvimento do produto de software. Dessa forma, eles apresentaram um relato de experiência em uma disciplina da graduação da Pontifícia Universidade Católi ca do Rio Grande do Sul (PUCRS) no intuito de formalizar as práticas de Engenharia de Software adotadas para o projeto e
desenvolvimento de produtos de software educacionais, através do projeto PDS-E (Processo para Desenvolvimento de Software Educacional). Isso para que sistemas de informação educacionais fossem desenvolvidos de forma estruturada e pedagógica, contendo o assunto a ser tratado. Os resultados obtidos com a apli cação da disciplina em três semestres consecutivos foram muito promissores. Os alunos, em seus depoimentos colhidos através da avaliação formal e no decorrer da disciplina, afirmaram que desta maneira conseguiram dimensionar melhor o trabalho a ser feito e conversar melhor com os programadores. Os programadores, por sua vez, entendem melhor o que deveriam fazer. Enfim, todos ganharam com a formalização e a padronização das idéias. Neste contexto, tem-se buscado formalizar a metodologia de ensino relatada e o uso dos recursos através da proposta do PDS-E.
Para [11], diversos sistemas para implementação de animações de algoritmos e de estruturas de dados foram produzidos. Vários destes sistemas exploram a potencialidade do uso de visualizações gráficas das operações realizadas nas estruturas de dados como ferramenta de ensino. O uso de movimento em tempo real, cores e sons enriquecem ainda mais o poder de comunicação. De fato, algumas experiências positi vas foram relatadas na literatura, principalmente com o uso de sistemas que utilizam a abordagem ativa, na qual o aprendiz interage com as animações na criação de instâncias para testes. Por outro lado, a ênfase na qualidade da animação gráfica para enriquecer a abordagem ativa da maioria dos sistemas levou-os a um grau de complexidade que impede seu uso para fins de criação de animações pelos próprios aprendizes. Deste modo, sua utilização se limita à interação, ainda que ativa, com as animações pré-implementadas, representando as mais novas tendências de trabalhos para o ensino de Computação e Informática.
Em [11], afirmou-se que, do mesmo modo que a experimentação durante a operação das animações enriquece o aprendizado mais do que a mera observação passiva delas, é de se esperar que, com um sistema onde a própria implementação das animações gráficas é facil itada a ponto de poder ser realizada pelo estudante, a absorção do funcionamento dos algoritmos seja ainda mais intensa.
Apesar desta nova tendência dos produtos de software para educação em Computação, ainda é muito util izada a abordagem ativa descrita anteriormente. Isso porque configura uma forma de controle do aprendizado pelo discente, uma vez que quaisquer informações erroneamente assimiladas na
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
140
maioria das vezes causam um impacto negativo na evolução do aluno durante o curso. Dessa forma, o produto de software util iza estratégias passo a passo na simulação de estruturas de dados conhecidas e bem sedimentadas. Assim, o aluno realiza uma série de operações ao utilizar o programa, assimilando conceitos básicos sem correr o risco de implementar seus próprios algoritmos de forma incorreta. 4. A impor tância do uso de ferramentas computacionais no ensino
É importante salientar alguns pontos especiais: • a aula de uma disciplina que relaciona
programação, algoritmos e estruturas de dados deve ser realizada em laboratórios para que os alunos possam entender as abstrações apresentadas. Deve ser composta de uma parte teórica, onde conceitos são transmitidos, e uma parte prática, onde são entendidos comandos e tópicos ministrados. Deve haver questões-desafio, para que os discentes sejam acostumados a usar de agilidade e criatividade na solução de problemas ([14]);
• o uso de um produto de software educacional, que enfatize animação gráfica, é de extrema importância como facilit ador do processo de aprendizagem, visto que a apresentação de conceitos abstratos se torna mais viável e didática, melhorando a qualidade do material das aulas ([24]);
• normalmente, um aluno se interessa por aulas diferenciadas e isso não só prende sua atenção, como também influenciam positi vamente nas avaliações ([5]);
• uma economia de tempo pode ser conseguida e seria direcionada para maiores explicações e resoluções de exercícios, uma vez que o material didático seria virtual, evitando uma explanação cansativa através do quadro-negro ([20]);
• o uso de uma boa ferramenta que seja li vre permite ao aluno ter acesso ao material virtual para estudar em casa. Além disso, ele possuiria um valioso projeto, para consultas futuras, em caso de necessidade – a tendência em abstrair detalhes, com o passar do tempo, sempre leva a dúvidas e estas a novas pesquisas em estruturas básicas ora aprendidas ([11]);
• a existência de um material também via web para estudos e pesquisas estimula maior contribuição tecnológica para a sociedade, integração de diferentes ideais através de contatos pela Internet e maior alcance ao
público. Além disso, a divulgação das propostas de melhorias de processos educacionais visa injetar e obter informações para ampliação da literatura disponível ([21]);
• a transição de educadores seria facil itada, uma vez que existiria uma base pronta para ser apreciada, mantendo a qualidade de ensino e aprendizagem do conteúdo.
Assim, o uso de um sistema de informação educacional, o produto de software educacional, é um subsídio valioso para a formação de alunos, ajudando-os a concluírem seu curso, principalmente se atender a disciplinas que estão no início do curso e são pré-requisitos necessários para as disciplinas mais específicas de períodos avançados. Quando feita uma boa base, rendimento e desempenho aumentam, proporcionando melhores resultados, melhores currículos e melhores profissionais para o mercado ([20]). 5. Ferramentas para o ensino de algor itmos, estruturas de dados e programação
Para o desenvolvimento de qualquer trabalho, faz-se necessário discutir o que realmente há de contribuição ao universo acadêmico. Nesta seção, são citados alguns projetos relacionados. Deve-se ressaltar, contudo, que não houve pretensão de fazer uma análise exaustiva de tais projetos. São eles: • ASTRAL (Animation of Data Structures and
Algorithms) [11]. É um ambiente de programação para produção de animações de algoritmos e de estruturas de dados com propósito instrucional. O ambiente foi desenvolvido no Instituto de Computação da Universidade de Campinas (IC/UNICAMP) em 1995-97 para plataforma Macintosh e recentemente portado para Windows. Utili zando o ambiente, um usuário pode implementar uma variedade de estruturas de dados e algoritmos (que atuam sobre essas estruturas) e, através de chamadas de algumas poucas rotinas específicas do ambiente, é possível visualizar graficamente as estruturas de dados bem como animações que mostram a atuação dos algoritmos sobre elas. Isso se dá através de uma biblioteca de suporte gráfico que é parte do ASTRAL. A abordagem de animação de algoritmos tem duas vantagens imediatas: aprendizado e depuração. Aquele se beneficia da observação dinâmica do funcionamento das estruturas de dados e proporciona um nível de abstração maior, enquanto a depuração é facilit ada pela visualização gráfica que deixa claro para o usuário-programador, no momento da execução, em que parte da implementação da estrutura ou
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
141
do algoritmo os erros ocorrem. Ambas vantagens são particularmente interessantes para alunos de disciplinas de estruturas de dados e algoritmos. O uso do ASTRAL em disciplinas de graduação sobre estruturas de dados como componente de programação foi muito bem sucedido durante vários semestres;
• EDDL (Estruturas de Dados Dinâmicas Lineares) [2]. Surgiu de uma discussão sobre estratégias de ensino das estruturas de dados e tipos de dados abstratos utili zados em programação. A estruturação do programa EDDL e a concepção da sua funcionalidade englobam os seguintes componentes: i) uma abordagem introdutória aos conceitos ou especificação dos tipos de estruturas; ii ) as técnicas de implementação; e iii ) a util ização dessas estruturas na resolução de problemas. Pode ser util izado quer como ferramenta introdutória como ferramenta de revisão, exercitação e auto-avaliação. Após o desenvolvimento dos primeiros protótipos ou versões experimentais, o EDDL adquiriu uma configuração global em que uma tela principal dá acesso aos módulos principais do programa, que são os seguintes: conceitos introdutórios, pilhas, filas, listas lineares e exercícios. Em cada uma dessas seções, é analisada em detalhe cada uma das operações mais usuais com estes tipos de estruturas, tais como: criação e destruição da estrutura, inserção e remoção de elementos na estrutura e verificação do estado da estrutura (vazia, cheia). Oferece um conjunto de ferramentas e outros recursos de programação que o revelam ser ao mesmo tempo intuitivo e de fácil manipulação, diversificado, versátil e eficaz para o desenvolvimento de projetos, principalmente quando o aspecto gráfico é uma das componentes importantes a ter em conta;
• TED (Tutorial de Estruturas de Dados) [10]. É um tutorial para dinamizar o ensino na disciplina de estrutura de dados. O tutorial desenvolvido é um produto de software educacional com o objetivo de permitir uma maior interação entre o professor e o aluno, servindo como uma ferramenta de apoio ao aprendizado. O tutorial subdivide-se nas várias estruturas apresentadas durante a disciplina, permitindo ao aluno ter uma visão individualizada dos conteúdos, mas sem perder a visão do todo. Através de conceitos de dinamização de aprendizagem, como a visualização dos acontecimentos simultaneamente com o que é executado, o
aluno cria uma visão de totalidade do sistema. O sistema de tutorial apresenta os algoritmos das estruturas de dados, ao mesmo tempo em que demonstra a sua implementação lógica através de exemplos visuais permitindo ao aluno acompanhar todos os passos que são executados;
• Dictionary of Algorithms and Data Structures [3]. Este site contém uma parte do Software Quality Group do Software Diagnostics and Conformance Testing Division, Information Technology Laboratory. Este é um dicionário de algoritmos, técnicas algorítmicas, estruturas de dados, problemas atípicos e definições relativas. Os algoritmos incluem funções comuns e os problemas incluem alguns como o caixeiro viajante. Alguns tópicos têm li nks para implementações e mais informações. A página de índice relaciona os tópicos por tipo ou em ordem alfabética. Apresenta o funcionamento dos algoritmos como animações sendo executadas ao se definirem os seus parâmetros;
• TBC-AED (Treinamento Baseado em Computador para Algoritmos e Estruturas de Dados) [20 e 22]. É um produto de software educacional que analisa tópicos básicos de programação, englobando um conteúdo teórico sintético e direto, acompanhado de processo gráfico passo a passo, representando um repositório didático com visualização gráfica. Isso facilit a a visualização e o entendimento das informações ora apresentadas e disponibili za o tempo que seria gasto em transcrever expli cações do quadro-negro para o caderno para a resolução de exercícios de apli cação e fixação. Além disso, pode-se alcançar maior interação entre o professor e os seus alunos, no sentido de aumentar o espaço para questionamentos. Possui algumas características, tais como: i) links explicativos, evitando a necessidade de aprendizagem via tutorial; ii) a usabilidade da interface gráfica é razoável, possibilit ando ao professor apresentar conceitos iniciais, conteúdos teóricos e práticos aos poucos, como apresentaria em transparências; iii) conteúdo teórico simples, de forma a familiarizar melhor o aluno com o assunto; iv) processo gráfico passo a passo, com elementos numéricos, o que melhora a visualização e o entendimento; e v) legendas explicativas, que ilustram as etapas do processo de apresentação de algoritmos, facilit ando o aprendizado e englobando aulas teóricas e práticas, ao envolver uma nova forma de transmitir conhecimento. O TBC-AED apresenta os seguintes temas: Busca Binária,
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
142
Métodos de Ordenação (Select Sort, Insert Sort, Bubble Sort, Merge Sort e Quick Sort), Estruturas de Alocação Estática e Dinâmica de Memória (Lista, Fila e Pilha) e Árvore Binária de Busca. Ele foi elaborado usando Java e o ambiente de desenvolvimento NetBeans. A partir da apresentação e disponibili zação da ferramenta aos alunos, aqueles que a utilizaram obtiveram êxito na disciplina, perfazendo um total de aprovação superior àqueles que não a utilizaram. Devido a esse fato, para melhorar os resultados, optou-se por dividir a carga horária da disciplina, antes apenas teórica, em aulas expositi vas (teóricas) e de laboratório (uso da ferramenta, incluindo exercícios de programação) para o segundo semestre de 2005. Como conseqüência da evolução, intrínseca a qualquer projeto, o TBC-AED foi disponibil izado via web, através de applets9, gerando o TBC-AED/WEB (Treinamento Baseado em Computador para Algoritmos e Estruturas de Dados via Web) para que possa ter maior acessibili dade, além de possibilit ar a troca de idéias, através da interatividade com usuários diversos ([21]). A idéia de criar o TBC-AED/WEB surgiu para evitar que o estudante precise fazer o download do TBC-AED para estudar, bastando ter uma versão do aplicativo apenas em sua estação de trabalho em casa, para trabalhar offline. Quando estiver em alguma estação conectada à Internet, ele pode executar o programa diretamente no navegador, desde que esta estação possua a JVM (Java Virtual Machine) instalada. Quanto às características relacionadas à funcionalidade e à aparência, o TBC-AED/WEB não difere do TBC-AED. Dessa forma, a partir do acesso web, espera-se gerar uma interatividade maior com outros pesquisadores, difusão da pesquisa, contribuição à comunidade científica da área e feedback em relação ao trabalho reali zado.
6. Conclusões
Sob todo conjunto de informações
apresentadas até o presente momento, pode-se perceber que existe uma gama de recursos que possibilit am o desenvolvimento de ferramentas computacionais para o auxílio da educação superior em Computação, com destaque para a
9 Applets são programas Java que podem ser embutidos em documentos HTML. Quando um navegador carrega uma página da Web que contém um applet, o applet é executado ([7]).
linguagem de programação Java, que conta com a portabilidade e forte suporte para técnicas adequadas de Engenharia de Software ([7]). Isso faz com que as novas tecnologias atinjam mais rapidamente seu público alvo.
Além disso, observou-se que o uso de produtos de software para o ensino de programação e algoritmos é uma idéia inteligente, se for amadurecida e desenvolvida de forma cuidadosa e estruturada. Isso fornece novas experiências para professores e alunos, que se proponham a trabalhar com esse tema. Além disso, eles terão sua qualidade de ensino elevada e poderão ser capazes de avançar mais rapidamente no campo do conhecimento, através da agilidade de processos didáticos e da participação ativa do docente da área.
Conclui-se também que uma boa elaboração de produtos tecnológicos que facilit em a transmissão de conhecimentos em Computação deve ser acompanhada de expressiva pesquisa no campo de novas metodologias de ensino. A principal finalidade disso é, cada vez mais, haver contribuições que incorram no aprimoramento do ensino superior e na formação de profissionais melhor quali ficados para o mercado. Isso reflete principalmente sobre futuros professores, uma vez que, aqueles que têm passado por esse tipo de experiência durante a graduação, terão grande interesse em executar o mesmo processo quando estiverem lecionando.
Dessa forma, compreende-se que a educação precisa ser reavaliada, pois representa a base da atual sociedade mundial e o único instrumento que pode desenvolver o ser humano e torná-lo digno de constituir sua vida e seu ambiente. Isso deve ser acompanhado por uma atitude crítica da comunidade científica formada, que é a maior interessada em manter e prosseguir com avanços que contribuam para a melhoria da qualidade de vida.
7. Referências [1] Azeredo, P. A. Uma proposta de Plano
Pedagógico para a Matéria de Programação. Anais do II Curso: Qualidade de Cursos de Graduação da Área de Computação e Informática (WEI 2000). Editora Universitária Champagnat.
[2] Azul, A. A. e Mendes, A. J. EDDL: Um Programa Didático sobre Estruturas de Dados Dinâmicas Lineares. 3º Simpósio Investigação e Desenvolvimento de Software Educativo – 1998. Évora, Portugal. Disponível em: http://www.minerva.uevora.pt/simposio/comu
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
143
nicacoes/Mendes/Eddl.html. Acesso: 15 jun 2005.
[3] Black, P. E. Dictionary of Algorithms and Data Structures. NIST (National Institute of Standards and Technology). Disponível em http://www.nist.gov/dads/. Acesso: 15 jun 2005.
[4] Borges, K. S. e Filho, H. B. R. A Importância dos Grupos de Estudos na Formação Acadêmica. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
[5] Buzin, P. F. W. K. A epistemologia da Ciência da Computação: Desafio do Ensino dessa Ciência. Revista de Educação, Ciência e Cultura, v. 6, nº 2. Centro Universitário La Salle. Canoas, RS, Brasil, 2001.
[6] Campos, E. A. V. e Ascencio, A. F. G. Fundamentos da Programação de Computadores. Editora Prentice Hall, 2003.
[7] Deitel, H. M. e Deitel, P. J. Java Como Programar. Bookman Companhia ed Informática, 2003.
[8] Faria, E. S. J. e Coello, J. M. A. Um Estudo Empírico dos Efeitos do Uso de Trabalho Colaborativo no Aprendizado de Programação em Cursos de Graduação em Computação. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
[9] Faria, E. S. J., Vilela, J. M. e Coello, J. M. A. Um Sistema de Aprendizado Colaborativo de Programação Baseado em Agentes chamado Learn In Group. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
[10] Flávio, D. TED - Tutorial de Estruturas de Dados, desenvolvido durante estágio supervisionado na Universidade do Vale do Itajaí – 2004. Disponível em http://www.tutorialdeestruturadedados.8m.com. Acesso: 20 jun 2005.
[11] Garcia, I. C., Rezende, P. J. e Calheiros, F. C. Astral: Um Ambiente para Ensino de Estruturas de Dados através de Animações de Algoritmos. Revista Brasileira de Informática na Educação (RBIE’1997) nº 01, http://www.inf.ufsc.br/sbc-ie/revista/nr1/garcia.htm. Ambiente ASTRAL disponível em: http://www.dcc.unicamp.br/ ~rezende/ASTRAL/. Acesso: 28 abr 2005.
[12] Giraffa, L., Marczak, S. e Almeida, G. O Ensino de Algoritmos e Programação mediado por uma Ambiente Web. Congresso Nacional da Sociedade Brasileira de
Computação (SBC’2003). Campinas, SP, Brasil.
[13] Giraffa, L., Marczak, S. e Prikladnicki, R. PSD-E: Em Direção a um Processo para Desenvolvimento de Software Educacional . XI Workshop de Informática na Escola (WIE’2005). São Leopoldo, RS, Brasil.
[14] Júnior, J. C. R. P. e Rapkiewicz, C. E. O Processo de Ensino e Aprendizagem de Algoritmos e Programação: Uma Visão Crítica da Literatura. III Workshop de Educação em Computação e Informática do estado de Minas Gerais (WEIMIG’ 2004). Belo Horizonte, MG, Brasil.
[15] Júnior, J. C. R. P., Rapkiewicz, C. E., Delgado, C. e Xexeo, J. A. M. Ensino de Algoritmos e Programação: Uma Experiência no Nível Médio. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
[16] Menezes, C. e Nobre, I. Suporte à Cooperação em um Ambiente de Aprendizagem para Programação (SambA). XIII Simpósio Brasileiro de Informática na Educação (SBIE’2002). São Leopoldo, RS, Brasil.
[17] Pimentel, E. P., França, V. F. e Omar, N. A Caminho de um Ambiente de Avaliação e Acompanhamento Contínuo de Aprendizagem em Programação de Computadores. II Workshop de Educação em Computação e Informática do Estado de Minas Gerais (WEIMIG’2003). Poços de Caldas, MG, Brasil.
[18] Raabe, A. L. A. e Sil va, J. M. C. Um Ambiente para Atendimento das Dificuldades de Aprendizagem de Algoritmos. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.
[19] Rodrigues, M. C. Como Ensinar Programação?. Informática – Boletim Informativo Ano I nº 01, ULBRA. Canoas, RS, Brasil, 2002.
[20] Santos, R. P. e Costa, H. A. X. TBC-AED: Um Software Gráfico para Apresentação de Algoritmos e Estruturas de Dados aos Iniciantes em Computação e Informática. I Congresso de Computação do Sul do Mato Grosso (COMPSULMT’ 2005). Rondonópolis, MT, Brasil.
[21] Santos, R. P. e Costa, H. A. X. TBC-AED e TBC-AED/WEB: Um Desafio no Ensino de Algoritmos, Estruturas de Dados e Programação. IV Workshop de Educação em Computação e Informática do estado de Minas Gerais (WEIMIG’ 2005). Varginha, MG, Brasil.
Universidade Federal de Lavras – Relatório Final ao PBII CT/FAPEMIG
Lavras, maio de 2006
144
[22] Santos, R. P. e Costa, H. A. X. Desenvolvimento de um Software Educacional para o Ensino de Algoritmos, Estruturas de Dados e Programação. CD de Resumos XVIII Cicesal – XII Seminário PIBIC/Cnpq – VIII Seminário PBIICT/Fapemig - I Congresso de Extensão, Lavras, MG, v. 1, p. 113-113, 2005.
[23] Setubal, J. C. Uma proposta de Plano Pedagógico para a Matéria de Computação e Algoritmos. Anais do II Curso: Qualidade de Cursos de Graduação da Área de Computação e Informática (WEI 2000). Editora Universitária Champagnat.
[24] Soares, T. C. A. P., Cordeiro E. S., Stefani Í. G. A., Tirelo, F. Uma Proposta Metodológica para o Aprendizado de Algoritmos em Grafos Via Animação Não-Intrusiva de Algoritmos. III Workshop de Educação em Computação e Informática do Estado de Minas Gerais (WEIMIG’ 2004). Belo Horizonte, MG, Brasil.
[25] Tobar, C. M., Rosa, J. L. G., Coelho, J. M. A. e Pannain, R. Uma Arquitetura de Ambiente Colaborativo para o Aprendizado de Programação. XII Simpósio Brasileiro de Informática na Educação (SBIE’2001). Vitória, ES, Brasil.
[26] Wirth, N. Algoritmos e Estruturas de Dados. LTC Informática-Programação, 1989.
[27] Yamamoto, F. S., Sil va, A. F., Zanutto, J. e Zampirolli, F. A. Interdisciplinaridade no Ensino de Computação. XIII Workshop de Educação em Computação (WEI’2005). São Leopoldo, RS, Brasil.