EDDL: um programa didáctico sobre estruturas de dados dinâmicas lineares

Artur A. Azul

Universidade Católica Portuguesa – Centro Regional das Beiras

azul@crb.ucp.pt

 

António José Mendes

Centro de Informática e Sistemas da Universidade de Coimbra

toze@dei.uc.pt

 

EDDL: um programa didáctico sobre estruturas de dados dinâmicas lineares

 

Resumo

 

O desenvolvimento de software educativo no âmbito do ensino/aprendizagem das estruturas de dados justifica-se por duas ordens de razões: a escassez desse tipo específico de software no nosso sistema de ensino e, por outro lado, as comprovadas vantagens características dos ambientes de aprendizagem que utilizam representações gráficas dinâmicas e interactivas. É neste contexto que surge o projecto do programa didáctico EDDL (Estruturas de Dados Dinâmicas Lineares). A discussão que tem sido levada a cabo nos últimos anos acerca das estratégias de ensino das estruturas de dados e tipos de dados abstractos utilizados em programação influenciou a estruturação do programa EDDL e a concepção das suas principais funcionalidades, no sentido de serem tidas em conta as seguintes componentes: 1) uma abordagem introdutória aos conceitos ou especificação dos tipos de estruturas; 2) as técnicas de implementação; 3) a utilização dessas estruturas na resolução de problemas. O programa contempla essas três componentes e pode ser utilizado quer como ferramenta introdutória quer como ferramenta de revisão, exercitação e auto-avaliação. O processo de avaliação do programa em situações concretas de ensino/aprendizagem está ainda em curso.

 

Introdução

 

As estruturas de dados dinâmicas constituem matéria habitual de disciplinas de programação em cursos superiores (de Informática ou em que a Informática é uma componente a ter em conta). Assim acontece na disciplina de Programação e Algoritmos II (PA II) da Licenciatura em Engenharia Informática do Departamento de Engenharia Informática (DEI) da Faculadade de Ciências e Tecnologia (FCT) da Universidade de Coimbra – contexto académico em que surge a iniciativa deste projecto.

O nível de abstracção exigível neste domínio da programação e ciência computacional nem sempre é compatível com uma fácil compreensão e visualização mental das operações em causa. Além disso, a exposição desta matéria na sua forma clássica (livros, textos de apoio, representação no quadro ou projecção estática) dificilmente torna evidentes todos os passos que estão implicados em algumas das operações típicas nesta área da programação. O desenvolvimento e disponibilização de software educacional nesta área (tal como acontece em muitas outras áreas educativas) poderá ajudar a superar as insuficiências das formas e dos meios clássicos de exposição e constituir-se num meio de aprendizagem mais estimulante e eficaz.

As potencialidades dos meios informáticos no processo de ensino/aprendizagem e a necessidade de software educativo como ferramenta auxiliar nesse processo têm vindo a ser enfatizadas por muitos autores – entre nós, por exemplo: Figueiredo (1989); Teodoro (1991); Ponte (1992); Mendes e Mendes (1996); etc.

Num enfoque mais específico, diversos autores têm procurado demonstrar as vantagens da utilização de ambientes de aprendizagem interactivos com recurso a representações gráficas dinâmicas. Alguns desses autores utilizam o conceito de Interactive Learning Environment (ILE) – por exemplo, Akpinar (1995) – para designar os ambientes de aprendizagem baseados em meios informáticos que se caracterizam pela utilização de recursos gráficos interactivos e adaptativos. Outros autores têm procurado comprovação empírica para teorias psicológicas do conhecimento que realçam o valor acrescido da utilização de representações gráficas e animação no processo de aprendizagem – por exemplo: Hanciles (1997) e Kann (1997). Este último fala mesmo de efeitos de transferência (transfer effects) que podem resultar da utilização deste tipo de recursos em ambientes de aprendizagem (neste caso particular, a animação gráfica de algoritmos) – transferência de faculdades cognitivas de uma situação particular para outras situações integradas em âmbitos temáticos mais gerais.

Neste contexto, e porque, no domínio do software educativo divulgado e disponível no nosso meio, não encontrámos nenhum programa didáctico sobre esta matéria que utilize representações gráficas dinâmicas e controláveis interactivamente pelo utilizador/aluno, achamos ter cabimento e ser oportuno o desenvolvimento de um programa educativo sobre as estruturas de dados dinâmicas mais comummente utilizadas em programação.

