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

POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

Embed Size (px)

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.

Citation preview

Page 1: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

Prof. Marcello Thiry <[email protected]>

PROGRAMAÇÃO ORIENTADA A OBJETOS

Unidade 1 (parte 2)

3º período

Page 3: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Legenda usada nos slides3

Conceito-chave: definição fundamental no contexto da Orientação a Objetos (OO).

Importante: informações complementares, mas relevantes para o entendimento da OO.

Atenção: você deve ficar atento para não cair em armadilhas ou falhas de entendimento.

Page 4: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Você lembra...4

Page 5: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

E se criarmos outro objeto...5

umaPessoa e outraPessoa apontam para o mesmo objeto?

umaPessoa e outraPessoa têm o mesmo estado?

O que isso significa?

Page 6: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

O que você pensou?6

E se fizermos

Page 7: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Revisando...7

umaPessoa e outraPessoa são objetos diferentes

Apontam para áreas de memória diferentes

umaPessoa e outraPessoa podem ter o mesmo estado num determinado momento

Duas variáveis com o mesmo valor não são a mesma variável

Page 8: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Como funciona... 8

Endereço Valor

100 ??

101 ??

102 ??

103 ??

104 ??

105 ??

106 ??

... ...

umaPessoa

Page 9: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Como funciona... 9

Endereço Valor

100 ??

101 ??

102 ??

103 ??

104 ??

105 ??

106 ??

... ...

umaPessoa

Page 10: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Como funciona... 10

Endereço Valor

100 ??

101 ??

102 nome = “ ”......

103

...

200 ??

201 ??

... ...

umaPessoa

novo objeto Pessoa

102

Page 11: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Como funciona... 11

Endereço Valor

100 102

101 ??

102 nome = “ ”......

103

...

200 ??

201 ??

... ...

umaPessoa

novo objeto Pessoa

“Marcello”

Page 12: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Como funciona... 12

Endereço Valor

100 102

101 201

102 nome = “Marcello”......

103

...

200 ??

201 nome = “João”......

...

...

umaPessoa

outraPessoa

Page 13: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

E se...13

O que você acha que irá acontecer?

Experimente imprimir o nome de umaPessoae outraPessoa e analisar o resultado...

Page 14: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Vamos colocar a mão na massa!!!14

A partir das atividades anteriores, exercite o que acabamos de discutir e tente explicar o resultado

Depois, altere o nome de umaPessoa e imprima novamente: o que aconteceu?

Page 15: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

E se tivéssemos algo como...15

Alguma ideia para implementar esta operação?

Page 16: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Aguarde um pouco mais, chegaremos

lá...

16

Page 17: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Antes, vamos voltar a alguns conceitos-chave...17

O que você entende por reutilização?

Copiar e colar?

Faz sentido?

Qual o risco?

Duplicar código é reutilizar?

Page 18: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Como você trabalha reutilização?18

Como você trabalha com sub-rotinas?

Procedimentos

Funções

Parâmetros

E agora, classes e objetos!!!

Lembra da abstração?

Page 19: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Vamos analisar...19

Page 20: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Vamos analisar...20

Você sentiu também!?

Page 21: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Duplicação de código...21

Page 22: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Ficou melhor?22

Mas, falta alguma coisa?

Page 23: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Voltando a análise....23

Como um Aluno saberá fazer o que uma Pessoa já faz?

Você já parou para pensar que faz sentido dizer:

Um Aluno é uma Pessoa

Legal, mas como iremos fazer isso acontecer?

Page 24: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Generalização24

Relacionamento que indica Herança

O sentido do relacionamento é da classe mais especializada (subclasse) para a mais genérica (superclasse)

Aluno é a subclasse (mais especializada)

Pessoa é a superclasse (mais genérica)

Page 25: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Generalização25

A subclasse herda todos os atributos e operações da

superclasse

Cada objeto (instância) da subclasse é também uma instância indireta da superclasse

A superclasse tem um nível de abstração maior do que a subclasse

Page 26: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Generalização / Especialização26

Sentido da generalização

Sentido da especialização

Page 27: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Níveis de abstração27

Abstraçãomais alta

