Buscar

POO1 - Aula 5 - Relacionamentos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

14 
 
4.2.2 Agregação 
Agregação é um tipo especial de associação onde se tenta 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 objetos-parte). Esse tipo de associação tenta demonstrar 
uma relação todo/parte entre os objetos associados. O símbolo de agregação 
difere do de associação por conter um losango na extremidade da classe que 
contém os objetos-todo. A figura 9 demonstra um exemplo de agregação. 
 
 
Figura 9 - Agregação 
 
Esse exemplo demonstra uma associação de agregação existente 
entre uma classe Pessoa e uma classe Conta_Comum, o que determina que 
os objetos da classe Pessoa são objetos-todo que precisam ter suas 
informações complementadas pelos objetos da classe Conta_Comum, que 
nessa associação são objetos-parte. Dessa maneira, sempre que uma pessoa 
for consultada, além de suas informações pessoais, serão apresentadas todas 
as contas que ela possui. 
Ao observarmos as multiplicidades dessa associação perceberemos 
que, da mesma forma que uma pessoa pode possuir muitas contas, uma conta 
pode ser possuída por muitas pessoas, como no caso de uma conta conjunta. 
Isso é característico das agregações nas quais os objetos-parte podem ser 
compartilhados por mais de um objeto-todo. 
A associação de agregação pode, em muitos casos, ser substituída por 
uma associação binária simples, dependendo da visão de quem faz a 
modelagem. A função principal de uma associação do tipo agregação é 
identificar a obrigatoriedade de uma complementação das informações de um 
15 
 
objeto-todo por seus objetos-parte, quando este for consultado. Já em uma 
associação binária essa obrigatoriedade não está explícita. 
4.2.3 Composição 
Uma associação do tipo composição constitui-se em uma variação da 
agregação, onde é apresentado um vínculo mais forte entre os objetos-todo e 
os objetos-parte, procurando demonstrar que os objetos-parte têm de estar 
associados a um único objeto-todo. Em uma composição os objetos-parte não 
podem ser destruídos por um objeto diferente do objeto-todo ao qual estão 
relacionados. O símbolo de composição diferencia-se graficamente do símbolo 
de agregação por utilizar um losango preenchido. Da mesma forma que na 
agregação o losango deve ficar ao lado do objeto-todo. A figura 10 apresenta 
um exemplo de composição. 
 
 
Figura 10 - Composição 
 
 
Observando-se a figura 10 é possível perceber que um objeto da 
classe Revista_Cientifica refere-se a, no mínimo, um objeto da classe Edicao, 
podendo se referir a muitos objetos dessa classe, e que cada instância da 
classe Edicao relaciona-se única e exclusivamente a uma instância específica 
da classe Revista_Cientifica, não podendo relacionar-se com nenhuma outra. 
Ainda nesse exemplo, percebemos que um objeto da classe Edicao 
deve se relacionar a no mínimo seis objetos da classe Artigo, podendo se 
16 
 
relacionar com até 10 objetos da já citada classe. Esse tipo de informação 
torna-se útil como documentação e serve como uma forma de validação, que 
impede que uma revista seja publicada sem ter no mínimo seis artigos, ou mais 
do que 10. No entanto, um objeto da classe Artigo refere-se unicamente a um 
objeto da classe Edicao. Isso é também uma forma de documentação, pois 
uma edição de uma revista científica só deve publicar trabalhos inéditos. 
Assim, é lógico que não é possível a um mesmo objeto da classe Artigo 
relacionar-se a mais de um objeto da classe Edicao. 
4.2.4 Generalização/Especialização 
O objetivo dessa associação é representar a ocorrência de herança 
entre as classes, identificando as classes-mãe (ou superclasses), chamadas 
gerais, e classes-filhas (ou subclasses), chamadas especializadas, 
demonstrando a hierarquia entre as classes e possivelmente métodos 
polimórficos nas classes especializadas. 
Como no diagrama de casos de uso, a generalização/especialização 
ocorre quando existem duas ou mais classes com características muito 
semelhantes. Assim, para evitar ter de declarar atributos e/ou métodos 
idênticos e como uma forma de reaproveitar código, cria-se uma classe geral 
em que são declarados os atributos e métodos comuns a todas as classes 
envolvidas no processo e, então, declaram-se classes especializadas ligadas à 
classe geral, que herdam todas as suas características, podendo ter atributos e 
métodos próprios. 
Além disso, métodos podem ser redeclarados em uma classe 
especializada, com o mesmo nome, mas comportando-se de forma diferente, 
não sendo, portanto, necessário modificar o código-fonte do sistema em 
relação às chamadas de métodos das classes especializadas, pois o nome do 
método não mudou, somente foi redeclarado em uma classe especializada, e 
só se comporta de maneira diferente quando for chamado por objetos dessa 
classe. A figura 11 apresenta um exemplo de generalização/especialização. O 
símbolo de generalização/especialização é o mesmo do diagrama de casos de 
uso. 
 