O âmbito temático do programa didáctico EDDL circunscreve-se à área das estruturas de dados dinâmicas lineares mais conhecidas: pilhas, filas e listas lineares. A linguagem de programação utilizada é a linguagem C – a linguagem adoptada nas disciplinas PA I e PA II do curso de Engenharia Informática do DEI da FCT da Universidade de Coimbra

Com este projecto/programa pretende-se ir ao encontro dos seguintes objectivos:

. disponibilizar um meio alternativo aos tradicionais para a abordagem didáctica desta área temática (estruturas de dados dinâmicas lineares), em que a exposição surja acompanhada de visualização gráfica dinâmica e interactiva;

. fornecer um instrumento de prática ou treinamento, quer no sentido da consolidação dos conceitos e técnicas abordados quer no sentido da abertura de pistas para outras realizações práticas.

 

A escolha do ambiente de desenvolvimento

 

Em relação ao ambiente de programação a adoptar para o desenvolvimento do EDDL, poderia parecer, numa primeira análise, que a escolha mais lógica deveria recair num dos ambientes de programação específicos da linguagem C. Todavia, o ambiente adoptado para o desenvolvimento do EDDL foi o Visual Basic (versão 5.0). A razão principal desta escolha prende-se com a intenção de um rápido desenvolvimento de um primeiro protótipo e a continuação do seu desenvolvimento numa perspectiva aproximada ao modelo de "prototipagem continuadamente evolutiva" (Batista e Figueiredo, 1997).

De alguns anos para cá, têm surgido diversos ambientes de programação seguindo o paradigma de Programação Orientada para Objectos (OOP – Object Oriented Programming) e dirigida por eventos (Event Driven Programming), especialmente vocacionados para o ambiente gráfico Windows. Entre eles podem destacar-se: o Visual Basic e o Visual C++ (da Microsoft), o Borland C++ e o Delphi (da Borland).

O ambiente de programação Visual Basic tem sido reconhecido, desde o surgimento das suas primeiras versões, como um bom ambiente de programação gráfica (para Windows), que pode ser utilizado para desenvolvimento rápido de protótipos (rapid prototyping). Este ambiente oferece um conjunto de ferramentas e outros recursos de programação que se revela ao mesmo tempo intuitivo e de fácil manipulação, diversificado, versátil e eficaz para o desenvolvimento de projectos, principalmente quando o aspecto gráfico é uma das componentes importantes a ter em conta.

 

Estrutura geral e principais funcionalidades do programa didáctico EDDL

 

Pontos de partida e de referência

 

A concepção da estrutura geral e principais funcionalidades do programa didáctico EDDL partiu da experiência pedagógica desenvolvida no âmbito da leccionação da disciplina de PA II, no DEI da FCT da Universidade de Coimbra.

Foram também tidas em conta outras experiências de desenvolvimento de software educativo na área do ensino da programação e algoritmos. Por exemplo, em Göktepe et al. (1988) são focados os principais tipos de estratégias que podem ser utilizadas no desenvolvimento de ferramentas didácticas baseadas em computador (tais como: exercitação ou treinamento; simulação; jogos didácticos; testagem; resolução de problemas; etc.). Esta abordagem permitiu-nos reflectir sobre quais os tipos de estratégias didácticas genéricas a adoptar no nosso projecto.

Akpinar e Hartley (1995) descrevem uma arquitectura proposta para os ILE (Interactive Learning Environment), a partir da qual podemos efectuar alguns pontos de reflexão e reajustamento da estrutura geral do nosso programa.

Hanciles e al. (1997) propõem um modelo que intitulam "tree-step scenario" para o design de um sistema chamado MRUDS (Multiple Representation for Understanding Data Structures), consistindo, basicamente, num conjunto de três módulos: 1) uma representação analógica das estruturas de dados; 2) uma representação por meio de diagramas; 3) a apresentação dos algoritmos. Embora não seguindo inteiramente este modelo de três módulos, o design do nosso programa teve em conta alguns aspectos inerentes a esse mesmo modelo.

