Programação Orientada a Objetos - Palavras reservadas: final, this

Propaganda
Programação Orientada a Objetos
Palavras reservadas: final, this e static
Prof. Emerson Ribeiro de Mello
Instituto Federal de Santa Catarina – IFSC
campus São José
[email protected]
http://docente.ifsc.edu.br/mello/poo
03 de março de 2017
1/12
Sobrecarga de métodos
Métodos sobrecarregados devem possuir assinaturas diferentes
1
2
public class Data{
private int dia, mes, ano;
3
public void
this.dia
}
public void
this.dia
}
public void
this.dia
}
4
5
6
7
8
9
10
11
12
alterarData(int d){
= d;
alterarData(int d, int m){
= d; this.mes = m;
alterarData(int d, int m, int a){
= d; this.mes = m; this.ano = a;
13
}
14
Data d = new Data();
d.alterarData(31);
d.alterarData(31,12);
d.alterarData(31,12,1969);
15
16
17
2/12
Palavra reservada: this
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Complexo{
private int real;
private int imaginario;
public Complexo(int a, int b){
this.real = a; this.imaginario = b;
}
public void soma(Complexo c){
this.real = this.real + c.real;
this.imaginario = this.imaginario = c.imaginario;
}
public void imprimir(){
System.out.println(this.real + "," + this.imaginario);
}
}
Complexo a = new Complexo(1,2);
Complexo b = new Complexo(3,4);
a.soma(b);
a.imprimir();
b.imprimir();
3/12
Palavra reservada: this
43
44
45
46
47
37
38
39
40
41
42
public class Bicicleta{
private double valor;
public void imprimirValor(){
System.out.println(this.valor);
}
}
48
49
50
51
52
53
54
55
56
57
public class Principal{
private double valor;
public void imprimirValor(){
System.out.println(this.valor);
}
public void teste(){
Bicicleta b = new Bicicleta();
b.imprimirValor();
}
public static void main(String[]
args){
Principal p = new Principal();
p.imprimirValor();
p.teste();
}
}
4/12
Palavra reservada: this
43
44
45
46
47
public class Bicicleta{
private double valor;
public void imprimirValor(){
System.out.println(this.valor);
}
}
37
38
39
40
41
42
48
49
50
51
52
53
54
55
56
57
1
2
public class Principal{
private double valor;
public void imprimirValor(){
System.out.println(this.valor);
}
public void teste(){
Bicicleta b = new Bicicleta();
b.imprimirValor();
}
public static void main(String[]
args){
Principal p = new Principal();
p.imprimirValor();
p.teste();
}
}
Na linha 46 o this é referência para o objeto de qual classe? Principal
ou Bicicleta?
A linha 55 poderia ser substituı́da por this.teste()?
4/12
Membros de classe estáticos: static
Atributos não estáticos – cada instância da classe terá uma cópia
distinta deste atributo.
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class Celular{
private int total;
public Celular(){
this.total = this.total + 1;
}
public void incrementar(){
this.total = this.total + 1;
}
public int getTotal(){
return this.total;
}
}
Celular a = new Celular();
Celular b = new Celular();
a.incrementar();
b.incrementar();
73
74
75
System.out.println(a.getTotal()); // o que sera' impresso?
System.out.println(b.getTotal()); // o que sera' impresso?
5/12
Membros de classe estáticos: static
Atributos estáticos ficam comuns para todos os objetos que foram
instanciados para esta classe, sendo assim chamados de “atributos da
classe”
Não se pode usar o this para acessar um membro estático. Deve-se usar o
nome da Classe
Classes podem possuir métodos estáticos e estes podem ser invocados
sem que necessite criar uma instância da classe
Métodos estáticos geralmente são usados para acessar atributos estáticos
76
77
78
79
80
81
public class Celular{
private static int total = 0;
public static int getTotal(){
return Celular.total;
}
}
6/12
Membros de classe estáticos: static
82
83
84
public class Celular{
private static int total = 0;
private int serial;
85
public Celular(int s){
this.serial = s;
Celular.total = Celular.total + 1;
}
public static int getTotal(){
return Celular.total;
}
public int getSerial(){
return this.serial;
}
86
87
88
89
90
91
92
93
94
95
96
}
97
System.out.println(Celular.getTotal()); // o que sera' impresso?
Celular c = new Celular(123);
Celular d = new Celular(456);
System.out.println(Celular.getTotal()); // o que sera' impresso?
System.out.println(d.getSerial()); // o que sera' impresso?
98
99
100
101
7/12
Constantes com o modificador final
O modificador final pode ser usado em atributos ou métodos de uma
classe, bem como em variáveis locais
Uma vez que atribuiu valores para variáveis ou atributos, estes não
poderão ser alterados
Por convenção, constantes deverão ser escritas em letras maiúsculas
Métodos não poderão ser sobrescritos (conceito de herança)
103
104
105
public class Celular{
private final int FREQUENCIA = "1800";
private final int SERIAL;
106
public Celular(int s){
this.SERIAL = s;
}
107
108
109
110
public final void iniciarChamada(){
// ....
}
111
112
113
114
}
8/12
Resumo
Sobrecarga de métodos
Uma classe pode ter mais de um método com o mesmo nome, porém com
assinaturas diferentes
A palavra this é uma referência para o objeto atual
Apesar de não obrigatório na maioria dos casos, seu uso é desejado para
facilitar a leitura do código
Atributos estáticos ficam comum para todos objetos instanciados
da classe
Imagine que é uma variável compartilhada entre todos os objetos da classe
Modificador final é usado para definir constantes
Atributos final não poderão ter seu valor alterado
9/12
Exercı́cio 1
Analise a classe utilitária Math (java.lang.Math) e as afirmativas abaixo:
http://docs.oracle.com/javase/8/docs/api/java/lang/Math.html
1
Para obter a raiz quadrada do número 4, basta:
double d = Math.sqrt(4);
2
Math.PI é uma constante que contém o valor aproximado de PI. Para
imprimir este valor, basta:
System.out.println(Math.PI);
Responda
Dos conceitos apresentados nesta aula, quais deles a classe java.lang.Math
faz uso? Justifique sua resposta
10/12
Exercı́cios extras – para casa
Faça todos os exercı́cios da seção 6.8 (página 81) da apostila da Caelum
http://docente.ifsc.edu.br/mello/livros/java/
apostila-caelum-java-objetos-fj11-2013.pdf
Material de referência
http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
11/12
Netbeans e convenção de codificação Java
Como comentar usando JavaDoc
Como organizar código em pacotes, formatação, convenção de
codificação
Inserindo trechos de códigos com o Netbeans (construtor, getters e
setters)
Como depurar um projeto
Casos de uso
1
Criar uma classe para representar um Pessoa em uma agenda telefônica
2
http://docente.ifsc.edu.br/mello/poo/lab-03.pdf
12/12
Download