Abstraçãomais baixa

Page 28: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Abstração e reusabilidade28

Maiorreusabilidade

Menorreusabilidade

Page 29: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Generalização em Java29

Page 30: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Generalização em Java30

Page 31: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Hora de reutilizar...31

Caiu a ficha?

Page 32: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

O que essa figura tem a ver com herança?

32

Page 33: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Revendo os tipos de herança33

Herança simples

A subclasse herda suas características e comportamento de uma única superclasse

Herança múltipla

A subclasse herda suas características e comportamento de duas ou mais superclasses

Page 34: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

34

A subclasse (CarroSubmarino)

herda de duas superclasses

(Carro e Submarino)

Page 35: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Herança múltipla em Java35

A linguagem Java implementa somente herança simples

É possível utilizar Interfaces e Composição para simular parcialmente aspectos da herança múltipla

Voltaremos a discutir Interfaces e Composição em aulas futuras

Algumas linguagens OO, como C++ e Common Lisp (CLOS) implementam herança múltipla

Page 36: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Considerações sobre herança múltipla36

A subclasse precisa ter uma relação “é um” com todas as suas superclasses

Deve-se utilizar com cuidado para evitar que o modelo fique confuso e de difícil manutenção

Page 37: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

37

“Problema do diamante”

Você percebe a ambiguidade?

Page 38: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

38Linguagens OO que implementam herança

múltipla devem fornecer soluções

para mitigar este problema

Page 39: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Você já perguntou sobre...39

... o significado dos modificadores de visibilidade

“–” e “+” nas classes modeladas com UML?

... a utilidade dos modificadores de acesso “private” e “public” em Java?

Page 40: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Visibilidade e modificadores de acesso40

Notação visual

Modificadorde acesso

A parte é visível...

+ publicdentro da própria classe e para qualquer outra classe

– private somente dentro da própria classe

# protectedsomente dentro do próprio pacote e das subclasses em outros pacotes

~ packagesomente dentro da própria classe e das classes dentro do mesmo pacote

Page 41: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Visibilidade “package” em Java41

Para representar a visibilidade “package”, você não deve especificar um modificador de acesso

Quando não é especificado um modificador de acesso, o Java assume que a visibilidade é do tipo “package”

Page 42: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Visibilidade “package” em Java42

Para cada arquivo “.java” deve haver, pelo menos, uma classe “public” com o mesmo nome do arquivo

As demais classes declaradas no mesmo arquivo devem ser “package”

Ou seja, não devem especificar um modificador de acesso

Page 43: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Visibilidade de atributos e operações43

Modificador na ClasseAlfa ClasseAlfa ClasseBeta SubAlfa Gama

public S S S S

protected S S S N

sem modificador S S N N

private S N N N

Page 44: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Na prática, adotaremos...44

As classes serão públicas Uma única classe em cada arquivo “.java”

Logo, o nome da classe e do arquivo deve ser o mesmo

Atributos serão sempre privados Operações podem ser “públicas”, “privadas” ou

“protegidas”

Exceções devem ser tratadas com parcimônia!!

Page 45: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Continuando com a análise...45

Imagine que você foi contratado para desenvolver um sistema acadêmico (matrícula, notas, diários, planos de ensino) para uma universidade

Quais as principais entidades envolvidas?

Page 46: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Continuando com a análise...46

Você pensou primeiro em Pessoa ou em Aluno, Professor, Funcionário, Turma, Disciplina, etc.?

Aluno, Professor e Funcionário são entidades do mundo real que são percebidas pelos usuários

Não parece fazer sentido criar um objeto Pessoa. Ele seria genérico demais e sem muita utilidade...

Você concorda?

Page 47: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Continuando com a análise...47

Tipicamente, ao analisar os requisitos para desenvolver um sistema, percebemos primeiro entidades do

domínio de negócio

Entretanto, muitas vezes, estas entidades possuem similaridades entre si...

Lembra do conceito de classe?

Page 48: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

48

As similaridades entre as entidades podem ser abstraídas numa superclasse comum

Por exemplo, as classes Aluno, Professor e Funcionário poderiam compartilhar a superclasse Pessoa

