fluxo de análise e projeto 7 - atividade projetar classes

35
Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Upload: henrique-vilalobos-valverde

Post on 07-Apr-2016

219 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Fluxo de Análise e Projeto

7 - Atividade Projetar Classes

Page 2: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto2

Analisar caso de

usoProjetista

Projetista de banco de

dados

Revisar projeto

Projetar caso de

uso

ArquitetoRevisor do

projeto

Projetar base de dados

Projetar arquitetura

Projetar subsistema

Projetar classes

Projetar Classes

Page 3: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto3

O que foi feito até agora

• Identificação das classes de análise, seus atributos, responsabilidades e relacionamentos

• Mapeamento das classes de análise em elementos de projeto • Identificação das oportunidades de reuso• Definição da organização do sistema• Refinamento das realizações dos casos de uso (substituição dos

elementos de análise por elementos de projeto)• Distribuição do comportamento dos elementos dos subsistemas

Page 4: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto4

Objetivos desta atividade

• Detalhar a estrutura interna (atributos e operações) das classes de projeto

• Identificar classes e relacionamentos adicionais • Garantir que as classes fornecem o

comportamento necessário à realização dos casos de uso

Realizada para cada classe da iteração corrente

Page 5: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto5

Na prática...

• Os passos desta atividade são realizados simultaneamente às atividades de projeto:– projeto da arquitetura;– projeto de casos de uso e – projeto de subsistemas

• Aqui o objetivo é rever o que foi feito, refinando e acrescentando detalhes

Page 6: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto6

Visão geral dos artefatos

Classes de projeto

Projetar classesRealização de casos de uso

Requisitos não funcionais

Classes de projeto

Modelo de análise e projeto

Page 7: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto7

Passos para Projetar Classes

• 1. Identificar classes de projeto• 2. Definir visibilidade da classe• 3. Definir atributos• 4. Definir operações• 5. Refinar relacionamentos

Page 8: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto8

Passo 1. Identificar classes de projeto

• Iniciado no projeto da arquitetura • Classe de projeto já identificada dá origem a uma ou

mais classes• A estratégia de criação de classes faz uso do

estereótipo definido na análise (fronteira, controle e entidade)

• Pode fazer uso de padrões de projeto (design patterns)

Page 9: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto9

Projetando Classes de Fronteira

• Interface com usuário – depende da ferramenta de desenvolvimento a ser usada

(de quanto pode ser automatizado)

• Interface com subsistemas externos– usualmente resulta em um subsistema– se for muito simples (servindo apenas como interface

para uma API existente), deve resultar em uma ou mais classes de projeto

Page 10: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto10

Projetando Classes de Entidade

• Normalmente dão origem a uma única classe

• Requisitos não funcionais (como performance) podem demandar alterações no projeto

Page 11: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto11

<<entity>>Exemplo

+atributoMuitoUsado1+atributoMuitoUsado2+atributoPoucoUsado1+atributoPoucoUsado2

AnáliseExemplo

+ getAtributoMuitoUsado1 ()+ getAtributoMuitoUsado2 ()+ getAtributoPoucoUsado1 ()+ getAtributoPoucoUsado2 ()

ExemploEager+atributoMuitoUsado1+atributoMuitoUsado2

ExemploLazy+ atributoPoucoUsado1+ atributoPoucoUsado2

Projeto

Alterações em função da performance

Fonte: Rational

Page 12: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto12

Projetando Classes de Controle

• Podem ser eliminadas – se não estiverem desempenhando nenhum papel adicional à

classe fronteira correspondente

• Podem dar origem a uma única classe– se encapsulam algum fluxo de controle relevante

• Podem ser divididas– se o controle encapsulado for muito complexo ou para

atender, por exemplo, requisitos de distribuição

Page 13: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto13

A

B

Visibilidade Pública

Visibilidade Privada

Classe A1

Classe A2

Classe A3

+Classe B1

Pacote A

Pacote B

-Classe B2

Fonte: Rational

Passo 2. Definir visibilidade da classe

Page 14: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto14

Passo 3. Definir atributos

• Identificados a partir das informações que a classe necessita manter e descrição das operações

• Atributos derivados– avaliar questões de desempenho

Page 15: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto15

Contasaldo$ saldoMinimo

Definir atributos

• Aspectos envolvidos– Nome, tipo e valor inicial (default)– Visibilidade

• atributos devem ser privados! – Escopo

• atributos de instância• atributos de classe

Page 16: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto16

Passo 4. Definir operações

• Mapear responsabilidades definidas na análise para operações que implementem essas responsabilidades

• Aspectos envolvidos– nome, assinatura e descrição da operação– visibilidade

• privado -• protegido #• público +

– escopo: operação de classe ou de instância

Page 17: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto17

Operações de classe e de instância

• Operações de instância são executadas por uma instância específica (um objeto) da classe– emitirExtrato( );– creditar(valor:float);– ...

• Operações de classe são executadas pela própria classe– getSaldoMinimo( );

