Escolar Documentos
Profissional Documentos
Cultura Documentos
Projeto Detalhado Al
Projeto Detalhado Al
Modelo de decomposição em
Passos de Projeto módulos
Especifica a decomposição de cada sub-sistema
• Projeto Geral ou Preliminar: fase que em módulos
traduz a especificação do sistema em termos • Orientados a funções: os sub-sistemas são
da arquitetura de dados e de módulos decompostos em módulos funcionais que
• Projeto Detalhado: refinamento visando à recebem dados e transformam estes dados em
saída
codificação e especificação dos programas • Orientado a objetos: os sub-sistemas são
decompostos em um conjunto de objetos que se
comunicam para resolver o problema
(ex:diagramas de interação -UML)
Análise e Projeto OO
Análise e Projeto OO
• O que determina uma orientação a objetos é a maneira como
se faz o particionamento do problema (análise) ou da solução • Durante a Análise OO, • Durante o projeto OO,
(projeto) a ênfase está em achar a ênfase está em achar
Sistema de e descrever objetos objetos lógicos de
Biblioteca (ou conceitos) no software que poder ão
A&P Orientados a Objeto
A&P Estruturados domínio do problema ser eventualmente
Particionamento através de
Particionamento funções ou processos implementados usando
através de objetos ou conceitos
Sistema uma linguagem OO
Catálogo Bibliotecário
1
Análise e Projeto OO Ferramentas para criar sw OO
Conceito Representação Representação • Saber uma linguagem de programação
de domínio na análise no projeto
orientada a objeto (OO) não é suficiente
Livro Livro para criar sistemas OO
título
título
imprimir()
• É preciso saber Análise e Projeto OO
• Exemplo: O • Linguagem UML
conceito “Livro”
em um sistema de public class Livro • Padrões de projeto
{
biblioteca. Representação public void imprimir();
no código
private String titulo;
}
Casos de
Uso
Análise Projeto Diagrama de Classes
Atividades do projeto OO
• Atribuição de responsabilidades entre os objetos
• Construção de diagramas de classes
• Construção de diagramas de interação (seqüência e
colaboração) Diag. Seq. de Eventos do Sistema
Diag.
Colaboração
• Levantamento de necessidades de concorrência
• Considerações de tratamento de defeitos
• Detalhamento do formato de saída (interface com usuário,
relatórios, transações enviadas para outros sistemas, ...)
• Definição do esquema do BD: mapeamento de objetos para Modelo
conceitual
tabelas se o BD for relacional Diag.
seqüências
2
Diagramas de Interação
Ilustram como os objetos interagem através de mensagens
para cumprir suas tarefas.
• Diagramas de Colaboração
– Ênfase na organização estrutural dos objetos que
Construindo os diagramas de enviam e recebem mensagens
• Diagramas de Seqüência
Ênfase na ordenação temporal das mensagens:
:Instância_ClasseA :Instância_ClasseB
mensagem1( )
1: mensagem2( )
2: mensagem3( )
tarefas os DI ilustram, além do que está nos contratos TerminarVenda() TerminarVenda() Operação:
1. Este caso RegistrarPagamento(quantia) TerminarVenda
• Diagrama de seqüências de eventos do sistema (DSS): mostra de uso RegistrarPagamento(quantia) Pós-Condições:
1.
começa...
para um dado caso de uso, os eventos aos quais o sistema deve Venda.Completada
recebe o valor...
responder. Para responder a um evento o sistema deve
implementar uma operação correspondente, que será executada Caso de Uso DSS Operações do Sistema Contratos
como resposta ao evento recebido.
3
Responsabilidades Responsabilidades e Métodos
• Responsabilidade é “um contrato ou obrigação de • Responsabilidades são atribuídas aos objetos do
um tipo ou classe” (Booch e Rumbaugh, 1997) sistema durante o Projeto OO
– Relacionada às obrigações dos objetos em termos de • “Uma Venda é responsável por imprimir a si própria”
(de fazer)
comportamento.
• “Uma Venda é responsável por conhecer sua data” (de
• Tipos básicos conhecer)
– saber: saber sobre os seus dados, sobre objetos
relacionados, sobre coisas que ela pode calcular ou • Tradução de responsabilidades para classes e métodos é
derivar. influenciada pela granularidade da responsabilidade
– Um único método para “imprimir venda”
– fazer: iniciar ações entre outros objetos, controlar e – Dezenas de métodos para “prover um mecanismo de acesso a
coordenar atividades em outros objetos SGBDR”
Responsabilidades e Métodos
• Métodos são implementados para cumprir
responsabilidades
– Uma responsabilidade não é igual a um método.
Padrões GRASP
(General Responsibility Assignment Software Patterns)
– Podem agir sozinhos ou em colaboração com outros
métodos e objetos
• Exemplo:
– A classe Venda pode definir um ou mais métodos específicos para
cumprir a responsabilidade de imprimir
– Esse método, por sua vez, pode precisar colaborar com outros
objetos, possivelmente enviando mensagens de impressão para cada
um dos objetos ItemVenda associados à Venda.
4
Padrões em ES
Definição
• “um padrão expressa uma solução reutilizável descrita • Padrões em ES permitem que desenvolvedores
através de três partes: um contexto, um problema e uma possam recorrer a soluções já existentes para
solução”. (GAMMA et al., 1995).
solucionar problemas que normalmente ocorrem
em desenvolvimento de software;
• Contexto: estende o problema a ser solucionado,
apresentando situações de ocorrência desses problemas. • Surgimento: início dos anos 90;
– 1995 - livro da "Gang of Four" (GoF)
• Problema: determinado por um sistema de forças, onde estas
forças estabelecem os aspectos do problema que devem ser • 23 padrões de projeto (design patterns)
considerados. – OOPSLA
• Solução: mostra como resolver o problema recorrente e como • Padrões capturam experiência existente e
balancear as forças associadas a ele. comprovada em desenvolvimento de software,
ajudando a promover boa prática de projeto.
Padrões GRASP
1. Padrão Especialista (Expert)
(General Responsibility Assignment Software Patterns)
Problema: : Qual é o princípio básico pelo qual
responsabilidades são atribuídas em POO?
• Codificam idéias e heurísticas existentes para Solução: : Atribua uma responsabilidade a uma
atribuir responsabilidades a objetos. classe que possui a informação necessária
• Auxiliam a elaborar os diagramas de interação. para cumprí-la.
Padrões GRASP básicos: especialista, criador, alta Exemplo: Quem deveria ser responsável por
coesão, baixo acoplamento, controle. calcular o total-geral de uma venda?
a classe Venda possui a informação para isso
Classe Responsabilidade
Venda
venda
contém
sabe sub-total de Venda
Item de Venda 1..*
5
1. Padrão Especialista (Expert) 1. Padrão Especialista (Expert)
• Mas quem deve ser responsável por conhecer o subtotal de • Porém, para cumprir essa responsabilidade de conhecer ou
um ItemVenda? informar seu subtotal um ItemVenda precisa conhecer o
– Informação necessária: ItemVenda.quantidade e preço do Item.
EspecificaçãoProduto.preço – Portanto, o ItemVenda deve mandar uma mensagem para a
– Pelo padrão, a classe ItemVenda deve ser a responsável. EspecificaçãoProduto para saber o preço do item.
iv:ItemVenda :ItemVenda
iv:ItemVenda :ItemVenda ItemVenda :ItemVenda ItemVenda
:ItemVenda
quantidade 2.1:p:=obter_preço( ) Aqui ocorrem as quantidade
definições de
responsabilidade. obter_subtotal()
obter_subtotal() :Especificação
Produto
6
2. Padrão Criador (Creator)
Problema: Quem deve ser responsável por criar uma nova instância 2. Padrão Criador (Creator)
de alguma classe?
7
3. Padrão Baixo Acoplamento e 3. Padrão Baixo Acoplamento e
(Low Coupling) (Low Coupling)
• Uma solução melhor, do ponto de vista do padrão, que • Benefícios
preserva baixo acoplamento é a própria Venda criar
Pagamento, pois Venda tem que ter conhecimento de – Responsabilidade não é (ou é pouco) afetada
Pagamento por mudanças em outros componentes.
– Responsabilidade é mais simples de entender
RegistrarPagamento( )
isoladamente.
1:RegistrarPagamento( )
:POST :Venda
– Maior chance para reuso.
1.1:criar( )
:Pagamento
4. Padrão Alta Coesão (High Cohesion) 4. Padrão Alta Coesão (High Cohesion)
• Exemplo
Problema: Como manter a complexidade (das classes) sob
controle? – Quem deve ser responsável por criar um Pagamento e
associá-lo à Venda?
Solução Atribuir uma responsabilidade de modo que a coesão – Pelo padrão Criador, seria POST. Mas se POST for o
seja alta responsável pela maioria das operações do sistema, ele vai
ficar cada vez mais sobrecarregado e sem coesão.
A coesão é uma medida do quanto as responsbilidades de uma
classe estão relacionadas.
Alta: A Classe tem uma responsabilidade bem definida e faz
:POST :Venda
executa muitas tarefas (indesejável pois fica difícil de: adicionar_pagamento (p)
8
4. Padrão Alta Coesão (High Cohesion) 4. Padrão Alta Coesão (High Cohesion)
• Exemplo
– Outra forma para atribuição da responsabilidade • Níveis de coesão
RealizarPagamento que favorece uma coesão mais alta – Muito baixa
• Um única classe é responsável por muitas coisas em áreas
funcionais muito diferentes.
– Baixa
• Um classe é a única responsável por uma tarefa complexa em
:POST :Venda
uma área funcional.
RealizarPagamento( ) RealizarPagamento( )
criar( )
– Alta
:Pagamento
• Um classe tem responsabilidades moderadas em uma área
funcional e colabora com outras classes para realizar tarefas.
– Moderada
• Uma classe tem peso leve e responsabilidades exclusivas em
algumas áreas logicamente relacionadas ao conceito da classe,
mas não uma com a outra.
9
5. Padrão Controlador (Controler) 5. Padrão Controlador (Controler)
• Use o mesmo controlador para todos os • Um controlador não deve ter muitos atributos
eventos do sistema no mesmo caso de uso e nem manter informação sobre o domínio do
• Classes do tipo janela, applet, aplicações, problema
documento não deveriam realizar tarefas • Um controlador não deve realizar muitas
associadas a eventos do sistema. Elas tarefas, apenas delegá-las
apenas recebem e delegam os eventos ao • Um bom projeto deve dar vida aos objetos,
controlador atribuindo-lhes responsabilidades, até mesmo
– Um evento do sistema é gerado por um ator se eles forem seres inanimados
• A camada de apresentação (interface com o
usuário) não deve tratar eventos do sistema
10
Diagramas de Interação: Como Diagrama de Colaboração –
Construir Exemplos - Padrões GRASP
• separação do modelo de visão: não é
responsabilidade dos objetos do domínío se
comunicarem com o usuário (ignorar
responsabilidades de apresentação dos dados no
display, mas toda informação do domínio de
objetos tem que ser mostrada)
• para um objeto enviar uma msg a outro é
necessário visibilidade: habilidade de um objeto
ver ou fazer referência a outro objeto
11
Diagrama de Colaboração – Diagrama de Colaboração –
Exemplos - Padrões GRASP Exemplos - Padrões GRASP
Diagrama de Colaboração –
Exemplos - Padrões GRASP
Diagrama de Classes
12
Diagramas de Classe Como construir (1)
• Diagrama parcial para as classes POST e • identificar todas as classes participantes da
Venda no sistema POST: solução através dos diagramas de interação
informações sobre
• desenhar o diagrama
• copiar os atributos
tipos
POST Venda
entrarItem( ) obter_total( )
Atributos Atributos
Métodos Métodos
13
Identificação de Classes com
Exemplos no Sistema Posto
Estereótipos
Comercial
• Estereótipo é um classificador. Tipos:
• Entidade: representam conceitos do mundo real e
armazenam dados que os identificam – como no
modelo conceitual <<identidade>> <<fronteira>> <<controle>>
• Controle: controlam a execução de processos e o Intens InterfaceCliente ControleComprarItens
fluxo de execução de todo ou de parte de casos de
uso e comandam outras classes
• Fronteira: realizam o interfaceamento com
entidades externas (atores), contém o protocolo de
comunicação com impressora, monitor, teclado,
disco, porta serial, modem, etc.
controlados
próprio para comunicação.
Em muitos casos corresponde a implementação de um Uma classe para interface com o usuário,
objeto intangível. uma classe para interface com a impressora,
Gerente de Registro para o Caso de Uso uma classe para interface com a porta serial,
registrarAlunos etc.
14
Identificação das Classes de Atributos – refinando os tipos
Fronteira Notação UML
A maioria é opcional, seu uso vai depender do
Exemplos: Interface tipo Janela, Protocolo tipo de visão no qual estamos trabalhando e
de Comunicação, Interface de Impressão, podem ser abstratos ou utilizar a notação de uma
Sensores, etc. lg de programação
Classes: Formulário em Branco e Sistema
de Cobrança [Visibili/d]Nome[Multiplici/d]:[Tipo]=[Valor][{Proprie/ds}]
15
Identificação dos Métodos Identificação dos Métodos
Os métodos são acrescentados nas perspectivas de É útil distingüir operações que alteram ou
especificação e de implementação e são derivados não o estado (atributos) de uma classe
a partir dos diagramas de interação: colaboração e
sequências, na fase de projeto detalhado. Não alteram: query, métodos de obtenção,
É útil distingüir operações de métodos. Operações
getting methods
é algo que se evoca sobre um objeto (a chamada Alteram: modificadores, métodos de
do procedimento). Para realizar uma operação a atribuição ou fixação, setting methods
classe implementa um método (o corpo do
procedimento)
16
Notação UML para Métodos - Notação UML para Métodos –
Parâmetros Tipo de Retorno
Os parâmetros – dados de entrada e/ou saída O Valor-de-Retorno indica se o método retorna
para o método são representados por algum valor ao término de sua execução e qual
Nome-do-Parâmetro:Tipo=Valor-Padrão o tipo de dado do valor retornado.
Ex: Ex:
Visão conceitual Visão Conceitual
ImprimirData(data:TipoData) CalcularValor(): TipoDinheiro
Visão de implementação Visão de implementação
ArmazenarDados(nome:char[30],salario:float=0.0) ArmazenarDados(nome:char[30]): bool
usa descricao
– Grau de detalhe dependente do público-alvo. Loja
1 1
CataladoDeProdutos
contém
preco
nome quantidade UPC
1 1..*
endereco 1
Venda 1
Especificação() descreve
data *
hora 1 busca_em
possui ItemVenda
status 1
contém
Completar() POST 1 Venda quantidade
Criar_iv(ESPEC: EspecificacaoDeProduto; QTD:integer) 1 1..*
RealizarPagamento() captura data
Obter_Total() hora
1 1 Obter_Subtotal()
TerminarVenda()
EntrarItem()
status
RegistrarPagamento() Completar() pago_por
Criar_iv() Pagamento
RealizarPagamento() 1 1
Obter_Total() quantia
As conexões envolvidas
nos DI estarão
representadas como
associações no Diagrama
de Classes
17
Criando Diagramas de Classe Características dos Elementos de
para o Sistema POST Classe
• Adicionando nomes aos métodos • UML oferece notação rica para descrever características
– Observe as mensagens dos DI como visibilidade, valores iniciais, etc.
CataladoDeProdutos EspecificacaoDeProduto
• No sistema POST: todos os atributos são privados e todos
POST
quantidade descricao
os métodos são públicos
preco
TerminarVenda() Class Name
EntrarItem()
UPC
RegistrarPagamento() Especificação() attribute
attribute : type
attribute : type = initial value
ItemVenda Pagamento classAttribute
Loja Venda /derivedAttribute
data quantidade quantia ...
nome
endereco hora method1()
status method2(parameter list) : return type
Completar() Obter_Subtotal() abstractMethod()
Criar_iv() +publicMethod()
RealizarPagamento() -privateMethod()
Obter_Total() #protectedMethod()
classMethod()
...
calculaMédia():TipoNota
+calculaMédia():Double
18
Diagrama de Colaboração - Diagrama de Colaboração -
Visibilidade Inicializando
Como se realizam as operações iniciais da aplicação?
• Cria-se um caso de uso startUp.
• Seu diagrama de colaboração deve ser criado por
último, representando o que acontece quando o
objeto inicial do problema é criado.
• Quem deveria ser o objeto inicial do sistema?
– classe representando toda a informação lógica do
sistema
– classe representando a organização
– usar Padrões Alta Coesão e Baixo Acoplamento
19
Diagrama de Colaboração - Organização de Classes em
Inicializando Pacotes Lógicos
Adminis-
Vendas Compras
tração
20