Tente modelar estas classes antes de prosseguir...

Continuando com a análise...

Page 49: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

49

O que você acha?

Faz sentido, criamos objetos Pessoa?

Qual a utilidade?

Page 50: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Classes Concretas e Abstratas50

Classe Concreta é uma classe que pode ser instanciada diretamente

Classe Abstrata é uma classe que NÃO pode ser instanciada diretamente

No nosso exemplo anterior, como você definiria cada classe?

Page 51: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Classe Abstrata em UML51

Reparou que o nome da classe ficou em itálico?

Page 52: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Classe Abstrata em Java52

A partir de agora, você não poderá instanciar

objetos Pessoa diretamente!

Page 53: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Revisando a classe abstrata53

Classe que não terá objetos instanciados

Quando não faz sentido criar objetos (ex: “Pessoa”)

Pode ser uma classe completa, incluindo atributos, operações e métodos

Oferece a base para uma hierarquia de classes

Oferece um conjunto de operações e métodos comuns a todas as subclasses (base para reutilização!!)

Page 54: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

E se adicionarmos Professor...54

Podemos dizer que um Professor é uma Pessoa?

Claro, mas podemos afirmar também que:

Um Professor é um Funcionário

Page 55: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Professor na hierarquia de herança55

Page 56: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Vamos analisar um pouco mais...56

Veja o que você não entendeu e

pergunte...

Page 57: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Valor inicial57

Page 58: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

?!?!?!?!58

Não tínhamos herdado isso

de Funcionario?

Page 59: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Redefinição de operações (override)59

Considere o seguinte:

Funcionários ganham 3% sobre o valor do salário bruto a cada triênio

Professores com Doutorado ganham 10% a mais sobre o valor calculado do triênio

Page 60: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Redefinição de operações (override)60

Na classe Professor...

e...

Page 61: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Redefinição de operações (override)61

Permite chamar a implementação (método) da superclasse

Page 62: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A classe Funcionario62

...

...

Page 63: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A classe Funcionario63

...

... Alguma ideia para implementar?

Lembra do getIdade()?

Page 64: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

64Mas, você não pensou em simplesmente copiar o código, certo?

Certo!?

Page 65: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A classe Professor65

...

...

Page 66: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Redefinição de operações (override)66

Uma subclasse pode: Adicionar atributos, operações e relacionamentos

Redefinir operações herdadas (com cuidado!)

A redefinição (ou overriding) ocorre quando um operação cuja assinatura já tenha sido especificada recebe um novo método (ou seja, uma nova implementação) em uma classe derivada (subclasse)

Page 67: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Redefinição de operações (override)67

A redefinição deve manter a mesma assinatura da operação original

Page 68: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Abre o olho!!!68

Entrar no ambiente Sophia

Baixar atividade 04

Ler (antes de perguntar!!) com atenção as orientações e segui-las passo a passo

Depois, vocês irão apresentar os resultados e discutir suas dúvidas!

Page 69: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Restringindo a redefinição em Java69

Por default, qualquer operação de uma classe X pode ser redefinida em quaisquer subclasses de X

Entretanto, a redefinição de uma operação pode ser evitada com o uso do modificador “final”

Page 70: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Restringindo a redefinição em Java70

No nosso exemplo, se a operação getTrienio() da superclasse Funcionario for declarada como final, você não poderá redefini-la na subclasse Professor

Page 71: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Modificador “final”71

Resumindo, quando você utiliza o modificador “final”, a operação não poderá ser redefinida pelas subclasses

Mas, este modificador também se aplica a atributos

Page 72: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Modificador “final”72

O modificador “final” também se aplica a atributos

Nossa política estabelece que todos os atributos sejam privados, lembra?

Page 73: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Modificador “final”73

Mas, quando utilizado em atributos, o modificador “final” permite a definição de constantes

Tipicamente, constantes em Java são descritas em caixa alta

Page 74: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Constantes em Java74

O modificador “final” pode ser usado para definir constantes em Java

Mas, Iremos dar preferência para definir constantes com o tipo enum

Tipo especial de classe que permite definir uma variável ou atributo como um conjunto de constantes predefinidas

