• Nenhum resultado encontrado

3.3 IMPLEMENTAÇÃO

3.3.2 Mecanismo de Adaptação

• selecionaVariavel – realiza a seleção do nó com o qual se trabalhará em determinado momento, no qual serão observadas evidências. Para isso, utiliza-se o método get_probability_variable da classe BayesNet, o qual seleciona a variável requerida na estrutura da RB a partir do respectivo nome ou índice informado, retornando um objeto do tipo DiscreteVariable;

• novaEvidencia – método cuja finalidade é observar uma nova evidência correspondente a um estado do nó previamente selecionado, a partir da chamada do método set_observed_value da classe DiscreteVariable, no qual passa-se como parâmetro o nome do estado a ser observado no referido nó; e

• inferir – este método realiza uma nova inferência na RB, e retorna as probabilidades a posteriori calculadas para um nó solicitado. Para a inferência, são utilizados os métodos inference e get_result da classe Inference, sendo que o primeiro recebe como parâmetro o nome da variável questionada e executa o processo, enquanto o segundo permite resgatar o resultado da inferência, retornando um objeto da classe DiscreteFunction. A seguir, utilizou-se o método get_value da referida classe para se ter acesso a cada valor de probabilidade do respectivo nó.

Nas seções seguintes, será realizado o detalhamento da implementação do mecanismo de adaptação do E-Adapt, o qual compreende os processos de resolução de testes online e adaptação do sistema descritos anteriormente, e de aspectos referentes ao tratamento da interface gráfica do protótipo com uso do JSF para realização das adaptações.

• <f:view> – esta tag delimita a área da página onde serão utilizados componentes JSF, a qual é finalizada com </f:view>. Somente dentro desta área podem ser declaradas tags JSF;

• <h:form> – cria um formulário HTML na página, o qual é utilizado nesta para submissão do teste online respondido pelo aluno;

• <h:outputText> – cria uma saída de texto de uma única linha, sendo utilizada neste caso para exibir o título do teste e o enunciado das questões;

• <h:dataTable> – cria uma tabela dinâmica na página, dentro da qual são apresentadas as questões selecionadas para o teste;

• <h:column> – consiste em uma coluna do dataTable;

• <h:selectOneRadio> – cria um conjunto de radio buttons na página, nos quais serão agrupadas as opções de resposta de cada questão listada dentro do dataTable;

• <f:selectItems> – utilizado para especificar os itens de um componente de listagem, que neste caso são os radio buttons do conjunto criado. A este componente pode ser atribuído um array de instâncias da classe SelectItem, onde cada instância contém uma opção da questão correspondente, conforme será visto adiante; e

• <a4j:commandButton> – cria um botão para submissão Ajax do formulário contendo as respostas dadas pelo aluno nas questões. No atributo reRender disponível neste componente, definiu-se para re-renderização o form “fmenu” da página principal do sistema (index.jsf), o qual contém os links que são adaptados a partir da interação do aluno, de forma a exibir-lhe as modificações realizadas durante a execução do processo de adaptação.

Na Figura 26 é apresentado o trecho do código da página em que são utilizadas as referidas tags, no qual também é possível observar o uso das ELs, que são as expressões iniciadas por “#”.

Geralmente, estas expressões apresentam a estrutura #{nomeBackingBean.atributo}, onde atributo é uma propriedade do Backing Bean que possui um método set e um get, cujo tipo pode ser um dos nativos do Java ou correspondente a uma classe de entidade, caso em que pode haver acesso a mais níveis de atributo. Para ações de botões e links de comando, é utilizada a estrutura

#{nomeBackingBean.método}, sendo um exemplo disto a EL #{teste.corrige} expressa no actionListener do commandButton da página.

<f:view>

<h:form id=”fteste”>

<h3><h:outputText value="Teste de #{adaptacao.nmConteudoAtual}"/></h3>

<h5><h:outputText value="Nível #{teste.nivelQuestoes}"/></h5>

<h:dataTable value="#{teste.questoes}" var="bufferQt">

<h:column>

<pre><h:outputText value="Questão #{bufferQt.numeroQ} - #{bufferQt.questao}"/></pre>

<h:selectOneRadio required="true" id="questao" label="Questao"

value="#{bufferQt.resposta}" layout="pageDirection">

<f:selectItems value="#{bufferQt.opcoes}"/>

</h:selectOneRadio>

<br>

</h:column>

</h:dataTable>

<a4j:commandButton reRender=”fmenu” limitToList=”true” id="correcao" value="Corrigir"

actionListener="#{teste.corrige}"/>

</h:form>

</f:view>

Figura 26. Código da página de testes

Assim, no momento em que a página teste.jsp é requisitada, os Backing Beans vinculados a esta são instanciados, e as informações são recuperadas na página por meio da chamada dos métodos get de seus atributos.

Considerando a EL #{teste.questoes}, a qual está associada ao componente dataTable, o que realmente está sendo executado é teste.getQuestoes(). Neste método, o qual encontra-se no Backing Bean correspondente à classe Teste, o sistema consulta o perfil do aluno conectado à sessão para determinar de que conteúdo e nível deverão ser as questões do teste, e com base nisso, as seleciona aleatoriamente a partir de uma busca realizada no banco de dados. A seguir, a cada iteração realizada sobre o objeto contendo o resultado da busca, cada questão recuperada e suas opções correspondentes são atribuídas a um objeto da classe BufferQuestoes, a qual é um Backing Bean auxiliar registrado no sistema (com o nome bufferQt) unicamente para ser utilizado neste processo, sendo este o motivo pelo qual não havia sido mencionado até o momento.

