Hyper/JTM: Multi-Dimensional Separation of Concerns for JavaTM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares Multi-Dimensional Separation of Concerns Separação de Preocupações (objetivos, propósitos, conceitos) referência para organizar e decompor software diferentes desenvolvedores com papeis diferentes tem preocupações diferentes diferentes preocupações em diferentes fases do desenvolvimento de software Exemplos A preocupação que prevalece na orientação a objetos é a classe Nas linguagens funcionais é a função “Aspectos” como persistência ou distribuição Multi-Dimensional Separation of Concerns Decomposição por classe “aspectos” funcionalidade uma combinação destas ao mesmo tempo sobreposição de preocupações Multi-Dimensional Separation of Concerns Separação, modularização, e integração flexíveis e incrementais de artefatos de software baseados em um número qualquer de preocupações (simultaneamente) O desenvolvedor pode usar mais de uma dimensão de preocupações garantir o encapsulamento, procurando limitar o impacto com mudanças entre as preocupações Objetivos Mudanças aditivas e não invasivas Melhorar a compreensão e diminuir a complexidade Adaptabilidade, customização e reuso de componentes Integração simplificada de componentes Software mais rápido, mais seguro, mais barato e melhor Exemplo Um sistema que suporta a especificação de expressões avaliar dar a representação textual checar a sintaxe e a semântica Evolução no sistema Expressões podem ser opcionalmente persistentes Suporte a checagem de estilo múltiplos estilos Combinação de checagens Problemas na evolução Ex.: Persistência adicionar os métodos “save” e “retrieve” adicionar código extra nos métodos de acesso “get” e “set” mudanças “invasivas” código de negócio misturado com código de persistência as checagens devem persistir o estado? Quando? Uma solução? Herança grande aumento no número de classe mudanças “invasivas” nos clientes que criam instâncias da classe que fora herdada Problemas Alto impacto das mudanças invasivas herança e padrões de projeto requerem preplanejamento Reuso limitado mistura de código com diferentes propósitos Definindo preocupações para o exemplo de expressões Definir a preocupação dominante classes Definir demais preocupações construção (kernel) avaliação checagem sintática checagem semântica apresentação Definindo preocupações Descrever conjuntos de módulos que encapsulam uma determinada preocupação cada módulo é organizado (decomposto) baseado na preocupação dominante Hyperslice Kernel Avaliação Apresentação Checagem Sintática Checagem Semântica Compondo os módulos Compor hyperslices produzindo artefatos completos e consistentes Hypermodules conjunto de hyperslices regras de composição Regras Hypermodule opcional Compondo os módulos Regra: “Classes com mesmo nome devem ser unidas (merge)” Espaço de preocupação (concern space) Conjunto das unidades que fazem parte das preocupações do software Organiza as unidades separando as preocupações e provê meios para utilizar as preocupações como base para a modularização durante o desenvolvimento e a evolução Espaço de preocupação (concern space) Em linguagens orientadas a objetos comuns todas as preocupação do concern space são relacionadas a classe Hyperspace É um concern space que implementa a separação multi-dimensional de preocupações Preocupações são agrupadas em dimensões, que são preocupações disjuntas (sem unidades em comum) Hyperspace Possui um conjunto de hypermodules, que são módulos baseados em preocupações Cada hypermodule especifica um conjunto de hyperslices (coleções de unidades especificadas em termos das preocupações) e de regras de composição que especificam como os hyperslices devem ser integrados Hyper/J Ferramenta que implementa a separação de preocupações multidimensional para Java Atua nos arquivos .class (Java padrão) Pode ser usado durante o ciclo de vida do software desenvolvimento inicial, evolução, extensão ou integração Hyper/J “O uso da ferramenta durante o desenvolvimento inicial pode levar a níveis de reúso e extensibilidade, modularidade e manutenibilidade muito difíceis ou impossíveis de serem alcançados com técnicas comuns de orientação a objetos” hypermodule DemoSEE hyperslices: Feature.Kernel, Feature.Check, Feature.Display, Feature.Eval, Feature.StyleChecker, Feature.Logging; relationships: mergeByName; equate operation Feature.Kernel.process, Feature.Check.check_process, Feature.Display.display_process, Feature.Eval.eval_process; bracket "{~_,~<}*" with ( before Feature.Logging.LoggedClass._beforeInvoke ($ClassName, $OperationName ), after Feature.Logging.LoggedClass._afterInvoke ($ClassName, $OperationName ), "*" ); set summary function for action DemoSEE.BinaryOperator.check to action DemoSEE.Expression.summarizeCheck; end hypermodule; hyperspace DemoHyperspace composable class demo.ObjectDimension.*; composable class demo.StyleChecker.*; composable class demo.Observer.*; Multi-Dimensional Separation of Concerns “A técnica parece permitir alcançar níveis máximos de reuso e extensibilidade” “Multi-dimensional separation of concerns is more general, and its goals are more ambitious, than these approaches” Referências Hyper/J: multi-dimensional separation of concerns for Java; Harold Ossher and Peri Tarr; Proceedings of the 22nd international conference on on Software engineering, 2000, Pages 734 - 737 www.cin.ufpe.br/~scbs/gente/hyperj/HyperJ.ps N Degrees of Separation:Multi-Dimensional Separation of Concerns. P. Tarr, H. Ossher, W. Harrison and S.M. Sutton, Jr. Proceedings of the International Conference on Software Engineering (ICSE'99), May, 1999. www.acm.org/pubs/citations/proceedings/soft/302405/p107-tarr/ Referências www.alphaworks.ibm.com/tech/hyperj www.research.ibm.com/hyperspace/MDSOC.htm www.research.ibm.com/hyperspace/HyperJ/HyperJ.htm www.research.ibm.com/hyperspace/ www.alphaworks.ibm.com/reg/hyperj.nsf/evals/resultswww apps.alphaworks.ibm.com/technologies/hyperj/hyperj.zip