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