• Sonuç bulunamadı

2. BÖLÜM

2.5 İlgili Araştırmalar

Esta secção realiza uma breve apresentação das ferramentas aplicacionais utilizadas no desenvolvimento do protótipo actual. Tendo em conta que existe uma vasta informação disponível na Internet esta apresentação visa, simplesmente, permitir uma caracterização genérica sobre as capacidades oferecidas.

A linguagem de programação seleccionada foi o JAVA, em particular pelo seu paradigma de programação orientada por objectos em ambientes heterogéneos distribuídos.

A linguagem JAVA, criada pela SUN Microsystems em Junho de 1995, gerou uma onda de aceitação, em virtude de ser orientada por objectos, e ter sido desenhada para aplicações Internet, permitindo a sua execução de forma independente da plataforma física.

Uma das vantagens do Java passa pelo facto de ser uma linguagem pensada de raiz sem qualquer preocupação de retrocompatibilidade com linguagens imperativas (como foram o caso do C++ ou Delphi), o que torna o Java uma linguagem simples e bem estruturada, fácil de compreender, na qual o tempo perdido em depuração e desenvolvimento de aplicações, se torna significativamente menor em relação a outras linguagens. O facto de basear a sua sintaxe na linguagem C, (uma das mais usadas até hoje), torna o tempo de aprendizagem dos processos básicos de programação muito menor relativamente a outras linguagens. Outro ponto forte do Java reside no facto do código desenvolvido ser independente da plataforma onde é executado. Deste modo todos os pormenores inerentes à plataforma ficam encapsulados, tornando as aplicações facilmente portáveis entre plataformas. A perda de desempenho associada à interpretação do código, tem sido compensada pelos avanços nos últimos anos em relação às máquinas virtuais de Java. O facto do JAVA ter uma política de código-fonte livre, assegura uma enorme quantidade e qualidade de aplicações e pacotes disponíveis para reutilização permitindo, consequentemente, a aceleração do processo de desenvolvimento. O próprio Java inclui uma extensa biblioteca de objectos que encapsulam interfaces e estruturas de dados, e. g., Streams de dados, Vectores, Tabelas de Hash, Sockets.

Numa perspectiva mais técnica, a restrição à utilização de herança simples, torna o desenvolvimento mais rígido, contudo, reduz a complexidade em termos de compreensão da aplicação. O uso de interfaces facilita a implementação de novas funcionalidades sem haver necessidade de modificar código antigo. A passagem de parâmetros exclusivamente por referência simplifica, uma vez mais, o desenvolvimento de aplicações. A existência do objecto, «Object», do qual todos os objectos são herdados directa ou indirectamente, torna

A existência de métodos privados, públicos e protegidos ajudam grandemente no encapsulamento do comportamento de objectos. Um excelente tratamento de erros, através de excepções, ajuda o programador na recuperação de erros em tempo de execução e na na fase de depuração da aplicação.

Resumindo, o Java é uma linguagem de programação orientada por objectos, com grande aceitação na comunidade informática, que concilia a simplicidade de desenvolvimento com uma rigidez e disciplina necessárias ao bom desenvolvimento de aplicações eficientes e intuitivas em termos de compreensão do código implementado.

O ambiente de desenvolvimento utilizado, foi o Sun One Studio, que resulta da evolução do Forte for Java, e o seu surgimento representou um marco de sucesso na melhoria da utilização de recursos e no aumento do desempenho comparativo, tendo permitido a sua afirmação.

O Sun One Studio alia o alto desempenho, a uma série de ferramentas que simplificam o desenvolvimento em Java. À semelhança da maioria dos ambientes de desenvolvimento actuais suporta «sintax highlighting», auto-complete e identação inteligente, disponibilizando um ambiente versátil de depuração de código, com «breakpoints» e «watches». Possui um servidor de base de dados embebido, «pointbase», e um gerador de «javadocs» e ficheiros de tipo «jar». Suporta CVS para controle de versões e todas as classes podem ser compiladas através do ambiente de trabalho, devido a estreita relação que o Sun One Studio mantém com a Máquina Virtual existente localmente. Disponibiliza uma construção intuítiva de Interfaces Gráficas para Utilizadores (GUI) onde os componentes são inseridos através do método «Drag & Drop», muito utilizado por quem usa sistemas de operação gráficos. O Sun One Studio permite, igualmente, a criação de «Java Beans» e «Servlets», proporcionando todas as ferramentas necessárias para a criação e execução dos mesmos. O desenvolvimento das interfaces gráficas foi conseguido, essencialmente, com o recurso ao pacote «Swing», (o sistema gráfico do Java) que disponibiliza um conjunto de funcionalidades que permitem a construção de interfaces intuitivas.

Os sistemas gráficos do Java são baseados em camadas permitindo posicionar os componentes gráficos, (como botões e campos de texto), em formulários. O «Swing» disponibiliza novas camadas de abstracção muito mais flexíveis, de modo a tornar o aspecto de aplicações com interfaces visuais mais apelativas e funcionais.

É possível controlar a largura, comprimento, transparência, cor, tipo de letra de qualquer componente «Swing», tornando mais fácil a construção de interfaces gráficas.

A criação e o refrescamento de componentes usa menos recursos do computador, tornando as aplicações mais «leves» e eficientes.

O «Swing» contém, também, novos componentes com funcionalidades que facilitam a visualização e manipulação de informação em termos visuais, e. g., barras de progresso; «Sliders»; árvores de ícones; paleta de Cores; campos para palavras-chave.

