91
UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO SISTEMA TUTOR INTELIGENTE PARA AUXÍLIO NO ENSINO DA DISCIPLINA DE ESTRUTURA DE DADOS Área de Informática na Educação por Mauricio Santos Rudimar Luís Scaranto Dazzi, Dr Orientador Itajaí (SC), julho de 2007

Área de Informática na Educação por Mauricio Santos ...siaibib01.univali.br/pdf/Mauricio Santos.pdf · v LISTA DE FIGURAS Figura 1. Implementação de um tipo de dados.....6

  • Upload
    lamhanh

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR

CURSO DE CIÊNCIA DA COMPUTAÇÃO

SISTEMA TUTOR INTELIGENTE PARA AUXÍLIO NO ENSINO DA DISCIPLINA DE ESTRUTURA DE DADOS

Área de Informática na Educação

por

Mauricio Santos

Rudimar Luís Scaranto Dazzi, Dr Orientador

Itajaí (SC), julho de 2007

UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR

CURSO DE CIÊNCIA DA COMPUTAÇÃO

SISTEMA TUTOR INTELIGENTE PARA AUXÍLIO NO ENSINO DA DISCIPLINA DE ESTRUTURA DE DADOS

Área de Informática na Educação

por

Mauricio Santos Relatório apresentado à Banca Examinadora do Trabalho de Conclusão do Curso de Ciência da Computação para análise e aprovação. Orientador: Rudimar Luís Scaranto Dazzi, Dr.

Itajaí (SC), julho de 2007

ii

SUMÁRIO

LISTA DE ABREVIATURAS.................................................................. iv

LISTA DE FIGURAS.................................................................................v

LISTA DE TABELAS..............................................................................vii RESUMO..................................................................................................viii ABSTRACT................................................................................................ ix

1 INTRODUÇÃO......................................................................................1 1.1 OBJETIVOS ........................................................................................................ 2 1.1.1 Objetivo Geral ................................................................................................... 2 1.1.2 Objetivos Específicos ........................................................................................ 2 1.2 METODOLOGIA................................................................................................ 3 1.3 ESTRUTURA DO TRABALHO ....................................................................... 4

2 FUNDAMENTAÇÃO TEÓRICA ........................................................5 2.1 ESTRUTURA DE DADOS................................................................................. 5 2.1.1 Tipo Abstrato de Dados.................................................................................... 5 2.1.2 Pilha.................................................................................................................... 7 2.1.3 Fila .................................................................................................................... 12 2.1.4 Lista .................................................................................................................. 15 2.1.5 Árvore............................................................................................................... 18 2.2 INFORMÁTICA NA EDUCAÇÃO................................................................. 20 2.2.1 Educação à Distância...................................................................................... 21 2.2.2 Software Educacional ..................................................................................... 22 2.3 SISTEMAS TUTORES INTELIGENTES ..................................................... 24 2.3.1 Arquitetura de Sistemas Tutores Inteligentes.............................................. 25 2.3.2 Exemplos de Sistemas Tutores Inteligentes.................................................. 29 2.4 INTELIGÊNCIA ARTIFICIAL...................................................................... 33 2.4.1 Sistema Especialista ........................................................................................ 33 2.4.2 Ambiente de Desenvolvimento de Sistemas Especialista ............................ 35 2.5 CONSIDERAÇÕES .......................................................................................... 38

3 DESENVOLVIMENTO ......................................................................40 3.1 ANÁLISE DE REQUISITOS........................................................................... 40 3.1.1 Requisitos Funcionais ..................................................................................... 40 3.1.2 Requisitos Não-Funcionais............................................................................. 41 3.2 DIAGRAMAS DE CASOS DE USO ............................................................... 41 3.2.1 Cenário do Professor ...................................................................................... 41 3.2.2 Cenário do Aluno ............................................................................................ 42 3.2.3 Cenário do Administrador............................................................................. 43 3.3 ARQUITETURA DO SISTEMA..................................................................... 44

iii

3.4 BASE DE DOMÍNIO ........................................................................................ 48 3.5 IMPLEMENTAÇÃO ........................................................................................ 49 3.5.1 Estrutura do Sistema ...................................................................................... 51 3.5.2 Ambiente do Administrador .......................................................................... 51 3.5.3 Ambiente do Professor ................................................................................... 52 3.5.4 Ambiente do Aluno ......................................................................................... 54 3.5.5 Ambiente do Sistema Especialista ................................................................. 57 3.6 VALIDAÇÃO DO SISTEMA .......................................................................... 61

4 CONCLUSÕES ....................................................................................62 4.1 RECOMENDAÇÕES........................................................................................ 64

REFERÊNCIAS BIBLIOGRÁFICAS ...................................................65

A IMPLEMENTAÇÃO DE TAD’s........................................................69 A.1 TAD PONTO...................................................................................................... 69 A.2 TAD PILHA ALOCAÇÃO DINÂMICA ........................................................ 69 A.3 TAD FILA ALOCAÇÃO ESTÁTICA ............................................................ 70 A.4 TAD FILA ALOCAÇÃO DINÂMICA ........................................................... 72 A.5 TAD LISTA ENCADEADA SIMPLES .......................................................... 73 A.6 TAD LISTA DUPLAMENTE ENCADEADA CIRCULAR......................... 76

B. PERFIL CARACTERISTICO DO ALUNO ....................................79 B.1 REGRAS QUE MODELAM O PERFIL DO ALUNO.................................. 79 B.2 REGRAS QUE MODELAM O MÓDULO TUTOR..................................... 81

iv

LISTA DE ABREVIATURAS

ADSL Asymmetric Digital Subscriber Line CAI Computer Assisted Instruction CLIPS C Language Integrated Production System CTTMar Centro de Ciências Tecnológicas da Terra e do Mar EaD Educação à Distância ED Estrutura de Dados ER Entidade Relacionamento FIFO First In, First Out IA Inteligência Artificial ICAI Intelligent Computer Assisted Instruction IE Informática na Educação LIBRAS Linguagem Brasileira de Sinais LIFO Last In, First Out MySQL My Structured Query Language NASA National Aeronautics and Space Administration PC Perfil Característico PHP Hypertext Preprocessor SE Sistema Especialista STI Sistema Tutor Inteligente TAD Tipo Abstrato de Dados TCC Trabalho de Conclusão de Curso TCD Tipo Concreto de Dados UML Unified Modeling Language UNIVALI Universidade do Vale do Itajaí WWW World Wide Web

v

LISTA DE FIGURAS

Figura 1. Implementação de um tipo de dados.....................................................................................6 Figura 2. Inclusão de um TAD em linguagem C .................................................................................6 Figura 3. Arquivo principal “teste.c” chama biblioteca “ponto.h” ......................................................7 Figura 4. Funcionamento da pilha........................................................................................................8 Figura 5. Estrutura da pilha estática .....................................................................................................9 Figura 6. Função para criação ou inicialização da pilha. ...................................................................10 Figura 7. Função empilha...................................................................................................................10 Figura 8. Função desempilha .............................................................................................................10 Figura 9. Função retorna o topo da pilha ...........................................................................................11 Figura 10. Função para pilha vazia ....................................................................................................11 Figura 11. Função para pilha cheia ....................................................................................................11 Figura 12. Estrutura da pilha dinâmica ..............................................................................................11 Figura 13. Funcionamento da fila estática .........................................................................................13 Figura 14. Estrutura da fila.................................................................................................................13 Figura 15. Funcionamento da fila dinâmica.......................................................................................14 Figura 16. Estrutura da fila e do elemento da fila .............................................................................14 Figura 17. Implementação de lista encadeada....................................................................................16 Figura 18. Estrutura da lista dinâmica................................................................................................17 Figura 19. Implementação de lista duplamente encadeada circular...................................................17 Figura 20. Estrutura para lista duplamente encadeada.......................................................................17 Figura 21. Estrutura para árvore.........................................................................................................19 Figura 22. Representação hierárquica de árvore ................................................................................19 Figura 23. Arquitetura Clássica de um STI........................................................................................26 Figura 24. Definição de regra no CLIPS............................................................................................37 Figura 25. Tela de trabalho do CLIPS................................................................................................38 Figura 26. Cenário do Professor.........................................................................................................42 Figura 27. Cenário do Aluno..............................................................................................................43 Figura 28. Cenário do Administrador. ...............................................................................................44 Figura 29. Árvore de decisão do módulo aluno .................................................................................47 Figura 30. Árvore de decisão do módulo tutor...................................................................................48 Figura 31. Diagrama Entidade Relacionamento ................................................................................49 Figura 32. Estrutura do Sistema .........................................................................................................51 Figura 33. Tela do Administrador ......................................................................................................52 Figura 34. Cadastro de material - professor .......................................................................................53 Figura 35. Desempenho – professor...................................................................................................54 Figura 36. Desempenho - aluno .........................................................................................................54 Figura 37. Definindo o perfil do aluno - início ..................................................................................55 Figura 38. Definindo o perfil do aluno - fim......................................................................................55 Figura 39. Visualização de conteúdo - aluno .....................................................................................56 Figura 40. Revisão de Conteúdo - aluno ............................................................................................56 Figura 41. Processo de comunicação da aplicação como o Sistema Especialista..............................57 Figura 42. Implementação da comunicação entre o STI e o SE para definir o PC do aluno .............58 Figura 43. Templates de comunicação para o perfil do aluno............................................................59 Figura 44. Implementação da comunicação entre o STI e o SE para definir o PC do aluno .............60 Figura 45. Templates de comunicação para o módulo tutor ..............................................................60 Figura 46. Como instalar o Clips PHP ...............................................................................................62

vi

Figura 47. Erro ao iniciar o Clips PHP...............................................................................................63 Figura 48. Erro ao buscar as funções do Clips PHP...........................................................................63 Figura 49. Implementação do TAD Ponto .........................................................................................69 Figura 50. Função pilha_cria..............................................................................................................69 Figura 51. Função pilha_empilha.......................................................................................................70 Figura 52. Função pilha_desempilha .................................................................................................70 Figura 53. Função pilha_vazia ...........................................................................................................70 Figura 54. Função criar fila ................................................................................................................70 Figura 55. Função fila cheia...............................................................................................................71 Figura 56. Função inserir na fila ........................................................................................................71 Figura 57. Função fila vazia...............................................................................................................71 Figura 58. Função elimina da fila.......................................................................................................72 Figura 59. Função retorna o primeiro elemento da fila......................................................................72 Figura 60. Função cria fila .................................................................................................................72 Figura 61. Função insere na fila .........................................................................................................72 Figura 62. Função remove da fila.......................................................................................................73 Figura 63. Função para inserir no início da lista ................................................................................73 Figura 64. Função para inserir elemento na posição da lista .............................................................73 Figura 65. Função para inserir elemento no fim da lista ....................................................................74 Figura 66. Função para remover elemento do início da lista .............................................................74 Figura 67. Função para remover elemento da posição da lista ..........................................................75 Figura 68. Função para remover o último elemento da lista..............................................................75 Figura 69. Função para inserir no início da lista ................................................................................76 Figura 70. Função para inserir na posição na posição da lista ...........................................................76 Figura 71. Função para inserir no fim da lista....................................................................................77 Figura 72. Função para remover no início da lista .............................................................................77 Figura 73. Função para remover na posição da lista ..........................................................................78 Figura 74. Função para remover no fim da lista ................................................................................78 Figura 75. Regra para a Pergunta 1, resposta – nenhum / Pergunta 1, resposta - bom ......................79 Figura 76. Regra para a Pergunta 1, resposta – bom / Pergunta 2, resposta - bom............................80 Figura 77. Regras para validação da árvore do módulo tutor ............................................................81

vii

LISTA DE TABELAS

Tabela 1. STI x CAI ...........................................................................................................................25 Tabela 2. Sistemas tutores inteligentes e suas características ............................................................32 Tabela 3. Aplicativos Testados ..........................................................................................................63

viii

RESUMO

SANTOS, Mauricio. Sistema Tutor Inteligente para Auxílio no ensino da Disciplina de Estrutura de Dados. Itajaí, 2006. 90 f. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)–Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2007. A Educação a Distância surge como modalidade de ensino para superar as limitações do ensino presencial. Hoje o estudante, principalmente o adulto, possui o perfil de trabalhador, tendo que dividir seu tempo entre família, trabalho e estudos. O ambiente de ensino-aprendizagem convencional sofreu modificações importantes com o surgimento dos computadores. Devido à facilidade de acesso as tecnologias como internet, ADSL, bibliotecas virtuais e outras, pessoas com sede de conhecimento nas mais diversas áreas de interesse fazem uso da informática para suprir suas necessidades do saber. A disciplina de Estrutura de Dados é tida como base para o desenvolvimento de variados sistemas computacionais, sendo este cenário o enfoque deste trabalho. Sua proposta é a criação de um Sistema Tutor Inteligente (STI) que possa auxiliar os alunos da disciplina de Estrutura de Dados do curso de Ciência da Computação do CTTMar-UNIVALI a ampliarem seus conhecimentos. O sistema foi desenvolvido para a Web com tecnologia PHP e MySQL e dentro do conceito de Educação a Distância os alunos matriculados na disciplina poderão fazer uso do sistema e acessá-lo nas horas em que acharem mais conveniente, terão acesso ao repositório de material, realizarão exercícios e poderão acompanhar seu próprio desempenho. Foi implantado um módulo tutor o qual contém as estratégias de ensino e devido a isto pode decidir quando e como apresentar o conteúdo ao estudante. A metodologia utilizada neste projeto compreende cinco etapas. Na primeira etapa, estudo, foi realizado um levantamento bibliográfico a fim de adquirir o conhecimento necessário sobre soluções similares e tecnologias que foram utilizadas, objetivando desenvolver uma solução adequada e eficiente. Na segunda etapa, modelagem, foi feita a especificação do funcionamento da solução proposta, bem como a análise e o projeto do STI. Na terceira etapa, desenvolvimento, realizou-se a implementação da solução modelada através da codificação das suas funcionalidade em software e da prototipação do sistema. Na quarta etapa, teste e validação, foram realizados experimentos com o protótipo tentando falseá-lo, com o objetivo de eliminar os erros existentes em sua modelagem ou desenvolvimento. Na quinta e última etapa, documentação, foi feito o registro de todo o projeto de pesquisa com a elaboração de uma monografia e de um artigo científico. Atualmente o índice de aprovação dos alunos na disciplina fica em torno de 60% e espera-se que com a utilização do sistema o mesmo aumente consideravelmente. Palavras-chave: Estrutura de Dados, Inteligência Artificial, Sistema Tutor Inteligente.

ix

ABSTRACT

The distance learning appears as modality to overcome the limitations of present education. Today the student, mainly the adult, has worker profile, having that to divide his/her time among family, work and studies. The environment of conventional teach-learning suffered important modifications with the appearance of the computers in the classrooms. Due to access easiness to the technologies as Internet, ADSL, virtual libraries and others, people that wish the knowledge in the most different areas of interest use the computer science to provide their necessities of knowing. The Structure of Data subject is had as base for the development of varied computational systems being this scene the focus of this work. The proposal is the creation of Intelligent Tutor System (ITS) that can aid the pupils of Structure of Data subject of the Computer Science Course of CTTMar-UNIVALI extend their knowledgement. The registered pupils will be able to have access the system at the moment that will be better for them - the system was developed for Web with PHP and MySQL technology - where they will do exercises, will have access to the material repository and they will be followed by a virtual tutor. The methodology, used in this project, divides into five stages. Fisrt, the study, a bibliographical revision was carried out in order to acquire the sufficient knowledge about similar solutions and technologies that were used, aiming to develop an efficient and adequated solution. Second, model, the working specification of proposal solution, as well as ITS analysis and project. Third , development, was done the implementation of modeled system using codification of its functionalities and system prototype. In fourth, validation, were done experiments with the prototype in order to eliminate its errors. Fifth and last stage, documentation, was done a documentation about the entire project. Currently, the rate of pupils’ approval in subject is about 60% and it is believed that can improve. keywords: Structure of Data, Artificial Intelligence, Intelligent Tutor System.

1 INTRODUÇÃO

A facilidade de acesso a novas tecnologias (internet, ADSL-Asymmetric Digital Subscriber

Line, bibliotecas virtuais) tem proporcionado a estudantes, pesquisadores e simpatizantes

facilidades na busca de novas técnicas de aprendizado e estudo da área em que têm interesse. A

informática tem contribuído com essa idéia, disponibilizando aos interessados o máximo de

informações possíveis, melhorando assim as formas disponíveis de ensino e aprendizado. O uso da

hipermídia, da rede e de softwares educativos permitiu também a cooperação, como forma de

trabalho e aquisição de conhecimento (SOBRAL; FERREIRA, 2000, p. 1).

A Educação à Distância (EaD) surge como uma modalidade para superar as limitações do

ensino presencial, trazendo vantagens na medida em que rompe com limitações espaciais e

geográficas, diminuindo o custo por aluno, atendendo a população diversificada, reunindo pessoas

de locais e ocupações diferentes, priorizando o respeito ao ritmo pessoal de aprendizagem e

desenvolvendo a autodisciplina de estudo (LIMA; ROSATELLI, 2003, p. 2).

Segundo Viccari (1990 apud SCHMITZ et al, 2002, p. 3), os Sistemas Tutores Inteligentes

(STI) são programas que modificam suas bases de conhecimento, percebem as intervenções do

aluno e são dotados da capacidade de aprender e adaptar suas estratégias de ensino mediante a

interação com o aluno.

Como exemplo de STI pode-se citar o Wöhler, que é um ambiente inteligente para suporte

ao processo de ensino-aprendizagem na área de Química Orgânica, capaz de avaliar o desempenho

e o progresso do aluno, permitindo manipular, construir e analisar moléculas de acordo com as

