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