Page 18: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto18

Definindo Operações

• Decisões a serem tomadas:– parâmetros (passagem por valor ou

referência, intervalo válido, ...)– quanto menos parâmetros, melhor– passar objetos como parâmetros

Page 19: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto19

calcularFrete(destino:Endereco): float

Transporte

Endereco

Definindo Operações

• Classes e relacionamentos adicionais podem ser necessários para suportar a assinatura

Page 20: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto20

Passo 5. Refinar relacionamentos

• Detalhar as associações entre as classes– tipo– navegabilidade– multiplicidade

• Avaliar relacionamentos de generalização

Page 21: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto21

Menor nível deacoplamento

Maior nível deacoplamento

Tipo dos relacionamentos

• Dependência• Associação • Agregação• Composição• Generalização

Page 22: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto22

Navegabilidade

• Que direções são necessárias?• Analisar diagramas de interação• Priorizar o uso de apenas uma direção

quando:– o uso de uma das direções for infreqüente– o número de instâncias de uma das classes é

pequeno

Page 23: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto23

Navegabilidade: exemplo

• Espera-se que existam quantos produtos?• Dado um fornecedor qualquer, ocorre com

freqüência a busca pelos seus produtos?

Produto Fornecedor**

?

* *

Page 24: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto24

Instrutor

estaEnsinando( ) : Boolean

Disciplina

temInstrutor( ) : Boolean0..* 0..*

Multiplicidade

• Se o relacionamento é opcional, crie uma operação para testar a existência do relacionamento– garantir a existência da instância sendo utilizada

Page 25: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto25

Avaliar relacionamentos de generalização

• Muito bom, mas…– usar com cautela

• Devem representar uma relação é-um– o descendente é um objeto do tipo do

ancestral

Page 26: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto26Fonte: Rational

Animal

comer()

Leão

comer()

Tigre

comer() Pilha

Lista

inserirInicio (Item)inserirFim (Item)removerInicio()removerFim ()inserir (Item, posicao)

Avaliar relacionamentos de generalização

Page 27: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto27

Factoring: compartilhamento de implementação

• Suporta o reuso de implementação de outra classe

• Não pode ser utilizado se a classe a ser utilizada não puder ser modificada

Page 28: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto28

Compartilhamento de implementação: exemplo

Lista

Pilha

inserirInicio( Item)removerFim ()

Lista

inserirInicio (Item)removerFim ()inserir (Item, posicao)

Pilha

Fonte: Rational

ContainerSequencial

inserirInicio (Item)inserirFim (Item)removerInicio()removerFim ()inserir (Item, posicao)

Page 29: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto29

Delegação

• Suporta o reuso de implementação de outra classe

• Pode ser utilizado se a classe a ser utilizada não puder ser modificada

Page 30: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto30

Fonte: Rational

Lista Lista

Pilha

push (Item)pop () : Item

1 1

Pilha

Delegação: exemplo

inserirInicio (Item)inserirFim (Item)removerInicio()removerFim ()inserir (Item, posicao)

inserirInicio (Item)inserirFim (Item)removerInicio()removerFim ()inserir (Item, posicao)

Page 31: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto31

Fonte: Rational

Estudante

nomeenderecomatricula

EstudanteParcialnumMaxDisciplinas

EstudanteIntegraldataGraduacao

O que vai acontecerse um aluno

“part-time” se tornar “full-time”?

Metamorfose: o problema

Page 32: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto32Fonte: Rational

Classificação1 1

Metamorfose: a solução

Estudante

nomeenderecomatricula

EstudanteParcialnumMaxDisciplinas

EstudanteIntegraldataGraduacao

Page 33: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto33

Passos realizados nesta atividade

• 1. Identificar classes de projeto• 2. Definir visibilidade da classe• 3. Definir atributos• 4. Definir operações• 5. Refinar relacionamentos

Page 34: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto34

Projeto em Equipes

• Data de entrega: 22/11/2000

• A partir do documento de requisitos– Parte 1: Escolha três casos de uso relevantes e

faça a análise (produzindo diagramas de interação e, em seguida um VOPC, com estereótipos, responsabilidades e associações para cada caso de uso; identifique classes persistenes

Page 35: Fluxo de Análise e Projeto 7 - Atividade Projetar Classes

Maio, 2000Copyright CESAR-Qualiti, Maio 2000. Todos os direitos reservados.

Fluxo de Análise e Projeto35

Projeto em Equipes

– Parte 2: Faça o projeto da arquitetura identificando subsistemas, interfaces, pacotes e camadas. Produza um diagrama de pacotes, relacione classes de análise em elementos de projeto, e agrupe elementos de projeto em camadas.

– Parte 3: Faça o projeto de pelo menos um caso de uso, refazendo os diagramas de interação e o VOPC já incluindo elementos de projeto (deve ilustrar imclusão de persistência e interfaces de subsistemas)

– Parte 4: Faça o projeto de um subsistema e de uma classe