Page 75: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Tipo “enum”75

A variável ou atributo deve ser igual a um dos valores que foram predefinidos para ela

Uma vez que elas são constantes, os nomes dos atributos de um enum devem estar em CAIXA ALTA

Page 76: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Declarando um tipo “enum”76

Você deve utilizar enum sempre que você precisar representar um conjunto fixo de constantes

Page 77: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Como utilizar o tipo “enum”77

...

...

Page 78: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Construtor para o tipo “enum”78

O construtor para um tipo enum deve ser privado ou package

Este construtor cria automaticamente as constantes que são definidas no início do corpo enum

Você não pode invocar diretamente um construtor enum

Page 79: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Tipo “enum”79

...

Page 80: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Tipo “enum”80

...

Page 81: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Como utilizar o tipo “enum”81...

...

Page 82: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

82Rapidinha!

Revise a implementação

anterior, utilizando o tipo “enum”

Page 83: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Operações abstratas83

Nós já vimos o conceito de classe abstrata

Não é possível instanciar objetos de uma classe abstrata

Mas, e operações abstratas...

Alguma ideia?

Page 84: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Uma operação abstrata é ...84

uma operação que não possui um método A implementação da operação (método) é delegada para as

subclasses

Mas, qual é a vantagem de ter uma operação sem método?

Page 85: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

85Como você

implementaria a

operação

“desenhar()”

Note que a classe Figura é abstrata (representada em itálico na UML)

Da mesma forma, uma operação abstrata também é representada em itálico na UML

Page 86: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

86

O que deve ser desenhado?

Tudo bem, eu não sei o que desenhar. Mas, ainda não entendi por que eu preciso desta

classe?

Page 87: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A ideia aqui é garantir

que todas as subclasses

de “Figura” sejam

obrigadas a fornecer

um método para

“desenhar()”

Page 89: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Classes e operações abstratas89

Nem toda classe abstrata precisa ter uma operação abstrata

Ex: classe “Pessoa”

Toda classe que tem, pelo menos, uma operação abstrata, deve ser abstrata

Page 90: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Operações abstratas

são tipicamente

utilizadas com o

princípio de

polimorfismo!

Page 91: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

91

Poli... o quê????

Page 92: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

92Poli=Muitas

Morfhos=Formas

Page 93: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Polimorfismo93

Princípio pelo qual entidades de tipos diferentes podem ser acessadas através de uma única interface1

1. http://www.stroustrup.com/glossary.html#Gpolymorphism

Page 94: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Polimorfismo94

Diferente objetos “Retangulo” e “Circulo” podem ser acessados através da interface da classe “Figura”

r2

c2

r3

r1

desenhar()

FiguraPrograma usuário

Executa “desenhar()”

Executa “desenhar()”

c1

Page 95: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

95“fig” aponta para um objeto “Retangulo”

“fig” agora aponta para um objeto “Circulo”

Note que o objeto “fig” assumiu mais de um tipoao longo da execução doprograma

Page 96: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

96Este tipo de polimorfismo é conhecido como

“polimorfismo de inclusão”

O “Polimorfismo de Inclusão” é obtido a partir do relacionamento de generalização/especialização (herança).

Uma variável declarada como sendo do tipo da superclasse pode então assumir (referenciar) qualquer objeto que tenha sido criado a partir de suas subclasses.

Page 97: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A variável “fig” está limitada pela interface da classe “Figura”. Logo, você só poderá acessar as operações disponíveis em “Figura”!!

Page 98: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Você entendeu porque a operação “setAltura” não foi reconhecida pelo compilador?

ERRO!

Page 99: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

E agora...Compila?

Typecasting(conversão de tipo)

O compilador reconhece a operação porque ela existe em “Retangulo”

Page 100: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Você saberia explicar o motivo do erro de

compilação?

Page 101: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Pronto! Agora compila, mas...

O erro agora será em tempo de execução!!

Você entende o porquê?

Page 102: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

E se...

Agora compila e não há erro na execução!

Mas, perdemos a transparência do polimorfismo de inclusão!

Page 103: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Ligação1 (biding)103