A ferramenta de representação de conhecimento utilizada foi o Protégé-2000 desenvolvido por Stanford Medical Informatics na Stanford University School of Medicine com o suporte de diversas agências dos EUA [215]. O Protégé é um editor de conhecimento representado através de ontologias, tendo sido desenvolvido em código-fonte livre, com a linguagem JAVA, o que permite uma fácil integração com aplicações que necessitem de uma base de conhecimento por extensão. A ferramenta é muito versátil e intuitiva permitindo, essencialmente, a construção de ontologias de domínio e a manutenção da informação.

O sistema de gestão de base de dados utilizado foi o MySQL devido, essencialmente, a ser uma ferramenta de código livre e de utilização sem licenciamento para projectos sem fins lucrativos, aliada ao elevado desempenho em termos de inserções e pesquisas de dados, em especial na versão 4, pela introdução de uma cache de tabelas. O MySQL suporta ANSI SQL e as principais funções de aritmética e grupo, o que permite uma versátil construção de perguntas. O MySQL é, principalmente, direccionado para aplicações com reduzido número de utilizadores em simultâneo, cenário no qual este servidor está a ser usado actualmente neste projecto. As versões actuais suportam, entre outras: «outer joins»; tabelas temporárias; campos de tamanho variável e fixo. Este SGBD, permite acessos ODBC, e tem sido utilizado como base de dados com elevada quantidade de informação (existem casos de bases de dados com 50 milhões de registos ou 60 mil tabelas). O elevado desempenho está directamente relacionado com a inexistência de mecanismos de controlo de integridade referencial entre tabelas (deixados à responsabilidade utilizador).

A utilização do MySQL como suporte ao armazenamento de dados provou a sua adequabilidade, tendo ultrapassado com sucesso a elevada quantidade de informação armazenada, e a necessidade de acessos expeditos, um dos requisitos mais determinantes na implementação.

A plataforma de desenvolvimento de agentes utilizada foi o JADE37 (Java Agent Development Framework), o que se deveu principalmente: i) a simplificar a implementação de sistemas de multiagentes pela disponibilização de uma camada aplicacional intermédia; ii) respeitar as especificações impostas pela FIPA; e iii) pelo conjunto de ferramentas de suporte ao desenvolvimento e correcção de erros [216]. A plataforma oferece ao programador:

• conformidade com as especificações FIPA conseguida pelo seguimento das normas impostas pela FIPA, incluindo a existência de agentes-base, facilitadores distribuídos, implementação do protocolo IIOP de comunicação com outras plataformas, serviço de nomes e diversas bibliotecas FIPA;

• um sistema de mensagens com um conjunto alargado de mecanismos de envio, transporte e recepção de mensagens ACL, optimizados ao meio e à localização dos agentes intervenientes;

• uma plataforma distribuída em múltiplos servidores, pela utilização dos mecanismos de processos e pelas máquinas virtuais de JAVA, o que permite execução de tarefas paralelas, em processos, no mesmo servidor ou em servidores distintos;

• capacidades pré-definidas para os Agentes, fornecendo um modelo conceptual genérico de Agente que permite ao programador o enfoque da sua atenção no desenvolvimento do comportamento específico, tendo por base o conjunto de funcionalidades pré-definidas, e sendo possível a implementação de soluções de filosofia reactivas ou BDI;

• uma interface de gestão e correcção de erros que disponibiliza uma interface intuitiva para a gestão da plataforma, monitorização dos agentes e correcção de erros o que acelera o processo de desenvolvimento dos sistemas de multiagentes. Estas características não comprometeram o desempenho da plataforma, essencialmente devido à adopção de uma filosofia de «utilizador-pagador» presente no desenvolvimento, com o objectivo de manter os custos de «overhead», usualmente associados a este tipo de arquitectura, a níveis muito baixos. Esta preocupação está presente nas soluções adoptadas, e a sua existência não penaliza o desempenho global da plataforma de Agentes. Alguns exemplos de opções tomadas, descritos em [217], são:

• os diversos meios de comunicação possíveis, implementados com protocolos de comunicação alternativos, para transportar as mensagens ACL o que assegura que somente o meio de comunicação seleccionado apresenta custos de «overhead»;

• o escalonamento cooperativo para os diversos comportamentos dos agentes, em detrimento da utilização de processos independentes. Esta solução reduz drasticamente os custos de mudança de contexto e de escalonamento (os métodos de sincronização são por vezes cem vezes mais lentos, devido aos custos associados à política de gestão de «locks» [218]). Esta opção é tanto mais relevante, quanto o facto da utilização de diversos processos, para cada comportamento, no caso específico dos agentes, não contribuir para uma solução mais interessante, tendo em conta que o espaço de memória dos agentes é usualmente comum a todos os comportamentos;

• a reutilização de recursos em diversos contextos, ao contrário da sua destruição e criação, reduzindo o esforço de gestão de memória dinâmica. (É necessário manter presente que uma chamada à função «new» desencadeia em média, cerca de 150 evocações de métodos [218]).

A utilização do JADE revelou-se interessante tendo em conta que a arquitectura proposta, o sistema de comunicações e o modelo de execução dos agentes é extremamente flexível, fácil de utilizar e assegura, de imediato, a conformidade com as especificações FIPA. A flexibilidade do JADE advém, em grande medida, pela conformidade com as especificações FIPA que determinam que somente os comportamentos externos aos Agentes podem ser definidos, pelo que não existem restrições ao desenvolvimento.

No anexo A.4 é apresentada a arquitectura da plataforma de Agentes, os mecanismos de comunicação, os modelos de execução dos agentes e algumas ferramentas de gestão.