questões formuladas na forma de pequenos problemas a serem resolvidos (LUZZI et al, 1997, p.

201).

Pode-se citar também o STI desenvolvido para o ensino de Estrutura de Dados aos Surdos,

que consiste em verificar o tipo de mídia (texto, vídeo ou imagem) que será utilizada para

apresentar o conteúdo ao aluno. São realizadas perguntas objetivas ao aluno para modelar o seu

perfil inicial e durante os exercícios realizados o sistema percebe se o aluno compreendeu melhor o

assunto abordado através de imagens, vídeos ou pela leitura de textos (FRANÇA, 2005, p. 39).

Devido a fatos como os apresentados anteriormente, o ambiente de ensino-aprendizagem

convencional sofre modificações importantes com a utilização de computadores nas salas de aula e

2

fora delas. Percebe-se com isso a necessidade do desenvolvimento de uma ferramenta que auxilie o

aluno a absorver os conteúdos e conceitos durante o processo de ensino-aprendizagem, no caso

deste trabalho, para a disciplina de Estrutura de Dados. Um STI, neste enfoque, é uma boa solução

uma vez que pode ser utilizado tanto como apoio ao professor da disciplina como para estudo dos

alunos em horário extra-aula, pois permite uma adaptação ao aprendizado de cada estudante

modelando o seu perfil, uma vez que nem todos aprendem da mesma forma.

A execução deste projeto de pesquisa se justifica em nível de Trabalho de Conclusão de

Curso (TCC) para o Curso de Ciência da Computação, uma vez que desenvolve uma solução

computacional que faz uso das muitas tecnologias aprendidas durante o curso, dentre as quais,

pode-se citar Estrutura de Dados, Inteligência Artificial, Programação e Banco de dados.

A ênfase do projeto foi desenvolver um sistema computacional para o auxílio no

aprendizado e acompanhamento de acadêmicos da disciplina de Estrutura de Dados, almejando

oferecer um acompanhamento individualizado sobre o desempenho do aluno no aprendizado de

Lista, Fila, Pilha e Árvore, e fornecer aos alunos um repositório de materiais didáticos básicos e

complementares e exercícios práticos.

A razão da escolha pela disciplina de Estrutura de Dados é devido a esta ser base para o

desenvolvimento de variados sistemas computacionais e o índice geral de aprovação da disciplina,

no curso de ciência da computação do CTTMar-UNIVALI, ficar em torno de 60%, o que acredita-

se possa melhorar com outras formas de ensino. Também pode-se ressaltar a disponibilidade do

professor da disciplina de estruturas de dados para auxiliar no processo de geração dos conteúdos

do sistema e nos testes finais (avaliação).

1.1 OBJETIVOS

1.1.1 Objetivo Geral

Desenvolver um Sistema Tutor Inteligente para o acompanhamento e auxílio do estudante

no aprendizado da disciplina de Estrutura de Dados.

1.1.2 Objetivos Específicos Têm-se como objetivos específicos deste projeto de pesquisa:

• Pesquisar práticas de ensino de Estrutura de Dados;

3

• Estudar as ferramentas computacionais necessárias à implementação de STI;

• Pesquisar e analisar sistemas similares;

• Analisar e selecionar as técnicas de Inteligência Artificial a serem utilizadas;

• Realizar a modelagem conceitual do sistema;

• Implementar o sistema; e

• Testar e validar a implementação do sistema.

1.2 Metodologia

O desenvolvimento deste trabalho foi constituído por cinco etapas, estudo, modelagem,

desenvolvimento, validação e documentação.

A primeira, consistiu em obter informações através de uma revisão bibliográfica, realizando-

se uma pesquisa prática de ensino de Estrutura de Dados, onde foram apresentadas informações

sobre Tipo Abstrato de Dados (TAD) e as estruturas Pilha, Fila, Lista e Árvore, também foram

implementados os scripts referente as operações associadas as estas estruturas. Estudou-se as

ferramentas computacionais necessárias à implementação de STI (Sistemas Tutores Inteligentes) e

foram pesquisados e analisados sistemas similares, onde foi feita uma análise de suas

características. Foi descrito uma seção na qual analisou-se e selecionou-se a técnica de Inteligência

Artificial que foi utilizada na implementação do sistema e apresentado o ambiente de

desenvolvimento para esta técnica. Essa etapa foi realizada no intuito de prover boa qualidade no

sistema proposto.

Na segunda etapa tem-se uma descrição sobre as tecnologias e estratégias utilizadas para

desenvolvimento do sistema, apresentadas as árvores de decisão, a modelagem do banco de dados, a

descrição dos casos de uso e os requisitos, imprescindíveis, a vista do especialista para o bom

desempenho do sistema.

A terceira etapa compreendeu a implantação do banco de dados, os casos de uso foram

codificados para a linguagem PHP, foi atribuída inteligência ao sistema ao ser desenvolvida a

modelagem das árvores de decisão para o módulo tutor e módulo do aluno.

Na quarta etapa foram realizados testes de funcionalidade do sistema, buscando corrigir os

erros de implementação e procurando validar cada caso de uso segundo a modelagem definida.

4

Na quinta e última etapa, após a conclusão da modelagem e da implementação, foi realizada

a documentação do sistema, onde foi feito todo o registro do projeto de pesquisa, através da

elaboração de uma monografia e um artigo científico.

1.3 Estrutura do trabalho

Este trabalho está estruturado em quatro capítulos. No primeiro capítulo foi apresentada

introdução, os objetivos, a metodologia e as estrutura do trabalho.

No segundo capítulo é demonstrado um estudo sobre Estruturas de Dados, é descrita a

implementação dos Tipos Abstratos de Dados que representam cada estrutura, estas

implementações são distribuídas na forma de Figura durante a descrição da Fundamentação Teórica

e no Apêndice. Na seqüência é falado sobre Informática na Educação, realizado um embasamento

sobre Educação a Distância no qual foi identificado o perfil do estudante da atualidade. Neste

capítulo também é apresentado um estudo sobre Sistemas Tutores Inteligentes, identificada sua

arquitetura e apresentado exemplos e características de Sistemas Tutores Inteligentes atuais e que

foram importantes no passado. Na seção sobre Inteligência Artificial define-se que o sistema a ser

desenvolvido será baseado em Sistemas Especialistas devido a não se terem casos antigos que

pudessem ser comparados ou dados que influenciassem na escolha de outro tipo de inteligência,

nesta mesma seção é explicado sobre o Ambiente de Desenvolvimento do Sistema Especialista. No

final desse capítulo é feita uma análise geral do que foi descrito durante toda a fundamentação

teórica.

O terceiro capítulo refere-se ao desenvolvimento e validação do sistema. Neste, foram

descritas as análises de requisitos, é apresentado os cenários com os casos de uso que foram

implementados aos atores que trabalham no sistema. Exibida a arquitetura do sistema. Na seção

base de domínio definiu-se que esta pode ser dividida em base do módulo aluno e base do módulo

domínio. Foram descritas as características das tecnologias utilizadas no desenvolvimento do

sistema. Foi apresentada a estrutura do sistema, descrito sobre o seu ambiente e suas características.

No quarto capítulo são apresentadas a conclusões alcançadas com o desenvolvimentos do

sistema e as recomendações para trabalhos futuros.

2 FUNDAMENTAÇÃO TEÓRICA

Este capítulo está dividido em 4 tópicos. Inicialmente é apresentada uma descrição sobre

Estrutura de Dados e logo após são detalhados os pontos relevantes utilizados neste trabalho. Foi

detalhada a apresentação do TAD Pilha.h de forma a explicar a implementação de cada função para

a estrutura de dados Pilha, o que não ocorrerá com a apresentação para a estruturas de Fila, Lista e

Árvore, onde o código fonte completo dos TAD’s mencionados constará em apêndice, sendo

descritas apenas suas características principais. No segundo tópico, Informática na Educação, foi

realizado um apanhado geral sobre a situação do ensino na atualidade. No terceiro tópico, Sistemas

Tutores Inteligentes, foi descrito sobre a arquitetura destes sistemas e apresentadas características

de sistemas que foram e são considerados importantes. No quarto tópico, Inteligência Artificial, é

apresentada uma descrição sobre a inteligência que será apresentada no projeto.

2.1 ESTRUTURA DE DADOS

Drozdek (2002, p. xv) define que o componente fundamental no aprendizado da Ciência da

Computação é o estudo das Estruturas de Dados, pois estas são a base sobre a qual muitos outros

campos da Ciência da Computação são construídos. Acrescenta que é imprescindível a obtenção de

algum conhecimento para os estudantes que têm pretensão de trabalhar em implementação, testes e

manutenção de projetos de qualquer sistema de software.

2.1.1 Tipo Abstrato de Dados

Um tipo abstrato de dados (TAD) é formado por um conjunto de valores e por uma série de

funções que podem ser aplicadas sobre estes valores. Funções e valores, em conjunto, constituem

um modelo matemático que pode ser empregado para modelar e solucionar problemas do mundo

real, servindo para especificar as características relevantes dos objetos envolvidos no problema, a

forma como se relacionam e como podem ser manipulados (PEREIRA, 2004, p. 4).

Para Celes, Cerqueira e Rangel (2004, p. 126) um TAD é descrito pela finalidade do tipo e

de suas operações, e não pela forma como está implementado. A interface de um TAD consiste,

basicamente, na definição do nome do tipo e do conjunto de funções exportadas para sua criação e

manipulação.

6

Tipo concreto de dados (TCD ou simplesmente tipo de dados) é a transformação de um

modelo matemático para ser aplicado na resolução de problemas de computador. Denomina-se

implementação quando ocorre a transformação de um TAD em TCD. “É durante o processo de

implementação que a estrutura de armazenamento dos valores é especificada, e que os algoritmos

que desempenharão o papel das funções são projetados” (PEREIRA, 2004, p. 4). A Figura 1

representa esta afirmação.

Figura 1. Implementação de um tipo de dados

Fonte: Adaptado de Pereira (2004, p. 5).

Para Pimentel e Cristina (2005) a característica essencial de um TAD é a separação entre

conceito e implementação, sendo que a implementação de um TAD escolhe Estrutura de Dados

(ED) para representá-lo. Cada ED é constituída dos tipos básicos (inteiro, real, caracter) ou dos

tipos estruturados (vetor, registro).

Para o exemplo de utilização de um TAD na linguagem “C” é preciso representá-lo através

de uma biblioteca (.h), e para utilizá-lo é necessário incluir uma diretiva “#include TAD.h” no

programa que fará uso da biblioteca, conforme descrito na Figura 2.

Figura 2. Inclusão de um TAD em linguagem C

Fonte: Dazzi (2006).

A Figura 3 mostra as operações para o TAD Ponto implementadas na biblioteca ponto.h. Se

forem conhecidas as interfaces do TAD pode-se criar programas que utilizem as funcionalidades

exportadas, no entanto, o arquivo que utilizará o TAD, no caso teste.c, deve incluir a diretiva de

IMPLEMENTAÇÃO TIPO DE DADOS

ABSTRATO (modelo matemático)

TIPO CONCRETO DE DADOS

(padrão de bits/rotinas)

Prog.c

tad1.h

tad2.h

7

chamada para a biblioteca ponto.h implementada em sua interface. A implementação do TAD para

o arquivo ponto.h é apresentada na Figura 49 no Apêndice A. A.1.

Figura 3. Arquivo principal “teste.c” chama biblioteca “ponto.h”

Fonte: Adaptado de Dazzi (2006).

Da mesma forma como foi apresentado o TAD Ponto, serão apresentados os TAD’s Pilha,

Fila, Lista e Árvore.

2.1.2 Pilha

Uma pilha é uma estrutura linear de dados na qual novos dados podem ser armazenados e

recuperados somente por uma extremidade chamada topo da pilha (DROZDEK, 2002, p. 123).

Toda vez que um elemento é inserido na pilha, acrescenta Pereira (2004, p. 17), ele é

colocado no seu topo, e em qualquer momento apenas aquele elemento posicionado no topo da

pilha pode ser removido. Logo, os elementos da pilha só podem ser retirados na ordem inversa à

ordem em que foram introduzidos: o último que entrou é o primeiro a sair (LIFO – last in, first out).

“A definição da pilha compreende a inserção e a eliminação de itens, de modo que uma

pilha é um objeto dinâmico, constantemente mutável”. Aliás, o nome pilha, usado como sinônimo

Arquivo teste.c

Arquivo ponto.h �

#include <iostream> using namespace std; // Definicao do Tipo Ponto struct Ponto { int X,Y; }; // Inicializa a coordenada void iniciaPonto(Ponto &P) // Mostra a coordenada atual void mostraPonto(Ponto P) // Atualiza a coordenada void atualizaPonto(Ponto &P, int X, int Y)

#include <iostream> using namespace std; #include "ponto.h" int main() { Ponto ponto; iniciaPonto(ponto); mostraPonto(ponto); atualizaPonto(ponto,10,20); mostraPonto(ponto); return 0; }

8

para lista LIFO, provém da semelhança entre o modo como as listas LIFO crescem/diminuem e o

modo como as pilhas, no mundo real, funcionam (TENENBAUM; LANGSAM; AUGENSTEIN,

1989, p. 86).

Um exemplo para utilização de pilha é de uma lanchonete onde há uma pilha de bandejas

que são colocadas e retiradas uma sobre a outra. A última bandeja colocada é a primeira bandeja

removida da pilha. Pode-se pegar uma bandeja somente se existirem bandejas na pilha, e uma

bandeja pode ser adicionada à pilha somente se houver espaço suficiente, isto é, se a pilha não

estiver muito alta (DROZDEK, 2002, p. 123).

2.1.2.1 TAD Pilha

O TAD pilha é composto pelos dados (valores) e pelo conjunto de operações (funções)

pertinentes a estes valores. Neste caso, os dados são a estrutura computacional necessária para

armazenar o conteúdo da pilha e as operações são funções e/ou procedimentos que representam as

operações que se deseja. A Figura 4 ilustra o funcionamento conceitual de uma pilha. A seguir é

apresentado o TAD de forma abstrata, suas operações associadas e suas implementações, por

alocação estática e dinâmica.

Figura 4. Funcionamento da pilha

Fonte: Adaptado de Celes, Cerqueira e Rangel (2004, p. 162).

Tipo de dado

Definição da estrutura: conjunto dos dados e controle do topo da pilha.

• Dados; e

9

• Controle do Topo.

Operações Associadas

• Criar (P) – cria uma Pilha P vazia;

• Vazia (P) – testa se a pilha está vazia;

• Cheia (P) – testa se a pilha está cheia;

• Topo (P) – acessa o elemento do topo da pilha (sem eliminar);

• Empilha (P, x) – insere x no topo da pilha; e

• Desempilha (P) – elimina o elemento do topo da pilha.

Implementação de pilha – alocação estática

Para esta situação é preciso saber de antemão o número máximo de elementos que podem

estar armazenados simultaneamente na pilha, isto é, a estrutura da pilha tem um limite conhecido.

Deve-se ter um vetor para armazenar os elementos da pilha (para os exemplos apresentados o nome

do vetor será dados), onde os elementos inseridos ocupam as primeiras posições do vetor. Dessa

forma, quando têm-se n elementos armazenados na pilha, o elemento dados[n-1] representa o

elemento do topo.

A estrutura que representa o tipo pilha deve, portanto, ser composta pelo vetor e pelo

número de elementos armazenados (Figura 5).

template <class tipo, int TAM> struct pilha{ tipo dados[TAM]; int topo; };

Figura 5. Estrutura da pilha estática

Quando é criada, a pilha é inicializada como sendo vazia para evitar erros. A implementação

desta operação do TAD é apresentada na Figura 6.

10

template <class tipo, int TAM> void pilha_cria(pilha<tipo,TAM> &pl){ pl.topo = -1; }

Figura 6. Função para criação ou inicialização da pilha.

Para inserir um elemento na pilha é usada a próxima posição livre do vetor. É necessário

assegurar que existe espaço para a inserção do novo elemento, tendo em vista que se trata de um

vetor com dimensão fixa. A Figura 7 mostra a implementação do TAD para a operação empilha.