Ligação prematura (early binding) ou ligação estática (static binding)

Quando o método a ser invocado é definido durante a compilação do programa

Ligação tardia (late binding) ou ligação dinâmica (dynamic binding)

Quando o método a ser invocado é definido somente em tempo de execução do programa

1. Existem autores que utilizam o termo “acomplamento” como tradução de “biding”

Page 104: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Ligação tardia104

O polimorfismo só pode ser aplicado se a linguagem de programação orientada a objetos suportar este mecanismo

Além de conhecida também como ligação dinâmica, pode ser ainda denominada ligação em tempo de execução (runtime biding)

Page 105: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Ligação tardia em Java105

Em Java, a ligação tardia é o comportamento padrão

Exceções:

Métodos “final” não podem ser redefinidos e o polimorfismo não se aplica

Métodos “private” são implicitamente declarados como “final”

Page 106: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Vamos trabalhar um pouco...106

Entrar no ambiente Sophia

Baixar atividade 05

Ler (você já conhece as regras!!) com atenção as orientações e segui-las passo a passo

Depois, vocês irão apresentar os resultados e discutir suas dúvidas!

Page 107: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Existem diferentes tipos de polimorfismo107

Inclusão

Polimorfismo

Ad-hoc(aparente)

Coerção

Paramétrico

Sobrecarga (overload)

Universal(verdadeiro)

(Cardelli e Wegner, 1985) http://lucacardelli.name/papers/onunderstanding.a4.pdf

Page 108: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Tipos de polimorfismo108

Polimorfismo universal ou verdadeiro

Quando uma operação ou tipo trabalha uniformemente para uma gama de tipos definidos na linguagem

Polimorfismo ad-hoc ou aparente

Quando uma operação ou tipo parece trabalhar para alguns tipos diferentes e pode se comportar de formas diferentes para cada tipo (ex: printf do C)

Page 109: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Polimorfismo paramétrico109

Classes paramétricas

Permitem que operações e classes operem sobre dados de diferentes tipos, sem que elas precisem ser reescritas para cada um dos tipos desejados

Uma operação polimórfica tem um parâmetro de tipo implícito ou explícito, o qual determina o tipo de argumento para cada aplicação daquela operação

Page 110: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

110

Template de classe na UML

Objetos desta classe podem ser

declarados para diferentes tipos

(TipoItem) de modo uniforme: o

comportamento será sempre o

mesmo

Parâmetro “Tipo” passado no momento da declaração de variáveis “Pilha”

Page 111: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

111

Template de classe na UMLParâmetro “Tipo” passado no momento da declaração de variáveis “Pilha”

Page 112: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

Em Java, templates são

denominados tipos genéricos:

Generics

Page 113: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

<TipoItem> pode assumir

qualquer tipo, mas o

comportamento será sempre

o de uma Pilha!

Page 114: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

Construtores

Você pode implementar vários construtores, mas eles precisam ter assinaturas diferentes!

Page 115: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Chama o construtor

que aceita um “int”

como parâmetro

Page 116: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Operador ternário

(condicional)

Page 117: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

O que é isso?

Page 118: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A superclasse java.lang.Object118

Base da hierarquia de classes do Java

Qualquer classe Java é uma subclasse (direta ou indireta) da classe Object

Portanto, qualquer classe que você utiliza ou implementa, herda atributos e operações da classe Object

http://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html

Page 119: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A superclasse java.lang.Object119

Você pode redefinir (override) os métodos das operações de Object

Lembre-se então que qualquer objeto instanciado será também um objeto Object

Voltaremos a discutir a classe Object em

aulas futuras

Page 120: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Criamos um vetor de objetos genéricos

(qualquer objeto criado a partir de qualquer

classe pode ser colocado neste vetor)

Page 121: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Forçamos então uma conversão (typecasting) para o tipo passado como parâmetro

Page 122: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Tiro curto!

Complete a

implementação

da classe Pilha,

usando Generics

Teste com uma pilha de Figuras...

Page 123: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A classe java.util.ArrayList123

Page 124: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Outras classes paramétricas em Java124

java.util.Vector<E> http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html

