• No results found

Como foi comentado no Capítulo anterior, Seção 3.2.3, as classes de GUI de BN esta- vam completamente acopladas a classes de GUI de MEBN (vide Figura 3.4). A principal causa era o fato da GUI do MEBN estar utilizando a classe que representa uma janela interna (NetworkWindow) e sua controladora (NetworkController) e realizando repasses a painéis de acordo com o tipo de rede sendo editada no momento. Se a rede editada era a

MultiEntityBayesianNetwork, instanciava-se os painéis de MEBN; caso contrário, instanciava- se os painéis de BN.

Caso essa interdependência entre painéis (e controladoras) BN e MEBN fossem mantidas em plug-ins, criaria-se uma dependência circular entre o core (que contém as rotinas de BN) e o plug-in de MEBN. Como o desejado seria que a dependência fosse unidirecional (o plug-in dependendo de códigos do core, nunca o contrário48), foi necessário a remoção de todos os códigos em NetworkWindow e NetworkController relacionados a MEBN.

Os códigos removidos de NetworkController não implementavam funcionalidades, pois eram simplesmente rotinas de repasse. No entanto, os códigos antes presentes em NetworkWindow implementavam papéis importantes na GUI do MEBN. Então, foi criado a classe

MEBNNetworkControllere todo código referente a MEBN foi migrado para essa nova classe. Como a nova classe estende indiretamente um UnBBayesModule, ele pode ser usado como classe central de plug-in de módulos (mecanismo apresentado na Seção 3.4.2). Essa refatora- ção está ilustrada na Figura 5.11.

Figura 5.11: Resultado da criação da classe MEBNNetworkWindow. A lista a seguir descreve os pontos de extensão oferecidos pelo plug-in de MEBN:

• MEBNIO: ponto de extensão para I/O em MEBN. Consiste em um conjunto de classes implementando a interface unbbayes.io.BaseIO para se adicionar funcionalidades de entrada e saída. Como exigido pela infra-estrutura de plug-ins, esta classe deve fornecer um construtor padrão sem parâmetros. Os parâmetros desse ponto de extensão são:

– class: classe implementando unbbayes.io.BaseIO

– name: nome mostrado ao usuário em caso de conflito (quando mais de uma classe pode tratar um tipo de arquivo)

• KnowledgeBase: classes implementando IKnowledgeBaseBuilder do pacote

unbbayes.prs.mebn.kb.extension, para adicionar uma nova base de conhecimento na MEBN. Os parâmetros desse ponto de extensão são:

– class: classe implementando IKnowledgeBaseBuilder (que constói instâncias de KnowledgeBase).

– name: identificador da KB.

– optionPanel: painel utilizado para preencher atributos da KB. Deve implementar unbbayes.gui.mebn.extension.kb.IKBOptionPanelBuilder.

• SSBN: classes que adicionam novos algoritmos de geração de SSBN. Os parâmetros desse ponto de extensão são:

– class: classe que implementa

unbbayes.prs.mebn.ssbn.extension.ISSBNGeneratorBuilder. – name: identificador do algoritmo de SSBN.

– optionPanel: formulário para se preencher atributos do algoritmo de SSBN. Deve implementar unbbayes.gui.mebn.extension.ssbn.ISSBNOptionPanelBuilder. • MEBNEditorPanel: paineis adicionais para se editar uma MEBN e objetos relacionados.

Os parâmetros desse ponto de extensão são: – class: classe que implementa

unbbayes.gui.mebn.extension.editor.IMEBNEditionPanelBuilder. – name: identificador de um painel em particular.

– icon: ícone mostrado na aba onde o painel será inserido. – description: dicas tooltip text.

• MEBNPluginNode: declaração de novos tipos de nós para MEBN e um conjunto de in- formações adicionais para se mostrar esse nó na GUI. I/O e/ou algoritmos de inferência (geradores de SSBN) precisarão ser implementadas para suportar armazenamento e com- pilação desses novos nós. Esse ponto de extensão pode ser utilizado, por exemplo, para simular nós de input com expressões complexas em FOL. Os parâmetros desse ponto de extensão são:

– class: classe do nó, implementando unbbayes.prs.extension.IMEBNPluginNode. Este parâmetro pode também ser um builder que estende

unbbayes.prs.builder.extension.PluginNodeBuilderou implementa unbbayes.prs.builder.INodeBuilder. Nesses casos, o nó criado deve ser ins- tância de

unbbayes.prs.extension.IPluginNode.

– shapeClass: classe implementando unbbayes.draw.extension.IPluginUShape, usado para se desenhar o nó na tela. Este argumento pode também ser um builder que implementa unbbayes.draw.extension.IPluginUShapeBuilder e gere ob- jetos de unbbayes.draw.extension.IPluginUShape.

– panelBuilder: classe implementando

unbbayes.gui.table.extension.IProbabilityFunctionPanelBuilder. É ba- sicamente um JPanel do swing usado para se editar as informações de um nó. – description: descrição para o nó. Será usado como dicas tool tip.

– icon: uma imagem (e.g. gif, png) para ser usado como ícone nos botões para criação dos nós.

– cursor: uma imagem (e.g. gif, png) para ser usado como cursor durante a criação do nó pelo usuário. O canto superior esquerdo (ponto x = 0, y = 0) será usado como o ponto de ativação (a “ponta” do cursor).

Como alterações secundárias, as classes que tratam a script de probabilidades condicionais do UnBBayes-MEBN (Seção 5.1.3) sofreram alterações pequenas voltadas na facilitação de uso no contexto de PR-OWL 2. Na especificação antiga, todos os estados deviam estar explicitados no pseudo-código. Isso era aceitável naquele momento, pois todas as informações relacionadas a variáveis aleatórias estavam unicamente definidas pela porção probabilística da PR-OWL.

Adicionalmente, na nova especificação - PR-OWL 2 - informações sobre os estados possí- veis das variáveis aleatórias podem conter valores inferidos pela porção determinística também, com uso de máquinas de inferência em DL. Isso insere uma certa dinâmica nos estados possíveis de um nó, pois agora seus valores possíveis não necessariamente são “imediatos”, já que preci- sam ser inferidos. Estados implícitos (como o valor “absurd”, que tornou-se agora um estado possível para qualquer variável aleatória na PR-OWL 2) podem também ocorrer. Visto essas condições, a restrição que forçava com que as scripts de probabilidades condicionais contenham todos os estados possíveis (explícitos e inferíveis) passou a dificultar muito na modelagem de ontologias probabilísticas.

Por tais motivos, a restrição que forçava com que a script de probabilidades condicionais do UnBBayes-MEBN contenha todos os estados possíveis foi removida. No novo esquema, valores não declarados pela script são interpretados como probabilidade zero.