poo - unidade 2 (parte 1) - diagrama de classe - associação (versão 2)

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

Upload: marcello-thiry

Post on 18-Dec-2014

222 views

Category:

Education


5 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

Page 1: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

Prof. Marcello Thiry <[email protected]>

PROGRAMAÇÃO ORIENTADA A OBJETOS

Unidade 2 (parte 1)

3º período

Page 3: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

UML3

Linguagem de Modelagem Unificada

Padrão OMG (Object Management Group) desde 1997

http://www.uml.org/

http://www.omg.org/spec/UML/2.5/Beta2/PDF/

Page 4: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Diagramas UML4

14 diagramas

7 diagramas estruturais

Visão estática

7 diagramas comportamentais

Visão dinâmica

Page 5: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

5

UML 2.5 (beta 2), pg. 718

Page 6: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Diagramas UML6

14 diagramas

Mas, iremos trabalhar nesta disciplina com apenas 2 diagramas

Page 7: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

7

Visão estática

Visão dinâmica

Page 8: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Diagrama de classe

Descreve a estrutura de um sistema

Um diagrama de classe permite visualizar:

classes do sistema, seus atributos e operações

relacionamentos entre as classes

relacionamentos entre classes e interfaces

8

Page 9: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Principais relacionamentos

Generalização / Especialização (herança)

Associação

Agregação e Composição

9

Já trabalhamos com herança na Unidade 1

Page 10: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Associação

Relação entre ocorrências (objetos) das classes

Indica que objetos “Professor” estarão associados com objetos “Aluno”

10

Page 11: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

11

Professores Alunos

marcello

alessandro

fabiane

anita

joao

maria

pedro

jose

objetos com objetos

Page 12: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Associação

Mas, qual é a relação entre Professor e Aluno?

12

Page 13: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Associação13

Page 14: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

14

Nome da associação(indica a semântica da conexão entre os objetos)

Page 15: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

15

Note que a semântica é diferente nas duas

associações

Page 16: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

16O nome da associação devesempre ser uma frase verbal

Page 17: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

A semântica aqui é diferente?São mesmo duas associações

diferentes?

Page 18: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Se a semântica é a mesma, então é a mesma associação

Page 19: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

19

Mas, como devemos ler a associação?

quem orienta quem? quem coordena quem?

Page 20: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

20Sem conhecer o negócio, a leitura destas associações é ambígua!

Page 21: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

E agora? Facilitou o entendimento?

Page 22: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Indica a direção da associação (orienta a

leitura)

Page 23: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Lado da associação(uma associação possui

dois lados)

Page 24: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Lado da associação(uma associação possui dois lados)

Page 25: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Professor “orienta” AlunoProfessor “coordena” Aluno

Page 26: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Mas, um professor pode orientar quantos alunos?

Page 27: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

UM professor orienta VÁRIOS alunos

VÁRIOS = = 0, 1 ou mais*

Page 28: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

UM aluno é orientado por UM professor

Mas,

Regras de negócio:

Todo e qualquer aluno precisa ter um orientadorNem todo professor precisa orientar um aluno

Page 29: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

UM professor coordena VÁRIOS alunos

UM aluno é coordenado por UM professor

Pegou a ideia?

Page 30: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Multiplicidade

Define quantos objetos participam em um relacionamento

O número de objetos de uma classe relacionada a UMobjeto da outra classe

Deve ser especificada em cada lado da associação

30

Page 31: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Multiplicidade x Cardinalidade

Cardinalidade

Número de elementos em um conjunto

Multiplicidade

A especificação do intervalo de valores de cardinalidade permitidas – o tamanho – que um conjunto pode assumir

31

(Booch, Rumbaugh e Jacobson, 1999)

Page 32: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Indicadores de multiplicidade32

Vários/Muitos/Zero, um ou mais:

Um ou mais:

Zero ou um:

Exatamente um:

Exatamente três:

Faixa especificada:

Múltiplas faixas:

**1..

0..1

1

3

2..4

2..4, 6..8

Page 33: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Veja se você consegue ler....

Page 34: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

34

Professores Alunos

marcello

alessandro

fabiane

anita

joao

maria

pedro

jose

1 para 1

Page 35: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

35

Professores Alunos

marcello

alessandro

fabiane

anita

joao

maria

pedro

jose

1 para *

Page 36: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

36

Professores Alunos

marcello