java.util.HashMap<K,V> http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

java.util.Stack<E> http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

...

Page 125: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Sobrecarga (overload)125

Permite diferentes versões de uma mesma operação que aparenta funcionar com diferentes tipos

Os tipos não precisam possuir estrutura comum

A assinatura de cada versão da operação deve ser diferente

As versões das operações não têm relacionamento entre si

Classificada como polimorfismo ad-hoc (aparente) ou não verdadeiro

Page 126: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Sobrecarga (overload)126

Bastante utilizado para construtores

Permite instanciar um objeto de várias formas

Oportunidade para diferentes inicializações

Mas, pode ser utilizado com qualquer operação

Pode reduzir a legibilidade do código

Você lembra dos dois construtores que implementamos para a classe Pilha?

Page 127: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

127

Outro exemplo...

Page 128: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Coerção128

Conversão entre tipos diferentes, realizada automaticamente pelo compilador

Page 129: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Coerção129

Conversões implícitas do Java:

byte para short, int, long ou double

short para int, long, float ou double

char para int, long, float ou double

int para long, float ou double

long para float ou double

float para double

Page 130: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Coerção e Typecasting130

Coerção

Conversão implícita realizada pelo compilador

Typecasting

Conversão explícita realizada pelo programador

(tipo) variável

Page 131: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Revendo o conceito de Interface

Nós já vimos um conceito de Interface

A interface define o conjunto de operações visíveis (públicas) de uma classe

Define quais operações podem ser invocadas nos objetos de uma determinada classe

Este conceito também é chamado de “protocolo”

131

Page 132: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Revendo o conceito de Interface132

Até agora, a interface estava definida na própria classe

Porém, passaremos a considerar Interface como um mecanismo a parte

Uma Interface é uma especificação de comportamento (ou contrato) que implementadores concordam em implementar

Page 133: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Revendo o conceito de Interface133

Uma Interface é similar a uma classe abstrata, onde todas as operações são também abstratas:

Não pode ser instanciada, pois não possui implementação própria

Funciona como um contrato

A classe que implementa a Interface deve garantir que todas as operações da Interface tenham um método (o contrato deve ser respeitado)

Page 134: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

134

Transformando Figura em uma Interface

Nos exemplos anteriores, a classe Figura havia sido definida

como uma classe abstrata que tinha apenas a operação

abstrata “desenhar()”

Page 135: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Revendo a implementação de “Retangulo”

Contratoaceito

Note que você não “herda” uma

Interface, mas você a “implementa”

Page 136: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Não seria necessário, pois não há herança

Mas, a partir do Java 6, @Override passou a ser

utilizado para indicar também implementação

Page 137: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Notação UML Circular (lollipop)

Relacionamento “Realization”

Page 138: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Notação UML Circular (lollipop)

Tradução para “Realization”: a

Interface é implementada

pela Classe

Page 139: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Note que as classes

“Retangulo” e “Circulo” não

compartilham uma

estrutura comum (elas são

independentes uma da

outra)

Page 140: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

E você pode ainda aplicar o polimorfismo de inclusão!!!

Page 141: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Notação UML para mostrar que a classe “Desenho” utiliza a interface “Figura”

Page 142: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Considerações sobre Interfaces142

Não têm construtores, uma vez que não podem ser instanciadas

Uma mesma interface pode estender uma ou mais interfaces

Uma mesma classe pode realizar (implementar) várias interfaces

Page 143: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Considerações sobre Interfaces143

Classes que realizam (implementam) uma mesma interface não precisam compartilhar uma estrutura comum

Uma interface especifica, usualmente, uma parte limitada do comportamento de uma classe

A realização (implementação) de uma ou mais classes não exclui a possibilidade de generalização (herança)

Page 144: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Considerações sobre Interfaces144

Reduz a dependência (acoplamento) entre classes, aumentando sua reusabilidade

Oferece uma alternativa simplificada para a implementação de herança múltipla

Page 145: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Exceção (Exception)145

É um evento que ocorre durante a execução de um programa e que interrompe o fluxo normal de instruções

Divisão por zero

Operação matemática inválida

