33
Naked Objects Richard Pawson e Robert Mathews Apresentação: Marcos E. B. Broinizi Orientador: João E. Ferreira

Naked Objects

Embed Size (px)

Citation preview

Page 1: Naked Objects

Naked Objects

Richard Pawson e Robert Mathews

Apresentação: Marcos E. B. Broinizi

Orientador: João E. Ferreira

Page 2: Naked Objects

2

“Behavioural completeness”

As pessoas acham que estão usando a OO para projetar e desenvolver sistemas; mas não estão.

Elas ignoram um princípio fundamental da OO, “behavioural completeness”: um objeto deve modelar, por completo, o comportamento

daquilo que ele representa. “Behavioural completeness” é essencial porque é a

chave para obter um dos principais benefícios da orientação a objetos: a habilidade de lidar com as mudanças inesperadas nos

requisitos.

Page 3: Naked Objects

3

Encapsulamento: significado

O primeiro tem a ver com existência fechada, como uma cápsula medicinal. Este é o significado que muitas pessoas usam no contexto de orientação a objetos: um objeto é fechado por uma interface de mensagem, com uma implementação interna escondida.

O segundo significado de encapsulamento é que alguma coisa exemplifica as características essenciais de outra coisa, como em ‘este documento encapsula nossa estratégia de marketing’.

Page 4: Naked Objects

4

Separação dos Dados e Processos

As pessoas projetam sistemas que separam o processo de seus dados, embora revestidos com linguagens e tecnologias OO.

A separação dos processos de seus dados pode estar relacionada principalmente a inércia: Isto é, as pessoas aprenderam a

projetar sistemas dessa forma e têm dificuldades de pensar de outra maneira.

Objeto Dado

Objeto Processo

Objeto

Page 5: Naked Objects

5

Separação dos Dados e Processos A inércia individual é reforçada por práticas organizacionais

consagradas que forçam a separação dos processos de seus dados, mesmo que o projetista de software queira adotar uma abordagem mais pura de OO: Orientação a processos de negócio. Interfaces de usuário otimizadas a tarefas. Métodos orientados a use-cases. O padrão Model-View-Controller. Desenvolvimento de software baseado em componentes.

Essas cinco forças são consideradas melhores práticas da OO.

Não se pode simplesmente descartá-las, pois: São práticas conscientes que claramente geram benefícios. Foram projetados para reduzir riscos conhecidos no processo

de desenvolvimento. Porém, essas práticas provocam um efeito colateral:

desencorajam o projeto de objetos comportamentalmente completos.

Page 6: Naked Objects

6

Orientação a processos de negócio

A orientação a processos envolve duas idéias: A primeira é a de focar, organizar e alcançar os resultados

definidos externamente (tais como preencher um pedido) ao invés de atividades puramente definidas internamente. Isto é uma contribuição útil.

A segunda idéia é a de que processos podem e devem ser reduzidos a um processo determinista que transforma entradas em saídas.

O problema dessa abordagem é que muitas coisas que o negócio faz, simplesmente não se encaixam no modelo de processos: existem várias atividades onde não se pode identificar

entradas e saídas discretas, muito menos os passos seqüenciais.

Page 7: Naked Objects

7

Orientação a processos de negócio

Stabell e Fjeldstadt argumentam que existem três modelos fundamentais de criação de valores de negócio: a Cadeia de Valor (esquerda), a Loja de Valor (centro) e a Rede de Valor (direita).

O modelo da loja de valor, em que recursos são organizados para resolver problemas individuais e que representa uma proporção crescente do negócio, normalmente sofrem pelo apoio pobre de TI.

Page 8: Naked Objects

8

Interfaces de usuário otimizadas a tarefas Muitas interfaces de usuário são projetadas para

implementar um conjunto finito de tarefas programadas. Isso está implícito no método de projeto de interfaces,

como também fica explícito no projeto resultante: um menu de tarefas, o qual permite ao usuário

escolher a tarefa desejada selecionando as sub-opções.

O estilo de interface de usuário é conveniente para desenvolvedores de sistemas, pois é fácil de realizar o mapeamento para um conjunto de transações definidas, as quais uma após a outra manipulam suas estruturas de dados.

Page 9: Naked Objects

9

The Incredible Machine

É apresentado ao usuário um problema a ser resolvido – neste caso um balão de prata que tem que ser estourado usando algumas das peças disponíveis (objetos), sendo que cada um pode ser inspecionado para revelar suas propriedades físicas e seus comportamentos

Page 10: Naked Objects

10

Métodos orientados a Use-Cases

O conceito de use-case foi definido por Ivar Jacobson (1995) como ‘uma seqüência de transações num sistema cuja tarefa produz um valor mensurável para um particular ator do sistema’.

Na abordagem de desenvolvimento de sistemas orientado a use-case, os use-cases que capturam os requisitos de um sistema são descritos e, então, procura-se identificar objetos comuns entre eles.

Os métodos orientados a objetos mais populares são orientados a use-cases.

Page 11: Naked Objects

11

Métodos orientados a Use-Cases