alessandro

fabiane

anita

joao

maria

pedro

jose

para **

Page 37: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

1 1

Page 38: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

1 1

Um objeto Professor aponta para um objeto Aluno

O objeto Professor precisa de um ponteiro (objeto)

Page 39: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

1 1

A classe Aluno é independente da classe Professor

A classe Professor depende da classe Aluno

Page 40: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

0..1 *

Agora, as regras de negócio espelham melhor a realidade: Nem todo professor precisa ter um orientando ( = 0, 1 ou +)

Um professor pode ter vários orientandos ( = 0, 1 ou +)

Um aluno pode ter ou não um professor orientador, mas nunca mais do que um orientador (0..1)

*

*

Page 41: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Alguma ideia para tratar este lado da associação?

Como um objeto Professor poderá apontar para vários objetos Aluno?

Page 42: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

0..1 *

Page 43: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

*0..1

Page 44: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

*

O que você acha? Faz mais sentido?

0..1

Page 45: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Navegabilidade45

Unidirecional

Bidirecional

Indefinida

Page 46: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Navegabilidade

Os dados podem fluir em uma ou em ambas as direções através da associação

Canal de comunicação pelo qual, os objetos conversam entre si (trocam mensagens)

Uma mensagem pode ser uma requisição por informação ou uma requisição para executar uma ação

Uma mensagem é trocada quando um objeto “chamador” invoca uma operação de um objeto “receptor”

46

Page 47: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

47Se utilizarmos uma associação bidirecional no nosso exemplo, o nome da associação valerá apenas para uma das direções!

Page 48: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

48Mas, quando pensamos na implementação, precisamos considerar um atributo para cada lado, certo?!

Papel (role) assumido pelos objetos Aluno nesta associação

Papel (role) assumido pelo objeto Professor

nesta associação

Page 49: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Nomeando uma associação com nomes de papel (role names)

Note que, se utilizarmos nomes de papel, é uma boa prática evitar o nome da associação (poderia deixar o diagrama “poluído”)

Page 50: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Implementando a partir dos nomes dos papéis interpretados pelas classes

Papel do Professor

Papel do Aluno

Page 51: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Nomeando uma associação com nomes de papel (role names)

Você notou o sinal?

Page 52: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Nomeando uma associação com nomes de papel (role names)

Representa o modificador de visibilidade “privado”

Page 53: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Tudo ok com esta representação?

O que deveríamos interpretar?

Page 54: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Haveria duplicação de atributos com o mesmo nome!

Se você utilizou uma associação, não coloque sua implementação nas classes do diagrama

Page 55: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Mas, qual é o problema

que temos quando a

associação é bidirecional?

Page 56: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Vamos considerar um cenário, onde temos um Professor chamado “marcello” que orienta dois Alunos chamados “joao” e “pedro”

Vamos criar primeiro o objeto Professor:

Professor marcello = new Professor (“Marcello”);

Observe que se Professor fosse obrigado a ter um orientando, teríamos uma situação inconsistente

Poderíamos criar o objeto Aluno antes e repassá-lo ao Professor no momento da instanciação

Mas, se um Aluno também tivesse que ter obrigatoriamente um orientador?

Page 57: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

joao.setOrientador(marcello);

pedro.setOrientador(marcello);

Cenário onde temos um objeto Professor chamado “marcello” e dois objetos Aluno chamados “joao” e “pedro”:

Como seria a implementação da operação “setOrientador”?

Page 59: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Se houver um orientador, então precisamos sincronizar antes...

E garantir que o novo orientador também conhecerá o novo orientando

Operação “Atômica” (indivisível)

Page 60: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Outra forma, caso não seja implementada a operação “delOrientando” na classe Professor

Retornaria a lista de orientandos ArrayList<Aluno>

Page 61: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Lembre-se:

Semânticas diferentes, associações diferentes!

Page 63: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Você precisa garantir as regras:

Um aluno não pode ficar sem coordenadorUm coordenador precisa ter, pelo menos, um aluno ...

Page 64: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[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

Page 65: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

65Para exercitar!

Modele um diagrama UML a partir dos seguintes conceitos:

Aluno, Professor, Turma, Disciplina, Curso

Pense na sua realidade dentro da universidade

Page 66: POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)

[email protected]

Referências66

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, 2013. http://www.omg.org/spec/UML/2.5/Beta2/PDF/