k19-k11-orientacao-a-objetos-em-java
218 pág.

k19-k11-orientacao-a-objetos-em-java

Disciplina:Algoritmos8.070 materiais121.978 seguidores
Pré-visualização37 páginas
static void main(String [] args) {
3 Conta c = new Conta();
4
5 try {

www.k19.com.br 129

EXCEPTIONS 130

6 c.deposita (100);
7 } catch (IllegalArgumentException e) {
8 System.out.println("Houve uma IllegalArgumentException ao depositar");
9 } catch (SQLException e) {
10 System.out.println("Houve uma SQLException ao depositar");
11 }
12 }
13 }

Código Java 14.6: Capturando dois tipos de exceptions

Exercícios de Fixação

1 Crie um projeto no eclipse chamado Exceptions.

2 Crie uma classe para modelar os funcionários do sistema do banco.

1 class Funcionario {
2 private double salario;
3
4 public void aumentaSalario(double aumento) {
5 if(aumento < 0) {
6 IllegalArgumentException erro = new IllegalArgumentException ();
7 throw erro;
8 }
9 }
10 }

Código Java 14.7: Funcionario.java

3 Agora teste a classe Funcionario.

1 class TestaFuncionario {
2 public static void main(String [] args) {
3 Funcionario f = new Funcionario ();
4 f.aumentaSalario ( -1000);
5 }
6 }

Código Java 14.8: TestaFuncionario.java

Execute e observe o erro no console.

4 Altere o teste para capturar o erro.

1 class TestaFuncionario {
2 public static void main(String [] args) {
3 Funcionario f = new Funcionario ();
4
5 try {
6 f.aumentaSalario ( -1000);
7 } catch(IllegalArgumentException e) {
8 System.out.println("Houve uma IllegalArgumentException ao aumentar o salário");
9 }
10 }
11 }

Código Java 14.9: TestaFuncionario.java

130 www.k19.com.br

OBJECT

C
A

P
Í

T
U

L
O

15
Todas as classes derivam direta ou indiretamente da classe Object. Consequentemente, todo

conteúdo definido nessa classe estará presente em todos os objetos.

Além disso, qualquer referência pode ser armazenada em uma variável do tipo Object. Ou seja,
a ideia do polimorfismo pode ser aplicada para criar métodos genéricos que trabalham com objetos
de qualquer classe.

Figura 15.1: A classe Object

Polimorfismo

Aproveitando o polimorfismo gerado pela herança da classe Object, é possível criar uma classe
para armazenar objetos de qualquer tipo como se fosse um repositório de objetos.

1 class Repositorio {
2 // codigo da classe
3 }

Código Java 15.1: Repositorio.java

Um array de objetos pode ser utilizado como estrutura básica para manter os objetos no reposi-
tório.

1 class Repositorio {
2 private Object [] objetos = new Object [100];
3 }

Código Java 15.2: Repositorio.java

Alguns métodos podem ser criados para formar a interface do repositório. Por exemplo, métodos
para adicionar, retirar e pesquisar elementos.

www.k19.com.br 131

OBJECT 132

1 class Repositorio {
2 private Object [] objetos = new Object [100];
3
4 public void adiciona(Object o) {
5 // implementacao
6 }
7
8 public void remove(Object o) {
9 // implementacao
10 }
11
12 public Object pega(int posicao) {
13 // implementacao
14 }
15 }

Código Java 15.3: Repositorio.java

Com esses métodos o repositório teria a vantagem de armazenar objetos de qualquer tipo. Po-
rém, na compilação, não haveria garantia sobre os tipos específicos. Em outras palavras, já que obje-
tos de qualquer tipo podem ser armazenados no repositório então objetos de qualquer tipo podem
sair dele.

1 Repositorio repositorio = new Repositorio ();
2 repositorio.adiciona("Rafael");
3 Object o = repositorio.pega (0);

Código Java 15.4: Utilizando o repositório

Por outro lado, na maioria dos casos, os programadores criam repositórios para armazenar ob-
jetos de um determinado tipo. Por exemplo, uma repositório para armazenar somente nomes de
pessoas, ou seja, para armazenar objetos do tipo String. Nesse caso, em tempo de compilação é
possível “forçar” o compilador a tratar os objetos como string através de casting de referência.

1 Repositorio repositorio = new Repositorio ();
2 repositorio.adiciona("Rafael");
3 Object o = repositorio.pega (0);
4 String s = (String)o;

Código Java 15.5: Casting de referência

O método toString()

Às vezes, é necessário trabalhar com uma descrição textual de determinados objetos. Por exem-
plo, suponha a seguinte classe:

1 class Conta {
2 private int numero;
3 private double saldo;
4
5 // GETTERS E SETTERS
6 }

