Aná lise e Proje t o de Sist e m a s OO
Aná lise e Proje t o de Sist e m a s OO
288
Diagramas de Classes
Descreve os tipos dos objetos existentes no sistema e as associações estáticas entre eles As principais relações estáticas são:
Classes, suas estruturas internas e comportamento Associações, agregações, dependências, e relações de herança
Multiplicidade e indicadores de navegação
Nomes de papéis (o que uma classe representa para outra)
Mostram também os atributos, operações e restrições que se aplicam aos objetos de uma determinada classe.
Diagramas de Classes
Classes
Classes
Representam os tipos de objetos existentes no modelo Descritas a partir de seus atributos, operações e
restrições
Podem ser organizadas segundo uma estrutura de generalização/especialização
Admitem classificação simples ou múltipla (herança simples
ou múltipla)
C la s s e Atrib u to s
O p e r a çõ e s ()
290
Classes
As classes são representadas por caixas contendo
Propriedades
Classes são descritas via suas propriedades
Primitivas: representadas como atributos
Compostas: representadas como associações para outras classes
Quando transformadas para código, as
propriedades se tornam sempre campos da classe
Atributos: Nome e Tipo
O nome do atributo corresponde ao nome que será utilizado no código fonte
É aceitável utilizar nomes com espaço e acentos na fase de análise
O tipo do atributo corresponde ao tipo que será utilizado no código fonte
Tipos primitivos da linguagem
Operações ou métodos
Operações: nome e tipo de retorno
Normalmente o nome de uma operação é
formado por um verbo (opcionalmente
seguido de substantivo)
Operações: lista de parâmetros
A lista de parâmetros pode ser composta por zero ou mais parâmetros separados por vírgula
Parâmetro: [direção] nome : tipo [= valor padrão] Nome
Tipo
Primitivo Classe
Valor padrão (opcional)
Análise x Design
Em análise não se atenha aos detalhes mas em design sim
Visibilidade Navegabilidade Tipo
Visibilidade pública em propriedades
Assume campo privado e métodos de acesso (get e set) Operações
Diagramas de Classes
Associações
Associações
Representam relacionamentos entre instâncias de classes (uma pessoa trabalha para uma companhia, uma companhia tem um numero de escritórios)
Conceitualmente representam relacionamentos entre classes
Possuem 2 papéis, um para cada sentido da
associação, que pode ser explicitamente representado por um label é uma conexão bi-direcional entre
classes
Uma associação é mostrada como uma linha conectando as classes relacionadas.
291
Associações
C la sse A C la sse B
C la sse C
As s oc ia ç ã o
Co m pos iç ã o
D e p e n d ê n ci a
A n o ta ç ã o
m in . . m a x
m in . . m a x
C la sse 1
C la sse 2 P a rte
T o d o
m in . . m a x
m in . . m a x
Navegabilidade
Qualquer associação entre classes é bidirecional. No entanto, a implementação de um relacionamento bidimensional é custosa em termos de implementação. Isto faz com que para cada associação tenhamos que determinar sua navegabilidade.
Se uma classe não necessita saber a que outras classes está associada, então não é necessário criar condições para tal navegação. Por intermédio dos diagramas de sequência e colaboração, que serão vistos mais tarde, é possível identificar o sentido da navegabilidade
Associações: Navegabilidade
Mostra a direção de navegação, ou seja do canal de comunicação entre os objetos e classes.
Uma associação é navegável da classe A para a classe B, se, dado um objeto de A, consegue-se obter de forma direta os objetos relacionados da classe B.
Associações: Navegabilidade
Dada uma mercadoria pode-se identificar diretamente a empresa fornecedora, mas a volta não é verdadeira
Navegabilidade: exemplos
Neste caso temos que a navegabilidade é de livro para autor significando que em tempo de execução
Navegabilidade: exemplos
Neste caso temos que a navegabilidade é de autor para livro significando que em tempo de execução a classe autor dever reter um atributo que guarde
os livros a ela relacionados .
Navegabilidade: exemplos
Neste caso temos que a navegabilidade é bidirecional significando que uma deve guardar informações da outra quanto ao relacionamento
Navegabilidade: exemplos
Para garantir a navegabilidade é necessário a definição de atributo(s) que guardem informações das instancias de classe associadas. Se considerarmos o primeiro caso onde a navegabilidade é de livro para autor teremos:
Associações reflexivas
Associa objetos da mesma classe.
Cada objeto tem um papel distinto na associação.
A utilização de papéis é bastante importante para evitar ambigüidades na leitura da associação.
Uma associação reflexiva objeto se
associa com ele próprio.
Ao contrário, indica que objetos de uma mesma classe se
Exemplo: associação reflexiva
Mais sobre Associação
Relações fornecem um caminho para a comunicação entre os objetos
Diagramas de seqüência e/ou colaboração são examinados para determinar quais ligações entre objetos precisam existir para se chegar ao comportamento desejado
Há três tipos de relações:
Associação Agregação Dependência
Agregação
É um tipo especial de associação onde tenta-se demonstrar que as informações de um objeto (chamado objeto-todo) precisam ser complementadas pelas informações contidas em um ou mais objetos de outra classe (chamados objeto-parte) Relação TODO-PARTE
Uma agregação é um tipo mais forte de conexão, aonde a relação é entre o todo e suas partes
294
Agregação
Uma agregação é mostrada como uma linha conectando as classes relacionadas com um losango perto da classe que representa o todo.
Exemplo:
V en d ed or
C lien t e Ite m_ P e d id o
P e d id o de V en d a s 0 . .*
1 0 . .* 1
0 .. * 1 1
1 ..* 1 ..*
1
1 0 .. * Envia
Inclui Possui
Agregação/Composição
Características particulares:
São assimétricas: se um objeto A é parte de um
objeto B, B não pode ser parte de A.
Propagam comportamento, no sentido de que um comportamento que se aplica a um todo automaticamente se aplica as suas partes.
As partes são criadas e destruídas pelo todo, na classe do objeto todo, existem operações para remover e adicionar as partes
Como identificar
Sejam duas classes associadas, X e Y. Se
uma das perguntas a seguir for respondida
com um sim, provavelmente há uma
agregação onde X é todo e Y é parte.
Agregação
É uma associação com a semântica de Serve como uma relação todo-parte fraca O todo existe sem as partes
As partes existem sem o todo
Composição
É uma associação com a semântica de
Serve como uma relação todo-parte forte As partes não existem sem o topo
As partes pertencem a somente um todo
Composição
Constitui-se em uma variação de agregação.
Tenta representar um vínculo mais forte entre objetos-todo e os objetos-parte, procurando demonstrar que os objetos-parte têm de pertencer exclusivamente a um único objeto-todo com que se relacionam.
Em uma composição, um mesmo objeto-parte não pode associar-se a mais de um objeto-todo.
296
Composição
Uma composição é mostrada como uma
linha conectando as classes relacionadas
com um losango
preenchido perto da
classe que representa o todo.
Dependência
Como o próprio nome diz, identifica um certo grau de dependência de uma classe em relação à outra, isto é, sempre que ocorrer uma mudança na classe da qual uma outra classe depende, este deverá também sofrer uma mudança.
Uma dependência é mostrada como uma linha pontilhada entre o cliente e o fornecedor
298
Dependência
Uma Dependência indica um relacionamento
semântico entre os dois elementos de
modelagem (ou conjunto de elementos de
modelagem).
Dependência
A dependência, relacionamento temporário, pode implementada por uma de três soluções:
variável local de métodos, parâmetros de métodos, ou variáveis globais.
A seguir as soluções são detalhadas e ilustradas em um diagrama de classe e exemplificadas na listagem a seguir.
1. A operação op1() de ClasseA contém um variável local do tipo
ClasseB.
2. A instância da ClasseB é passada para a instância da ClasseA no
método op2(ClasseB b).
3. Uma classe é visível à ClasseA porque é global. Por exemplo, em
Java, as classe java.lang.Math e java.lang.Vector estão visíveis e globais para a ClasseA. Se os nomes das classes estiverem
completamente qualificados, então o importe não é necessário.
Associação Ternária ou N-ária
São associações que conectam mais de duas classes;
São úteis para demonstrar associações complexas, no entanto deve-se evitar utilizá-las, por muitas vezes, sua leitura ser de difícil interpretação.
São representadas por um losângulo para onde convergem todas as ligações da associação:
Associação Ternária ou N-ária
No exemplo, mostra um fato corriqueiro na maioria das universidades:
Um professor pode lecionar para muitas turmas;
Uma turma pode possuir muitos professores e utilizar muitas salas
Um professor lecionando para uma turma específica pode utilizar mais de uma sala de aula.
Ou seja:
300
Mais sobre Associação
Relações
podem
ser
descobertas
examinando-se os Diagramas de Iteração
M a trícu la F o rm
Coo r d e n a d o r
3. m a trícu la (a lu n o ,m a té ria )
Formulário de Matrícula
Coordenador
Matrícula(aluno, curso)
Mais sobre Associação
Apesar de associações e agregações serem bi-direcionais por definição, freqüentemente é
desejável restringir a navegação em uma única direção
Caso a navegação seja restringida, uma seta é adicionada para se indicar a direção da navegação
302
Diagramas de Classes
Multiplicidades
Multiplicidades
A multiplicidade de um papel representa o número de objetos que pode participar da associação
Do ponto de vista da especificação do sistema as associações representam responsabilidades Do ponto de vista de implementação
associações indicam a existência de referências entre os objetos, e servem para indicar a
navegabilidade do modelo
Diagramas de Classes
Multiplicidade de Associações
Multiplicidade de Associações
Cla sse
Cla sse
Cla sse
1 Ex a t am e nte um
M uitos (0 ou m a is )
0 ..1 O pc iona l (0 ou 1 )
*
1 ..* 1 ou m a is
Classe
1 ..3 ,5 P os s ibilida de s
Cla sse
E s pec ífic a s
P e d id o
n ú m e r o
P e ç a
n ú m e ro * C o n tê m 1 ..*
É -c o m p o s to -d e E s tá -in c lu íd a
304
Diagramas de Classes
Co o rd e n a d o r
Alu n o F o rm u lá rio d e M a trícu la
Alg o ritm o d e Ho rá rio
Cu rso
P ro f esso r
M a té ria
Exemplo evolutivo
Exemplo evolutivo
Atributos
A estrutura de uma classe é representada pelos seus atributos
Atributos podem ser encontrados pelo exame das definições de classes, requisitos de problemas, e pela aplicação do conhecimento do domínio
M a té ria
lo ca l h o rá rio
Cada Matéria oferecida possui um local e horário
306
Operações
O comportamento de uma classe é representado pelas suas operações
Operações podem ser encontradas examinando-se os Diagramas de Interação
M a trícula F orm
Coor de na do r
3. m a trícu la (a luno ,m a té ria )
Coor de na dor
Ma tríc u la (a lu n o , c u rs o )
Diagramas de Classes
Diagramas de Classes
C o o rd e n a d o r
Ma tríc u l a(a l u n o , cu rs o )
A lu n o
n o m e s it u a ç ã o F o rm u lá ri o d e M a trícu la
A lg o rit m o d e H o rá rio
C u rso
n o m e
N ú m e ro C ré d ito s
a b rir() im p rim ir()
P ro fe sso r
n o m e s it u a ç ã o
M a té ria lo c a l
h o rá ri o
a b rir()
in c lu irAlu n o ( alu n o )
308
Diagramas de Classes
Diagramas de Classes
F o rm u lá rio d e M a trícu la
Al g o ri tm o d e Ho r á rio
Co o rd e n a d o r
Ma tríc u la (a lu n o , c u rs o )
P ro fe sso r
n o m e s itu a ç ã o
Alu n o
n o m e s it ua ç ã o
M a t é ria
lo c a l h o rá ri o
a b rir()
in c lu irAlu n o (a lu n o )
Cu rso
n o m e
N ú m e ro C ré d ito s
a b rir() im p rim ir()
Mais sobre Multiplicidade
Multiplicidade define como muitos objetos
participam numa relação
Multiplicidade é o número de instâncias de uma classe que se relacionam a UMA instância de uma outra classe
Para cada associação e agregação, haverá duas decisões relativas a multiplicidade a se tomar: uma para cada lado da relação
310
Diagramas de Classes
Diagramas de Classes
F o rm u lá rio d e M a trícu la
Al g o ri tm o d e Ho r á rio
Co o rd e n a d o r
Ma tríc u la (a lu n o , c u rs o ) 1
0 . . *
Alu n o
n o m e s it ua ç ã o
Cu rso
n o m e
N ú m e ro C ré d ito s
a b rir() im p rim ir() 0 . . *
1 0 . . *
1
1
0 . . *
P ro fe sso r
n o m e s itu a ç ã o
M a t é ria
lo c a l h o rá ri o
a b rir()
in c lu irAlu n o (a lu n o ) 4
3. . 1 0 1
1 . .*
0 . . 4
1 0 . . 4
1
1
1 . .* 4
3. . 1 0
Herança
Herança é uma relação entre uma super-classe e suas sub-classes
Atributos comuns, operações, relações e/ou, são mostradas no nível aplicável mais alto da hierarquia
G e n e ra liz aç ã o
E s p e c ia liz a ç ã o 1 E s p e c ia liz a ç ã o 2
312
Herança
Herança
F o rm u lá rio d e M a trícu la
Al g o ri tm o d e Ho r á rio
C o o rd e n a d or
Ma tr íc u la ( a lu n o , cu r s o) 1
0 . . *
Alu n o
n o m e s it ua ç ã o
C u rso
n o m e
N ú m e ro C ré d i to s
a b rir() im p rim ir() 0 . .*
1 0 . . * 1
1
0 . .*
P ro fe sso r
n o m e s it ua ç ã o
M a t é ria
lo c a l h o rá rio
a b rir()
in c lu irAlu n o (a l u n o ) 4
3 . . 1 0
1
1 . .*
0 . . 4
1 0 . . 4
1
1
1 . .* 4
3 . . 1 0
U suá ri o
n o m e
Exemplo
Exemplo
Automóvel Proprietário Fabricante Modelo Cor AnoModelo AnoFabricação TipoCombustível ValorMercado QuilometragemAtual LitrosCombustível CapacidadePortaMalas CalcularConsumoCombustível() Verifi carNívelCombustível() InformarAbastecimentoCombustível() CalcularIPVA() Caminhão Proprietário Fabricante Modelo Cor AnoFabricação TipoCombustível ValorMercado QuilometragemAtual LitrosCombustível NúmeroEixos ValorFrete CalcularConsumoCombustível() VerificarNívelCombustível() InformarAbastecimentoCombus tível() CalcularIPVA() CalcularFrete() Ônibus Proprietário Fabricante Modelo AnoFabricação TipoCombustível ValorMercado QuilometragemAtual LitrosCombustível NúmeroEixos ValorPassagem CalcularConsumoCombustível() VerificarNívelCombustível() InformarAbastecimentoCombustível() CalcularIPVA() CalcularFaturamentoDiário() CalcularNúmeroPassageiros() 314V e ícu lo
P ro p ri e tá rio F a b ri c a n te Mo d e lo
An o F a b r ic a ç ã o T ip o C o m b u s tíve l Va l o rMe rc a d o
Q u il o m e tra g e m Atu a l L itro s C o m b u s tíve l
C a lc u la r C o n s u m o C o m b u s tíve l () Ve r ific a rN íve lC o m b u s tíve l( )
In fo r m a rAb a s te c i m e n to C o m b u s tíve l () C a l c u l a rIP VA( )
A u to m ó ve l
C o r
An o Mo d e l o
C a p ac id a d e P o rta Ma la s
C a m in h ã o
C o r
N ú m e ro E i xo s Va l o rF re te
C a l c u la rF re te ()
Ô n ib u s
N ú m e r o E i xo s Va lo rP a s s a g e m
C a lc u l a rF a tu ra m e n to D iá ri o ( ) C a lc u l a rN ú m e ro P a s s a g e ir o s ()
Exemplo
Exemplo
Au to m ó ve l C o r
An o M o d e l o
C a p a c id a d e P o rta M a la s
Ca m in h ã o
C o r
N ú m e ro E ixo s Va lo rF r e te
C a lc u la rF r e te ()
Ô n ib u s
N ú m e ro E i xo s Val o rP a s s a g e m
C a l c u la rF a tu ra m e n to D iá rio ( ) C a lc u l a rN ú m e ro P a s s a g e i ro s ( ) Mo t o ri sta
N o m e M o to r is ta N ú m e r o C N H C a te g o ri a C N H Va lid a d e C N H
Ve r ific a rC a te g o ria ( ) Ve rifi c a rVa lid a d e C N H ( )
V e ícu lo P r o p r ie tá rio
F a b r ic a n te M o d e lo
An o F a b rica ç ã o T i p o C o m b us t íve l Va l o rM e r ca d o
Q u ilo m e tra g e m Atu a l L i tro s C o m b us t ív e l
C al c ul a rC o n s u m o C o m b us t ív e l( ) Ve r ifi ca rN íve lC o m b us t ív e l()
In fo rm a r Ab a s te c im e n to C o m b u s tíve l( ) C a lc u l a rIP VA()
0.. * 0. .*
0. .* 0.. *
Exemplo
Exemplo
316
Exemplo
Exemplo
Autom óve l
C o r An o Mo d e lo
C a p a cid a d e P o rta Ma la s
Ca mi nhã o
C o r
N ú m e ro E ixo s Va lo rFre te
C a lcu la rFre te ()
Ônibus
N ú m e ro E ixo s Va lo rPa s s a g e m
C a lcu la rFa tu ra m e n to D iá rio () C a lcu la rN ú m e ro P a s s a g e iro s ()
M otorista
N o m e Mo to ris ta N ú m e ro C N H C a te g o ria C N H Va lid a d e C N H
Ve rifica rC a te g o ria () Ve rifica rVa lid a d e C N H ()
M otor
P o tê n cia
D a ta P ró xim a R e vis ã o
C a lcu la rC o ns u m o Ó le o ()
V e ículo
P ro p rie tá rio Fa b rica n te Mo d e lo An o Fa b rica çã o Tip o C o m b u s tíve l Va lo rMe rca d o Qu ilo m e tra g e m Atu a l L itro s C o m b u s tíve l
C a lcu la rC o n s u m o C o m b u s tíve l() Ve rifica rN íve lC o m b u s tíve l()
In fo rm a rAb a s te cim e n to C o m b u s tíve l() C a lcu la rIPVA()
Dicas
Inicie com um diagrama simples
O que normalmente tem em todo diagrama Classes
Atributos Operações Associações
Use os demais recursos da linguagem somente quando for realmente necessário
Dicas: possíveis candidatos
Classes
Entidades externas que produzem ou consomem informações (ex: sistema de validação do cartão de crédito)
Coisas que são parte do problema e que são informações compostas (ex.: Produto)
Eventos que ocorrem durante a operação do sistema (ex.: Pedido)
Papeis que interagem com o sistema (ex.: Cliente) Unidades organizacionais relevantes (ex.: Rede de lojas)
Lugares que fornecem o contexto do problema ou do sistema (ex.: Loja)
Dicas: possíveis candidatos
Atributos
Informação primitiva que precisa ser memorizada (ex.: Preço)
Associações
A classe A precisa se relacionar com a classe B para atender a operações específicas (ex.: Cliente Pedido)
Operações