poo - unidade 2 (parte 2) - classe de associação, agregação, composição (versão 2)

58
Prof. Marcello Thiry <[email protected]> PROGRAMAÇÃO ORIENTADA A OBJETOS Unidade 2 (parte 2) 3º período

Upload: marcello-thiry

Post on 18-Dec-2014

224 views

Category:

Education


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

Prof. Marcello Thiry <[email protected]>

PROGRAMAÇÃO ORIENTADA A OBJETOS

Unidade 2 (parte 2)

3º período

[email protected]

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

[email protected]

Alguma ideia sobre como implementar?

? ?

[email protected]

E agora?

[email protected]

A interface List é implementada pela classe ArrayList

Qual a vantagem de utilizar uma interface neste caso?

[email protected]

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

* A interface List estende a interface Collection

[email protected]

E a classe Turma?

... Alguma diferença?

[email protected]

Você lembra do nosso último exercício?

[email protected]

Ainda sobre associações...

Voltando ao exemplo da orientação...

14

[email protected]

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

[email protected]

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

[email protected]

Classe deAssociação

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

[email protected]

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

[email protected]

Atributos e operações

específicas de Orientação

[email protected]

Como implementar?

[email protected]

Como fica fisicamente...

[email protected]

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

[email protected]

Tupla ligando as duas instâncias associadas

[email protected]

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

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

[email protected]

Sincronismo

[email protected]

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

[email protected]

Note que agora, o objeto é uma “Orientacao”

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

[email protected]

Removendo aassociação

[email protected]

O aluno ainda não tinha um orientador

[email protected]

O aluno játinha um orientador

[email protected]

Sincronismo

[email protected]

Associações n-árias

[email protected]

Associações n-árias

Associa várias classes

[email protected]

Associações n-árias

Classe de Associação

[email protected]

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)

[email protected]

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?

[email protected]

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

[email protected]

42

Agregação

Faz sentido termos uma Turma sem Aluno(s)?

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

[email protected]

43

Agregação

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

[email protected]

44

Agregação

O objeto Parte é um atributo

do Todo

[email protected]

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

[email protected]

Agregação

Implementação similar a uma Associação

46

[email protected]

Agregação

Implementação similar a uma Associação

Precisamos aindaincluir as restrições...

47

[email protected]

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

[email protected]

49

Composição

Item é parte de um Pedido

Um Item sem Pedido não faz sentido

[email protected]

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

[email protected]

51

Composição

[email protected]

52

Composição

Quem gerencia as partes é o objeto Container/Compositor

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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/

[email protected]

Referências57

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