O caso contra use-cases foi bem resumido por Don Firesmith (1996): Use cases não são orientados a objetos. Cada use case captura uma grande abstração

funcional que pode causar inúmeros problemas associados à decomposição funcional que a tecnologia de objetos supostamente deveria evitar.

Uma vez que os use cases são criados antes que os objetos e classes tenham sido identificados, use cases ignoram o encapsulamento de atributos e operações em objetos.

Page 12: Naked Objects

12

Métodos orientados a Use-Cases

Os autores sugerem que use-cases são muito poderosos quando: São descritos em termos de operações sobre objetos

que já tenham sido identificados e especificados, e são usados para testar esse modelo de objetos.

Por outro lado, use-cases são muito perigosos quando: São descritos antes do modelo de objetos e usados

para identificar objetos e suas responsabilidades compartilhadas – que é precisamente o que a abordagem orientada a use-cases defende.

Page 13: Naked Objects

13

O padrão Model-View-Controller Um padrão arquitetural comum que

explicitamente separa três papéis: os objetos de negócio fundamentais que

correspondem às entidades de negócio, Modelo, objetos que fornecem a visão do modelo ao usuário,

Visão, e objetos que controlam a interação entre o usuário e

o modelo, Controlador.

O resultado final é que o conhecimento específico de negócio é espalhado através dos domínios do Modelo, Visão e Controlador.

Page 14: Naked Objects

14

Desenvolvimento de sistemas baseados em componentes

O desenvolvimento baseado em componentes está principalmente interessado em fornecer uma abordagem plug-and-play para o desenvolvimento de sistemas.

A modelagem orientada a objetos não deveria estar preocupada com o plug-and-play. Ela deveria estar preocupada em adequar a estrutura do software à estrutura do domínio de negócio do mundo real, seja ocasionalmente em resposta às mudanças nos requisitos de negócio, ou dinamicamente em resposta a um problema específico.

Page 15: Naked Objects

15

Desenvolvimento de sistemas baseados em componentes

Mas a redução da granularidade dos componentes de negócio não tem no final aparência de objetos – ao menos no sentido de entidades instanciáveis comportamentalmente completas – mas a aparência de sub-rotinas – blocos de código que podem transformar uma entrada numa saída.

A visão dos autores é que é melhor deixar esses dois conceitos separados: Aplique o conceito de montagem de componentes na sua

infra-estrutura técnica e continue com a modelagem pura de objetos na camada de negócio.

Page 16: Naked Objects

16

Alternativas

Naked Objects

Page 17: Naked Objects

17

Orientação a processos de negócio

Ao invés de apenas imaginar o papel dos sistemas de negócio como um meio de executar um processo determinístico, que transforma informações de entrada para informações de saída através de uma seqüência de passos que adicionam valor, precisamos encontrar metáforas alternativas. Uma dessas metáforas é a da loja de valores, onde o

usuário constrói uma solução para um problema específico. (é muito fácil adicionar roteiros/ scripts otimizados para um modelo de cadeia de valores).

Page 18: Naked Objects

18

Interfaces de usuário otimizadas a tarefas Ao invés de perseguir a eficiência ótima na

execução de cada um dos conjuntos finitos de tarefas roteirizadas, projete uma forma de interação com o usuário que maximize a efetividade geral do usuário em satisfazer sua gama de responsabilidades. Isso significa dar aos usuários maior controle, por

exemplo na ordem em que as capacidades são chamadas a fim de alcançar uma meta. Devemos também projetar sistemas que permitam aos usuários tornarem-se mais experientes conforme eles aprendem, ao invés de restringir todos para o menor denominador comum.

Page 19: Naked Objects

19

Métodos orientados a use-cases

Ao invés de capturar os requisitos de um sistema como um conjunto de use-cases e então usá-los para identificar os objetos compartilhados e suas responsabilidades, procure identificar os objetos e suas responsabilidades diretamente, em conversas com usuários ou outras formas. Precisamos de algum meio de capturar o modelo de

objetos emergente de maneira que os usuários possam, de forma concreta, se identificar com esse meio e obter benefícios.

Page 20: Naked Objects

20

Model-View-Controller Como no caso de outras forças, qualquer solução

alternativa deve evitar cair no problema para o qual o MVC foi projetado para evitar: Ela deve facilitar a portabilidade de uma aplicação entre

múltiplas plataformas técnicas, até entre múltiplos estilos de interação, sem necessitar que o modelo de negócio seja editado.

Ao mesmo tempo, ela deve acomodar a necessidade de representar múltiplas visões do modelo sob a mesma plataforma, onde genuinamente exista tal necessidade.

Forneça um mecanismo genérico de visualização, incorporando os papéis dos objetos de Visão e Controlador. Tudo que o desenvolvedor precisa é escrever os objetos do Modelo de Negócio.

Page 21: Naked Objects

21

Desenvolvimento de software baseado em componentes

Ao invés de permitir que a arquitetura de nossos sistemas seja dominada pelas idéias de poder comprar peça por peça da arquitetura de diferentes fornecedores, reconheça que a verdadeira vida do sistema precisa do modelo de objetos de negócio homogêneo que não pode ser comprado, tem que ser projetado internamente para refletir as verdadeiras necessidades de negócio

