62

Projeto Orientado a Objetos - facom.ufu.brbacala/ESOF/04b - Projeto da Camada de Domínio... · Diagramas de Colaboração (Comunicação na UML 2) permitem realizar a modelagem dinâmica

  • Upload
    vandat

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

Projeto Orientado a Objetos Conjunto de atividades que têm como objetivo a

criação de um modelo orientado a objetos de um sistema de software de acordo com os requisitos especificados

Estratégia geral

Projetistas pensam em termos de:

“Coisas” ou objetos (“substantivos”), e depois…

operações ou funções (“verbos”)

2012 2

Paradigma de Orientação a Objetos (OO)

decomposição orientada a objetos

modularização

objetos

classes

encapsulamento de dados e procedimentos

2000 1995 1990 1985 1970 1965 1975 1960 1980 2005

Eiffel Simula 67 Smalltalk Java C++ CLOS

3

Orientação a Objetos Modelo de Objetos

Princípios [Booch]

Abstração

Encapsulamento

Hierarquia

Modularidade

OCP, ISP, ...

Arcabouço conceitual objetos, classes

herança, agregação

troca de mensagens

polimorfismo...

Requisitos básicos [Cardelli & Wegner]

objetos são abstrações de dados

objetos possuem uma classe associada

classes podem herdar propriedades de superclasses

2012 4

Modelo de Objetos Objetos são abstrações de entidades do mundo

real ou do sistema

Objetos encapsulam informação sobre seu estado e representação

A funcionalidade do sistema é expressa em termos dos serviços de objetos

Objetos se comunicam através de mensagens

Objetos podem ser distribuídos e podem executar sequencialmente ou em paralelo

2012 5

Classes de objetos Classes são templates para criação de

objetos.

Objetos são criados de acordo com a definição da classe

Classes podem herdar atributos e serviços de outras classes

2012 6

Herança Classes podem herdar

atributos e serviços de outras classes

Employee

Programmer

projectprogLanguage

Manager

ProjectManager

budgetsControlled

dateAppointed

projects

Dept.Manager

StrategicManager

dept responsibilities

2012 7

Generalização e herança Classes podem ser organizadas em hierarquia(s)

uma classe (superclasse) é uma generalização de uma ou mais classes (subclasses)

Uma subclasse pode herdar atributos e operações de superclasse(s) e pode:

Adicionar novos atributos e operações

Refinar operações herdadas

Redefinir operações herdadas

2012 8

Herança e Projeto OO Há visões diferentes se a herança é fundamental ao

projeto OO

Visão 1. Identificar a hierarquia de herança é parte fundamental do OOD. A herança é um conceito útil para implementação que permite reutilizar definições de atributos e operações

Visão 2. A herança introduz complexidade, o que não é desejável, especialmente em sistemas críticos. Identificar uma hierarquia de herança durante o projeto impõe restrições desnecessárias à implementação

2012 9

Associações Objetos e classes participam em relações com outros

objetos e classes

Associações são gerais, mas indicam que um atributo de um objeto é um objeto associado ou que um método depende de um objeto associado

EmployeeDepartment

Manager

is-member-of

is-managed-by

manages

2012 10

Comunicação entre objetos Conceitualmente, objetos trocam mensagens para se

comunicar

v = circularBuffer.get () ;

thermostat.setTemp (20) ;

2012 11

Interação entre Objetos Objetos interagem e se comunicam através do envio

de mensagens

state o3

o3:C3

state o4

o4: C4

state o1

o1: C1

state o6

o6: C1

state o5

o5:C5

state o2

o2: C3

ops1() ops3 () ops4 ()

ops3 () ops1 () ops5 ()

2012 12

Polimorfismo Mecanismo de uma LOO que permite algoritmos de

alto nível sejam usados repetidas vezes com abstrações de nível mais baixo

LOO: linguagens orientadas a objetos

consequência natural da relação de herança.

2012 13

Orientação a Objetos Benefícios

Expressividade +

Legibilidade +

Suporte à evolução +

Potencial de reutilização +

2012 14

Herança versus Composição Técnicas de reuso e evolução

Herança (entre classes)

white-box reuse

Composição (de objetos)

black-box reuse

2012 15

Diagramas de Colaboração/Comunicação

Diagrama de Classes de Projeto (DCP)

Projeto da Camada de Domínio Diagramas de Colaboração (Comunicação na UML 2)

permitem realizar a modelagem dinâmica do sistema, ou seja, como os objetos que fazem parte da arquitetura trocam mensagens para realizar suas responsabilidades.

Em relação ao Modelo Conceitual, o DCP apresenta:

Adição dos métodos

Adição da direção das associações

Possível detalhamento dos atributos e associações

Possível alteração na estrutura das classes e associações

Possível criação de atributos privados ou protegidos

Classe VideoLocadora fitas : Conjunto; clienteCorrente : Cliente; Método emprestaFita(fCodigo: String) fita : Fita; emprestimoCorrente : Emprestimo; item : ItemDeEmprestimo; fita := fitas.get(fCodigo); emprestimoCorrente := clienteCorrente.getEmprestimoCorrente(); item := ItemDeEmprestimo.new(); item.associaFita(fita); emprestimoCorrente.associaItem(item); Fim Método; Fim Classe.

Pseudocódigo concentrador

Diagrama de Colaboração

Código com Responsabilidades Distribuídas Classe VideoLocadora

fitas : Conjunto ; clienteCorrente : Cliente; Metodo emprestaFita(fCodigo : String); fita : Fita; fita := fitas.get(fCodigo); clienteCorrente.empresta(fita) Fim Metodo; Fim Classe. Classe Cliente emprestimoCorrente : Emprestimo; Metodo empresta(fita : Fita); emprestimoCorrente.adiciona(fita); Fim Metodo; Fim Classe.

