Buscar

Aula 09 - LPG

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

Prévia do material em texto

Aula 09: Relacionamentos entre Classes e entre Objetos 
 
Objetivos 
 
 Recordando... 
Nas aulas passadas, criamos algumas aplicações nas quais as classes possuíam uma 
relação entre si que implicava em que uma classe (a subclasse) era uma especialização de 
outra (a superclasse). Tal relação, como vimos, é a relação de herança. 
Em muitos problemas, entretanto, esta relação não é a que desejamos representar. 
Especialmente, quando temos relacionamentos a indicar entre os objetos que serão 
instanciados a partir das classes, que, apesar de se relacionarem, são oriundos de classes 
totalmente distintas. Para tais casos, que exemplificaremos no decorrer da aula, são 
usados outros modelos de relações entre classes e entre objetos. 
 Outros tipos de relações entre classes 
A linguagem UML possui representações para três tipos de relações entre classes: de 
herança (que já vimos anteriormente), de 
dependência e de associação. A relação de 
dependência não implica em uma relação entre 
objetos, mas muitas vezes é útil para a 
implementação de algum método de uma das classes, dessa forma é indicada no 
diagrama de classes. A representação de dependência é feita com uma seta tracejada, 
como no exemplo ao lado: 
Neste caso, a classe Diretoria depende da classe Disciplina, pois se algo mudar em 
Disciplina, esta mudança poderá afetar a forma de implementação de Diretoria, ou seja 
haverá alteração em algum método que faça referência à classe de dependência. No caso, 
o método CriaCurso pode depender de algum parâmetro da classe Disciplina. 
As relações de herança e dependência são relações exclusivamente entre classes. Já as 
relações de associação dizem respeito diretamente aos objetos instanciados a partir das 
classes representadas no diagrama de classes. 
 Relações de associação 
Existem três tipos de relação de associação. Nas associações simples, os objetos 
derivados das classes associadas possuem alguma 
associação entre si. Veja o exemplo ao lado: 
Se quisermos representar a relação apenas de um 
lado para o outro, por exemplo, queremos apenas 
saber qual o endereço de um professor, então 
colocamos na classe Professor um atributo que seja da classe Endereço: 
 
public class Professor{ 
 Endereço endereço; // atributo simples 
 ... 
} 
 Apresentar outros relacionamentos entre classes e entre objetos 
 Compreender as relações de associação 
 Compreender as relações de agregação 
 Compreender as relações de composição 
 
 
Caso haja necessidade de saber, dado um determinado endereço, qual a pessoa (ou 
professor) que está a ele relacionado, então também haveria necessidade de incluir 
referências na classe Endereco à classe Professor, ou a uma classe hierarquicamente 
superior (Pessoa, por ex.): 
 
public class Endereco{ 
 Pessoa pessoa; // atributo simples 
 ... 
} 
 
Caso a cardinalidade da relação fosse maior que um, deveríamos criar uma coleção. 
Assim, se o diagrama fosse: 
Então a implementação deveria permitir à classe 
professor possuir vários endereços: 
 
public class Professor{ 
 Endereço[] endereço; // atributo array 
 ... 
} 
 
Podemos ainda ter associações recursivas entre 
elementos de uma determinada classe, como do 
diagrama ao lado: 
A associação permite definir um papel (titular e 
reserva, no ex.). A implementação, caso estivéssemos 
interessados em saber apenas quem é o professor 
substituto de um professor titular, seria: 
 
public class Professor{ 
 Professor substituto; //atributo recursivo simples 
 ... 
} 
 
Há casos, entretanto, em que a relação é mais complexa e é definida por uma classe, 
chamada de classe de associação: 
Neste caso, a implementação da classe de 
associação provavelmente fará referência aos 
objetos das classes que se relacionam, além de 
acomodar outros atributos e operações de 
interesse para esta associação: 
 
public class Contrato{ 
 Aluno contratante; 
 Instituicao contratado; 
 ... 
} 
 
 
 Relações de agregação 
O segundo tipo de relações de associação é a relações de agregação. Neste tipo de 
relação, uma das classes faz parte da outra, mas 
também pode existir por sua própria conta. 
Veja: 
Neste caso, um curso agrega disciplinas, mas 
pode haver uma disciplina independentemente 
da existência do curso. 
 
public class Curso{ 
 Disciplina[] disciplinas; 
 ... 
} 
Neste caso, mesmo que um objeto da classe Curso deixe de existir, os objetos da classe 
Disciplina que faziam parte deste curso poderão continuar a existir, até porque estas 
disciplinas podem também fazer parte de outros cursos que não tenham sido extintos. 
 
 Relações de composição 
O terceiro tipo de relações de associação é uma relação de agregação especial, chamada 
de composição, em que uma classe, além de fazer parte da outra, não pode existir sem a 
classe que a contém. Neste caso, a extinção de um objeto da classe que contém causa a 
extinção dos objetos das classes que a 
compõem. Veja o exemplo: 
 
 
public class Instituicao{ 
 Departamento[] departamentos; 
 ... 
} 
 
 
 Exercício 
Observe o diagrama de classes UML abaixo: 
Crie a estrutura das classes, adicionando às mesmas os atributos que julgue necessários 
para contemplar as associações de acordo com as cardinalidades e papeis descritos no 
diagrama de classes. 
O método encerrar projeto deve avaliar todos os funcionários que estão participando de 
um determinado projeto e, caso seja um funcionário contratado, emitir um aviso de 
demissão ou, caso seja um funcionário efetivo, desvinculá-lo do projeto e avisar ao chefe 
de departamento que o funcionário está disponível para ser alocado a outro projeto. O 
método de remuneração para o funcionário efetivo deve considerar o seu salário mais 
abono de 10% caso a duração em meses decorridos do projeto não tenha excedido o 
tempo de duração em meses (que é o tempo previsto originalmente para o projeto). Para 
o caso do funcionário contratado, a remuneração deve constar do salário mais um bônus 
de 5% caso o projeto esteja no primeiro terço do tempo previsto, 10% para o segundo 
terço e 15% para o terceiro terço. Caso o projeto tenha excedido o tempo, a remuneração 
deve ser somente o salário.

Continue navegando