Page 22: Naked Objects

22

Práticas conceituadas no projeto de sistemas de negócio contemporâneos dividem uma aplicação em quatro camadas principais

Apresentação

Aplicação, Processo ou Controlador de Use-Case

Modelo de objetos de domínio

Persistência

Page 23: Naked Objects

23

Apresentação

Aplicação, Processo ou Controlador de Use-Case

Modelo de objetos de domínio

Persistência

O Padrão Naked Objects elimina a camada controlador encapsulando todas as funcionalidades de negócio nos objetos entidade

Page 24: Naked Objects

24

E tem uma camada de apresentação genérica que automaticamente reflete o modelo de objetos de domínio como uma interface de usuário orientada a objetos

Apresentação

Aplicação, Processo ou Controlador de Use-Case

Modelo de objetos dedomínio

Persistência

Page 25: Naked Objects

25

Para um sistema standalone, ou para prototipação, é também possível autogerar a persistência a partir do mesmo modelo de domínio

Presentation

Aplicação, Processo ou Controlador de Use-Case

Modelo de objetos dedomínio

Persistência

Page 26: Naked Objects

26

Framework

Naked Objects

Page 27: Naked Objects

27

Framework Naked Objects

O framework Naked Objects é uma pacote de software open-source, escrito em Java, que facilita a construção completa de aplicações de negócio a partir de naked objects (objetos comportamentalmente completos).

Um ambiente de execução, que inclui: Um mecanismo de visualização que cria, em tempo real,

uma representação manipulável pelo usuário de qualquer naked object que o usuário precisar acessar.

Um mecanismo de persistência, o qual torna o naked objects persistente via uma classe de persistência específica. O framework já vem com uma classe de persistência que armazena cada naked object como um arquivo XML. Isso é bom para realizar a prototipação rápida, mas não é escalável. Classes de persistência mais sofisticadas devem ser escritas em sistemas reais.

Page 28: Naked Objects

28

Framework Naked Objects

O programador não precisa se preocupar diretamente com os mecanismos de visualização ou de persistência.

Um conjunto de frameworks de teste. O framework de testes unitários é uma simples extensão do popular framework JUnit, tratando as capacidades específicas dos naked objects. Existe um framework separado para testes de aceitação, o qual facilita a confecção dos testes de aceitação antes de escrever as funcionalidades (como defende a Extreme Programming). Como a maioria desses cenários de teste representam tarefas comuns executadas pelos usuários, este framework tem a vantagem adicional de poder gerar a documentação do usuário dessas tarefas diretamente a partir da definição dos testes.

Page 29: Naked Objects

29

Exemplo

Vamos supor que temos a missão de construir uma aplicação que gerencie os papéis existentes em um projeto (Encanador, Pedreiro, Ajudante, etc.), bem como os empregados que exercem esses papéis.

O diagrama de classes em UML é apresentado ao lado:

Empregadonome

Projetonome

criaLíder()

Papelnome

0..*

0..1

0..*

0..1

0..*

0..*

0..*

0..*

Objetos da classe Projeto

referenciam objetos da classe

Papel

Objetos da classe Papel

referenciam objetos da classe

Empregado

Page 30: Naked Objects

30

A abordagem através de objetos comportamentalmente completos Construir sistemas de negócio consiste apenas de definir os

objetos do domínio específico. Todas as ações de usuários consistem em criar ou recuperar

objetos, especificando seus atributos, estabelecendo associações entre eles, ou invocando métodos em um objeto(ou coleção) – em outras palavras através de uma interface com o usuário realmente orientada a objetos.

Associado ao framework encoraja o desenvolvimento de sistemas de negócio realmente orientados a objetos. Fazendo isso de uma maneira negativa, tornando muito difícil para o desenvolvedor separar os dados dos procedimentos; e de uma maneira positiva, tornando a idéia de objetos comportamentalmente completos concreta e rápida para desenvolver sistemas.

Page 31: Naked Objects

31

Benefícios

Aumento na produtividade de desenvolvimento, não é necessário escrever a interface com o usuário.

Aumento na produtividade para manter e evoluir o sistema.

Os sistemas se tornam mais ágeis sendo capazes de melhor acomodar futuras alterações nos requisitos de negócio.

Facilita a identificação dos requisitos de negócio uma vez que os naked objects podem constituir uma linguagem comum entre desenvolvedores e usuários.

Page 32: Naked Objects

32

Questões levantadas

Consegue-se identificar a essência dos objetos de negócio?

Os protótipos assim criados estão muito distantes dos objetos finais do sistema?

Seria possível criar simultaneamente um protótipo de qualidade da base de dados?

As idéias de Naked Objects podem gerar um método para desenvolvimento de software?

Page 33: Naked Objects

33

Referências

www.nakedobjects.org http://www.theserverside.com/articles/

article.tss?l=NakedObjectSeries_1

http://malariadb.ime.usp.br/labd/