Um outro plano de reflexões que foi tido em conta adveio das exposições que, desde já algum tempo, tem vindo a ser efectuadas por múltiplos autores em relação aos planos curriculares das disciplinas de programação (como, por exemplo, CS1, nos curricula dos EUA). Segundo vários autores consultados, a abordagem das estruturas de dados, concebidas como tipos abstractos de dados (ADTs – Abstact Data Types), deve ser efectuada em três fases: 1) especificação dos tipos de dados; 2) implementação desses tipos de dados; 3) utilização dos mesmos na resolução de problemas concretos. Há, no entanto, duas perspectivas diferentes em relação à sequência ou ordem com que os pontos 2) e 3) devem ser abordados, devendo, segundo alguns autores, ser abordado primeiramente o ponto 3 (utilização das estruturas) e, só depois, as formas da implementação (por exemplo, Rym, 1994). Esta questão foi igualmente tida em conta na concepção da estrutura do EDDL, nomeadamente no sentido de uma flexibilização das possíveis sequências de abordagem dos diferentes módulos do programa.

 

Estrutura geral do programa

 

Após o desenvolvimento dos primeiros protótipos ou versões experimentais, o EDDL adquiriu uma configuração global em que um écran principal dá acesso aos módulos principais do programa, que são os seguintes: Conceitos introdutórios; Pilhas; Filas; Listas lineares; Exercícios.

 

O módulo "Conceitos introdutórios" surge como um conjunto de pequenos textos e algumas imagens em que se abordam os principais conceitos relacionados com as estruturas de dados lineares, tipos de dados abstractos (ADTs) e as principais questões que se colocam em relação à sua implementação (estática e dinâmica).

Os módulos relativos às pilhas, filas e listas subdividem-se, cada um deles, em duas secções:

. uma em que se aborda a estrutura numa das suas formas de implementação estática;

. uma outra em que a estrutura é abordada numa das suas múltiplas formas de implementação dinâmica.

Em cada uma dessas secções são analisadas 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; verificação do estado da estrutura (vazia, cheia); etc.

FIG. 1. Écran principal do programa didáctico EDDL, a partir do qual se tem acesso a qualquer um dos módulos principais do programa.

 

Nos poucos programas didácticos a que tivemos acesso, relativos a estruturas dinâmicas de dados, verifica-se que, usualmente, a simulação gráfica é limitada ao essencial das principais operações (a inserção e a remoção de elementos na estrutura). No caso presente, tivemos a intenção de dar conta de todos os detalhes implicados em cada operação. Assim, por exemplo, numa simples operação de inserção ou remoção de um elemento numa pilha, fila ou lista, com implementação dinâmica, poderemos ter 4, 5, 6 ou mais passos (instruções na linguagem de programação adoptada); além disso, podem colocar-se situações diferenciadas consoante o estado da estrutura. Nas nossas representações gráficas procurámos contemplar todas as situações possíveis e cada passo em todos os seus detalhes. A simulação gráfica das operações relativas a uma determinada função é, normalmente, accionada e controlada pelo utilizador, através de botões de comando específicos para esse efeito.

FIG. 2. Secção do programa onde é abordada uma função (inserção de um elemento) relativa a uma das estruturas estudadas (neste caso, a fila).

 

As secções de exercícios de aplicação

 

Para além das secções de explanação teórica e simulação gráfica, cada um dos módulos principais referidos dá acesso a dois tipos de secções de exercícios:

. exercícios relativos à implementação de cada uma das operações estudadas;

. exercícios relativos a algoritmos que recorrem à utilização das mesmas operações.

Estas secções de exercícios também podem ser acedidas de uma forma directa, a partir do écran principal, sem ter de se passar pelas secções de exposição.

Estas duas opções de acesso aos exercícios destinam-se a facilitar a utilização do programa em dois contextos diferentes de abordagem:

- uma abordagem mais do tipo tutorial;

- uma abordagem mais do tipo prática, de treinamento ou de auto-teste.

 

 

Fig. 3. Formulário de exercícios propostos em relação a uma das estruturas abordadas, em que o aluno é solicitado a escrever o código em falta num algoritmo já parcialmente codificado.

 

Os exercícios já incluídos (está prevista a inclusão de outros tipos de exercícios) consistem, basicamente, em completar a escrita de código (de uma determinada função ou de um algoritmo de aplicação dessas mesmas funções).

A escrita do código por parte do aluno é feita não de forma directa pelo teclado, mas através de utilização do rato sobre um conjunto de botões contendo os símbolos e palavras necessárias à escrita das instruções em C. Com isto pretende-se controlar de uma forma mais eficaz a avaliação do código escrito por parte do aluno, sem ter de considerar uma imensidade de variantes igualmente válidas ou de recorrer a um módulo de compilação de código.

Conforme alguns autores observam, uma forma muito útil de ajudar um aluno no processo de aprendizagem da programação e algoritmia consiste muito simplesmente em dar-lhe a ler programas (Caboara, 1989) – que podem estar incompletos (ou conter erros) e solicitar ao aluno o preenchimento do código em falta (ou correcção dos erros).

