Title: Hyper/JTM: Multi-Dimensional Separation of Concerns for JavaTM
1Hyper/JTM Multi-Dimensional Separation of
Concerns for JavaTM
- Peri Tarr, Harold Ossher, Vincent Kruskal, and
Matthew Kaplan - Por Sérgio Soares
2Multi-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
3Exemplos
- 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
4Multi-Dimensional Separation of Concerns
- Decomposição por
- classe
- aspectos
- funcionalidade
- uma combinação destas ao mesmo tempo
- sobreposição de preocupações
5Multi-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
6Objetivos
- 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
7Exemplo
- Um sistema que suporta a especificação de
expressões - avaliar
- dar a representação textual
- checar a sintaxe e a semântica
8(No Transcript)
9Evolução no sistema
- Expressões podem ser opcionalmente persistentes
- Suporte a checagem de estilo
- múltiplos estilos
- Combinação de checagens
10Problemas 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?
11Uma 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
12Problemas
- Alto impacto das mudanças
- invasivas
- herança e padrões de projeto requerem
pre-planejamento - Reuso limitado
- mistura de código com diferentes propósitos
13Definindo 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
14Definindo preocupações
- Descrever conjuntos de módulos que encapsulam uma
determinada preocupação - cada módulo é organizado (decomposto) baseado na
preocupação dominante - Hyperslice
15Apresentação
Kernel
Checagem Sintática
Checagem Semântica
Avaliação
16Compondo os módulos
- Compor hyperslices produzindo artefatos completos
e consistentes - Hypermodules
- conjunto de hyperslices
- regras de composição
17Regras
Hypermodule opcional
18Compondo os módulos
- Regra Classes com mesmo nome devem ser unidas
(merge)
19Espaç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
20Espaço de preocupação (concern space)
- Em linguagens orientadas a objetos comuns todas
as preocupação do concern space são relacionadas
a classe
21Hyperspace
- É 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)
22Hyperspace
- 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
23Hyper/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
24Hyper/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
25hypermodule 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
26 bracket "_,lt" with ( before
Feature.Logging.LoggedClass._beforeInvoke
(ClassName, OperationName
), after Feature.Logging.LoggedClass._a
fterInvoke
(ClassName, OperationName ), "" )
set summary function for action
DemoSEE.BinaryOperator.check to
action DemoSEE.Expression.summarizeCheck end
hypermodule
27 hyperspace DemoHyperspace composable class
demo.ObjectDimension. composable class
demo.StyleChecker. composable class
demo.Observer.
28(No Transcript)
29Multi-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
30Referê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 SeparationMulti-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/
31Referê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/result
swww - apps.alphaworks.ibm.com/technologies/hyperj/hyperj
.zip