template <class tipo, int TAM> bool pilha_empilha(pilha<tipo,TAM> &pl, tipo valor){ if( pilha_cheia (pl)){ return false; //pilha cheia } else { pl.dados[pl.topo++] = valor; //insere elemento return true; } }

Figura 7. Função empilha

A operação do TAD para eliminar e retornar um elemento da pilha é apresentada na Figura

8. Antes de eliminar um elemento, é preciso também verificar se a pilha está vazia ou não.

template <class tipo, int TAM> tipo pilha_desempilha(pilha<tipo,TAM> &pl){ if( pilha_vazia (pl)){ return(null); //pilha vazia } else { return pl.dados[pl.topo--];// retorna o elemento do topo e decrementa } }

Figura 8. Função desempilha

Para verificar o elemento que se encontra no topo de pilha é necessário uma função que

retorna este valor. É preciso também verificar se a pilha está vazia sendo que neste caso retorna o

valor nulo. A Figura 9 mostra a implementação deste TAD.

11

template <class tipo, int TAM> tipo pilha_retorna_topo(pilha<tipo,TAM> &pl){ if(pilha_vazia (pl))//se estiver vazia return(NULL); else return (pl.dados[pl.topo]);//retorna o elemento do topo sem decrementá-lo }

Figura 9. Função retorna o topo da pilha

Por fim, nas Figura 10 e Figura 11 são apresentadas as implementações das operações de

TAD para verificar se a pilha está vazia ou se está cheia.

template <class tipo, int TAM> bool pilha_vazia(pilha<tipo,TAM> &pl){ return (pl.topo == -1); }

Figura 10. Função para pilha vazia

template <class tipo, int TAM> bool pilha_cheia(pilha<tipo,TAM> &pl){ return (pl.topo == TAM-1); }

Figura 11. Função para pilha cheia

Implementação de pilha – alocação dinâmica

Este tipo de implementação é utilizado quando o número máximo de elementos a serem

armazenados na pilha é desconhecido. Os elementos são armazenados na pilha e ela pode ser

representada simplesmente por um ponteiro para o primeiro nó, que é o topo. A estrutura que

representa a operação deste TAD é mostrada na Figura 12, e as demais estruturas utilizadas na

implementação do TAD Pilha se encontram no Apêndice A. A.2.

template <class tipo> struct pilha{ tipo dado; pilha<tipo>* anterior; };

Figura 12. Estrutura da pilha dinâmica

12

2.1.3 Fila

Drozdek (2002, p. 130) define uma fila como sendo “simplesmente uma linha de espera que

cresce somando elementos ao seu final e que diminui tomando elementos de sua frente”. Uma fila,

como no cotidiano, é uma estrutura na qual ambas as extremidades são usadas. Em uma

extremidade os elementos são inseridos e na outra eles são eliminados; diferentemente da pilha,

onde o último elemento alocado é o primeiro elemento a ser eliminado.

Pereira (2004, p. 57) concorda com esta definição e informa que “cada vez que uma

operação de inserção é executada, um novo elemento é colocado no final da fila”. Acrescenta ainda

que, “na remoção, é sempre retornado o elemento que aguarda a mais tempo na fila, ou seja, aquele

posicionado no começo”. Devido a isto, as filas são denominadas de FIFO (First-In/First out), onde

a ordem de saída é definida diretamente pela ordem de entrada dos elementos na fila, de modo que

os primeiros elementos que entram são os primeiros a sair.

Pode-se usar como exemplo, para implementação de uma Fila, o caso de uma impressora

que é compartilhada para várias máquinas. Deve-se adotar um critério para determinar a prioridade

de impressão dos documentos e a estratégia mais simples, segundo Celes, Cerqueira e Rangel

(2004, p. 171) “é tratar todas as requisições com a mesma prioridade e imprimir os documentos na

ordem em que forem submetidos – o primeiro submetido é o primeiro a ser impresso”.

2.1.3.1 TAD Fila

O TAD fila é composto pelos dados (valores) e pelo conjunto de operações (funções)

pertinentes a estes valores. Os dados são a estrutura computacional necessária para armazenar o

conteúdo da fila e as operações são funções e/ou procedimentos que descrevem a finalidade do

TAD. A seguir é apresentado o TAD de forma abstrata, suas operações associadas, suas estruturas

de implementação e as figuras que representam o seu funcionamento conceitual, por alocação

estática e dinâmica.

Tipo de dado

Definição da estrutura: conjunto de dados e o controle do início e do fim da fila.

• Dados; e

• Controle do Início e Fim.

13

Operações Associadas

• Criar (F) – cria uma fila F vazia;

• Vazia (F) – Testa se a fila está vazia;

• Cheia (F) – Testa se a fila está cheia;

• Primeiro (F) – acessa o elemento no início da fila;

• Inserir (F, x) – insere x no fim da fila; e

• Eliminar (F) – elimina o elemento do início da fila.

Implementação de fila – alocação estática

Figura 13. Funcionamento da fila estática

Fonte: Adaptado de Pimentel e Cristina (2005).

Para implementação da fila estática (Figura 13) é necessário ter na sua estrutura um vetor

com tamanho determinado. Para isso, é preciso fixar o número máximo de n elementos da fila para

o vetor; a Figura 14 mostra a estrutura da fila. O processo de remoção e inserção em extremidades

opostas fará a fila andar no vetor, sendo que neste caso a função de inserir chama uma função

auxiliar que ajuda na organização do vetor. Esta implementação pode ser verificada na Figura 56 do

Apêndice A. A.3, e as demais implementações para o TAD Fila Estática podem ser encontradas no

mesmo apêndice.

template <class tipo, int TAM> struct filaEst{ int inicio, fim, quantidade; tipo dados[TAM]; };

Figura 14. Estrutura da fila

14

Implementação de fila – alocação dinâmica

Figura 15. Funcionamento da fila dinâmica

Fonte: Adaptado de Pimentel e Cristina (2005).

Na alocação dinâmica não existe o problema de limite para o tamanho da fila, estando esta

limitada somente ao tamanho da memória física do computador (Figura 15). Para controle da

posição inicial e final são criados dois elementos do tipo fila, os quais definem a posição inicial e

final da fila respectivamente. A estrutura de um elemento da fila, bem como a estrutura de seus

ponteiros de início e fim são apresentadas na Figura 16.

template < class T > struct ElementoFila { T dado; ElementoFila<T> *prox; }; template <class T> struct TFila { ElementoFila<T> *Inicio,*Final; };

Figura 16. Estrutura da fila e do elemento da fila

Ao inserir um novo elemento na fila basta alocar memória e fazer com que o último

elemento aponte para este, sendo que a implementação pode ser vista na Figura 61. A operação para

retirar um elemento ocorre no início da fila e consiste em fazer com que, após a remoção, o começo

aponte para o sucessor do nó retirado, a implementação para esta função está descrita na Figura 62

do Apêndice A.4, no mesmo Apêndice encontram-se as demais funções para implementação de fila

com alocação dinâmica.

15

2.1.4 Lista

Ao ocupar um espaço contíguo na memória, um vetor permite acesso a qualquer um de seus

elementos a partir do endereço da sua posição inicial, podendo assim ser acessado com o operador

de indexação vet[i]. Desta forma, Celes, Cerqueira e Rangel (2004, p. 134) dizem que “o vetor é

uma estrutura que possibilita o acesso randômico aos elementos, pois é possível acessar qualquer

elemento aleatoriamente”.

O que dificulta é que o vetor não é uma estrutura de dados muito flexível, pois é preciso

sempre ser dimensionado com o número de elementos definidos. Caso seja necessário armazenar

mais elementos do que o número máximo de posições possíveis no vetor começam a surgir os

problemas, “pois não existe uma maneira simples e barata para alterar a dimensão do vetor em

tempo de execução”. No entanto, se o espaço de memória utilizado for menor que o espaço locado

para o vetor, é possível dizer que se está “subutilizando o espaço de memória reservado” (CELES;

CERQUEIRA; RANGEL, 2004, p. 135).

A solução para casos como estes seria utilizar estruturas que cresçam ou diminuam

conforme seja preciso inserir ou remover elementos. Essas estruturas são chamadas dinâmicas e a

vantagem de uma lista sobre um vetor é a possibilidade não só de inserir ou remover elementos em

suas extremidade, mas também no meio de um grupo de elementos (TENENBAUM; LANGSAM;

AUGENSTEIN, 1995, p. 235).

2.1.4.1 TAD Lista

O TAD lista será composto pelos dados (valores) e pelo conjunto de operações (funções)

pertinentes a estes valores. Os dados são a estrutura computacional necessária para armazenar o

conteúdo da lista e as operações são funções e/ou procedimentos que representam as operações que

se deseja. A seguir é apresentado o TAD de forma abstrata, suas operações associadas, suas

estruturas de implementação e as figuras que representam o seu funcionamento conceitual como

lista encadeada simples e duplamente encadeada circular.

Tipo de dado

Definição da estrutura: conjunto de dados e o controle do início e do fim da fila.

• Dados;

• Controle do Próximo; e

16

• Controle do Anterior (duplamente encadeada).

Operações Associadas

• Criar (L) – cria uma lista L vazia;

• Vazia (L) – Testa se a lista está vazia;

• Cheia (L) – Testa se a lista está cheia;

• Insere no Início (L, x) - Insere x no início da lista;

• Insere na Posição (L, x, pos) – Insere x na posição pos da lista;

• Insere no Fim (L, x) – Insere x no fim da lista;

• Remove no Início (L) – Remove o elemento do início da lista;

• Remove na Posição (L, x, pos) – Remove x da posição pos da lista; e

• Remove no Fim (L, x) – Remove x do fim da lista.

Implementação de lista – encadeada simples

Figura 17. Implementação de lista encadeada

Fonte: Adaptado de Pimentel e Cristina (2005).

Numa lista encadeada, para cada novo elemento inserido na estrutura é alocada memória

para armazená-lo. Dessa forma, o espaço total de memória gasto pela estrutura é proporcional ao

número de elementos armazenados. Para percorrer todos os elementos da lista é necessário guardar

o seu encadeamento, o que é feito armazenando-se, junto com a informação de cada elemento, um

ponteiro para o próximo elemento da lista, como mostra a Figura 17. Quando um elemento novo é

inserido, precisa-se definir se ele é adicionado no início, meio ou fim da lista, o que é representado

da Figura 63 à Figura 65 no Apêndice A. A.5. A mesma situação é identificada no caso de remoção,

representada da Figura 66 à Figura 68 encontradas no mesmo Apêndice. A Figura 18 representa a

estrutura para implementação do TAD Lista.

17

template < class T > struct ListaDin { T dado; ListaDin <T> *prox; };

Figura 18. Estrutura da lista dinâmica

Implementação de lista – duplamente encadeada circular

Figura 19. Implementação de lista duplamente encadeada circular

Fonte: Adaptado de Pimentel e Cristina (2005).

Neste tipo de lista cada elemento tem um ponteiro para o próximo elemento e um ponteiro

para o elemento anterior (Figura 19). Assim, dado um elemento podem-se acessar os dois elementos

adjacentes: o próximo e o anterior. Caso seja preciso acessar o último elemento da lista pode-se

percorrê-la em ordem inversa, bastando acessar continuamente o elemento anterior até alcançar o

primeiro elemento da lista. O nó da lista pode ser representado pela estrutura mostrada na Figura 20

e a lista pode ser representada com o ponteiro para o primeiro nó, também identificado na Figura

19.

template < class T > struct ListaDin { T dado; ListaDin <T> *ant; ListaDin <T> *prox; };

Figura 20. Estrutura para lista duplamente encadeada

18

2.1.5 Árvore

É considerada a estrutura de dados adequada para a representação de hierarquias. A forma

mais natural de definir uma estrutura de árvore é usando a recursividade. Uma árvore é composta

por um conjunto de nós. Existe um nó r, denominado de raiz, que contém zero ou mais subárvores,

cujas raízes são ligadas diretamente a r. Esses nós raízes das subárvores são ditos filhos do nó pai, r.

Nós com filhos são chamados de nós internos, e nós que não têm filhos são chamados de folhas ou

nós externos. É tradicional desenhar as estruturas de árvores com a raiz para cima e as folhas para

baixo (CELES; CERQUEIRA; RANGEL, 2004, p. 185).

Drozdek (2002, p. 194) complementa esta informação afirmando que

Cada nó tem que ser atingível a partir da raiz através de uma seqüência única de arcos, chamada de caminho. O número de arcos em um caminho é chamado de comprimento do caminho. O nível de um nó é o comprimento do caminho da raiz ao nó mais 1, que é o número de nós no caminho. A altura de uma árvore não-vazia é o nível máximo de um nó na árvore. A árvore vazia é uma árvore legítima de altura 0 (por definição), e um nó único é uma árvore de altura 1. Esse é o único caso no qual um nó é raiz e folha. O nível de um nó precisa estar entre 1 (o nível de uma raiz) e a altura da árvore, que, em um caso extremo é o nível da única folha em uma árvore degenerada, que se parece com uma lista ligada.

2.1.5.1 TAD Árvore

O TAD árvore é composto pelos dados (valores) e pelo conjunto de operações (funções)

pertinentes a estes valores. Os dados são a estrutura computacional necessária para armazenar o

conteúdo da lista e as operações são funções e/ou procedimento que representam as operações que

se deseja. A seguir é apresentado o TAD de forma abstrata, suas operações associadas, sua estrutura

de implementação e a figura que representa o seu funcionamento conceitual.

Tipo de dado

Definição da estrutura: conjunto de dados e o controle do nó da esquerda e controle do nó da

direita a árvore.

• Dados; e

• Controle do filhoDireita e filhoEsquerda.

Operações Associadas

• Define (T) – define uma árvore vazia;

• Criar (T,x) – Cria o nó raiz com o elemento x;

19

• Vazia(T) – verifica se a árvore está vazia;

• Insere à Direita do Nó (T, item_pai, x) - insere x à direita do item_pai;

• Insere à Esquerda do Nó (T, item_pai, x) – insere x à esquerda do item_pai;

• Nivel (T,x) – retorna o nível onde se encontra o nó como o item x;

• Pai (T,x) – retorna o conteúdo do pai do nó caso ele exista na árvore; e

• Excluir (T,x) – exclui x da árvore.

As Figura 21 representa a estrutura de árvore e a Figura 22 mostra o seu funcionamento

conceitual.

template < class T > struct No { T dado; No<T> *dir,*esq; };

Figura 21. Estrutura para árvore

Figura 22. Representação hierárquica de árvore

Fonte: Adaptado de Pimentel e Cristina (2005).

20

2.2 INFORMÁTICA NA EDUCAÇÃO

Para Gregio (2003, p. 2), “o paradigma educacional emergente requer a inserção de novas

práticas curriculares e metodologias inovadoras, para fazer frente às necessidades de uma sociedade

globalizada”, que faz constantes alterações nos padrões de vida da pessoa, “seja na maneira de se

comunicar, nas habilidades profissionais de atuação ou na forma de aquisição do conhecimento e do

pensar”.

Hoje o estudante, principalmente o adulto, tem o perfil de trabalhador, tendo que dividir seu

tempo entre família, trabalho e estudos, sendo que antes os alunos eram jovens que dispunham de

tempo integral para dedicar-se somente aos estudos. Isso mostra que houve sim uma mudança no

paradigma educacional (CRISTEA; TUDUCE, 2002 apud SOUZA, 2005, p. 6).

Desta forma, o futuro papel do professor não será mais o de difusor do saber, mas o de

“animador da inteligência coletiva” dos estudantes, estimulando-os a trocar seus conhecimentos.

Para falar em tecnologia é necessário cuidar para não usá-la a qualquer custo, mas sim acompanhar

consciente e deliberadamente uma mudança de civilização que questiona profundamente as formas

institucionais, as mentalidades, a cultura dos sistemas educacionais e, sobretudo, os papéis de

professor e de aluno (LÈVY, 1998 apud GREGIO, 2003, p. 3).

Para Souza (2005, p. 7) adotar o computador como ferramenta de ensino implica numa

mudança cultural e uma das principais razões para a sua utilização é a de propiciar situações

desafiadoras de resolução de problemas onde o aluno desenvolve o raciocínio, aprende no seu

tempo e interage com outros estudantes, enriquecendo o processo de aprendizado.

O projeto de um programa educacional implica uma série de decisões que vão desde o

aspecto técnico até o aspecto pedagógico. A escolha da modalidade de programa educacional que se

deseja implementar traz consigo uma série de pressupostos psico-pedagógicos que devem ser

observados pelos projetistas.

Chiab (2002 apud GREGIO, 2003, p. 4) está preocupado com o despreparo dos professores

na adaptação à modernidade e a aversão por parte dos mesmos diante das mudanças necessárias e

impostas pela evolução tecnológica. Afirma que “os professores estão fortemente arraigados à

concepção tradicional do seu papel, do papel da educação e dos métodos de ensino”.

21

Percebe-se então que implantar laboratórios nas escolas, e equipá-los com computadores de

última geração não implica em avanços na qualidade do ensino. Faz-se necessário treinar

professores e alunos, dispor das ferramentas corretas e entender que o computador é um meio e não

um fim (SOUZA, 2005, p. 8).

Desta forma, os professores tornam-se “elemento-chave” para que o trabalho possa cumprir

seus objetivos. Gregio (2003, p. 6) diz que é necessário iniciar um processo contínuo de formação

dos professores, no qual devem ser abrangidos conhecimentos específicos sobre informática e

conhecimentos sobre o processo de ensino-aprendizagem.

O aprendizado é um processo gradual e contínuo e necessita que o conhecimento adquirido

seja aplicado, praticado, de forma a ser fixado e trabalhado na prática. O filósofo chinês Confúcio

certa vez disse: “O que ouço, eu esqueço, o que vejo, eu recordo, o que faço, eu aprendo”, palavras

sábias que retratam o fato real. Conhecimento adquirido, mas não exercitado, perde-se ao longo do

tempo.

Por isso pode-se dizer que as pessoas tendem a aprender melhor quando associam um

conteúdo a algo prático, que aplica na vida real. Segundo Cristea e Tuduce (2002 apud SOUZA,

2005, p. 8) as pessoas aprendem melhor quando são motivadas e desafiadas, ou quando necessitam

do conhecimento para resolver um problema.

Pode-se concluir que, se os esforços no desenvolvimento da Informática na Educação forem

direcionados no sentido de motivar, desafiar e exercitar o estudante, o computador torna-se uma

ferramenta poderosa e aliada do educador. Se o professor continuar a insistir em ser um mero

“transmissor” de conhecimento e transformar os alunos em “espectadores” estáticos, meros

ouvintes, esse professor certamente será substituído. Mas não por máquinas, e sim por outro

professor.

2.2.1 Educação à Distância

O ambiente de ensino-aprendizagem convencional sofreu modificações importantes com o

surgimento dos computadores nas salas de aula (SOBRAL; FERREIRA, 2000, p. 1). Também a

Internet evoluiu, saindo dos laboratórios de pesquisa para os computadores domésticos, e se

mostrou uma fonte riquíssima de informação para os estudantes. Ela revolucionou a obtenção de

22

conhecimento, facilitando o acesso a novas tecnologias, e propôs adaptações ao sistema

educacional, introduzindo novas exigências e competências principalmente aos educadores.

Contudo, a Internet deve ser vista sempre como uma ferramenta de apoio ao ensino e que

permitiu aos softwares educacionais se expandirem, tomando proporções globais e permitindo

conectar alunos de qualquer parte do mundo, minimizando o problema das distâncias geográficas.

O principal objetivo seria a busca por um melhor aproveitamento visando a possibilidade de

maior integração e flexibilidade no processo de ensino-aprendizagem, como descrito por Sobral e

Ferreira (2000, p. 1), o de “promover a motivação do aluno, além de educá-lo, resultando na

remodelação de técnicas e metodologias de ensino”.

É importante que o professor saiba exercer de forma organizada e pedagógica a sua função,

e que o aluno possa trabalhar o conhecimento no seu tempo, sendo o gerenciador do seu próprio

saber, “pois o maior risco é confundir esse processo psico-pedagógico de ambientação on-line com

o mero adestramento técnico operacional” (LÈVY, 1998 apud GREGIO, 2003, p. 3). Utilizar a

informática para o ensino não implica em aprender sobre o computador, mas sim aprender a

explorar recursos do computador para motivar o aprendizado, tomando o cuidado para não

“considerar apto e ambientado um aluno apenas porque sabe clicar nas áreas corretas da tela e não

compreender os aspectos que realmente importam num processo de educação on-line”.

Lima e Rosatelli (2003, p. 2) concluem essa idéia afirmando que,

A EaD surge como uma modalidade para superar as limitações do ensino presencial, trazendo vantagens na medida em que rompe com limitações espaciais e geográficas, diminui o custo por aluno, atende a população diversificada, reúne pessoas de locais e com ocupações diferentes, preconiza o respeito ao ritmo pessoal de aprendizagem e desenvolve a autodisciplina de estudo.

2.2.2 Software Educacional

“Todo programa pode ser considerado um programa educacional, desde que utilize uma

metodologia que o contextualize no processo de ensino-aprendizagem” dizem Vicari e Giraffa

(2003, p. 155), sendo esta uma conceituação cada vez mais aceitável para a comunidade de

informática na educação (IE).

Segundo Vicari e Giraffa (2003, p. 156) as classificações mais tradicionais utilizadas no que

diz respeito aos programas educacionais não contemplam as modalidades que utilizam técnicas de

23

IA e os ambientes cooperativos. Muitas destas classificações não levam em consideração um

aspecto fundamental, que é o tipo de aprendizagem proporcionada pelo ambiente. A necessidade de

se fazer uma reflexão neste sentido gerou a divisão dos programas educacionais em dois grandes

grupos:

1. Aprendizagem de habilidades específicas

o CAI (Computer Assisted Instruction - Instruções Auxiliada por Computador)

• Tutoriais: segue o padrão de ensino da sala de aula tradicional, onde o conteúdo é

previamente organizado pelo professor e o aluno seleciona dentre as diversas

opções disponíveis o conteúdo que deseja estudar;

• Exercício-prática: o aluno pratica e testa o conhecimento de forma dirigida;

• Demonstração; e

• Jogos educacionais e as simulações: o processo de aprendizagem é através de

jogos, onde há um processo competitivo e a simulação é a execução de um

modelo previamente definido.

o ICAI (Intelligent Computer Assisted Instruction - Inteligente Instrução Auxiliada por

Computador)

• Sistemas Tutores Inteligentes: representam o conhecimento e elevam a termo

uma interação com o aluno.

2. Aprendizagem de habilidades cognitivas amplas

o Micromundos: voltados a desenvolver a habilidade cognitiva do aluno, este modelo

sugere que o aluno construa o seu conhecimento. Trabalham basicamente com a

solução de problemas e não apresentam conteúdos pré-fixados e resposta;

o Sistemas de Autoria: ferramenta de criação que possibilita ao aluno explorar um

conjunto amplo de habilidades cognitivas, exercendo a sua criatividade; e

24

o Jogos Educacionais: apresenta uma concepção diferenciada daqueles apresentados

anteriormente. Nestes ambientes existe um modelo de simulação onde o tipo de ação

executada pelo aluno fará diferença no resultado do jogo.

2.3 SISTEMAS TUTORES INTELIGENTES

Com o surgimento da IA foi possível que os desenvolvedores de programas CAI criassem

programas que deixassem de ser meros viradores de páginas eletrônicas e se tornassem um

elemento mais ativo no processo de interação com o aluno, surgindo assim o ICAI cujo nome mais

utilizado na literatura é STI. (VICARI; GIRAFFA, 2003, p. 161).

Esta reformulação, segundo Sobral e Ferreira (2000, p. 4) ocorreu na década de 70 e os

mesmos autores caracterizam os tutores inteligentes como:

[...] ferramentas ou softwares educacionais capazes de assistir a aprendizes nos ambientes de ensino-aprendizagem, objetivam a aquisição de conhecimento de maneira interativa, criando situações que levam o aluno a aprender, desenvolvendo seus próprios meios, de acordo com seu potencial, incentivando a sua autonomia e a sua criatividade.

Como declarado por Giraffa (1999 apud JESUS, 2004, p. 2), acrescentar um I à sigla CAI

não significa apenas agregar técnicas de IA para a construção de sistemas tutores, mas inclui

trabalhar de forma interdisciplinar com as conquistas que outras áreas de pesquisa obtiveram em

relação ao conhecimento da comunicação inteligente, tais como os avanços da psicologia e da

pedagogia.

Esta interdisciplinaridade vem sendo aplicada aos STI. Estes sistemas pertencem a categoria

de software educacionais que se baseiam na aprendizagem interativa. Neste contexto, o aluno passa

a ser o centro do processo ensino-aprendizagem, deixando de ser passivo e tornando-se um ser ativo

no processo, além de tornar relevante o seu conhecimento atual e as suas características de

aprendizado (JESUS, 2003, p. 3).

Os STI e os CAI aparentemente situam-se em um tipo similar de aplicação em educação,

pois ambos partem do princípio da solução de problemas. A fim de identificar diferenças e

semelhanças é apresentado a Tabela 1 abaixo.

25

Tabela 1. STI x CAI

Aspecto CAI STI Origem Educação Ciência da Computação Bases Teóricas Skinner (behaviorista)1 Psicologia Cognitivista2 Estruturação e Funções Uma única estrutura

algoritmicamente pré-definida, onde o aluno não influi na seqüência.

Estrutura subdividida em módulos, cuja seqüenciação se dá em função da resposta do aluno.

Estruturação do Conhecimento Algorítmica Heurística Modelagem do Aluno Avaliam a última resposta. Tentam avaliar todas as respostas

do aluno durante a interação. Modalidades Tutorial, exercício e prática,

simulação e jogos educativos. Socrático3, ambiente interativo4, diálogo bidirecional5 e guia6.

Fonte: Adaptado de Vicari e Giraffa (2003, p. 163).

Para Vicari e Giraffa (2003, p. 162), “as diferenças mais profundas entre os STI e os CAI

tradicionais estão na forma com que se concebe o seu projeto”. Os CAI induzem o aluno a uma

resposta correta mediante uma série de estímulos cuidadosamente planejados, e os STI pretendem

simular algumas das capacidades cognitivas do aluno e utilizar esses resultados como base para as

decisões pedagógicas a tomar.

2.3.1 Arquitetura de Sistemas Tutores Inteligentes

A interação do STI com o usuário oferece considerável flexibilidade e maior habilidade na

apresentação de material e quando há necessidade de fornecer respostas. “Eles procuram não apenas

ensinar, mas aprendem informações relevantes sobre o estudante, proporcionando-lhe um

aprendizado individualizado” (THIRRY, 1999 apud SCHMITZ et al, 2002, p. 3).

Os módulos que compõem a maioria dos STI, bem como seus inter-relacionamentos, são

apresentados na Figura 23.

1 Estudo do comportamento 2 Ato de conhecer ou captar, entregar, elaborar e exprimir informação 3 Pretendem proporcionar instrução através de diálogo com os alunos e detectam erros. 4 Trabalham um determinado assunto através da interação com o aluno, utilizando a abordagem de diagnóstico desse aluno. 5 Utilizam um ambiente interativo com diálogo entre o aluno e o tutor, podendo haver alterações no comportamento do tutor, face às respostas do usuário (aluno). 6 Alguns STI funcionam como guias do aluno e não se utilizam de um diálogo e sim apresentam o conteúdo de outra forma.

26

Figura 23. Arquitetura Clássica de um STI

Fonte: Adaptado de Vicari; Giraffa (2003, p. 169).

2.3.1.1 Módulo Domínio

Contém o conhecimento armazenado do especialista na matéria a ser ensinada. Esse

conhecimento é adquirido a partir do especialista, devendo, portanto, ser transferido para o aluno. É

constituído pelo material instrucional, que podem ser: lições, animações, filmes, exercícios,

exemplos, desafios, dicas, entre outros (VICARI; GIRAFFA, 2003, p.171).

A representação do conhecimento pode se dar por várias formas, por exemplo, regras de

produção, redes semânticas, frames, orientação a objetos, lógica, script. Segundo Oliveira (2002

apud FRANÇA, 2005, p. 10) neste módulo o conteúdo a ser ensinado deve ser armazenado não em

uma base de dados, mas sim numa base de conhecimento; “do contrário, o sistema teria informação

sem possibilidade de raciocinar sobre ela para tomada de decisão”,

De acordo com Castoldi; Sakata (1998 apud CONCEIÇÃO, 2003, p. 66), o conhecimento

contido no Módulo Domínio pode ser classificado de duas formas:

• Declarativo e teórico: consiste das unidades contendo os conceitos do domínio e suas

relações, a metodologia se divide em três fases: determinar quais objetos serão incluídos

no domínio, definir como os objetos se relacionarão entre si e verificar quais relações

estão corretas; e

27

• Procedimental: trata-se de um procedimento explicativo. Explica como fazer uma tarefa,

como diagnosticar um problema ou recomendar uma ação. Para incorporar o

conhecimento num sistema recomenda-se: estabelecer as metas, estabelecer os fatos e

estabelecer as relações entre as metas e os fatos.

2.3.1.2 Módulo Aluno

Contém as informações referentes a cada estudante que faz uso do sistema. Essas

informações estão relacionadas com o nível de conhecimento do estudante sobre a matéria e o seu

ritmo de aprendizagem (SOBRAL; FERREIRA, 2000, p. 2).

De acordo com Vicari e Giraffa (2003, p. 172), muitas técnicas são utilizadas para construir

o modelo do aluno, como por exemplo:

• Reconhecimento de padrões aplicados ao histórico das respostas fornecidas;

• Comparar a conduta do aluno com a de um especialista e verificar os pontos em comum;

• Colocar as preferências do aluno;

• Coisas que ele costuma esquecer quando interage com o tutor; e

• Indicação dos seus desejos, crenças e intenções.

É graças ao Módulo Estudante que o sistema pode ter um atendimento personalizado para

cada usuário, o que leva a crer que este deve ser dinâmico, pois à medida que o aluno participa do

curso, seu estado cognitivo é alterado. Sendo assim, tal módulo deve ser capaz de acompanhar todo

este processo de aprendizagem (CONCEIÇÃO, 2003, p. 64).

2.3.1.3 Módulo Tutor

Dazzi (2004, p. 19) afirma que este módulo determina qual conteúdo será ministrado em

determinado momento. Obtendo informações do módulo do aluno é decidido o que fazer em

seguida, por exemplo, apresentar um novo material ou revisar o material que foi previamente

ensinado.

Jesus (2003, p. 6) concorda com essa idéia afirmando que a partir das informações contidas

no modelo do estudante e no modelo do domínio faz-se a seleção e o seqüenciamento do assunto a

ser apresentado e enviado à interface gráfica. Esse módulo contém as estratégias de ensino e decide

28

quando e como apresentar o conteúdo para o estudante. Expressa ainda sua preocupação com

relação ao módulo tutor afirmando que ele requer uma atenção especial em sua modelagem:

Um processo de aprendizagem depende de uma grande variedade de fatores e o sistema tutorial deve cuidar para não destruir a motivação pessoal do estudante ou o seu senso de descobrimento. Este processo pedagógico requer grande versatilidade e criatividade na modelagem do sistema tutor.

2.3.1.4 Módulo Interface

Também chamado módulo de comunicação ou ambiente de ensino, é a interface entre o STI

e o aluno. Deve ser inteligente e capaz de adaptar-se as diferentes necessidades de cada usuário,

aprender novos conceitos e técnicas, tomar iniciativas. Continuando seu pensamento de Jesus

(2003, p. 6) afirma que “o uso de apresentações gráficas, especialmente animações poderão

contribuir para melhorar o processo de ensino e aprendizagem no aluno”.

De acordo com Dazzi (2004, p. 25), alguns aspectos devem ser observados numa interface,

tais como:

• Escolha de uma linguagem adequada de comunicação de informações vindas tanto do

sistema quanto do aluno;

• Escolha dos elementos de interface;

• Facilidade de uso; e

• Identificação do usuário.

Vicari e Giraffa (2003, p. 178) dizem que “uma boa interface é vital para o sucesso de

qualquer sistema interativo” e afirmam que é na interação que o STI exerce duas de suas principais

funções: a apresentação do material instrucional e a monitoração do progresso do estudante através

da recepção da resposta do aluno. Dessas duas funções, podemos derivar alguns objetivos a serem

cumpridos pelo módulo de interface:

• Evitar que o estudante se entedie;

• O estudante deve poder intervir facilmente no discurso do tutor, e vice-versa;

• O tempo de resposta deve permanecer dentro de limites aceitáveis; e

• A monitoração deve ser feita o máximo possível em background, sem sobrecarregar o

aluno com questionários excessivos.

29

Schmitz et al (2002, p. 3) afirma que o nível de dificuldade de implementação dos STI é

diretamente proporcional aos benefícios trazidos por eles, ou seja, quanto maior sua capacidade de

tutoria, maior será o uso de técnicas complexas aplicadas ao seu desenvolvimento.

2.3.2 Exemplos de Sistemas Tutores Inteligentes

Para Fischetti e Gisolfi (1990 apud COSTA, 2002) os STI são considerados como um livro

ativo, onde o leitor tem uma interação na transmissão do conhecimento e um melhor nível de

entendimento. Neste contexto, julgam compreensível a utilidade que os STI podem vir a

proporcionar nos diversos campos do conhecimento humano.

A seguir são relacionados trabalhos de conclusão de uma série de STI pesquisados e outros

que foram historicamente importantes:

• STEAMER (HARMON; KING, 1988 apud COSTA, 2002): O objetivo deste STI é

ensinar aos oficiais da Armada os problemas referentes à direção de uma central de

propulsão a vapor, existentes nos barcos da marinha americana. Tal treinamento divide-

se em duas partes: uma procedimental e outra conceitual, na qual é dada maior ênfase,

fornecendo ao aluno uma idéia geral do que acontece nestes sistemas de central de

vapor, possibilitando exercitar as medidas de prevenção e controle de conseqüências

geradas por problemas nestas situações, especialmente em casos de emergência. O

STEAMER usa dois computadores. Um deles mostra um diagrama da central de vapor e

o outro exibe informações sobre a central e o STI que supervisiona a interação do aluno

com o sistema. É um software muito interessante, pois proporciona uma simulação

interativa do ambiente de estudo. Foi construído pelo Centro de Pesquisa e Formação de

pessoal da Marinha de San Diego, em colaboração com a Bolt, Beranek & Neuman, Ind.

de Cambridge, Massachusetts;

• GUIDON (HARMON; KING, 1988 apud COSTA, 2002): foi desenvolvido por William

Clancey do Departamento de Informática da Universidade de Stanford. A grosso modo,

o GUIDON pode ser simplesmente classificado como um sistema de diagnóstico médico

e prescrição, altamente especializado, tendo como principal objetivo ajudar os médicos

nas infecções de meningite e de bacteriemia. Este programa é utilizado em faculdades de

medicina auxiliando no treinamento de estudantes e médicos, possuindo, além da base

de conhecimento, as experiências de casos efetivos acumulados por outro sistema

30

anterior, o MYCIN (o qual possui as mesmas características do GUIDON),

possibilitando o fornecimento de bons exemplos para os usuários. Costa (2002) afirma

que a principal deficiência do sistema está no fato de considerar que o aluno já tenha

conhecimento dos termos técnicos utilizados, bem como os resultados dos testes

químicos apresentados;

• SOPHIE (WOOLF, 1988 apud COSTA, 2002): o sistema tem por objetivo auxiliar o

estudante a encontrar falhas em um circuito eletrônico. Desenvolvido por Brown e

Burton, funciona da seguinte forma: o aluno recebe um circuito com uma falha

hipotética e precisa determinar aonde se encontra o defeito. O sistema então gera a

hipótese que foi sugerida pelo estudante, testando se tais propostas estão ou não corretas.

Se a sugestão for incorreta de acordo com os fatos já apresentados pelo sistema como

base para o aluno resolver o problema, então o SOPHIE questiona o aluno e argumenta o

contrário, através de um diálogo amigável;

• MALT (DU BOULAY, 1988 apud COSTA, 2002): este STI opera sobre programas de

código de máquina. Seu funcionamento é extremamente simples. Ele gera e representa

um problema, fornecendo comentários à medida que o aluno fornece uma resposta que

faz parte da seqüência das instruções em código de máquina. Assim que o usuário se

torna mais experiente, o sistema diminui as interrupções ao estudante, supondo que o

mesmo já possui mais controle de suas ações. O questionamento gerado pelo sistema é

dividido em vários problemas menores, com seus pontos centrais e suas funções

primitivas. O sistema, então, gera uma solução ideal e a contrapõe com a tentativa do

aluno. Conforme o desenvolvimento do estudante, o sistema apresenta variantes mais

difíceis do subproblema;

• GREATERP (DU BOULAY, 1988 apud COSTA, 2002): este STI conduz o aluno por

uma lição de Lisp, que se constitui em uma seqüência gradual de problemas a serem

trabalhados. O sistema diferencia alunos experientes de novatos, fornecendo um guia de

procedimentos conforme o grau de experiência. Quando o aluno insere um programa, o

sistema analisa os símbolos e dá exemplos adequados a cada situação. A base do sistema

consiste no fato de que os erros dos alunos devem ser detectados e assinalados assim que

forem constatados, visando a idéia de que os estudantes não persistam em uma solução

incorreta;

31

• SPADE (DU BOULAY, 1988 apud COSTA, 2002): tem por objetivo ensinar LOGO,

pretendendo desenhar uma figura utilizando símbolos primitivos da linguagem de

programação. A idéia consiste na interação do aluno com o sistema através de uma

seqüência de comandos que compõem a solução do problema. As primeiras versões

induzem o aluno a realizar uma decomposição clássica, ao contrário das mais novas, que

permitem uma liberdade maior na solução do problema;

• WÖHLER (LUZZI et al, 1997): é um ambiente inteligente que tem por objetivo dar

suporte ao ensino na área de Química Orgânica. Associado a cada problema existe um

intervalo de tempo, dentro do qual o aluno deverá efetuar a sua resposta. O assistente

avalia o aluno a partir do tempo que ele demorou para solucionar o problema e seleciona

o próximo a partir desta avaliação e do tópico sendo estudado. O sistema fornece, caso o

aluno deseje, o conteúdo associado ao problema onde ele apresentou dificuldade. Possui

uma base de moléculas, radicais e outras estruturas, que podem ser acessadas pelo

estudante durante a realização de uma resposta, a fim de esclarecer duvidas, com ou sem

o auxílio do assistente; e

• Ensino de Estrutura de Dados a Surdos (FRANÇA, 2005): sistema que tem por objetivo

ensinar o conteúdo de ED aos surdos. No primeiro acesso são realizadas duas perguntas

objetivas ao aluno afim de modelar o seu perfil inicial para verificar o tipo de mídia

(texto, vídeo ou imagem) que será utilizada para lhe apresentar o conteúdo. Durante os

exercícios realizados esse perfil é alterado se o sistema percebe que o aluno

compreendeu melhor o assunto abordado através de imagens, vídeos ou pela leitura de

textos. A mídia de vídeo é a gravação de um intérprete que traduz o conteúdo em texto

para LIBRAS.

Além dos sistemas acima listados, é interessante relacionar outros produtos importantes e

disponíveis na literatura, os quais conforme Costa (2002), muitos são resultantes da evolução de

sistemas especialistas mais primitivos, onde a maioria é voltada para a área de treinamento, o que

não pode ser considerado exatamente como um sistema educacional. Entretanto, é importante a

visualização de tais idéias para constatar os avanços que esta ciência está obtendo. Na Tabela 2

encontram-se listados alguns STI existentes e sua características básica.

32

Tabela 2. Sistemas tutores inteligentes e suas características

Sistema Domínio Representação do Conhecimento

Estratégia do Tutor

Scholar Geografia Rede Semântica Socrático Why Tempo

(Causas da chuva) Scripts Socrático

Integrate Matemática (Integração simbólica)

Regras Ambiente reativo com orientação

Sophie Detector de falhas eletrônicas

Rede Semântica Ambiente reativo com orientações guiadas

West Expressões aritméticas Regras Ambiente reativo com treinamento Buggy Subtração Rede Procedimental Ambiente reativo com orientação Wusor Lógica Rede Semântica Ambiente reativo com treinamento Excheck Teoria de conjuntos e

lógica Regras Ambiente reativo com orientação

Bip Programação em Basic

Regra Ambiente reativo com orientação

Spade Programação em Logo Regras Ambiente reativo com treinamento Álgebra Matemática Regras Ambiente reativo com treinamento LMS Matemática Regras Ambiente reativo Quadratic Matemática Regras Ambiente reativo com orientação Guidon Medicina Regras Ambiente reativo com interações

estruturais Proust Programação em

Pascal Rede Semântica Ambiente reativo com orientação

Steamer Propulsão a vapor Modelo Funcional Ambiente reativo com orientação Macavity Engenharia Regras e Frames Treinamento Meno Programação Redes Orientador Wöhler Química Orgânica Regras Socrático Ensino de ED aos surdos

Programação - Estrutura de Dados

Regras Ambiente reativo com treinamento

STI – Proposto

Estrutura de Dados Regras Ambiente reativo com treinamento

Fonte: Adaptado de Park et al. (1987 apud COSTA, 2002).

Na pesquisa, identificou-se diversos tipos de STI, até mesmo um que ensinava ED, mas o

público alvo eram os surdos. Após a realização desta pesquisa foi possível compreender a

importância que os STI exercem no auxílio da educação, foi possível também identificar que

características conterão o STI proposto para este projeto de pesquisa, as quais estão destacadas na

última linha da Tabela 2. Não foram encontrados outros STI para o ensino de ED, o que motiva e

reforça o desenvolvimento deste projeto.

33

2.4 INTELIGÊNCIA ARTIFICIAL

Segundo Stair (1998, p. 256) em uma conferência no Dartmouth College, em 1956, John

McCarthy propôs o uso da expressão inteligência artificial (IA) para descrever os computadores que

tivessem a capacidade de imitar ou replicar as funções do cérebro humano. Muitos pioneiros de IA

compareceram àquela primeira conferência sobre o assunto; alguns previram que os computadores

seriam tão “espertos” quanto os humanos por volta dos anos 60. A predição nunca se realizou, mas

os benefícios da inteligência artificial nos negócios e na vida acadêmica podem ser vistos hoje.

Os sistemas de inteligência artificial incluem as pessoas, procedimentos, hardware, software,

dados e conhecimento necessários para desenvolver sistemas computacionais e máquina que

demonstram características de inteligência. Para Stair (1998, p. 256) o objetivo no desenvolvimento

contemporâneo de sistemas de IA não é substituir completamente a tomada de decisões humana, e

“sim reaplicá-la em certos tipos de problemas bem-definidos”. Desta forma, o propósito das

aplicações de inteligência artificial é auxiliar as organizações a alcançar suas metas.

Para Boose (1994 apud FERNANDES, 2003, p. 2), a IA busca entender a mente humana e

imitar seu comportamento, tendo como objetivo “o estudo e a modelagem da inteligência tratada

como um fenômeno”, pois a inteligência humana é algo extremamente complexo, resultado de

milhões de anos de evolução.

Jesus (2003, p. 4) concorda com essa idéia e diz que a IA tem como objetivo utilizar a

inteligência, ou seja, as faculdades de pensar, raciocinar e compreender para auxiliar na tomada de

decisões, procurando para isto utilizar princípios da inteligência humana.

No que diz respeito a sistemas, Figueiredo (1999) diz que

A grande diferença entre os sistemas que utilizam IA e os sistemas convencionais, é que enquanto os sistemas convencionais têm como principal característica armazenar informações, registrar e controlar eventos, a AI está preocupada em utilizar estas informações para auxiliar nas tomadas de decisões.

2.4.1 Sistema Especialista

Flores (2003, p. 127) declara que o desempenho humano envolve o uso hábil de uma enorme

quantidade de experiências do dia a dia, e o aprendizado, a partir das mesmas, acontece “de forma

bastante inconsciente”. O ser humano aprende a falar sua língua por intermédio da comunicação

com os outros. Aprende a realizar tarefas por tentativas, às vezes com sucesso, às vezes falhando.

34

Em muitos casos o conhecimento adquirido através dessas experiências não é sólido, mas, sem

dúvida, está num formato de regras práticas que são armazenadas em algum lugar, para serem

usadas quando forem relevantes a uma nova situação.

Essas regras práticas são chamadas de heurísticas no linguajar de IA, e representam o

suporte principal do conhecimento que tentamos armazenar para o uso dos sistemas em linguagem

natural, sistemas especialistas (SE) e robôs.

Kandel (1992 apud NASCIMENTO, 2003, p. 11) caracteriza os SE como “sistemas que

reproduzem o conhecimento de um especialista adquirido ao longo dos anos de trabalho”. Devido a

isto, faz-se necessário que este sistema seja construído com o auxílio de um especialista humano, o

qual fornecerá a base de informações, através do seu conhecimento e experiência.

Segundo Nascimento (2003, p. 11), os SE apresentam as seguintes vantagens:

• Possibilidade para construção de regras, o que aumenta sua flexibilidade e eficiência;

• Tomada lógica de decisões sob imprecisão ou na ausência de informações. Nos sistemas

tradicionais, o método de busca é baseado em um conhecimento codificado

anteriormente. Quando surge um novo conhecimento, faz-se necessário reescrever o

código. Já em SE pode-se recuperar novos fatos e regras e usá-los sem modificar a

estratégia de busca;

• Velocidade na determinação de problemas;

• A decisão está fundamentada em uma base de conhecimento; e

• Segurança, estabilidade.

Stair (1998, p. 262) apresenta alguns recursos do SE:

• Melhor resolução de problemas;

• Capacidade de armazenar e aplicar conhecimento e experiência a problemas;

• Reduz tempo de resposta para problemas complexos; e

• Capacidade de examinar problemas a partir de diversas perspectivas.

Os SE podem ser utilizados para resolver problemas em todos os campos e disciplinas e

podem proporcionar auxílio em todos os estágios do processo de solução de problemas. Os SE são

35

bons no estabelecimento de metas estratégicas, planejamento, projetos, confecção de cronogramas,

monitoramento e diagnose. (STAIR, 1998, p. 262).

2.4.2 Ambiente de Desenvolvimento de Sistemas Especialista

Por volta de 1985, a NASA (National Aeronautics and Space Administration) decidiu

unificar o desenvolvimento interno de sistemas especialistas. Como resultado, o setor de tecnologia

de software do Johnson Space Center criou um clone das capacidades de encadeamento progressivo

e da sintaxe do sistema que era utilizado até então, introduzindo o CLIPS (C Language Integrated

Production System) no domínio público. Para Camacho (2005, p. 126), a finalidade era gerar

soluções que apresentassem alta portabilidade, baixo custo e fácil integração com sistemas externos.

Por se ter acesso a outros trabalhos na área e conhecimento da ferramenta, o CLIPS foi a

ferramenta escolhida para se modelar a parte especialista do sistema tutor, pois, segundo Camacho

(2005, p. 126), o sistema CLIPS foi desenvolvido para facilitar a geração de programas que

modelam o conhecimento ou alguma especialidade humana. Existem três maneiras de representar

conhecimento no CLIPS:

• Regras;

• Funções e funções genéricas; e

• Programação orientada a objetos.

É possível desenvolver programas apenas utilizando regras, objetos ou uma combinação dos

dois. Regras e objetos formam um sistema integrado já que regras podem ser utilizadas para

casamento de padrões em fatos e objetos.

O sistema CLIPS utiliza o algoritmo Rete (FORGY, 1982 apud CAMACHO, 2005, p. 127),

“que elimina redundâncias de avaliações das pré-condições das regras”. O autor ainda complementa

com o exemplo e a afirmação de que,

Se uma regra pode ser disparada com um conjunto de objetos, e uma segunda regra é disparada e não altera nenhum dos objetos do primeiro conjunto, então não há necessidade de se testar novamente as pré-condições da primeira, pois ela ainda está ativa com o mesmo conjunto de instância. A idéia por trás do algoritmo é que apenas os objetos modificados no disparo da última regra tenham que ser testados novamente para verificar se tornam alguma outra regra ativa (ou desativa). O algoritmo Rete é usado na maioria dos sistemas de produção existentes, apresentando um ótimo desempenho para aplicações de porte razoável.

36

Segundo o manual, o CLIPS é chamado de ferramenta para SE pois se trata de um ambiente

completo para desenvolvimento deste tipo de IA, o que inclui editor integrado e uma ferramenta de

depuração. O terminal de texto (word shell) é reservado para a parte do CLIPS que realiza

inferência. O shell do CLIPS oferece os elementos básicos para um SE:

1. Lista de fatos e instâncias: memória global para os dados;

2. Base de conhecimento: contém todas as regras, a base de regras; e

3. Motor de inferência: controla a execução das regras.

Um programa escrito no CLIPS consiste de regras, fatos e objetos. O motor de inferência

decide quais regras devem ser executadas e quando. Um SE baseado em regras escrito no CLIPS é

um programa data-driven onde os fatos, e os objetos se desejado, são os dados que estimulam a

execução através do motor de inferência. Este é um exemplo de como o CLIPS difere dos

programas procedurais convencionais como PASCAL, FORTRAN e C. Nas linguagens procedurais

a execução pode ser feita sem a necessidade de dados, isto é, as instruções são suficientes para a

execução. Já no CLIPS, é preciso dos dados para a execução das regras.

2.4.2.1 Criando uma lista de fatos

Para serem adicionados dados na lista de fatos, é preciso usar o comando assert:

• Para um fato com campo único:

o CLIPS> (assert (pato))

• Para múltiplos fatos:

o CLIPS> (assert (pato)(cachorro))

• Para fatos com múltiplos campos:

o CLIPS> (assert (animal-is pato)

o Recomenda-se utilizar o primeiro campo para descrever a relação entre os campos

do fato

• Para números:

o CLIPS> (assert (x 1))

37

2.4.2.2 Definindo regras

Para executar trabalho em um SE, é necessário, além dos fatos, as regras. Uma regra pode

ser definida como mostra a Figura 24.

(defrule duck ; cabeçalho da regra (animal-is duck) ; condição => ; flecha então (assert (sound-is quack) ; ação )

Figura 24. Definição de regra no CLIPS

Uma ação normalmente é uma função sem valor de retorno, porém que executa alguma ação

útil. Como mostrado no exemplo, a ação executada é a função assert. Uma função no CLIPS

normalmente é um trecho de código executável identificado por um nome específico, que retorna

um valor ou executa um efeito colateral útil (como uma impressão).

Uma regra pode ter múltiplos padrões e ações. Zero ou mais padrões podem ser escritos

após o cabeçalho da regra. Cada padrão consiste de um ou mais campos. Na regra duck, o padrão é

(animal-is duck) e os campos são “animal-is” e “duck”. O CLIPS tenta casar os padrões das regas

com os fatos na lista de fatos. Se todos os padrões de uma regra casam, a regra é ativada e colocada

na agenda. A agenda é uma coleção de ativações que representam as regras que casam com as

entidades padrão.

A última parte de uma regra é a lista de zero ou mais ações que serão executadas quando a

regra for disparada. O disparo significa que o CLIPS selecionou uma certa regra para execução na

agenda.

38

2.4.2.3 Exemplo de uso

A Figura 25 mostra a tela de console do CLIPS onde é apresentado um exemplo de uso.

Figura 25. Tela de trabalho do CLIPS.

Começa com a definição de uma regra (linha 1), definição de um fato (linha 2), na linha 3

mostra a ativação do fato e um disparo de ação pela agenda (linha 9). Nas linhas 5 até 7 é mostrada

a lista de fatos que possui apenas o fato inserido na linha 2. Das linhas 11 à 14 é mostarda a lista de

fatos após a execução do run (linha 8). O padrão definido pela regra (lado esquerdo da linha 1) casa

com o fato (linha 2), é ativado na agenda e disparado. O disparo executa a ação definida pela regra

(lado direito da linha 1) e um novo fato é inserido na lista de fatos.

2.5 CONSIDERAÇÕES

Ao final desse capítulo pode-se ter um correto entendimento do que é um TAD. Foram

descritas, mostradas através de figuras e apresentadas estruturas que formam os TAD: lista, fila,

pilha e árvore. Também pode-se ter um embasamento sobre a situação em que se encontra a IE, foi

identificado o perfil do estudante da atualidade e percebeu-se que este tem um perfil de trabalhador,

tendo de dividir o seu tempo entre família, trabalho e estudos.

Ainda na seção sobre IE foi identificada a preocupação de alguns autores quanto ao

despreparo e a aversão dos professores com relação a este assunto. Pode-se entender que se usado

39

corretamente o computador torna-se um aliado do educador mas a aversão ao seu uso pode acarretar

numa futura dificuldade de desempenho de sua ações como professor.

Pois no tópico sobre EaD percebeu-se que esta é uma fronteira que não tem limites e com

isso surge a necessidade de aprimoramento e desenvolvimento de sistemas e profissionais para este

filão de mercado, seja na área de treinamento ou educacional. Com isso faz-se a necessidade de

sistemas que tornem o aprendizado interessante e não façam do aluno simplesmente um virador ou

navegador de páginas.

Nesse ponto a seção sobre STI foi importante, onde foi possível, através da pesquisa,

entender a tecnologia que existe voltada para o desenvolvimento de sistemas tutores que sejam

agradáveis aos alunos e façam em background o acompanhamento dos mesmos. Na continuação

dessa seção foi realizado um levantamento de trabalhos relacionados à linha de STI, onde foram

descritos alguns STI e apresentado uma tabela com as suas características, dessa forma foi possível

situar o trabalho em seu contexto atual e identificar o diferencial dele em relação aos demais.

Na seção sobre IA foi identificado e definido o tipo de inteligência que será aplicada no STI

a ser desenvolvido. Por não haverem casos e registros concretos anteriores, optou-se por utilizar SE;

o que segundo Kandel (1992 apud NASCIMENTO, 2003, p. 11) são caracterizados como “sistemas

que reproduzem o conhecimento de um especialista adquirido ao longo dos anos de trabalho” e

como descrito no início desta proposta, uma das escolhas para o desenvolvimento de um STI para

ED é devido a disponibilidade do professor da disciplina de estrutura de dados (especialista) estar

auxiliando no desenvolvimento deste trabalho.

3 DESENVOLVIMENTO

Este capítulo está dividido em 6 tópicos. Inicialmente são apresentados os requisitos

funcionais e não-funcionais que foram levantados para o sistema. Em seguida é descrita a

modelagem do sistema, utilizando UML(Unified Modeling Language), descrevendo os casos de

uso. Posteriormente é apresentada a arquitetura do sistema. Em seguida é descrito sobre a base de

domínio. No tópico implementação foi apresentado a descrição de como o sistema foi desenvolvido.

Por último, foi falado sobre a validação do sistema

3.1 ANÁLISE DE REQUISITOS

Durante a descrição deste projeto realizou-se uma observação crítica sobre o que seria

necessário para o desenvolvimento de um sistema para o ensino de ED, sendo possível destacar as

excelências e também as limitações. A partir dessa observação e das solicitações do professor

especialista que acompanhou o projeto, definiu-se os requisitos para o STI a ser desenvolvido. Esses

requisitos são divididos em duas categorias: requisitos funcionais e não-funcionais e serão descritos

neste capítulo.

3.1.1 Requisitos Funcionais

Os requisitos funcionais compreendem as funcionalidades que os usuários querem ou

precisam que o sistema ofereça. Como requisitos funcionais para o STI de ED foram considerados

os seguintes como essenciais:

• O sistema deve permitir a inclusão de novos conteúdos teóricos;

• O sistema deve permitir o cadastro de novos exercícios;

• O sistema deve permitir o cadastro de novos alunos;

• O sistema deve permitir o cadastro de novos professores;

• O sistema deve permitir que o aluno analise os conteúdos teóricos;

• O sistema deve permitir que o aluno faça exercícios de determinado conteúdo;

• O sistema deve permitir que o professor verifique os conteúdos já vistos pelo aluno;

• O sistema deve permitir ao professor verificar o desempenho do aluno;

41

• O sistema deve permitir ao aluno visualizar seus dados;

• O sistema deve permitir que o aluno verifique seu desempenho; e

• O sistema deve selecionar um novo problema baseado na análise ou desempenho do

aluno (adaptar ao aluno).

3.1.2 Requisitos Não-Funcionais

Os requisitos não-funcionais compreendem propriedades do sistema, como

manutenibilidade, desempenho, custos e várias outras. Como requisitos não-funcionais para o

sistema definiram-se os seguintes:

• O sistema via WEB deve possuir um mecanismo de segurança para evitar que pessoas

não autorizadas tenham acesso ao sistema ou a dados privados;

• O sistema deve permitir níveis de privilégio;

• As informações geradas nos relatórios devem ser confiáveis; e

• O sistema deve funcionar sobre uma base de dados MySQL, que é gratuita.

3.2 DIAGRAMAS DE CASOS DE USO

Caso de uso é uma seqüência de ações executadas por um determinado processo que produz

um resultado para um determinado ator, com a sua utilização, as funções disponíveis para um

determinado ator ficam simples de entender (BOOCH; RUMBAUCH; JACOBSON, 2000, p. 220).

3.2.1 Cenário do Professor • UC 2.01 - Consultar posição do aluno: o professor poderá se informar da posição em que

o aluno se encontra dentro do conjunto de material exposto para o aprendizado. Os

locais onde o aluno visitou os exercícios realizados, dia e hora em que foram realizados;

• UC 2.02 – Relatório de desempenho: será gerado um relatório com o desempenho do

aluno, avaliação dos exercícios, exercícios que precisou fazer novamente, tempo gasto

para realização dos exercícios;

• UC 2.03 – Logar no sistema: interface característica do professor que é identificado

quando faz o login no sistema. Serão apresentados dados correspondentes aos casos de

uso de professor; e

42

• UC 2.04 – Gerenciar conteúdo: interface onde o professor (especialista para o caso do

STI baseado em SE) poderá incluir, alterar ou excluir os conteúdos teóricos e os

exercícios, fazendo assim a modelagem do módulo domínio do STI.

O diagrama que apresenta os casos de uso relacionados as ações do professor é mostrado na

Figura 26.

Figura 26. Cenário do Professor.

3.2.2 Cenário do Aluno • UC 3.01 – Logar no sistema: ao efetuar o login o aluno será direcionado para sua

interface característica;

• UC 3.02 – Visualizar dados: o aluno poderá visualizar seus dados cadastrais;

• UC 3.03 – Visualizar conteúdo teórico: o aluno poderá aprimorar seu conhecimento

visualizando o conteúdo teórico. No primeiro acesso ao conteúdo teórico o sistema tutor

procura identificar o perfil do aluno, interagindo com o módulo especialista o sistema

poderá realizar 5 perguntas para identificar o seu conhecimento com relação a disciplina

de ED, sendo que o número de perguntas dependerá das resposta do aluno. As respostas

das perguntas alimentam as regras e determinam a seqüência com que elas são

apresentadas. Com base nas respostas do aluno, o sistema fornecerá orientações para que

43

ele possa ter um melhor aproveitamento da matéria a ser explicada em ED. As perguntas

questionadas ao aluno bem como a árvore de decisão são apresentadas na Seção 3.3;

• UC 3.04 – Visualizar desempenho: possibilita ao aluno acompanhar seu desempenho

durante o aprendizado com o STI; e

• UC 3.05 – Fazer exercício: este caso de uso será regido pelo módulo tutor que será

modelado pela árvore de decisão que se encontra na Figura 30.

O diagrama que apresenta os casos de uso relacionados as ações do aluno é mostrado na

Figura 27.

Figura 27. Cenário do Aluno.

3.2.3 Cenário do Administrador • UC 4.01 – Logar no sistema: ao efetuar login no sistema o administrador será

direcionado para sua interface característica, e suas funções serão básicas como descrito

nos demais casos de uso;

• UC 4.02 – Gerenciar aluno: incluir, alterar, excluir o cadastro do aluno; e

44

• UC 4.03 – Gerenciar professor: incluir, alterar, excluir o cadastro do professor.

O diagrama que apresenta os casos de uso relacionados as ações do professor é mostrado na

Figura 28.

Figura 28. Cenário do Administrador.

3.3 ARQUITETURA DO SISTEMA

O desenvolvimento do STI para ensino de ED seguiu a arquitetura clássica proposta por

Vicari e Giraffa (2003, p. 169), ilustrada na Figura 23, onde através de uma interface amigável,

chamada de Módulo Interface, os usuários que utilizam o sistema interagem com os módulos

propostos pela arquitetura.

O Módulo Aluno contém as informações referentes a cada estudante que faz uso do sistema.

Também gerencia a base de dados que armazena as informações relacionadas ao nível de

conhecimento do estudante sobre a matéria e seu ritmo de aprendizado. Ao identificar o primeiro

acesso do aluno ao material de estudos, este módulo aciona o Sistema Especialista integrado ao

Sistema Tutor, o qual irá modelar o perfil do aluno conforme explicado na Seção 3.2.2 . Para

formular a árvore que definirá o perfil de conhecimento (PC) do aluno foram fornecidas pelo

especialista questões objetivas e possíveis respostas, como apresentado a seguir:

45

1. Conhecimento de Programação ?

• Ótimo,

• Bom;

• Razoável; ou

• Nenhum.

2. Conhecimento em C++ ?

• Ótimo,

• Bom;

• Razoável; ou

• Nenhum.

3. Já usou ponteiro ?

• Nunca;

• Muitas vezes; ou

• Poucas vezes.

4. Já usou alocação dinâmica de memória ?

• Nunca;

• Muitas vezes; ou

• Poucas vezes.

5. Já usou “Template” ?

• Nunca;

• Muitas vezes; ou

• Poucas vezes.

Com base nas respostas das questões, é formado o Perfil Característico (PC) do aluno que

será modelado da seguinte maneira:

• PC1 – Teórico;

46

• PC2 – Teórico/Programador; ou

• PC3 – Programador.

O sistema também fornece informações que servirão para orientar o aluno sobre possíveis

ações que ele deve tomar no sentido de obter um melhor aproveitamento no aprendizado da matéria

durante o semestre. As sugestões fornecidas pelo sistema podem ser:

• Propor estudo de Programação;

• Sugerir rever programação;

• Sugerir estudar ponteiro;

• Sugerir revisar C++;

• Sugerir estudar alocação dinâmica de memória;

• Propor estudo de ponteiro, alocação dinâmica de memória e tamplate;

• Propor estudo de ponteiro e alocação dinâmica de memória; e

• Apto a cursar.

A árvore que modela toda a situação de realizar as perguntas, definir o perfil e propor

possíveis ações para o aluno é mostrada na Figura 29.

No Módulo Domínio está contido o conhecimento do especialista que pode ser incluído,

excluído ou alterado de forma a melhorar o material instrucional que será fornecido ao aluno

através do Módulo Tutor. Conforme Dazzi (2004, p. 19), é o Módulo Tutor que informa qual

conteúdo é ministrado em determinado momento. A tarefa de identificação da ação a ser tomada é

realizada por um sistema especialista integrado a este módulo, desenvolvido utilizando o CLIPS,

será descrito mais detalhadamente sobre a criação do sistema especialista ainda neste capítulo. A

árvore modelada para apresentação do conteúdo do Módulo Domínio ao aluno é apresentada na

Figura 30.

Figura 29. Árvore de decisão do módulo aluno

Conteúdo completo?Unidade/Tópico

Teste efetuado?

Apresenta Exercício

Apresentar conteúdos

Sim

Concluídos corretamente?

Sim

Próximo Assunto

Sim

>= 70% de Acertos?

Apresentar Respostas

corretas e sugerir leitura de “link”

Sim

>= 50% de Acertos?

Revisar conteúdo com erro

Rever todo o conteúdo

Sim Não

Não

Não

Não

Não

Figura 30. Árvore de decisão do módulo tutor

3.4 BASE DE DOMÍNIO

A modelagem da árvore de decisão do Módulo Tutor permite proporcionar formas

alternativas de ensino e interações personalizadas entre o sistema e o aluno, através de diferentes

formas de exposição e abordagem de conteúdo. O objetivo é contribuir de forma eficiente no

processo de ensino e promover um aprendizado individualizado para o estudante.

Para atender a esses requisitos a base de domínio foi dividida, conceitualmente, em dois

módulos: a Base do Módulo Aluno (tabelas com fundo branco) e Base do Módulo Domínio (tabelas

com fundo cinza). Fisicamente, tudo foi implementado em um único banco de dados. A divisão é

uma abstração para facilitar o entendimento do sistema, bem como facilitar a modelagem dos dados,

conforme ilustra a Figura 31.

49

Figura 31. Diagrama Entidade Relacionamento

A Base do Módulo Aluno corresponde à persistência das informações relevantes ao aluno,

identificada nos requisitos funcionais, conteúdos já acessados pelo aluno, desempenho, visualização

dos dados, seu perfil, bem como o histórico dos exercícios que resolveu. A Base do Módulo

Domínio refere-se as informações sobre os recursos disponíveis que são cadastrados pelo professor,

como os assuntos a serem estudados e os exercícios a serem realizados.

3.5 IMPLEMENTAÇÃO

Visto que o sistema é desenvolvido para Web, optou-se por utilizar a linguagem de

programação PHP. Trata-se de uma linguagem interpretada, e não compilada. Consiste em ser uma

tecnologia gratuita e relativamente rápida em relação a outras tecnologias Web. Também um dos

motivos pela escolha do PHP como linguagem de desenvolvimento é que ele pode ser obtido

gratuitamente no site www.php.net, sendo compatível com muitos tipos de banco de dados. O PHP

50

possui algumas características que o tornam uma linguagem popular (AULBACH, 2004 apud FEY,

2005, p. 37):

• Código aberto: todo o código fonte do PHP está disponível;

• Custo zero: é uma linguagem de programação gratuita e disponível no site oficial para

download;

• Multiplataforma: pode ser executado em ambiente Unix, Linux, Windows, entre outros;

• Eficiência: consome poucos recursos do servidor e evita chamadas externas;

• Acesso a Banco de Dados: é compatível com os principais bancos de dados existentes,

entre eles o MySQL que é gratuito e está disponível para download em www.mysql.com;

e

• Processamento de linguagens: permite a criação de imagens dinamicamente e o envio

delas ao browser do usuário.

Para o projeto de banco de dados e a base de conhecimento do sistema optou-se por utilizar

MySQL. Também é uma tecnologia gratuita, de código fonte aberto, segura, possui bom

desempenho e é detentora de muitos recursos para os desenvolvedores. O MySQL é um servidor de

banco de dados multitarefa e multiusuário que oferece recursos não existentes em outros servidores,

possuindo boa integração com o PHP. Segundo MySQL AB (2003), o MySQL possui as seguintes

características:

• Capacidade de lidar com um número ilimitado de usuários;

• Capacidade de manipular mais de cinqüenta milhões de registros;

• Multitarefa e Multiplataforma;

• Escrito em C e C++;

• Testado com vários compiladores diferentes;

• As tabelas são baseadas em árvores binárias extremamente rápidas;

• Aceita diversos tipos de campos;

• Possui técnicas avançadas de segurança;

• Registros de tamanho fixos ou variáveis;

51

• Fácil conectividade;

• Sistema de segurança simples e funcional; e

• Distribuição gratuita para o público em geral.

O sistema pode ser acessado via internet, e está disponível no endereço

http://200.169.53.253/~634298 , no entanto, possui acesso restrito podendo ser liberado apenas por

um usuário com acesso administrativo.

3.5.1 Estrutura do Sistema

A Figura 32 mostra a estrutura que foi desenvolvida para o sistema seguindo o modelo de

atores e seus casos de uso conforme descrito na modelagem deste projeto na Seção 3.2.

Figura 32. Estrutura do Sistema

3.5.2 Ambiente do Administrador

Após realizar o login o sistema identifica que o usuário tem o perfil de administrador e então

lhe direciona para o ambiente correto. O Administrador tem a possibilidade de ativar, desativar ou

remover usuários do sistema. Lembrando que o usuário só terá acesso ao sistema após a liberação

deste pelo Administrador. O Administrador tem a possibilidade ainda de alterar os dados de

cadastro de qualquer outro usuário. Caso o Administrador também seja um professor, no ambiente

de administração foi colocado um link onde o administrador tem acesso ao ambiente do professor.

O usuário com perfil de Administrador/Professor sempre é direcionado primeiro para o ambiente de

Módulo Interface

Aluno - Visualizar dados - Visualizar conteúdo teórico - Visualizar desempenho - Fazer exercício

Professor - Consultar Posição do aluno - Relatório de desempenho - Gerenciar conteúdo

Administrador - Gerenciar aluno - Gerenciar professor

52

administrador e deste ambiente ele acessa o ambiente do professor. Estas informações podem ser

confirmadas na Figura 33.

Figura 33. Tela do Administrador

3.5.3 Ambiente do Professor

O professor, que também é administrador do sistema, tem no menu a opção de chamar a tela

de administração. Na área de gerência de conteúdo o professor alimenta a base de domínio

realizando o cadastro de unidades, tópicos e exercícios, como pode ser verificado no Figura 34 onde

está sendo cadastrado um exercício que pertence a unidade Pilha, tópico TAD Pilha. Apesar de os

exercícios serem cadastrados para uma unidade e tópico, o aluno só poderá realizá-los após o

término de toda a unidade.

53

Figura 34. Cadastro de material - professor

O sistema identifica a quantidade de exercícios que existem cadastrados para a

unidade/tópico que esta sendo estudado pelo aluno e desses escolhe 5 (cinco) exercícios, e então

solicita ao aluno que os resolva. Após realizados, os exercícios são avaliados e submetidos as regras

da árvore de decisão do módulo tutor descritas na Seção 3.3.

Na seção de relatórios, o professor pode verificar o desempenho do aluno na unidade,

também quando ele começou e terminou o estudo da unidade e qual foi o seu aproveitamento

quando foi submetido aos exercício, mostrado na Figura 35. Na opção de material estudado o

professor pode ver detalhadamente a situação em que o aluno se encontra interagindo com o

sistema, todos os tópicos que estudou e também os exercícios realizados.

54

Figura 35. Desempenho – professor

3.5.4 Ambiente do Aluno

O usuário tipo Aluno deve entrar com sua senha para ter acesso ao ambiente do aluno. Neste

ambiente o aluno poderá verificar seu cadastro e seu desempenho. A visualização do desempenho

em uma unidade será possível somente após o aluno ter concluído todos os tópicos e exercícios

pertencentes a esta unidade. No link para acesso a verificação do desempenho, o aluno verifica seu

aproveitamento em todas as unidades completadas. No caso do exemplo da Figura 36 o aluno

completou somente a unidade Pilha.

Figura 36. Desempenho - aluno

55

Na área de estudos, será possível ao aluno iniciar estudos ou rever conteúdo. Quando acessar

a opção de iniciar estudos pela primeira vez, o aluno é direcionado a responder a algumas perguntas

como já explicado na Seção 3.2.2 , onde o SE interage com o aluno e com base nas suas respostas é

modelado o seu perfil. O início dessa interação pode ser visto na Figura 37.

Figura 37. Definindo o perfil do aluno - início

O Sistema Tutor utiliza este perfil afim de orientar o aluno, para que ele possa obter um

melhor aproveitamento durante o estudo da disciplina. A definição do perfil do aluno e a sugestão

oferecida pelo sistema é mostrada na Figura 38.

Figura 38. Definindo o perfil do aluno - fim

56

No caso do aluno fazer login, clicar na opção iniciar estudos e não sendo sua primeira

interação com o sistema, o módulo tutor identifica se o aluno está começando uma unidade nova ou

está continuando a estudar os tópicos de uma unidade já iniciada. Neste caso o sistema irá continuar

a partir do último ponto estudado, inclusive durante os exercícios. Se o aluno não completou o

exercício ele irá volta para o mesmo ponto acessado antes do logout. A Figura 39 mostra o sistema

apresentando a unidade Pilha ao aluno.

Figura 39. Visualização de conteúdo - aluno

Na opção de rever conteúdo, mostrado na Figura 40, são apresentados os tópicos da unidade já estudados pelo aluno (neste caso a unidade Pilha). Clicando no tópico é apresenta a sua descrição, onde o aluno tem a possibilidade de recapitular o conteúdo.

Figura 40. Revisão de Conteúdo - aluno

57

3.5.5 Ambiente do Sistema Especialista

O STI para Ensino de Estrutura de Dados foi desenvolvido para acompanhamento e auxílio

do estudante no aprendizado da disciplina de ED e não para ser uma ferramenta única para o estudo

desta disciplina.

Com base neste objetivo e com o auxílio de um especialista, foi desenvolvida a árvore de

decisão para modelar o PC do aluno, implementada no módulo aluno e apresentada na Figura 29; e

a árvore de decisão que foi implementada no módulo tutor, mostrada na Figura 30. A função de

cada árvore e dos módulos já foi explicado na Seção 3.3.

Afim de implementar as regras das árvores nos seus respectivos módulos e validar o sistema

na categoria de SE, foi utilizado o ambiente de desenvolvimento CLIPS. A representação do

conhecimento é na forma de regras de produção e a maneira como o STI comunica com o SE é

basicamente a mesma, o que muda são as regras e os fatos devido às árvores serem diferentes.

O processo utilizado para ligação entre o STI desenvolvido em PHP e o SE desenvolvido em

CLIPS é mostrado na Figura 41. A explicação de como ocorre a comunicação e a passagem de

dados do STI para o CLIPS é apresentado a seguir.

Figura 41. Processo de comunicação da aplicação como o Sistema Especialista

Fonte: Camacho (2005, p. 142).

58

3.5.5.1 Modelagem do perfil característico do aluno

Quando o aluno inicia os exercícios o STI verifica na base de dados se o aluno já possui um

PC, sendo esta resposta positiva o módulo tutor é acionado para que se possa dar seqüência nos

estudos do aluno.

Caso o PC do aluno ainda não tenha sido definido, o STI inicia a comunicação com o aluno

como mostra a Figura 37. As respostas do aluno servirão para abastecer a seção de fatos do STI,

mostrado na Figura 42 - linhas 10 à 16. O STI utiliza as informações armazenadas na sua seção de

fatos para comunicar e informar esses fatos ao SE, mostrado na mesma Figura - linhas 17 à 20. O

SE roda a máquina de inferência, analisa sua base de fatos e dispara as regras. As regras modeladas

para a árvore de decisão do módulo aluno podem ser lidas no Apêndice B. B.1. Após o

processamento das regras pode ser gerado um Fato Resultante, caso alguma regra tenha sido

validada, que irá definir o PC do aluno. Caso isto não ocorra, o STI irá incrementar “1” a variável

$perg – linha 36, Figura 42 – e o sistema realizará a próxima pergunta ao aluno.

Figura 42. Implementação da comunicação entre o STI e o SE para definir o PC do aluno

59

Foi necessário criar uma seção que armazenasse o histórico das respostas fornecidas pelo

aluno, chamada aqui de “seção de fatos do STI”. Antes da implementação desta seção, quando

ocorria comunicação entre o STI e o SE foi identificado sujeira na base da fatos do SE, o que gerava

um falso Fato Resultante do SE para o STI.

Para a comunicação (entrada e saída de dados) entre a aplicação e o SE, no conjunto de

regras foram implementada Templates (deftemplate) como é mostrado na Figura 43.

(deftemplate perfil_definido (slot perfil)(slot sugestao)) (deftemplate definindo_perfil (slot pergunta)(slot resposta))

Figura 43. Templates de comunicação para o perfil do aluno

A template “perfil_definido” retorna a informação do SE para o STI. Após ocorrer uma

validação das regras no SE novos fatos são gerados na base de conhecimento, o SE captura esse

fatos e com os Fatos Resultantes inicializa a Seção [Perfil]. Através das expressões regulares, o STI

captura essas informações e armazena no banco da dados. Essa informações podem ser vista na

Figura 42, linhas 23 à 33.

A template “definindo_perfil” fornece ao SE a pergunta em questão e a resposta selecionada

pelo aluno. A forma como a template é implementada para receber as informações pode ser visto na

Figura 43 e a forma como ela é implementada para enviar as informações é mostrado na Figura 42,

linha 19.

3.5.5.2 Modelagem do módulo tutor

Quando o sistema é inicalizado ocorre a troca de informações entre a aplicação e o banco de

dados para construir o conjunto de fatos iniciais do usuário que está utilizando o sistema, estes fatos

são armazenados numa seção (Fatos), implementado conforme Figura 44, linhas 2 à 7.

Toda explicação a seguir é baseada na Figura 44. A medida que o usuário interage com o

sistema e o módulo tutor é acionado, este fornece ao SE os Fatos armazenados na seção (Fatos). O

SE utiliza as regras modeladas para o seu funcionamento (linha 10), o módulo tutor fornece ao SE

as informações atualizadas (linhas 12 à 17) e novos fatos internos são gerados. Após o

processamento das regras (linha 19) é gerado um Fato Resultante que o SE fornece ao módulo tutor

(linha 20). Então o módulo tutor captura este Fato Resultante (linhas 22 à 27), atualiza a seção Fatos

(linhas 28 e 29) e o banco de dados com a resposta recebida do SE e continua a sua seqüência de

60

trabalho através da análise das expressões regulares (linhas 30 e 31). As regras do SE que interage

com o módulo tutor estão no Apêndice 0.

Figura 44. Implementação da comunicação entre o STI e o SE para definir o PC do aluno

Para uma boa comunicação (entrada e saída de dados) entre a aplicação e o SE, no conjunto

de regras foram implementadas Templates (deftemplate) como é mostrado na Figura 45.

(deftemplate retorno_especialista (slot retorno)) (deftemplate resultado (slot total_unidade_topico)(slot teste)(slot nota_exercicio)) (deftemplate resposta (slot resposta_aluno))

Figura 45. Templates de comunicação para o módulo tutor

61

A template “retorno_especialista” retorna a informação do SE para o módulo tutor. A

template “resultado” fornece ao SE as informações capturadas do banco de dados e a template

“resposta” fornece ao SE a posição onde o aluno se encontra dentro do sistema.

3.6 VALIDAÇÃO DO SISTEMA

Foram realizados testes de implementação e testes de funcionamento de forma a validar o

sistema. Durante a implementação percebeu-se que seria necessário realizar modificações no banco

de dados para que o mesmo atendesse todos os requisitos solicitados.

O PHP é uma linguagem dinâmica, (após o script ser desenvolvido e salvo é possível

verificar o seu funcionamento acessando a URL), desta forma vários problemas foram identificados

e solucionados em tempo de desenvolvimento. Os requisitos solicitados no projeto se encontram

implementados e funcionando.

Foi realizado teste da caixa preta onde foi verificado o funcionamento de cada rotina que foi

implementada no sistema, verificado se os dados armazenados na base de dados e de conhecimento

eram confiáveis. Verificado o funcionamento de cada regra implementada para o SE conforme a

modelagem sugerida para as árvores do módulo tutor e módulo aluno.

4 CONCLUSÕES

Foram apresentados neste trabalho vários conceitos permitindo o embasamento necessário

para o desenvolvimento de um STI para o ensino de Estrutura de Dados. Os levantamentos teóricos,

bem como a modelagem do projeto foram de fundamental importância para o seu desenvolvimento.

Após a revisão bibliográfica sobre os principais tópicos abortados em ED e Informática na

Educação foi possível entender que a EaD é uma fronteira que não tem limites abrindo caminho

para sistemas que tornem o aprendizado interessante e não façam do aluno um simples virador ou

navegador de páginas.

Neste ponto, foi-se criando cada vez mais gosto para o desenvolvimento do projeto, pois a

idéia de desenvolvimento de um sistema que pudesse interagir a auxiliar no aprendizado de alunos,

recebendo e fornecendo informações a eles, como que tendo por assim dizer uma vida própria, é

algo que fascina qualquer pesquisador.

Para que o sistema pudesse ter esse tipo de liberdade, o auxílio de um especialista para o seu

desenvolvimento foi de fundamental importância, especialmente na implementação da árvore de

decisão que foi utilizada para modelar o Módulo Tutor, local onde são tomadas as principais

decisões do sistema e que é responsável por fazer o mesmo interagir diretamente como o aluno.

Infelizmente, seguindo o modelo de instalação para o Clips PHP, encontrado na página

http://phlips.sourceforge.net/documentation.php#fact, mostrado na Figura 46, e respeitando a

Figura 46. Como instalar o Clips PHP

compatibilidade de versões sugeridas para PHP 5.0.2 e Apache 2.0, ocorreu erro quando foi rodado

o script que utiliza a biblioteca do Clips como pode ser visto na Figura 47.

63

Figura 47. Erro ao iniciar o Clips PHP

Clicando no “OK” para dar seqüência no procedimento, apareceu a tela de que o sistema não

pode encontrar a biblioteca que valida as funções do Clips implementadas no script, esta situação é

mostrada na Figura 48.

Figura 48. Erro ao buscar as funções do Clips PHP

Para os testes de instalação do Clips foram utilizadas as versões de Apache e PHP

encontrados nos sites como apresentados na Tabela 3:

Tabela 3. Aplicativos Testados

Aplicativo Url Encontrada xampp-win32-1.4.14-installer.exe http://www.apachefriends.org/pt_br/xampp.html phptriad2-2-1.exe http://www.phpgeek.com/wordpress/ easyphp1-8_setup.exe http://sourceforge.net/project/downloading.php

A solução encontrada para este problema foi abandonar a plataforma Windows e realizar

teste na plataforma Linux, Até que por fim conseguiu-se a instalação do Clips em um servidor

instalado em ambiente Linux, com a versão RedHat 9.

64

Por fim, considerando que todos os objetivos específicos do trabalho foram alcançados

observa-se a importância das contribuições que este proporciona, integrando a linguagem de

programação PHP com as regras de produção desenvolvidas no console do CLIPS, validando este

sistema na categoria de Sistema Especialista.

4.1 RECOMENDAÇÕES

A partir dos resultados apresentados neste trabalho, constatou-se a necessidade de

aperfeiçoamentos e trabalhos futuros a fim e aprimorar a arquitetura proposta e fornecer suporte

mais amplo ao processo de tomada de decisão do Módulo Tutor. Desta forma pode-se destacar os

seguintes trabalhos futuros:

• Implementação de um agente de interface para se comunicar com o usuário através de

dicas ou outras formas de comunicação, talvez colocando emoção e interagindo de

forma direta com o usuário;

• Implementar um agente que utilize o perfil do aluno, modelado na sua primeira interação

com o sistema, auxiliando o seu aprendizado dentro do ambiente do STI. A modelagem

deste perfil pode variar conforme o aluno evolui na disciplina; e

• Implementar um processo de decisão do Módulo Tutor utilizando técnicas de IA mais

abrangentes, como Raciocínio Baseado em Casos, para que a base de conhecimento

possa ter um aprendizado.

REFERÊNCIAS BIBLIOGRÁFICAS

BOOCH, Grady; RUMBAUCH, James; JACOBSON, Ivar. UML: guia do usuário. Rio de Janeiro: Campus, 2000. ISBN 85-352-0562-4. CAMACHO, Cecília. Gerenciando Conflitos em Reuniões: uma estratégia para a elicitação de requisitos de software. PUC-Rio, 2005. 169p. Dissertação de Mestrado – Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro, Rio de Janeiro, 2005. CELES, Waldemar; CERQUEIRA, Renato; RANGEL, José Lucas. Introdução a estrutura de dados: com técnicas de programação em C. Rio de Janeiro: Elsevier, 2004. ISBN 85-352-1228-0. CONCEIÇÃO, Katilene Nunes da. TEIA: tecnologia de ensino com inteligência aplicada. 2003. 132 f. Dissetação (Mestrado em Engenharia de Produção) – Programa de Pós-Graduação em Engenharia de Produção, Universidade Federal de Santa Catarina, Florianópolis, 2003. COSTA, Raimundo José Macário. Sistemas tutores inteligentes. Rio de Janeiro, 2002. Disponível em:< http://www.nce.ufrj.br/ginape/publicacoes/trabalhos/MacarioMaterial/index.htm>. Acesso em: 11 nov. 2006. DAZZI, Rudimar Luis Scaranto. Tad.ppt. 2006. Formato Power Point. 1 disquete, 3 ½ pol. DAZZI, Rudimar Luís Scaranto. Uma nova abordagem multiagentes para a construção de STI. 2004. Tese (Doutorado)-Faculdade de Engenharia Elétrica, Universidade Federal de Santa Catarina, Florianópolis, 2004. DROZDEK, Adam. Estruturas de dados e algoritmos em C++. São Paulo: Pioneira Thomson Learning, 2002. ISBN 85-221-0295-3. FERNANDES, Anita Maria da Rocha. Visão geral. In: ______. Inteligência artificial: noções gerais. Florianópolis: Visual Books, 2003. cap. 1, p. 1-10. ISBN: 85-7502-114-1. FEY, Vilson Cristian Hoffmann. Sistema de Acompanhamento do Desenvolvimento de Pessoas com Necessidades Educacionais Especiais. Itajaí, 2005. 132 f. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)-Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2005. FIGUEIREDO, Júlio. Inteligência artificial. Jornal Viva. n.6, 1999. Disponível em:< http://www.jornalviva.com.br/edicoes/99/09/mat_02_cie.htm>. Acesso em: 1 nov. 2006. FLORES, Cecília Dias. Fundamentos dos Sistemas Especialistas. In: BARONE, Dante (Org). Sociedades artificiais: a nova fronteira da inteligência nas máquinas. Porto Alegre: Bookman, 2003. p.127-154. ISBN 85-363-0124-4. FRANÇA, Anderson José. Desenvolvimento de um Sistema Tutor Inteligente para o Ensino de Estrutura de Dados aos Surdos. Itajaí, 2005. 68 f. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)-Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2005.

66

GIARRATANO, Joseph C. CLIPS: user’s guide. [S.l.: s.n.], mar. 2002. 6.2 v. Disponível em < http://www.ghg.net/clips/download/documentation/>. Acesso em 6 jun. 2007. GREGIO, Bernadete Maria Andreazza. A informática na educação: as representações sociais e o grande desafio do professor frente ao novo paradigma educacional. Colabor@, Campo Grande, 1. sem., 2003. Disponível em:<http://www.ricesu.com.br/colabora/n6/artigos/n_6/pdf/id_02.pdf>. Acesso em: 24 out. 2006. GOULART, Rodrigo Rafael Villarreal; GIRAFFA, Lucia Maria Martins. Arquitetura de sistemas tutores inteligentes. Technical Report Series, Porto Alegre, n.11, jun. 2001. Disponível em:<http://www.pucrs.br/inf/pos/tr/tr011.pdf>. Acesso em: 06 nov. 2006. JESUS, Andréia de. Sistemas tutores inteligentes uma visão geral. Revista Eletrônica de Sistema de Informação. 3.ed. Campo Largo, ano 2, v.2, n.2, dez. 2003. ISSN: 16773071. Disponível em:< http://www.inf.ufsc.br/resi/edicao3.html>. Acesso em: 06 nov. 2006. LIMA, Demetrius Ribeiro; ROSATELLI, Marta Costa. Um sistema tutor inteligente para um ambiente virtual de ensino aprendizagem. In: WORKSHOP DE INFORMÁTICA NA ESCOLA, 9, 2003, Campinas. Anais do XXIII Congresso da Sociedade Brasileira de Computação. Porto Alegre: SBC, 2003. p. 129-139. LUZZI, Fábio et al. WÖHLER: Assitente Inteligente para Suporte ao Ensino de Química. In: SIMPÓSIO BRASILEIRO DE INFORMÁTICA NA EDUCAÇÃO, 8, 1997, São José dos Campos. Anais do VIII Simpósio Brasileiro de Informática na Educação. São José dos Campos: Instituto Tecnológico de Aeronáutica, 1997. v.1, p. 201-217. Disponível em:< http://lsm.dei.uc.pt/ribie/docfiles/txt200342413447120.pdf>. Acesso em: 06 nov. 2006. MySQL AB. MySQL reference manual [S.I], SQL Magazine, 2003. Disponível em: http://www.sqlmagazine.com.br/apostilas.asp> Acesso em: 03 jun 2007. NASCIMENTO, Raphael Luiz. Sistemas especialistas In: FERNANDES, Anita Maria da Rocha. Inteligência artifical: noções gerais. Florianópolis : Visual Books, 2003. cap. 2, p. 11-26. ISBN: 85-7502-114-1. PEREIRA, Sílvio do Lago. Estrutura de Dados Fundamentais: Conceitos e Aplicações. 1996. 8.ed. São Paulo: Érica, 2004. PIMENTEL, Graça; CRISTINA, Maria. Algoritmos e estruturas de dados. São Paulo, 2005. Disponível em:< http://www.icmc.usp.br/~sce182/index.html>. Acesso em: 06 nov. 2006. SCHMITZ, Ademar et al. Ferramenta de autoria de sistemas tutores inteligentes - construindo o modelo do domínio do conhecimento com redes semânticas. In: CONGRESSO BRASILEIRO DE COMPUTAÇÃO, 2, 2002, Itajaí. Anais ..., 2002.

67

SOBRAL, Maria Emília Gomes; FERREIRA, Maria Alice Grigas Varella. O uso de tutores inteligentes cooperativos na internet para ambientes de ensino-aprendizagem. In: Semana da Computação, 11., 2000, São José do Rio Preto (SP). Anais eletrônicos. São José do Rio Preto: UNESP, 2000.1 CD. SOUZA, Osmar Júnior. Sistema Inteligente para Ensino de Histologia Bucal. 2005. 152 f. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)-Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2005. STAIR, Ralph M. Princípios de Sistemas de Informação: uma abordagem gerencial. 2. ed. Rio de Janeiro: Livros Técnicos e Científicos Editora, 1998. ISBN: 85-216-1132-3. VICARI, Rosa Maria; GIRAFFA, Lucia Maria Martins. Fundamentos dos Sistemas Tutores Inteligentes. In: BARONE, Dante (Org). Sociedades artificiais: a nova fronteira da inteligência nas máquinas. Porto Alegre: Bookman, 2003. p.155-208. ISBN: 85-363-0124-4.

TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe J. Estruturas de Dados usando C. São Paulo: Makron Books, 1995. ISBN 85-346-0348-0.

APÊNDICES

A IMPLEMENTAÇÃO DE TAD’S

A.1 TAD PONTO #include <iostream> using namespace std; // Definição do Tipo Ponto struct Ponto { int X int Y; }; // Inicializa a coordenada void iniciaPonto(Ponto &P) { P.X = P.Y = 0; }; // Mostra a coordenada atual void mostraPonto(Ponto P) { cout << P.X << "," ; cout << P.Y << endl; }; // Atualiza a coordenada para os valores de X e Y passados por parametro void atualizaPonto(Ponto &P, int X, int Y) { P.X= X; P.Y= Y; } // Mostra a coordenada atual void mostraPonto(Ponto P) { cout << P.X << "," ; cout << P.Y << endl; };

Figura 49. Implementação do TAD Ponto

A.2 TAD PILHA ALOCAÇÃO DINÂMICA template <class tipo> void pilha_cria(pilha<tipo>* &p){ p = NULL; }

Figura 50. Função pilha_cria

70

template <class tipo> void pilha_empilha(pilha<tipo>* &p, tipo dado){ pilha<tipo>* aux = new pilha<tipo>; aux->dado = dado; aux->anterior = p; p = aux; }

Figura 51. Função pilha_empilha

template <class tipo> tipo pilha_desempilha(pilha<tipo>* &p){ tipo valor = p->dado; pilha<tipo>* aux = p; p = p->anterior; delete aux; return valor; }

Figura 52. Função pilha_desempilha

template <class tipo> bool pilha_vazia(const pilha<tipo>* &p){ return (p == NULL) ? true : false; }

Figura 53. Função pilha_vazia

A.3 TAD FILA ALOCAÇÃO ESTÁTICA template <class tipo, int TAM> void inicializaFilaEst(filaEst<tipo,TAM> & f){ f.inicio = 0; f.fim = -1; f.quantidade = 0; }

Figura 54. Função criar fila

71

template <class tipo, int TAM> bool seCheia(filaEst<tipo,TAM> &f){ return (f.fim == TAM-1); }

Figura 55. Função fila cheia

//insere na fila fazendo o deslocamento, se for necessário template <class tipo, int TAM> void insereNaFila( filaEst<tipo,TAM> &f, tipo valor){ if(!seCheia(f) || f.inicio > 0){ if(!seCheia(f)){ f.dados[f.fim++] = valor; f.quantidade++; } else { passinhoPraFrente(f); insereNaFila(f,valor); } } } template <class tipo, int TAM>m void passinhoPraFrente(filaEst<tipo,TAM> &f){ while(f.inicio > 0){ int x = f.inicio; for(int y = f.quantidade; y > 0; y--) f.dados[x-1] = f.dados[x++]; f.inicio--; f.fim--; } }

Figura 56. Função inserir na fila

template <class tipo, int TAM> bool seVazia(filaEst<tipo,TAM> &f){ return (f.inicio == f.fim); }

Figura 57. Função fila vazia

72

template <class tipo, int TAM> tipo removeDaFila(filaEst<tipo,TAM> &f){ if(!seVazia(f)){ f.quantidade--; return (f.dados[f.inicio++]); } }

Figura 58. Função elimina da fila

template <class tipo, int TAM> bool retornaPrimeiro(filaEst<tipo,TAM> &f){ if(!seVazia(f)){ return (f.dados[f.inicio + 1]; } else return false; }

Figura 59. Função retorna o primeiro elemento da fila

A.4 TAD FILA ALOCAÇÃO DINÂMICA template < class T > void CriaFila(TFila<T> &Fila) { Fila.Inicio = NULL; Fila.Final = NULL; }

Figura 60. Função cria fila

template < class T > void InsereFila(TFila<T> &Fila, T valor) { ElementoFila<T> *aux = new ElementoFila<T>; if (aux != NULL) { if (Fila.Inicio == NULL) Fila.Inicio = aux; else Fila.Final->prox = aux; aux->dado = valor; aux->prox = NULL; Fila.Final = aux; } }

Figura 61. Função insere na fila

73

template < class T > T RemoveFila(TFila<T> &Fila) { if (Fila.Inicio == NULL) return 0; T valor = Fila.Inicio->dado; ElementoFila<T> *aux = Fila.Inicio; Fila.Inicio = Fila.Inicio->prox; if (Fila.Inicio == NULL) Fila.Final = NULL; delete aux; return valor; }

Figura 62. Função remove da fila

A.5 TAD LISTA ENCADEADA SIMPLES template <class tipo> bool insereNoInicio(ListaDin<tipo>* &l, tipo dado) { ListaDin<tipo>* aux = new ListaDin<tipo>; if(aux == NULL) return false; aux->dado = dado; aux->prox = l; l = aux; return true; }

Figura 63. Função para inserir no início da lista

template <class tipo> bool insereNaPos(ListaDin<tipo>* &l, tipo dado, int pos){ if(pos == 1) return (insereNoInicio(l,dado) ); ListaDin<tipo>* atual = l; int cont = 1; while(cont < pos-1){ atual = atual->prox; cont++; if(atual == NULL){ return false; } } ListaDin<tipo>* aux = new ListaDin<tipo>; aux->dado =dado; aux->prox = atual->prox; atual->prox = aux; return true; }

Figura 64. Função para inserir elemento na posição da lista

74

template <class tipo> bool insereNoFim(ListaDin<tipo>* &l, tipo dado){ if(l == NULL)//se for a primeira inserção insereNoInicio(l,dado); else{ ListaDin<tipo>* atual = l; while(atual->prox != NULL) atual = atual->prox; ListaDin<tipo>* aux = new ListaDin<tipo>; if(aux == NULL) return false; aux->dado = dado; aux->prox = atual->prox; atual->prox = aux; return true; } }

Figura 65. Função para inserir elemento no fim da lista

template <class tipo> bool removeNoInicio(ListaDin<tipo>* &l){ if(l != NULL){//se existe pelo menos um item para ser deletado ListaDin<tipo>* aux = l; l = l->prox; delete aux; return true; } return false; }

Figura 66. Função para remover elemento do início da lista

75

template <class tipo> bool removeNaPos(ListaDin<tipo>* &l, int pos){ if(pos > 0){ if(pos == 1) return (removeNoInicio(l)); ListaDin<tipo>* atual = l; int cont =1; while(atual->prox != NULL && cont < pos-1){ atual = atual->prox; cont++; } if(atual->prox == NULL ) //pos informado não existe return false; ListaDin<tipo>* aux = atual->prox; atual->prox = aux->prox; delete aux; return true; } return false; }

Figura 67. Função para remover elemento da posição da lista

template <class tipo> bool removeNoFim(ListaDin<tipo>* &l){ if(l == NULL)//se estiver vazia return false; if(l->prox ==NULL) return (removenoInicio(l)); ListaDin<tipo>* atual = l; ListaDin<tipo>* anterior = l; while(atual->prox != NULL){ anterior = atual; atual = atual->prox; } ListaDin<tipo>* aux = atual; anterior->prox = NULL; delete aux; return true; }

Figura 68. Função para remover o último elemento da lista

76

A.6 TAD LISTA DUPLAMENTE ENCADEADA CIRCULAR template <class tipo> bool insereNoInicio(ListaDinD<tipo>* &l, tipo dado){ ListaDinD<tipo>* aux = new ListaDinD<tipo>; if(aux == NULL) return false; if(l == NULL){//se é a primeira inserção l = aux; aux->ant = aux; aux->prox = aux; } else{ aux->prox = l; aux->ant = l->ant; l->ant->prox = aux; l->ant = aux; l = aux; } l->dado = dado; return true; }

Figura 69. Função para inserir no início da lista

template <class tipo> bool insereNaPos(ListaDinD<tipo>* &l, const tipo dado, const int pos){ ListaDinD<tipo>* aux = new ListaDinD<tipo>; if(aux == NULL)//se estiver vazia return false; if(pos == 1)//se é a primeira inserção return (insereNoInicio(l,dado)); ListaDinD<tipo>* atual = l; int cont = 1; //procura a posição indicada em pos while(cont < pos && atual != l->ant){ atual = atual->prox; cont++; } if(cont < pos) //se a posição pretendida não existe return false; aux->dado = dado; aux->prox = atual; aux->ant = atual->ant; atual->ant->prox = aux; atual->ant = aux; return true; }

Figura 70. Função para inserir na posição na posição da lista

77

template <class tipo> bool insereNoFim(ListaDinD<tipo>* &l, tipo dado){ ListaDinD<tipo>* aux = new ListaDinD<tipo>; if(aux == NULL) return false; if(l == NULL){//se é a primeira inserção l = aux; aux->dado = dado; aux->ant = aux; aux->prox = aux; } else{ aux->dado = dado; aux->prox = l; aux->ant = l->ant; l->ant->prox = aux; l->ant = aux; } return true; }

Figura 71. Função para inserir no fim da lista

template<class tipo> bool removeNoInicio(ListaDinD<tipo>* &l){ if(l != NULL){//se não estiver vazia ListaDinD<tipo>* aux = l; if(l->prox == l)//se é o último elemento l = NULL;//deixa a lista vazia else{ l->prox->ant = l->ant; l->ant->prox = l->prox; l = l->prox; } delete aux; return true; } return false; }

Figura 72. Função para remover no início da lista

78

template <class tipo> bool removeNaPos(ListaDinD<tipo>* &l, const int pos){ if(pos == 1)//se é a primeira inserção return (removeNoInicio(l)); ListaDinD<tipo>* aux = l; int cont = 1; //procura a posição indicada em pos while(cont < pos && aux != l->ant){ aux = aux->prox; cont++; } if(cont < pos)//se a posição pretendida não existe return false; aux->ant->prox = aux->prox; aux->prox->ant = aux->ant; delete aux; return true; }

Figura 73. Função para remover na posição da lista

template <class tipo> bool removeNoFim(ListaDinD<tipo>* &l){ if(l != NULL){//se não estiver vazia ListaDinD<tipo>* aux = l->ant; if(l->prox == l)//se é o último elemento l = NULL;//deixa a lista vazia else{ l->ant = aux->ant; aux->ant->prox = l; } delete aux; return true; } return false; }

Figura 74. Função para remover no fim da lista

B. PERFIL CARACTERISTICO DO ALUNO

B.1 REGRAS QUE MODELAM O PERFIL DO ALUNO ;- Pergunta 1 -------------------------- (defrule define-perfil_01 ?f1 <- (definindo_perfil (pergunta "1")(resposta "nenhum")) => (retract ?f1) (assert (perfil_definido (perfil PC1)(sugestao S1)))) ;- Pergunta 1 (razoavel) e 2 ---------- (defrule define-perfil_02 ?f1 <- (definindo_perfil (pergunta "1")(resposta "razoavel")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "nenhum")) => (retract ?f1 ?f2) (assert (perfil_definido (perfil PC1)(sugestao S1)))) (defrule define-perfil_03 ?f1 <- (definindo_perfil (pergunta "1")(resposta "razoavel")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "bom"|"otimo")) => (retract ?f1 ?f2) (assert (perfil_definido (perfil PC1)(sugestao S1)))) (defrule define-perfil_04 ?f1 <- (definindo_perfil (pergunta "1")(resposta "razoavel")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "razoavel")) => (retract ?f1 ?f2) (assert (perfil_definido (perfil PC2)(sugestao S2)))) ;- Pergunta 1 (bom) e 2 --------------- (defrule define-perfil_05 ?f1 <- (definindo_perfil (pergunta "1")(resposta "bom")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "nenhum")) => (retract ?f1 ?f2) (assert (perfil_definido (perfil PC2)(sugestao S2)))) (defrule define-perfil_06 ?f1 <- (definindo_perfil (pergunta "1")(resposta "bom")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "razoavel")) => (retract ?f1 ?f2) (assert (perfil_definido (perfil PC2)(sugestao S4))))

Figura 75. Regra para a Pergunta 1, resposta – nenhum / Pergunta 1, resposta - bom

80

;- Pergunta 1 (bom), 2 (bom) e 3 -------- (defrule define-perfil_07 ?f1 <- (definindo_perfil (pergunta "1")(resposta "bom")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "bom")) ?f3 <- (definindo_perfil (pergunta "3")(resposta "nunca")) => (retract ?f1 ?f2 ?f3) (assert (perfil_definido (perfil PC2)(sugestao S3)))) (defrule define-perfil_08 ?f1 <- (definindo_perfil (pergunta "1")(resposta "bom")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "bom")) ?f3 <- (definindo_perfil (pergunta "3")(resposta "muitas_vezes")) => (retract ?f1 ?f2 ?f3) (assert (perfil_definido (perfil PC3)(sugestao S5)))) ;- Pergunta 1 (bom), 2 (bom), 3 (poucas_vezes) e 4 ---------- (defrule define-perfil_09 ?f1 <- (definindo_perfil (pergunta "1")(resposta "bom")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "bom")) ?f3 <- (definindo_perfil (pergunta "3")(resposta "poucas_vezes")) ?f4 <- (definindo_perfil (pergunta "4")(resposta "nunca")) => (retract ?f1 ?f2 ?f3 ?f4) (assert (perfil_definido (perfil PC2)(sugestao S6)))) (defrule define-perfil_10 ?f1 <- (definindo_perfil (pergunta "1")(resposta "bom")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "bom")) ?f3 <- (definindo_perfil (pergunta "3")(resposta "poucas_vezes")) ?f4 <- (definindo_perfil (pergunta "4")(resposta "muitas_vezes")) => (retract ?f1 ?f2 ?f3 ?f4) (assert (perfil_definido (perfil PC3)(sugestao S5)))) ;- Pergunta 1 (bom), 2 (bom), 3 (poucas_vezes), 4 (poucas_vezes) e 5 ---- (defrule define-perfil_11 ?f1 <- (definindo_perfil (pergunta "1")(resposta "bom")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "bom")) ?f3 <- (definindo_perfil (pergunta "3")(resposta "poucas_vezes")) ?f4 <- (definindo_perfil (pergunta "4")(resposta "poucas_vezes")) ?f5 <- (definindo_perfil (pergunta "5")(resposta "nunca")) => (retract ?f1 ?f2 ?f3 ?f4 ?f5) (assert (perfil_definido (perfil PC3)(sugestao S7)))) (defrule define-perfil_12 ?f1 <- (definindo_perfil (pergunta "1")(resposta "bom")) ?f2 <- (definindo_perfil (pergunta "2")(resposta "bom")) ?f3 <- (definindo_perfil (pergunta "3")(resposta "poucas_vezes")) ?f4 <- (definindo_perfil (pergunta "4")(resposta "poucas_vezes")) ?f5 <- (definindo_perfil (pergunta "5")(resposta "poucas_vezes")) => (retract ?f1 ?f2 ?f3 ?f4 ?f5) (assert (perfil_definido (perfil PC3)(sugestao S8))))

Figura 76. Regra para a Pergunta 1, resposta – bom / Pergunta 2, resposta - bom

81

B.2 REGRAS QUE MODELAM O MÓDULO TUTOR ; clips_assert ('(total_unidade_topico <valor>)->Qtd de und top info pelo sist ; (teste <valor>) -> Teste efetuado ? ; (nota_exercicio <valor>)', resultado) -> Nota do exercicio ; clips_assert ('(resposta_aluno <valor>)', resposta) -> Informa poso do aluno ; retorno_especialista -> retorno do sistema ao módulo tutor (deftemplate retorno_especialista (slot retorno)) (deftemplate resultado (slot total_unidade_topico)(slot teste)(slot nota_exercicio)) (deftemplate resposta (slot resposta_aluno)) (defrule Conteudo_completo ?f10 <- (resultado (total_unidade_topico ?tup)) ?f11 <- (resposta (resposta_aluno ?ra)) => ; (retract ?f10 ?f11) (if (< ?ra ?tup) then (assert (retorno_especialista (retorno "Apresentar conteudo"))) else (assert (verificar_teste)) ) ) (defrule Teste_efetuado (verificar_teste) ?f12 <- (resultado (teste ?tst)) => ; (retract ?f12) (if (eq ?tst "sim") then (assert (avaliar_exercicios)) else (assert (retorno_especialista (retorno "Apresentar exercicio"))) ) ) (defrule Concluidos_corretamente (avaliar_exercicios) ?f13 <- (resultado (nota_exercicio ?nex)) => ; (retract ?f13) (if (eq ?nex 10) then (assert (retorno_especialista (retorno "Proximo assunto"))) else (if (>= ?nex 7) then (assert (retorno_especialista (retorno "Apresentar Respostas coretas e sugerir leitura de link"))) else (if (>= ?nex 5) then (assert (retorno_especialista (retorno "Revisar conteudo com erro"))) else (assert (retorno_especialista (retorno "Rever todo o conteudo"))) ) ) ) )

Figura 77. Regras para validação da árvore do módulo tutor