Cada instância da referida classe recebe os dados de uma questão listada por meio dos métodos set de seus atributos, sendo estes: (i) númeroQ, que trata-se de um atributo do tipo Integer e armazena o número da questão; (ii) questão, o qual é do tipo String e armazena o enunciado da questão; (iii) resposta, que também é do tipo String e armazena a resposta que é dada pelo aluno na questão; (iv) gabarito, também do tipo String, o qual armazena a resposta correta da questão; e (v) opções, o qual é um atributo do tipo List que mantém a lista de opções correspondente à questão, cujos itens adicionados durante a iteração mencionada são objetos do tipo SelectItem, cada qual contendo o código da resposta (neste caso, “A”, “B”, “C”, etc.) e o texto referente à uma opção.

Após a atribuição dos referidos dados no objeto da classe BufferQuestoes, este é adicionado ao objeto listaQuestoes da classe Teste, o qual é um List, e assim ocorre até finalizarem as iterações no resultado da busca.

Por fim, o método getQuestoes retorna o objeto listaQuestoes ao dataTable na página, e este encarrega-se de listar cada questão no padrão de estrutura especificado. Após o aluno responder as questões e submeter o teste à correção por meio do clique no botão Corrigir, é iniciada uma requisição Ajax ao servidor. Assim, a resposta do aluno a cada questão é armazenada no atributo resposta do objeto da classe BufferQuestoes correspondente, por meio da execução do método set expresso na EL #{bufferQt.resposta}. A seguir é executado o método corrige() da classe Teste, onde as respostas dadas pelo aluno são comparadas com as respectivas respostas corretas previamente armazenadas no atributo gabarito de cada objeto. Com isso, é calculada a porcentagem de acerto no teste, a qual é enviada em seguida ao Módulo de Adaptação por meio da chamada do método adaptaNavegação do respectivo Backing Bean acessado internamente.

Assim, dá-se início ao processo de adaptação da navegação do sistema. Pelo fato de a maior parte de sua execução ser realizada internamente na classe ModAdaptacao, nesta parte da seção será tratado com maior ênfase de aspectos referentes ao tratamento das configurações de adaptação, além de ser apresentada a especificação dos principais métodos utilizados no processo. Os aspectos relativos ao tratamento da interface gráfica da página correspondente a este Backing Bean encontram-se abordados na Seção 3.3.3.

Com base no percentual de acerto calculado, indicando o nível de aprendizado do aluno no momento em que este realizou o teste, o Modelo de Adaptação realiza a interação com a RB presente no Modelo de Usuário, por meio da execução dos respectivos métodos selecionaVariavel, novaEvidencia e inferir, descritos na seção anterior. A partir disto, com base nos resultados obtidos na inferência, são realizadas novas adaptações nos links do menu da página, conforme as definições da regra de adaptação aplicada.

Ao início de uma sessão no ambiente, as configurações de adaptação correspondentes ao aluno são carregadas em objetos da classe AdaptacaoMenu na lista adaptacaoLinks, a qual é um atributo pertencente à classe ModAdaptacao, cujos dados são utilizados para inicialização das estruturas de navegação para o aluno. Com a execução de novas adaptações durante a sessão, primeiramente é realizada a atualização das configurações de adaptação armazenadas nos objetos da referida lista, para que possam ser salvas quando o aluno encerrar sua sessão no sistema. Para essas atualizações, são utilizados os seguintes métodos:

• atualizaVisib – método destinado a atualizar a configuração de visibilidade do link de um conteúdo específico. Para este tipo de adaptação, foram definidas as constantes LINK_VISIVEL e LINK_OCULTO, as quais contém um código relativo a essas configurações, conforme especificado na tabela AdaptacaoMenu no dicionário de dados do Apêndice D;

• atualizaEstilo – este método é utilizado para atualizar o estilo CSS de um link relativo a um conteúdo, conforme as necessidades detectadas a partir do desempenho do aluno no último teste online realizado. Os estilos aplicados, cujo padrão foi especificado na Seção 3.1, encontram-se definidos como constantes no Backing Bean deste método, as quais mantém o código CSS correspondente a cada estilo, sendo estas: DESTAQUE_ATUAL, ESTILO_DEFAULT, DESTAQUE_REFORÇO_INS e DESTAQUE_REFORÇO_REG;

• atualizaStReforco – este método foi criado para atualização da configuração de status de reforço do link de um conteúdo, para a qual foram definidas as constantes NÃO_REFORÇADO, EM_REFORÇO e REFORÇADO, cujos códigos correspondentes também encontram-se definidos no dicionário de dados;

• atualizaConteudoAtual – este método é utilizado para atualizar a configuração do link que indica se o conteúdo correspondente é ou não o que está sendo atualmente estudado pelo aluno; e

• atualizaAtividadeAtual – método aplica-se somente à regra de adaptação relativa ao nível de aprendizado Satisfatório, sendo utilizado para atualização do código do conteúdo correspondente às questões apresentadas ao aluno no teste online, conforme especificado nas regras de adaptação descritas na Seção 3.1.

Após a execução dos métodos descritos, conforme as condições satisfeitas durante a execução de uma regra de adaptação, as novas adaptações são efetivadas na página por meio do método adaptaLink. Com isso, as configurações atualizadas na lista mencionada são atribuídas aos componentes de interface relativos aos links da página principal, conforme é esclarecido na seção seguinte. Ao final do ciclo de vida JSF, a resposta à requisição é renderizada e apresentada no navegador de Internet, e em seguida o form da página principal especificado no atributo reRender do botão Corrigir é re-renderizado automaticamente, e com isso os links do menu de navegação são atualizados na página, tornando visíveis as adaptações aplicadas ao usuário.