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
this.numero == outra.numero;
7 }
8
9 // GETTERS E SETTERS
10 }

Código Java 15.14: Conta.java

A utilização do método compara() seria mais ou menos assim:

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

Código Java 15.15: Comparando com compara()

Contudo, na classe Object, já existe um método com o mesmo propósito. O método ao qual nos
referimos é o equals(). A implementação padrão do método equals() na classe Object delega a
comparação ao operador “==”. Dessa forma, o conteúdo dos objetos não é comparado. Podemos
rescrever o método equals() para alterar esse comportamento e passar a considerar o conteúdo dos
objetos na comparação.

1 class Conta {
2 private int numero;
3 private double saldo;
4
5 public boolean equals(Object obj) {
6 Conta outra = (Conta)obj;
7 return this.numero == outra.numero;
8 }
9
10 // GETTERS E SETTERS
11 }

Código Java 15.16: Conta.java

Porém, a reescrita do método equals() deve respeitar diversas regras definidas na documenta-
ção da classe Object(http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html).

Para não infringir nenhuma das regras de reescrita do método equals(), podemos utilizar recur-
sos do eclipse para gerar esse método automaticamente.

www.k19.com.br 135

OBJECT 136

Figura 15.3: Gerando o equals() no eclipse

1 class Conta {
2 private int numero;
3 private double saldo;
4
5 // método gerado pelo eclipse
6 public int hashCode () {
7 final int prime = 31;
8 int result = 1;
9 result = prime * result + numero;
10 return result;
11 }
12
13 // método gerado pelo eclipse
14 public boolean equals(Object obj) {
15 if (this == obj) {
16 return true;
17 }
18 if (obj == null) {
19 return false;
20 }
21 if (!(obj instanceof Conta)) {
22 return false;
23 }
24 Conta other = (Conta) obj;
25 if (numero != other.numero) {
26 return false;
27 }
28 return true;
29 }
30
31 // GETTERS E SETTERS
32 }

Código Java 15.17: Conta.java

Exercícios de Fixação

136 www.k19.com.br

137 OBJECT

1 Crie um projeto no eclipse chamado Object.

2 Adicione no projeto Object uma classe para modelar os funcionários do banco.

1 class Funcionario {
2 private String nome;
3
4 private double salario;
5
6 // GETTERS E SETTERS
7 }

Código Java 15.18: Funcionario.java

3 Crie um objeto da classe Funcionario e imprima a referência desse objeto na tela.

1 class TestaFuncionario {
2 public static void main(String [] args) {
3 Funcionario f = new Funcionario ();
4
5 f.setNome("Jonas Hirata");
6 f.setSalario (3000);
7
8 System.out.println(f);
9 }
10 }

Código Java 15.19: TestaFuncionario.java

4 Reescreva o método toString() na classe Funcionario para alterar a descrição textual dos
objetos que representam os funcionários.

1 class Funcionario {
2 private String nome;
3
4 private double salario;
5
6 public String toString () {
7 return "Funcionário: " + this.nome + " - Salário: " + this.salario;
8 }
9
10 // GETTERS E SETTERS
11 }

Código Java 15.20: Funcionario.java

5 Execute novamente a classe TestaFuncionario.

6 Apague o toString() implementando anteriormente. Utilize os recursos do eclipse para rees-
crever esse método automaticamente na classe Funcionario.

www.k19.com.br 137

OBJECT 138

Figura 15.4: Gerando o toString() no eclipse

Figura 15.5: Gerando o toString() no eclipse

138 www.k19.com.br

139 OBJECT

7 Execute novamente a classe TestaFuncionario.

8 Crie dois objetos da classe Funcionario. Utilize o operador “==” e o método equals() para
compará-los.

1 class TestaFuncionario2 {
2 public static void main(String [] args) {
3 Funcionario f1 = new Funcionario ();
4
5 f1.setNome("Jonas Hirata");
6 f1.setSalario (3000);
7
8 Funcionario f2 = new Funcionario ();
9
10 f2.setNome("Jonas Hirata");
11 f2.setSalario (3000);
12
13
14 System.out.println(f1 == f2);
15 System.out.println(f1.equals(f2));
16 }
17 }