Partindo desta modalidade de exercícios possíveis de implementar num programa didáctico, são apresentados, para cada tipo de estrutura (pilha, fila, lista), alguns exercícios de desenvolvimento de um pequeno algoritmo ou programa. O algoritmo encontra-se já parcialmente codificado, cabendo ao aluno compreendê-lo e completar as instruções em falta. O que está aqui em causa não é tanto a aprendizagem dos algoritmos em si mesmos, mas, testar se o aluno compreendeu e se é capaz de aplicar de uma forma correcta as funções relativas às estruturas abordadas, enquadrando-se no contexto de um algoritmo já previamente estruturado.

 

Conclusões

 

Estando ainda em curso o processo de avaliação do programa em situações concretas de ensino/aprendizagem, seria prematuro avançar algumas conclusões em relação ao caso concreto do protótipo EDDL. Parece-nos, no entanto, podermos, desde já, concluir que a estratégia adoptada de desenvolvimento (rápido) de protótipos de uma forma evolutiva tem-se revelado uma estratégia bastante apropriada para o desenvolvimento de software educativo, dada a necessidade de efectuar reajustamentos em conformidade com a retroacção (feedback) recebida em cada etapa. Parece-nos também adequada a esta estratégia a organização por módulos e a estruturação destes módulos que foi adoptada no desenvolvimento dos prototipos. De igual modo, parece-nos ajustada a flexibilização de abordagem em relação aos módulos do programa. O facto de os vários módulos de exposição/simulação gráfica das estruturas serem independentes entre si, bem como o acesso às secções de exercícios poder efectuar-se, opcionalmente, no princípio do programa ou dentro de cada módulo, vai permitir uma utilização diferenciada do programa, em conformidade com as necessidades ou opções particulares de professores e alunos.

Da experiência entretanto já decorrida pareceu-nos que o programa poderia beneficiar com a diversificação dos tipos de exercícios a incluir – o que está a ser levado em conta no desenvolvimento de novos protótipos.

 

Referências

 

Akpinar, Y. e Hartley, J. R. (1996). Designing Interactive Learning Environments, Journal of Computer Assisted Learning, Vol. 12, Nº 1, pp. 33-46.

 

Batista, J. e Figueiredo, A. (1997). Desenvolvimento de programas educativos por prototipagem continuadamente evolutiva, Actas do 2º Simpósio Investigação e Desenvolvimento de Software Educativo, Coimbra, 1997.

http://lsm.dei.uc.pt/simposio/simposioII97.htm

 

Caboara, M., Giannoti, E. e Ricci, F. (1989) A Visual Approach to Informatics Education for an Engineering Curriculum, in Education and Application of Computer Technology, editado por Blasi, M. (et al.), Edizioni Fratelli Laterza, pp.183-197.

 

Figueiredo, A. D. (1989). Computadores nas Escolas, Colóquio/Ciências, 4, pp. 76-87.

 

Göktepe, M., Özgüç, B. e Baray, M. (1989). Design and Implementation of a Tool for Teaching Programming, Computers & Education, Vol. 13, Nº 2, pp. 167-178.

 

Hanciles, B., Shankaraman, V. e Munoz, J. (1997). Multiple Representation for Understanding Data Structures, Computers & Education, Vol. 29, Nº 1, pp. 1-11.

 

Kann, C., Lindemen, R. W. e Heller, R. (1997). Integrating Algorithm Animation into a Learning Environment, Computers & Education, Vol. 28, Nº 4, pp. 223-228.

 

Mendes, A. e Mendes, T. (1996). Desenvolvimento de programas educativos utilizando o ambiente de autoria AIDA, 1º Simpósio Investigação e Desenvolvimento de Software Educativo, Lisboa, 1996.

http://phoenix.sce.fct.unl.pt/simposio/simposio.htm

 

Ponte, J. (1991). O computador – um instrumento da Educação, Texto Editora (5ª Ed.).

 

Rym e Mili, A. (1994). Teaching a First Course on Data Structures: a Software Engineering Approach, ACM, SIGCSE-94, 3/94, pp. 21-25.

http://www.acm.org/pubs/contents/procedings/cse/

 

Teodoro, V. (1992). Educação e Computadores, in Teodoro, V. e Freitas, J. (Orgs.), Educação e Computadores (pp. 9-25), GEP – Ministério da Educação.