POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (versão 2)

Post on 18-Dec-2014

224 views 10 download

description

Material utilizado na disciplina de Programação Orientada a Objetos (animações e outros efeitos foram perdidos no carregamento). Ciência da Computação (3o período). Universidade do Vale do Itajaí - Campus Kobrasol.

Transcript of POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (versão 2)

Prof. Marcello Thiry <marcello.thiry@gmail.com>

PROGRAMAÇÃO ORIENTADA A OBJETOS

Unidade 2 (parte 2)

3º período

marcello.thiry@gmail.com

2

marcello.thiry@gmail.com

Para considerar:

Associações bidirecionais...

... aumentam o acoplamento (dependência entre classes), reduzindo a reusabilidade

... aumentam a complexidade da implementação, poisexigem que o sincronismo seja mantido nos dois lados da associação

... quando definidas como vários para vários, aumentam ainda mais a complexidade da implementação

marcello.thiry@gmail.com

Alguma ideia sobre como implementar?

? ?

marcello.thiry@gmail.com

E agora?

marcello.thiry@gmail.com

marcello.thiry@gmail.com

marcello.thiry@gmail.com

A interface List é implementada pela classe ArrayList

Qual a vantagem de utilizar uma interface neste caso?

marcello.thiry@gmail.com

Quem utilizar a classe Aluno não precisará saber qual a classe List* que foi utilizada

* A interface List estende a interface Collection

marcello.thiry@gmail.com

E a classe Turma?

... Alguma diferença?

marcello.thiry@gmail.com

marcello.thiry@gmail.com

marcello.thiry@gmail.com

Você lembra do nosso último exercício?

marcello.thiry@gmail.com

Ainda sobre associações...

Voltando ao exemplo da orientação...

14

marcello.thiry@gmail.com

Ainda sobre associações...

E se precisarmos de informações adicionais que deveriam estar na associação?

Por exemplo, se for necessário armazenar o título do trabalho de conclusão de curso (TCC)

Note que o TCC não é uma informação do aluno e nem do professor, mas da associação de orientação entre professor e aluno

15

marcello.thiry@gmail.com

O que você acha então de considerarmos a associação bidirecional como uma classe?

marcello.thiry@gmail.com

Classe deAssociação

O que você acha então de considerarmos a associação bidirecional como uma classe?

marcello.thiry@gmail.com

Quando usar uma Classe de Associação?

Quando a associação precisa de atributos ou operações

Note que utilizar uma Classe de Associação acrescenta a seguinte restrição (Fowler e Scott, 2003):

Poderá haver apenas uma instância da classe de associação entre quaisquer objetos participantes

No nosso exemplo, não poderiam existir duas instâncias de orientação que relacionem o mesmo professor e aluno (mesmo que a associação seja vários para vários)

18

marcello.thiry@gmail.com

Atributos e operações

específicas de Orientação

marcello.thiry@gmail.com

Como implementar?

marcello.thiry@gmail.com

Como fica fisicamente...

marcello.thiry@gmail.com

Visão física (implementação)

marcello.thiry@gmail.com

marcello.thiry@gmail.com

Tupla ligando as duas instâncias associadas

marcello.thiry@gmail.com

Note que agora, a lista é de objetos “Orientacao”

No lado Professor (vários alunos)...

marcello.thiry@gmail.com

marcello.thiry@gmail.com

Sincronismo

marcello.thiry@gmail.com

marcello.thiry@gmail.com

No lado Aluno (0 ou 1 professor)...

marcello.thiry@gmail.com

Note que agora, o objeto é uma “Orientacao”

No lado Aluno (0 ou 1 professor)...

marcello.thiry@gmail.com

marcello.thiry@gmail.com

Removendo aassociação

marcello.thiry@gmail.com

O aluno ainda não tinha um orientador

marcello.thiry@gmail.com

O aluno játinha um orientador

marcello.thiry@gmail.com

Sincronismo

marcello.thiry@gmail.com

Associações n-árias

marcello.thiry@gmail.com

Associações n-árias

Associa várias classes

marcello.thiry@gmail.com

