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
Download

Hyper/J: multi-dimensional separation of concerns will be Java