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
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
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
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
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
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
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