Universidade Federal de Santa Catarina

Centro Tecnológico – CTC

Curso de Bacharelado em Sistemas de Informação

Disciplina – INE5611 – Desenvolvimento de Sistemas Orientados a Objetos II

Professor – Antônio Augusto Frölich

Alunos – João Carlos Vicente

                Jaison Werlich

                Kelton Rodrigo Zacchi

 

 

PROJETO BASEADO EM COLABORAÇÕES

 

1. Introdução

 

O conceito de colaborações se confunde com o de Programação Orientada a Objetos, que, por sua vez, consiste em abstrair entidades do mundo real e seus relacionamentos par se construir software mais facilmente do que a antiga forma procedural de programação. De uma maneira geral, em OO, os objetos se relacionam de forma a colaborarem uns com os outros para formar a solução de um problema. Aí está o conceito de colaboração, ou seja, o relacionamento entre os objetos que produz algum tipo de resultado.

 

Por muitos anos se discutiram (e ainda se discutem) os problemas da abordagem orientada a objetos no que tange às colaborações. Nesse contexto, foi desenvolvido o conceito de “Projeto Baseado em Colaborações”.

 

2. Projeto Baseado em Colaborações

 

Este termo consiste em uma metodologia que decompõe aplicações orientadas a objetos em um conjunto de classes e um conjunto de colaborações. Uma colaboração expressa aspectos do comportamento da aplicação que envolvem diversos participantes (papéis). Uma classe desta aplicação pode desempenhar papéis de diversas aplicações, ou desempenhar vários papéis dentro de uma colaboração. Isto resulta em projetos mais compreensivos e reusáveis, que facilitarão a compreensão do comportamento geral do sistema.

 

Mas há o problema que as atuais linguagens orientadas a objetos não dão suporte adequado a este conceito. O que resulta é que o que se ganha de compreensibilidade e reusabilidade no projeto acaba por se perder a partir do momento que o projeto é mapeado em código.

 

3. Adaptative Plug-and-Play Components (APPC’s)

 

Para resolver este problema, é idealizado um componente que abstraia e implemente uma colaboração, respeitando ao conceito do Projeto Baseado em Colaborações. Este componente é chamado “Adaptative Plug-and-Play Components” (APPC’s).

 

São componentes que tratam a colaboração como uma unidade de reuso, de maior granularidade do que as classes, e que podem ser combinados/refinados para formar novos componentes (tal como herança), mantendo o seu acoplamento baixo, o que possibilita o seu reuso.

 

Este conceito tem como base concreta a tecnologia de Programação Adaptativa (“Adaptive Programming”), que especifica uma linguagem formal para a construção de aplicações, usando grafos de trajetos de estratégia (“traversal strategy graphs”).

 

4. Resumo do Funcionamento de um APPC

 

Um APPC contém a seguinte estrutura:

 

·        Interface Class Graph – ICG: declara os participantes (quais os papéis existentes) da colaboração e seus relacionamentos (com um grafo de trajeto de estratégia, mas ao invés de classes reais, contém apenas variáveis);

·        Behavioral Interface: parte do ICG que define assinaturas dos métodos que os participantes da colaboração deverão prover. Na verdade, também estas assinaturas são variáveis;

·        Behavior Definition: parte do APPC que conterá o que a colaboração tem que fazer, ou seja, a interação entre os diversos papéis que o compõem, em uma espécie de algoritmo, onde os métodos da Behavioral Interface serão invocados para produzir o resultado. Podem conter mais de um método, e contém um método especial (“main-entry”), que é o ponto de entrada, por onde tudo começa.

 

Abaixo, vemos um exemplo de um APPC codificado:


 

 

 

 

 


Quando esta definição estiver pronta, basta “plugar” as classes com os seus respectivos métodos nas variáveis definidas. Esta mistura é processada por um gerador automático de código.

 

5. Conclusão

 

O Projeto Baseado em Colaborações é uma boa forma de se ver sistemas, porque dá uma idéia do sistema como várias colaborações entre os objetos que o formam. Entre outras vantagens, podemos destacar:

 

·        projetos mais compreensíveis;

·        projetos de mais fácil reuso;

·        facilidade de se perceber o fluxo de controle do projeto.

 

Uma boa maneira de se mapear o projeto em código é através dos APPC’s, brevemente descritos acima, visto que o mapeamento direto em alguma linguagem de programação orientada a objetos faria com que estas características se perdessem.

 

6. Referências Bibliográficas

 

 

K. Beck e W. Cunningham. A Laboratory for Teaching Object-Oriented Thinking. In Proceedings of OOPSLA ’89,ACM SIGPLAN Notices, Vol. 24, No. 10, pp. 1-6, 1989.

 

M. Mezini e K. Lieberherr. Adaptive Plug-and-Play Components for Evolutinary Software Development. In Proceedings of OOPSLA ’98, ACM Notices, 10/98, pp. 97-116, 1998.