Upload
internet
View
105
Download
0
Embed Size (px)
Citation preview
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
Decomposição por classe “aspectos” funcionalidade uma combinação destas ao mesmo
temposobreposiçã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
Multi-Dimensional Separation of Concerns
Objetivos
Mudanças aditivas e não invasivasMelhorar a compreensão e diminuir a
complexidadeAdaptabilidade, customização e reuso
de componentesIntegração simplificada de componentesSoftware 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çãoEx.: 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
pre-planejamentoReuso limitado
mistura de código com diferentes propósitos
Definindo preocupaçõespara 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
Descrever conjuntos de módulos que encapsulam uma determinada preocupação cada módulo é organizado
(decomposto) baseado na preocupação dominante
Hyperslice
Definindo preocupações
Kernel Apresentação
Avaliação
ChecagemSintática
ChecagemSemântica
Compondo os módulos
Compor hyperslices produzindo artefatos completos e consistentes
Hypermodules conjunto de hyperslices regras de composição
Regras
Hypermodule opcional
Regra: “Classes com mesmo nome devem ser unidas (merge)”
Compondo os módulos
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
Em linguagens orientadas a objetos comuns todas as preocupação do concern space são relacionadas a classe
Espaço de preocupação (concern space)
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)
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
Hyperspace
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
“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”
Hyper/J
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.*;
“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”
Multi-Dimensional Separation of Concerns
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/
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
Referências