17 
 
 
Figura 11 - Generalização/Especialização no Diagrama de Classes 
 
No exemplo da figura 11 apresenta novamente a classe Conta_Comum 
e a torna uma classe geral (embora ela não seja uma classe abstrata) e 
derivamos duas classes especializadas a partir dela, as classes 
Conta_Especial e Conta_Poupanca, que herdam suas características. 
Além dos atributos e métodos herdados, a classe Conta_Especial 
contém ainda o atributo limite, que determina quanto o cliente pode sacar além 
de seu saldo, e os métodos abrir_Conta, sacar_Valor e juros_Conta. Os dois 
primeiros métodos são uma redeclaração dos métodos abrir_Conta e 
sacar_Valor da classe Conta_Comum, pois estes precisam incluir o limite da 
conta. O último método calcula o valor de juros a ser cobrado pelo uso do 
limite. 
Já a classe Conta_Poupanca contém, além dos atributos e métodos 
herdados, o atributo dt_aniversario, que define a data em que a conta renderá 
18 
 
juros, e o método renda_Conta, cuja função é calcular os rendimentos a serem 
acrescidos ao saldo da conta sempre que esta fizer aniversário. 
Pode-se presumir que seja necessário criar uma classe Conta que 
fosse realmente geral, que não tivesse instâncias e servisse apenas para 
definir os atributos e métodos comuns a todas as contas, ou seja, uma classe 
abstrata e, a partir desta, derivar as classes Conta_Comum, Conta_Especial e 
Conta_Poupanca. Isso não estaria errado, apenas não consideramos 
necessário fazê-lo, por acreditarmos que todas as características de uma conta 
comum sejam também contidas nas outras classes. Assim, além de definir as 
características de uma conta comum, a classe pode servir também como 
classe geral, a partir da qual possam ser derivadas as classes Conta_Especial 
e Conta_Poupanca. No caso de realmente ser identificada uma classe abstrata, 
por convenção, seu nome deve ser escrito em itálico. 
4.2.5 Classe Associativa 
Classes associativas são aquelas produzidas quando da ocorrência de 
associações que tenham multiplicidade muitos (*) em todas as suas 
extremidades. As classes associativas são necessárias nos casos em que 
existem atributos relacionados à associação que não podem ser armazenados 
por nenhuma das classes envolvidas. A figura 12 apresenta um exemplo de 
classe associativa. 
 
 
Figura 12 - Classe Associativa 
 
Nesse exemplo, uma instância da classe Ator pode se relacionar com 
muitas instâncias da classe Filme, e uma instância da classe Filme pode se 
19 
 