Classe Emprestimo itens : Conjunto; Metodo adiciona(fita : Fita); item : ItemDeEmprestimo; item := ItemDeEmprestimo.new(); self.associaItem(item); item.associaFita(fita); Fim Metodo;

Fim Classe.

Visibilidade

Por associação. Quando as classes de dois objetos estão associadas no DCP

Por parâmetro. Quando um objeto recebe outro como parâmetro em um método

Localmente declarada. Quando um objeto recebe outro como retorno de um método

Global. Quando um objeto é declarado globalmente

Visibilidade por Associação (para 1)

Visibilidade por Associação (para muitos)

Visibilidade por Parâmetro

Visibilidade Localmente Declarada

Visibilidade por Associação (qualificada – sem qualificador)

Visibilidade por Associação (qualificada – com qualificador)

Visibilidade por Associação (0..1)

Estabelecida por Pré-Condição de Contrato existe um Pagamento associado à Venda

Visibilidade de Classes de Associação

Do ponto de vista da classe de associação:

Com visibilidade para uma instância associada

Influência das Pré-Condições de Contrato nos Diagramas

Garantia de Parâmetros (associação não

qualificada)

Garantia de Parâmetros (associação qualificada)

Influência das Pré-Condições de Contrato nos Diagramas

Realização das Pós-Condições dos Contratos nos Diagramas Mensagens básicas. São aquelas que efetivamente

realizam aquilo que a pós-condição requer

Mensagens delegadas. Passam adiante a responsabilidade de realizar uma operação básica quando o objeto que detém o controle da execução não possui visibilidade direta para o objeto que deve executar a operação

Mensagens Básicas

Criação de instância

Destruição de instância

Criação de associação

Destruição de associação

Consulta de associação

Alteração de valor de atributo

Consulta de valor de atributo

Criação de Instância

Cria e imediatamente associa

Destruição de Instância

Criação de Associação

Método implementado na origem da associação

Criação de Associação

Associação bidirecional

Destruição de Associação

Implementação na origem

Modificação de Valor de Atributo

Delegação

Faculta o acoplamento fraco

Estilo de projeto sem delegação

Estilo de projeto com delegação

Pós-condição condicionada

Contribuições dos Diagramas de Colaboração ao DCP Métodos delegados. Sempre que um objeto receber

uma mensagem delegada, a classe correspondente ao objeto deve registrar a implementação deste método

Sentido das associações. O sentido das associações no DCP corresponderá ao sentido do envio das mensagens sobre as ligações de visibilidade baseadas em associações

Design Patterns Básicos

Especialista

Criador

Acoplamento Fraco

Coesão Alta

Especialista Quem implementa a consulta “valorTotalDaVenda”?

Pseudocódigo que não atende ao padrão Especialista

Classe Supermercado clienteCorrente : Cliente; consulta valorTotalDaVendaCorrente(); venda : Venda; item : ItemDeVenda; total : Moeda = 0,00; venda := clienteCorrente.getVendaCorrente(); repita para cada item em venda.getItensDeVenda(): total := total + (item.getQuantidade() * item.getProduto().getPreco()); fim repita retorna total fim consulta

Fim Classe.

Pseudocódigo que atende ao padrão especialista

Classe Supermercado clienteCorrente : Cliente; consulta valorTotalDaVendaCorrente(); retorna clienteCorrente.getValorTotalDaVendaCorrente(); fim consulta Fim Classe. Classe Cliente vendaCorrente : Venda; consulta getValorTotalDaVendaCorrente(); retorna vendaCorrente.getValorTotal(); fim consulta Fim Classe Classe Venda itens : Conjunto de ItemDeVenda; total : Moeda = 0,00; consulta getValorTotal()

repita para cada item em itens: total := total + item.getSubtotal();

fim repita retorna total; fim consulta

Fim Classe Classe ItemDeVenda produto : Produto; consulta getSubtotal() retorna getQuantidade() * produto.getPreco(); fim consulta

Fim Classe

Criador – quem deve criar uma instância? Em primeiro lugar, verifique se o objeto é parte de uma agregação ou

composição. Se for, o criador será o objeto agregador

Caso contrário, verifique se alguma classe tem associação de 1 para * ou de 1 para 0..1 para a classe do objeto a ser criado. Se existir uma classe nessa situação e ela estiver em algum caminho possível na direção do controlador, então ela poderá ser a criadora

Se houver empate, decida pela classe que parecer mais fortemente associada à classe a ser criada. Esse critério é subjetivo, mas é exatamente onde entra o julgamento o projetista sobre qual a opção mais adequada para fazer um caminho de delegação até a operação básica de criação de um objeto

Quem cria quem?

Acoplamento fraco

Evite a criação de novos acoplamentos

Acoplamento definido pelo modelo conceitual e mantido pelo pseudocódigo que atende ao padrão especialista (anterior)

Supermercado

Cliente

Venda ItemDeVenda

Produto

Acoplamento definido pelo pseudocódigo que não atende ao padrão especialista (anterior)

Supermercado

Cliente

Venda ItemDeVenda

Produto

Coesão alta

Verifique se o valor de algum atributo determina a possibilidade de outro atributo ser nulo ou não

Verifique se existem subgrupos de atributos que estejam fortemente correlacionados

Verifique se existem grupos de atributos que repetirão sempre os mesmos valores quando ocorrerem em diferentes instâncias

Exemplo de classe com baixa coesão

Solução com alta coesão