Tentativa de acesso a uma posição inválida em um vetor

Tentativa de acesso a um objeto que não foi criado

etc.

Page 146: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Exceções em Java146

Quando um erro ocorre dentro de um método, o próprio método cria um objeto e o entrega para o ambiente de execução

Este comportamento é denominado disparar (“throwing”) uma exceção

O objeto criado é chamado de objeto de exceção e contem informação sobre o erro, incluindo seu tipo e o estado do programa quando o erro ocorreu

http://docs.oracle.com/javase/tutorial/essential/exceptions/

Page 147: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Exceções em Java

Depois que um método dispara (throws) uma exceção, o ambiente de execução tenta encontrar algum tratamento para tratá-la

A sequência de possíveis tratamentos para manipular a exceção é a pilha dos métodos que foram chamados para chegar até o método onde o erro ocorreu

147

Page 148: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

148

main

Método com tratamento de exceção

Método sem tratamento de exceção

Método onde o erro ocorreu

Chamamétodo

Chamamétodo

Chamamétodo

http://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html

Page 149: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

149

main

Método com tratamento de exceção

Método sem tratamento de exceção

Método onde o erro ocorreuDispara (throws)

exceção

Propagaexceção

Trata (catches)a exceção

Procura portratamento implementado

Procura portratamento implementado

http://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html

Page 150: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

150

Java define 3 tipos de exceção

Checked

Unchecked

Checked Exception

Error

RuntimeException

Page 151: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Checked exception

Condições excepcionais que uma aplicação bem escrita deveria antecipar

A aplicação deve implementar ações para se recuperar destas condições (ex: usuário solicita a abertura de um arquivo inexistente)

Portanto, o tratamento de exceções é obrigatório para este tipo de exceção

151

Page 152: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Error (unchecked exception)

Condições excepcionais que são "externas" a uma aplicação que não podem ser antecipadas

Tipicamente, a aplicação não tem como se recuperar destas condições (ex: uma falha de hardware)

É possível implementar um tratamento para a exceção

152

Page 153: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Runtime exception (unchecked exception)

Condições excepcionais que são "internas" a uma aplicação que não podem ser antecipadas

Tipicamente, a aplicação não tem como se recuperar destas condições (ex: defeitos de programação)

É possível implementar um tratamento para a exceção, mas o correto seria eliminar o defeito que causou a exceção

153

Page 154: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Tratamento de exceções154

Permite que a execução do programa continue mesmo após a ocorrência de um erro

Aumenta a robustez do programa

Separa o código que define comportamento "normal" (esperado) do código que realiza tratamento de exceções

Page 155: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

try...catch155

1. O código controlado pela cláusula try é executado

2. Se ocorrer uma exceção, o controle é desviado para o código dentro da cláusula catch

3. Se a exceção ocorrida estiver sendo considerada pela cláusula catch, o código de tratamento da exceção é executado (caso contrário, a exceção é repassada ao ambiente de execução)

4. Se não ocorrer uma exceção, o tratamento da exceção (catch) não é executado

Page 156: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

try...catch156

Você pode adicionar quantas cláusulas catch forem necessárias

Permite tratamento específico para cada tipo de exceção considerado

objExcecao é o objeto de exceção criado quando a exceção ocorre

Ele possui várias informações sobre a exceção

Page 157: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

try...catch157

Você pode considerar mais de uma exceção em uma mesma cláusula catch

Page 158: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

try...finally

1. O código controlado pela cláusula try é executado

2. Se ocorrer uma exceção, o controle é desviado para o código dentro da cláusula finally que é executado

3. Se não ocorrer uma exceção, após o último comando dentro da cláusula try, o código dentro da cláusula finally é executado (ou seja, o código dentro da cláusula finally é sempre executado)

158

Page 159: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Combinando try...catch...finally159

Este bloco é executado

mesmo quando uma exceção ocorrer!!

Page 160: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Capturando todos os 3 tipos de exceção160

Page 161: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Capturando todos os 3 tipos de exceção161

Operação disponibilizada pelas classes de Exceção

Page 162: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Conhecendo as classes de exceção162

Classe Throwable http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html

Classe Exception http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html

