31
Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Embed Size (px)

Citation preview

Page 1: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Hyper/JTM: Multi-Dimensional Separation of Concerns for JavaTM

Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan

Por Sérgio Soares

Page 2: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM 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

Page 3: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 4: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Decomposição por classe “aspectos” funcionalidade uma combinação destas ao mesmo

temposobreposição de preocupações

Multi-Dimensional Separation of Concerns

Page 5: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 6: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 7: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Exemplo

Um sistema que suporta a especificação de expressões avaliar dar a representação textual checar a sintaxe e a semântica

Page 8: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares
Page 9: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Evolução no sistema

Expressões podem ser opcionalmente persistentes

Suporte a checagem de estilo múltiplos estilos

Combinação de checagens

Page 10: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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?

Page 11: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 12: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 13: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 14: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 15: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Kernel Apresentação

Avaliação

ChecagemSintática

ChecagemSemântica

Page 16: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Compondo os módulos

Compor hyperslices produzindo artefatos completos e consistentes

Hypermodules conjunto de hyperslices regras de composição

Page 17: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Regras

Hypermodule opcional

Page 18: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

Regra: “Classes com mesmo nome devem ser unidas (merge)”

Compondo os módulos

Page 19: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 20: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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)

Page 21: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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)

Page 22: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 23: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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

Page 24: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

“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

Page 25: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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;

Page 26: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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;

Page 27: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

hyperspace DemoHyperspace composable class demo.ObjectDimension.*; composable class demo.StyleChecker.*; composable class demo.Observer.*;

Page 28: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares
Page 29: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

“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

Page 30: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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/

Page 31: Hyper/J TM : Multi-Dimensional Separation of Concerns for Java TM Peri Tarr, Harold Ossher, Vincent Kruskal, and Matthew Kaplan Por Sérgio Soares

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