Código Java 15.21: TestaFuncionario2.java

9 Utilize os recursos do eclipse para gerar o método equals() na classe Funcionario.

Figura 15.6: Gerando o equals() no eclipse

www.k19.com.br 139

OBJECT 140

Figura 15.7: Gerando o equals() no eclipse

10 Execute novamente a classe TestaFuncionario2.

140 www.k19.com.br

STRING

C
A

P
Í

T
U

L
O

16
A classe String é utilizada em praticamente todas as aplicações Java. Consequentemente, os

programadores Java devem conhecer bem o funcionamento dela. A documentação da classe String
pode ser consultada na url http://docs.oracle.com/javase/7/docs/api/java/lang/String.html.

Pool de Strings

A maneira mais simples para criar ou obter um objeto da classe String é definir diretamente o
seu conteúdo no código fonte com “"”.

1 String nome = "Rafael Cosentino";

Código Java 16.1: string literal

As strings criadas ou obtidas de forma literal são mantidas dentro da classe String no chamado
Pool de Strings. Dentro do Pool de Strings, não há strings “repetidas”, ou seja, não há dois objetos
com o mesmo conteúdo. Esse aspecto da linguagem Java tem por objetivo diminuir o consumo de
memória.

Para comparar o conteúdo de duas strings que estão dentro do Pool de Strings, podemos utilizar
o operador “==” ou o método equals().

1 String nome1 = "Rafael Cosentino";
2 String nome2 = "Rafael Cosentino";
3
4 // imprime true
5 System.out.println(nome1 == nome2);
6 // imprime true
7 System.out.println(nome1.equals(nome2));

Código Java 16.2: Comparando strings do Pool de Strings

Também podemos utilizar os construtores da classe String para criar objetos.

1 String nome = new String("Rafael Cosentino");

Código Java 16.3: strings não literais

Quando criamos strings através dos construtores da classe String, elas não são mantidas no Pool
de Strings. Portanto, não podemos comparar o conteúdo delas através do operador “==”. Nesse caso,
devemos utilizar o método equals().

1 String nome1 = new String("Rafael Cosentino");
2 String nome2 = new String("Rafael Cosentino");
3
4 // imprime false

www.k19.com.br 141

STRING 142

5 System.out.println(nome1 == nome2);
6 // imprime true
7 System.out.println(nome1.equals(nome2));

Código Java 16.4: Comparando strings fora do Pool de Strings

Imutabilidade

Uma característica fundamental dos objetos da classe String é que eles são imutáveis. Em outras
palavras, o conteúdo de uma string não altera.

Alguns métodos das strings podem dar a impressão errada de que o conteúdo do objeto será
alterado. Por exemplo, o método toUpperCase() que é utilizado para obter uma string com letras
maiúsculas. Esse método não altera a string original, ele cria uma nova string com o conteúdo dife-
rente.

1 String nome = "Rafael Cosentino";
2
3 nome.toUpperCase ();
4
5 // imprime Rafael Cosentino
6 System.out.println(nome);

Código Java 16.5: Pegadinha. . .

1 String nome = "Rafael Cosentino";
2
3 String nomeAlterado = nome.toUpperCase ();
4
5 // imprime RAFAEL COSENTINO
6 System.out.println(nomeAlterado);

Código Java 16.6: Guardando o resultado do toUpperCase()

Mais Sobre
Podemos alterar o conteúdo de qualquer objeto Java de forma invasiva utilizando reflec-
tion. Não seria uma boa prática utilizar esses mecanismos para “forçar” modificações

nos objetos da classe String pois os efeitos colaterais causados no restante do código podem
ser drásticos.

Métodos principais

Todos os métodos da classe String podem ser consultados na url http://docs.oracle.com/
javase/7/docs/api/java/lang/String.html. Discutiremos aqui o funcionamento dos principais
métodos dessa classe.

length()

O método length() devolve a quantidade de caracteres de uma string.

142 www.k19.com.br

143 STRING

1 String nome = "K19 Treinamentos";
2
3 // imprime 16
4 System.out.println(nome.length ());

Código Java 16.7: length()

toUpperCase()

O método toUpperCase() é utilizado para obter uma
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