relacionar com muitas instâncias da classe Ator, ou seja, um ator pode atuar 
em muitos filmes, e um filme pode ter muitos atores atuando nele.Ocorre que 
existe a necessidade de saber qual o papel interpretado por um ator em um 
determinado filme, mas onde armazenar essa informação? 
Como existe a multiplicidade muitos nas extremidades de ambas as 
classes da associação, não há como reservar atributos para armazenar as 
informações decorrentes da associação em quaisquer das classes. Além disso, 
seria um desperdício de espaço fazê-lo, pois não há como determinar um limite 
para a quantidade de atores que poderiam atuar em um filme nem há como 
saber em quantos filmes um ator poderá atuar. Poderíamos reservar certo 
número de atributos em uma das classes para armazenar essa informação, 
mas, na maioria das vezes, diversos deles seriam deixados em branco e, em 
alguns casos, poderiam não ser suficientes. 
Assim, é preciso criar uma classe para guardar essa informação, 
representada pela classe Atua, que conterá o atributo papel, referindo-se este 
exclusivamente a um ator específico atuando em um determinado filme. Uma 
classe associativa pode perfeitamente ter métodos também. Classes 
associativas são válidas somente quando existe um único objeto relacionado a 
duas instâncias associadas, no caso do exemplo, um ator atuando em um filme 
terá um único papel. Caso um ator interpretasse dois papéis em um mesmo 
filme, o uso da classe associativa não seria o mais adequado, sendo 
necessário inserir uma classe normal atuando como classe intermediária da 
associação, conforme demonstra a figura 13. 
 
 
Figura 13 - Classe Intermediária 
 
Na figura 13 utilizamos o mesmo exemplo apresentado na figura 12, 
substituindo a classe associativa por uma classe intermediária, representando 
uma situação em que um ator poderia atuar em muitos filmes e um filme 
20 
 
poderia ter muitos atores, diferindo-se da situação anterior por permitir que um 
ator interprete mais de um papel no mesmo filme. 
4.2.6 Dependência 
Este relacionamento, como o próprio nome diz, identifica certo grau de 
dependência de uma classe em relação à outra. O relacionamento de 
dependência é representado por uma linha tracejada entre duas classes, 
contendo uma seta apontando para a classe da qual a classe posicionada na 
outra extremidade do relacionamento é dependente. 
O relacionamento de dependência é utilizado também em diversos 
outros diagramas, tendo algumas variações definidas por estereótipos, como 
include ou extend no diagrama de casos de uso, instanciate no diagrama de 
objetos ou merge no diagrama de pacotes. 
4.2.7 Realização 
Uma realização é um tipo de relacionamento especial que mistura 
características dos relacionamentos de generalização e dependência, sendo 
usada para identificar classes responsáveis por executar funções para outras 
classes. Esse tipo de relacionamento herda o comportamento de uma classe, 
mas não sua estrutura. O relacionamento de realização é representado por 
uma linha tracejada contendo uma seta vazia que aponta para a classe, que 
tem uma ou mais funções que devem ser realizadas por outra, enquanto na 
outra extremidade da linha é definida a classe que realiza esse 
comportamento. A associação de realização pode ser comparada à palavra-
chave implements da linguagem Java, que determina que uma classe 
implementará os métodos definidos em outra classe, ou seja, realizará o 
comportamento de outra classe. A figura 14 apresenta um exemplo de 
relacionamento de dependência e realização. 
 
 
Figura 14 - Relacionamento de Dependência e Realização 
21 
 
 
Como podemos observar nessa figura, a classe Placa-Mae tem um 
relacionamento de dependência com a classe iMonitor, determinando que a 
classe Placa-Mae necessita, de alguma forma, dessa interface. Já a classe 
Monitor, por sua vez, tem um relacionamento de realização com a classe 
iMonitor, o que determina que a classe Monitor implementa algum dos serviços 
oferecidos pela classe iMonitor. Observe que a classe iMonitor tem um 
estereótipo «interface» para destacar sua função. Poderíamos ter colocado o 
estereótipo boundary, que será estudado nas próximas aulas, mas preferimos 
utilizar o estereótipo interface para deixar mais clara a função da classe. 
22 
 
EXERCÍCIOS 
1) O que é agregação? 
2) Qual é o objetivo da agregação? 
3) Qual é o símbolo de agregação? 
4) O que é composição? 
5) Qual é a característica da associação de composição? 
6) Qual é o símbolo da associação de composição? 
7) O que é Generalização/Especialização? 
8) Quando ocorre uma generalização/especialização? 
9) Quais são as características para se declarar novamente um método em 
uma classe especializada? 
10) O que é uma classe associativa? 
11) Quando são necessárias as classes associativas? 
12) O que é um relacionamento de dependência entre as classes? 
13) Como é representado um relacionamento de dependência? 
14) O que é o relacionamento de realização? 
15) Explique o relacionamento de realização? 
16) Como é representado um relacionamento de realização?

Outros materiais