Post on 18-Dec-2014
description
Prof. Marcello Thiry <marcello.thiry@gmail.com>
PROGRAMAÇÃO ORIENTADA A OBJETOS
Unidade 2 (parte 2)
3º período
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
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
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
Note que agora, a lista é de objetos “Orientacao”
No lado Professor (vários alunos)...
marcello.thiry@gmail.com
Note que agora, o objeto é uma “Orientacao”
No lado Aluno (0 ou 1 professor)...
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
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
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
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
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.