Classe RuntimeException http://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html

Classe Error http://docs.oracle.com/javase/7/docs/api/java/lang/Error.html

Page 163: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Experimente...163

Page 164: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

A cláusula throws164

Permite especificar exceções que podem ser disparadas ou propagadas dentro de um determinado método

Você pode forçar (disparar) uma exceção dentro de um método, usando a cláusula throw

Você pode não desejar tratar a exceção no método atual e apenas propagá-la para o próximo método

O próximo método pode tratar a exceção ou continuar propagando

Page 165: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

165

Forçando uma Exceção

Page 166: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Forçando uma Exceção

Informa ao compilador que o método da operação

“geraExcecao()” deve, obrigatoriamente:

capturar (catch) a exceção Exception; ou

disparar (throw) uma exceção Exception

Page 167: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

167

No exemplo anterior, devemos chamar a operação de modo seguro...

Page 168: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

168

Outra opção seria capturarmos a exceção no próprio método da operação...

Page 169: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

169

Ou ainda, simplesmente capturar e propagar a exceção para o próximo método...

Page 170: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

try-com-recursos (try-with-resources)170

Cláusula try (Java 7+) que declara um ou mais recursos

Um recurso é um objeto que deve ser fechado depois que o programa não precisar mais dele

Garante que cada recurso é fechado ao final da cláusula

Page 171: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Criando sua própria classe de exceção

Você pode ainda criar suas próprias exceções

Verifique se a plataforma Java já não oferece uma exceção que atenda às suas necessidades

... ou alguma exceção já criada por outros programadores e fornecedores

Verifique se a nova exceção será realmente útil

Utilize a palavra Exception ao final do nome da classe criada (boas práticas de codificação Java)

171

Page 172: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

172

Page 173: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

173Dos “clones”, você acha

que eu tinha esquecido?

Page 174: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Vamos aprender a clonar objetos!

Se você não entendeu este slide, procure pela

ovelha Dolly na web

Page 175: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Formas para copiar objetos...

Shallow Copy Deep Copy

Lazy Copy

Precisa ser agora?!

Page 176: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Shallow copy

Para copiar o objeto A, o objeto B irá copiar todos os atributos de A

Se o valor do atributo é um objeto, B copiará o endereço de memória deste objeto (A e B apontarão para o mesmo objeto)

Se o valor do atributo é um tipo primitivo, B copiará o valor do tipo primitivo

Page 177: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Deep copy

Para copiar o objeto A, o objeto B irá copiar todos os atributos de A

Se o valor do atributo é um objeto, B copiará os dados deste objeto (A e B não compartilharão objetos)

A contrapartida em relação a uma shallow copy é o desempenho inferior

Se o valor do atributo é um tipo primitivo, B copiará o valor do tipo primitivo

Page 178: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Lazy copy

Combinação das estratégias Shallow e Deep copy

Inicialmente, objetos são copiados via shallow copy

Um contador é mantido para conhecer a quantidade de objetos copiados

Quando o programa tiver que modificar um objeto, ele verifica antes se aquele objeto compartilha dados

Se for o caso, uma deep copy é realizada e um novo objeto é criado antes dele ser modificado

Page 179: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

...

Page 180: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

...

Implementar a interface “Cloneable”

Suportar a exceção “CloneNotSupportedException”

Page 181: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

...

Não esquecer de chamar o clone() da superclasse: garantir o efeito cascata

Page 182: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

...

Deep copy

Page 183: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

...

Page 184: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

...

...

Page 185: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Usando a operação “clone”

Page 186: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Referências186

Grady Booch; Robert A. Maksimchuck; Michael W. Engle; BobbiJ. Young; Jim Conallen; Kelli A. Houston. Object-oriented analysisand design with applications. 3rd ed. Addison-Wesley, 2007.

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

Paul J. Deitel; Harvey M. Deitel. Java - Como Programar. 8ª ed., Prentice Hall, 2010.

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

Page 187: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)

[email protected]

Referências187

Luca Cardelli; Peter Wegner. On understanding types, data abstraction and polymorphism. Computing Surveys, 17(4):471-522, December 1985.