Código Java 15.6: Conta.java

Queremos gerar um documento no qual deve constar as informações de determinadas contas.
Podemos implementar um método, na classe Conta, que gere uma descrição textual dos objetos

132 www.k19.com.br

133 OBJECT

dessa classe.

1 class Conta {
2 private int numero;
3 private double saldo;
4
5 public String geraDescricao () {
6 return "Conta número: " + this.numero + " possui saldo igual a " + this.saldo;
7 }
8
9 // GETTERS E SETTERS
10 }

Código Java 15.7: Conta.java

A utilização do método que gera a descrição textual das contas seria mais ou menos assim:

1 Conta conta = ...
2 String descricao = conta.geraDescrica ();
3 System.out.println(descricao);

Código Java 15.8: Utilizando o método geraDescricao()

Contudo, a classe Objectpossui um método justamente com o mesmo propósito do geraDescricao()
chamado toString(). Como todas as classes derivam direta ou indiretamente da classe Object, to-
dos os objetos possuem o método toString().

A implementação padrão do método toString() monta uma descrição genérica baseada no
nome da classe mais específica e no hash code dos objetos.

1 Conta conta = ...
2 String descricao = conta.toString ();
3 System.out.println(descricao);

Código Java 15.9: Utilizando o método toString()

No código acima, a descrição gerada pelo método toString() definido na classe Object é algo
semelhante à string: “Conta@4d5ef”.

Para alterar o comportamento do método toString(), basta reescrevê-lo na classe Conta.

1 class Conta {
2 private int numero;
3 private double saldo;
4
5 public String toString () {
6 return "Conta número: " + this.numero + " possui saldo igual a " + this.saldo;
7 }
8
9 // GETTERS E SETTERS
10 }

Código Java 15.10: Conta.java

A vantagem em reescrever o método toString() ao invés de criar um outro método com o
mesmo propósito é que diversas classes das bibliotecas do Java utilizam o método toString(). In-
clusive, quando passamos uma variável não primitiva para o método println(), o toString() é
chamado internamente para definir o que deve ser impresso na tela.

www.k19.com.br 133

OBJECT 134

1 Conta conta = ...
2 // o método toString () será chamado internamente no println ()
3 System.out.println(conta);

Código Java 15.11: Utilizando o método toString()

Outra vantagem em optar pelo método toString() é que ferramentas de desenvolvimento como
o eclipse oferecem recursos para que esse método seja reescrito automaticamente.

Figura 15.2: Gerando o toString() no eclipse

1 class Conta {
2 private int numero;
3 private double saldo;
4
5 // método gerado pelo eclipse
6 public String toString () {
7 return "Conta [numero=" + numero + ", saldo=" + saldo + "]";
8 }
9
10 // GETTERS E SETTERS
11 }

Código Java 15.12: Conta.java

O método equals()

Para verificar se os valores armazenados em duas variáveis de algum tipo primitivo são iguais,
deve ser utilizado o operador “==” . Esse operador também pode ser aplicado em variáveis de tipos
não primitivos.

1 Conta c1 = ...
2 Conta c2 = ...
3
4 System.out.println(c1 == c2);

Código Java 15.13: Comparando com

134 www.k19.com.br

135 OBJECT

O operador “==”, aplicado à variáveis não primitivas, verifica se as referências armazenadas nes-
sas variáveis apontam para o mesmo objeto na memória. Esse operador não compara o conteúdo
dos objetos correspondentes às referências armazenadas nas variáveis submetidas à comparação.

Para comparar o conteúdo de objetos, é necessário utilizar métodos. Podemos implementar um
método de comparação na classe Conta.

1 class Conta {
2 private int numero;
3 private double saldo;
4
5 public boolean compara(Conta outra) {
6 return
guilherme nogueira fez um comentário
  • 1 Defina uma classe genérica para modelar os funcionários do banco. 2 Crie um objeto da classe que modela os funcionários do banco e utilize os métodos de acesso com nomes padronizados para alterar os valores dos atributos. 3 Torne a classe que modela os funcionários do banco abstrata e verifique o que acontece na classe de teste. 4 Defina uma classe para modelar os gerentes do nosso banco. 5 Altere a classe de teste e crie um objeto da classe que modela os gerentes. 6 Defina um método abstrato na classe que modela os funcionários para calcular a bonificação dos colaboradores. 7 O que acontece com a classe que modela os gerentes? 8 Implemente o método que calcula a bonificação na classe que modela os gerentes. 9 Altere a classe de teste para que o método que calcula a bonificação seja chamada e o valor seja impresso na tela. ALGUEM TEM AS RESPOSTAS DESSAS QUESTÕES , OBRIGADO... Veja mais
    0 aprovações
    Carregar mais