poo - unidade 1 (parte 2) - orientação a objetos com java e uml (versão 4)
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 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/1.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/3.jpg)
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 5: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/5.jpg)
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 7: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/7.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/8.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/9.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/10.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/11.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/12.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/13.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/14.jpg)
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 17: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/17.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/18.jpg)
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 23: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/23.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/24.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/25.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/26.jpg)
Generalização / Especialização26
Sentido da generalização
Sentido da especialização
![Page 33: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/33.jpg)
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 35: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/35.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/36.jpg)
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 38: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/38.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/39.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/40.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/41.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/42.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/43.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/44.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/45.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/46.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/47.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/48.jpg)
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 50: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/50.jpg)
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 52: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/52.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/53.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/54.jpg)
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 59: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/59.jpg)
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 61: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/61.jpg)
Redefinição de operações (override)61
Permite chamar a implementação (método) da superclasse
![Page 63: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/63.jpg)
A classe Funcionario63
...
... Alguma ideia para implementar?
Lembra do getIdade()?
![Page 66: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/66.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/67.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/68.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/69.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/70.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/71.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/72.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/73.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/74.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/75.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/76.jpg)
Declarando um tipo “enum”76
Você deve utilizar enum sempre que você precisar representar um conjunto fixo de constantes
![Page 78: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/78.jpg)
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 83: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/83.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/84.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/85.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/86.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/87.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/89.jpg)
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 93: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/93.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/94.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/95.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/96.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/97.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/98.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/99.jpg)
E agora...Compila?
Typecasting(conversão de tipo)
O compilador reconhece a operação porque ela existe em “Retangulo”
![Page 101: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/101.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/102.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/103.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/104.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/105.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/106.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/107.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/108.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/109.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/110.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/111.jpg)
111
Template de classe na UMLParâmetro “Tipo” passado no momento da declaração de variáveis “Pilha”
![Page 113: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/113.jpg)
...
<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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/114.jpg)
...
Construtores
Você pode implementar vários construtores, mas eles precisam ter assinaturas diferentes!
![Page 118: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/118.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/119.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/120.jpg)
Criamos um vetor de objetos genéricos
(qualquer objeto criado a partir de qualquer
classe pode ser colocado neste vetor)
![Page 122: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/122.jpg)
Tiro curto!
Complete a
implementação
da classe Pilha,
usando Generics
Teste com uma pilha de Figuras...
![Page 124: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/124.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/125.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/126.jpg)
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 128: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/128.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/129.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/130.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/131.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/132.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/133.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/134.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/135.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/136.jpg)
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 138: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/138.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/139.jpg)
Note que as classes
“Retangulo” e “Circulo” não
compartilham uma
estrutura comum (elas são
independentes uma da
outra)
![Page 142: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/142.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/143.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/144.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/145.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/146.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/147.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/148.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/149.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/150.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/151.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/152.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/153.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/154.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/155.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/156.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/157.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/158.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/159.jpg)
Combinando try...catch...finally159
Este bloco é executado
mesmo quando uma exceção ocorrer!!
![Page 161: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/161.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/162.jpg)
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 164: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/164.jpg)
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 166: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/166.jpg)
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 170: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/170.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/171.jpg)
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 174: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/174.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/175.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/176.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/177.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/178.jpg)
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 180: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/180.jpg)
...
...
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/181.jpg)
...
...
Não esquecer de chamar o clone() da superclasse: garantir o efeito cascata
![Page 186: POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/186.jpg)
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)](https://reader031.vdocuments.net/reader031/viewer/2022012401/54969f99ac79590e2e8b51a4/html5/thumbnails/187.jpg)
Referências187
Luca Cardelli; Peter Wegner. On understanding types, data abstraction and polymorphism. Computing Surveys, 17(4):471-522, December 1985.