http://www.les.inf.puc-rio.br/opus OPUS Group OpenOrb: implementação de algumas composições de Padrões em CaesarJ Alessandro Gurgel | [email protected] Francisco Dantas | [email protected] Alessandro Garcia | [email protected] LES | DI |PUC-Rio - Brazil Composite e Visitor OO Composite Visitor November 15 2 Composite Visitor CaesarJ Métodos accept do Visitor na estrutura de Componentes. Solução AO Solução CaesarJ November 15 Usa um aspecto com ID para inserir esses métodos na estrutura. Uso de Virtual Classes Representar as estruturas (Composite e Visitor) Implementação pelos métodos accept do Visitor Francisco Dantas et. al @ OPUS Group 3 CompositeVisitor CaesarJ November 15 Francisco Dantas et. al @ OPUS Group 4 Prototype e State OO State Prototype November 15 Francisco Dantas et. al @ OPUS Group 5 Prototype State November 15 Concrete States são também Prototypes. Concrete Bind.rebind() e ConcreteBind.breakBind() fazem referência ao State enquanto que parte do código do ConcreteBind.makeRequest() referencia usa Prototype. Solução AO Dois Aspectos: StateAspect e PrototypeAspect StateAspect usa ID para implementar operações do State e aspectOf em relação à PrototypeAspect para clonar objetos. PrototypeAspect cria interface Prototype implementando método clone() e usa declare parents para fazer com que às classes BindConnected, BindState e BindRunning implemente Prototype Francisco Dantas et. al @ OPUS Group 6 Prototype State CaesarJ State Prototype November 15 Francisco Dantas et. al @ OPUS Group 7 Prototype State CaesarJ November 15 Prototype irá interceptar makeRequest tendo a definição de dois adendos. Não há necessidade de declare precedence. Francisco Dantas et. al @ OPUS Group 8 Abordagem November 15 Transformar a aplicação OpenOrb em uma aplicação CaesarJ pensando nos padrões como features de forma a modularizálos usando mixin composition para integrá-los aos componentes. Francisco Dantas et. al @ OPUS Group 9 Problemas November 15 Alguns padrões não trazem benefícios a aplicação. Em algumas situações há impressão de que foram utilizados só para enfatizar o uso do padrão. Sem reais benefícios. Ex: FactoryMethod e Command. Documentação fraca do OpenOrb e código sem comentários. No artigo AOSD06 é dito que alguns padrões (ex Command) não tiveram bons rendimentos por causa da instância do padrão na aplicação. Utilizando a mesma aplicação não poderemos ter o mesmos tipos de problema mesma na implementação CaesarJ? O desempenho do Padrão não poderá ser prejudicado da mesma forma? Francisco Dantas et. al @ OPUS Group 10 Próximas Atividades Definir um Cronograma Definir quais Padrões serão implementados November 15 FASE 1: padrões pouco entrelaçados FASE 2: seguir as orientações do Nélio Francisco Dantas et. al @ OPUS Group 11