Associações n-árias

Classe de Associação

marcello.thiry@gmail.com

Associações Reflexivas

Uma Pessoa pode ter vários filhos (que também são objetos da classe Pessoa)

Uma Tarefa pode ter várias sucessoras (que também são objetos da classe Tarefa)

marcello.thiry@gmail.com

Implemente os exemplos destes slides

Implemente um relacionamento vários para vários, usando uma Classe de Associação

Implemente o exercício da última aula

Preparado para sofrer um pouquinho?

marcello.thiry@gmail.com

Relacionamento de Agregação

Especialização de uma Associação

Conexão entre objetos é mais forte

Um objeto Todo é relacionado com seus objetos Parte

Relacionamento “todo-parte”

41

marcello.thiry@gmail.com

42

Agregação

Faz sentido termos uma Turma sem Aluno(s)?

Uma Turma não seria um agregação de Aluno(s)?

marcello.thiry@gmail.com

43

Agregação

Mas, note que um objeto Aluno pode existir sem uma Turma

marcello.thiry@gmail.com

44

Agregação

O objeto Parte é um atributo

do Todo

marcello.thiry@gmail.com

Agregação

A existência do objeto Parte faz sentido, mesmo não existindo o objeto Todo

Os objetos Parte podem ser compartilhados com mais de um objeto Todo

Agregador Agregado

45

marcello.thiry@gmail.com

Agregação

Implementação similar a uma Associação

46

marcello.thiry@gmail.com

Agregação

Implementação similar a uma Associação

Precisamos aindaincluir as restrições...

47

marcello.thiry@gmail.com

Relacionamento de Composição

Forma mais forte de Agregação

Relacionamento “de contenção”

Um objeto Todo contém um ou mais objetos Parte

Um objeto Parte está contido em, pelo menos, um objeto Todo

Um objeto Parte sozinho não faz sentido

O losango agora é preenchido

48

marcello.thiry@gmail.com

49

Composição

Item é parte de um Pedido

Um Item sem Pedido não faz sentido

marcello.thiry@gmail.com

Composição

Ao destruir o objeto Todo, os objetos Parte também deveriam ser destruídos

O compositor tem responsabilidade exclusiva sobre gerenciar suas partes (criação e destruição)

50

Container / Compositor Elemento / Parte

marcello.thiry@gmail.com

51

Composição

marcello.thiry@gmail.com

52

Composição

Quem gerencia as partes é o objeto Container/Compositor

marcello.thiry@gmail.com

Quando usar Composição?

O relacionamento é descrito com uma frase “parte de”:

Um botão é “parte de” uma janela

Algumas operações no todo são automaticamente aplicadas a suas partes?

Mover a janela, mover o botão

Excluir o pedido, excluir todos os itens do pedido

53

marcello.thiry@gmail.com

Quando usar Composição?

Alguns valores de atributos são propagados do todo para todos ou algumas de suas partes?

A fonte da janela é Arial, a fonte do botão é Arial

Existe uma assimetria inerente no relacionamento onde uma classe é subordinada a outra?

Um botão É parte de uma janela, uma janela NÃO É parte de um botão

54

marcello.thiry@gmail.com

Rever a modelagem do nosso sistema de Contas Bancárias

Rever a modelagem do nosso sistema de Folha de Pagamento

Rever a modelagem do nosso sistema Acadêmico

Vamos revisar...

marcello.thiry@gmail.com

Referências56

Grady Booch, James Rumbaugh, and Ivar Jacobson. The Unified Modeling Language User Guide. 2nd ed. Addison-Wesley, 2005.

Ricardo Pereira e Silva. UML 2 em Modelagem Orientada a Objetos. Visual Books, 2007.

OMG (Object Management Group), OMG Unified ModelingLanguage v2.5, 2012. http://www.omg.org/spec/UML/2.5/Beta1/PDF/

marcello.thiry@gmail.com

Referências57

Martin Fowler. UML Distilled: A Brief Guide to the Standard Object Modeling Language. 3th ed. Addison-Wesley, 2003.

marcello.thiry@gmail.com

marcello.thiry@gmail.com