Successfully reported this slideshow.

Aula4

2,124 views

Published on

Curso de Programação OO com Java no IBTA

Published in: Business
  • Be the first to comment

  • Be the first to like this

Aula4

  1. 1. Programação Orientada a Objetos com Java Aula 4 professor: Fábio Kimura e-mail: fkimura@yahoo.com
  2. 2. <ul><li>Agenda </li></ul><ul><li>Laços aninhados </li></ul><ul><li>Definindo variáveis </li></ul><ul><li>De Classe vs. De Instância vs. Constantes </li></ul><ul><li>Definindo métodos </li></ul><ul><li>Sobrecarga de métodos </li></ul><ul><li>Discussão </li></ul><ul><li>Exercícios </li></ul>
  3. 3. <ul><li>Laços Aninhados </li></ul>public class Aninhados1 { public void procurarValor(int valor) { int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 1; i <= array.length; i++ ) { System.out.println(“i=“ + i); if (array[i] == valor) { System.out.println(“achei:“ + i); } } } } Qual a saída para procurarValor(4) ?
  4. 4. <ul><li>Laços Aninhados </li></ul>public class Aninhados2 { public void procurarValor(int valor) { int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 1; i <= array.length; i++ ) { System.out.println(“i=“ + i); if (array[i] == valor) { System.out.println(“achei:“ + i); break; } } } } Qual a saída para procurarValor(4) ? Melhor, pior?
  5. 5. <ul><li>Laços Aninhados </li></ul>public class Aninhados3 { public void procurarValor(int valor) { int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (int i = 1; i <= array.length; i++ ) { if (array[i] != valor) { System.out.println(“i=“+i); } } } } Qual a saída para procurarValor(4) ?
  6. 6. <ul><li>Laços Aninhados </li></ul>public class Aninhados4 { public void procurarValor(int valor) { int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (int i = 1; i <= array.length; i++ ) { if (array[i] == valor) { continue; } System.out.println(“i=“+i); } } } Qual a saída para procurarValor(4) ? Melhor ou pior?
  7. 7. <ul><li>ifs Aninhados </li></ul>if (exam.done()) if (exam.getScore() < 0.61) System.out.println(&quot;Try again.&quot;); else System.out.println(&quot;Java master!&quot;); A que if pertence o último else?
  8. 8. <ul><li>ifs Aninhados </li></ul>if (exam.done()) if (exam.getScore() < 0.61) System.out.println(&quot;Try again.&quot;); else System.out.println(&quot;Java master!&quot;); O correto é assim?
  9. 9. <ul><li>ifs Aninhados </li></ul>if (exam.done()) if (exam.getScore() < 0.61) System.out.println(&quot;Try again.&quot;); else System.out.println(&quot;Java master!&quot;); Ou assim?
  10. 10. <ul><li>i f Aninhados </li></ul>if (exam.done()) { if (exam.getScore() < 0.61) { System.out.println(&quot;Try again.&quot;); } else { System.out.println(&quot;Java master!&quot;); } }
  11. 11. <ul><li>Definindo Variáveis </li></ul><ul><ul><li>Usamos as variáveis como áreas de memória do computador para armazenar valores durante a execução de programas, rotinas, funções, etc. </li></ul></ul><ul><ul><li>Tem a função de facilitar a identificação de termos em expressões, fórmulas matemáticas e computacionais. </li></ul></ul><ul><ul><li>Devemos usar nomes claros e de fácil entendimento para variáveis. </li></ul></ul><ul><ul><li>Devem seguir o Java Code Conventions™ (Convenção de Codificação Java) </li></ul></ul><ul><li>Criando classes Java </li></ul>
  12. 12. <ul><li>Definindo Variáveis </li></ul><ul><ul><li>Forma </li></ul></ul><ul><ul><ul><li>modificador = palavra reservada que informa o nivel de acesso </li></ul></ul></ul><ul><ul><ul><li>tipo = tipo do dado (referência ou primitivo) </li></ul></ul></ul><ul><ul><ul><li>identificador = nome da variável (fácil entendimento) </li></ul></ul></ul><ul><ul><ul><li>valor_inicial = valor ao iniciar a variável </li></ul></ul></ul>[modificador] tipo identificador = valor_inicial; [modificador] tipo identificador; <ul><li>Criando classes Java </li></ul>
  13. 13. <ul><li>Definindo Variáveis </li></ul><ul><ul><li>Exemplos </li></ul></ul>int idade = 18; float temperatura = 31.2; double salario = 1456.3; char letraA = ‘A’; byte base = 2; long distancia = 2000; short s; String faculdade = new String(“IBTA!”); private int numero; <ul><li>Criando classes Java </li></ul>
  14. 14. <ul><li>Definindo Variáveis </li></ul><ul><ul><li>Existem 4 formas de variáveis para Programação Java: </li></ul></ul><ul><ul><ul><li>De instância (atributos de objetos – non-static) </li></ul></ul></ul><ul><ul><ul><li>De classe (atributos de classe – static) </li></ul></ul></ul><ul><ul><ul><li>Locais (variáveis de parâmetros de método) </li></ul></ul></ul><ul><ul><ul><li>“ Constantes” </li></ul></ul></ul><ul><li>Definindo Variáveis </li></ul>
  15. 15. <ul><li>Variáveis de instância </li></ul><ul><ul><li>armazenam valor e estado para um objeto e devem estar encapsuladas; </li></ul></ul><ul><ul><li>definidas como membro de classe (fora de métodos e sem o modificador static); </li></ul></ul>public class Conta { // variável de instância private int numero; public int getNumero() { return numero; } public void setNumero(int n) { numero = n; } } <ul><li>Definindo Variáveis </li></ul>
  16. 16. <ul><li>Variáveis de classe ou estáticas </li></ul><ul><ul><li>armazenam valor e estado para uma classe (accessível por todos objetos daquela classe); </li></ul></ul><ul><ul><li>definidas como membro de classe (fora dos métodos e COM o modificador static ); </li></ul></ul>public class Conta { // variável de classe public static double tarifa = 2.5; } <ul><li>Definindo Variáveis </li></ul>
  17. 17. <ul><li>Variáveis locais </li></ul><ul><ul><li>armazenam valores temporários durante a execução de um bloco {} (método, construtor, etc.); </li></ul></ul><ul><ul><li>definidas dentro de um bloco {} (métodos, construtores, etc.); </li></ul></ul>public class Conta { // variável de classe public static double tarifa = 2.5; // método public double calcularTarifa(double valor) { // total e valor -> variaveis locais double total = valor + tarifa; return total ; } } <ul><li>Definindo Variáveis </li></ul>
  18. 18. <ul><li>Constantes: Java não tem constantes! </li></ul><ul><ul><li>A keyword const é reservada pelo Java, porém não utilizada: não é um tipo válido. </li></ul></ul><ul><ul><li>const int i = 0; -> ERRO!!! </li></ul></ul><ul><ul><li>“ Variáveis Globais” também não existem. </li></ul></ul><ul><ul><li>Constantes podem ser emuladas: O que é uma constante? </li></ul></ul><ul><li>Definindo Variáveis </li></ul>
  19. 19. <ul><li>Constantes: </li></ul><ul><ul><li>Podem ser emuladas com o uso do modificador final; </li></ul></ul><ul><ul><li>Armazenam valores fixos durante a execução de um sistema (não podem ser alteradas após inicializadas); </li></ul></ul><ul><ul><li>Opcionalmente definidas como variável de classe (static) </li></ul></ul><ul><ul><li>Por convenção são escritas em maiúsculas com underscore (_) separando as palavras internas; </li></ul></ul>[modificador] final tipo IDENTIFICADOR = valorinicial; [modificador] static final tipo IDENTIFICADOR = valorinicial; <ul><li>Definindo Variáveis </li></ul>
  20. 20. <ul><ul><li>“ Constantes” </li></ul></ul>public class Conta { // constante de classe public final static double PERCENTUAL_CPMF = 0.038; // método public double calcularCPMF(double valor) { // valor e cpmf -> variaveis locais double cpmf = valor * PERCENTUAL_CPMF; return cpmf; } } <ul><li>Definindo Variáveis </li></ul>
  21. 21. <ul><ul><li>“ Constantes” </li></ul></ul><ul><li>public class Circulo1 { </li></ul><ul><li>public static final double PI = 3.141592; </li></ul><ul><li>// método </li></ul><ul><li>public double calcularArea(double raio) { </li></ul><ul><li>return PI * raio * raio; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>Definindo Variáveis </li></ul><ul><li>public class Circulo2 { </li></ul><ul><li>// método </li></ul><ul><li>public double calcularArea(double raio) { </li></ul><ul><li>final double pi; </li></ul><ul><li>pi = 3.141592; </li></ul><ul><li>return pi * raio * raio; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  22. 22. <ul><li>“ Constantes” na API Java </li></ul>Classe java.lang.Math <ul><li>Criando classes Java </li></ul><ul><li>public class Circulo3 { </li></ul><ul><li>// método </li></ul><ul><li>public double calcularArea(double raio) { </li></ul><ul><li>return Math.PI * raio * raio; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  23. 23. <ul><ul><li>Uma variável é considerada de instância quando ela estiver definida no corpo da classe, ou seja, fora de um bloco {} e não possuir o modificador static . </li></ul></ul><ul><ul><li>Quando uma variável for definida como parâmetro de método, ou dentro de um método ou bloco {}, ela é chamada de local , e só valerá dentro do bloco. </li></ul></ul><ul><ul><li>Quando uma variável for definida fora dos métodos e possuir o modificador static , ela será considerada como atributo de classe . </li></ul></ul><ul><ul><li>Quando uma variável possuir o modificador final , e for inicializada, ela será considerada uma constante. </li></ul></ul><ul><ul><li>Segundo a convenção, uma constante deve ser um atributo public static final , e deve ser expressa em maiúsculas, com “_” separando as palavras internas. </li></ul></ul><ul><li>De Classe vs. De Instância vs. Constantes </li></ul>
  24. 24. <ul><li>Shading </li></ul><ul><li>Criando classes Java </li></ul>public class Conta { // variável de instância private int numero; public void setNumero(int numero) { numero = numero; // o que acontecerá aqui? } }
  25. 25. <ul><li>Shading </li></ul><ul><li>Criando classes Java </li></ul>public class Teste { // variável de instância private int numero = 3; public void testar() { int numero = 2; System.out.println(numero); } }
  26. 26. <ul><li>Uso do this </li></ul><ul><ul><li>Keyword </li></ul></ul><ul><ul><li>Representa a referência da própria instância (este) </li></ul></ul><ul><ul><li>Usado para acessar membros de instância: </li></ul></ul><ul><ul><ul><li>Atributos; </li></ul></ul></ul><ul><ul><ul><li>Métodos; </li></ul></ul></ul><ul><ul><li>Facilita a codificação </li></ul></ul><ul><li>Criando classes Java </li></ul>
  27. 27. <ul><li>Uso do this </li></ul><ul><ul><li>Atributos </li></ul></ul>public void setLogradouro(String logradouroEnd) { logradouro = logradouroEnd; } public void setLogradouro(String logradouro) { this.logradouro = logradouro; } O que é mais fácil de entender? <ul><li>Criando classes Java </li></ul>
  28. 28. <ul><li>Uso do this </li></ul><ul><ul><li>Atributos </li></ul></ul>public void setLogradouro(String logradouroEnd) { // nomes diferentes para as variáveis logradouro = logradouroEnd; } public void setLogradouro(String logradouro) { // this.logradouro refere-se ao atributo de instancia // logradouro se refere a parâmetro de método logradouro. this.logradouro = logradouro; } Usamos o this para distinguir variáveis de instância das variáveis locais. <ul><li>Criando classes Java </li></ul>
  29. 29. <ul><li>Uso do this </li></ul><ul><ul><li>Atributos </li></ul></ul>public int getTipo() { // tipo é um atributo de instância, // num método get não usamos colocar o this. return tipo; } Convenção de Código Java <ul><li>Criando classes Java </li></ul>
  30. 30. <ul><li>Uso do this </li></ul><ul><ul><li>Métodos </li></ul></ul>public void imprimirDados() { this.imprimirAba(); this.imprimirRelatorio(); } public void imprimirAba() { // imprime aba } public void imprimirRelatorio() { // imprime o relatorio } Usamos o this em chamadas de métodos dentro da mesma instância, aumentando o reaproveitamento de código e facilitando a leitura. <ul><li>Criando classes Java </li></ul>
  31. 31. <ul><li>Uso do this </li></ul><ul><li>Criando classes Java </li></ul>public class Conta { // variável de instância private int numero; public void setNumero(int numero) { this.numero = numero; } public int getNumero() { return numero; } }
  32. 32. <ul><li>Definindo Métodos </li></ul><ul><ul><li>Usamos os métodos para acessar e manipular variáveis. Em Java, variáveis são atributos de classe ou de instância. </li></ul></ul><ul><ul><li>Tem a função de implementar a execução de operações computacionais. </li></ul></ul><ul><ul><li>Devemos usar nomes claros e de fácil entendimento para métodos. </li></ul></ul><ul><ul><li>Devem seguir o Java Code Conventions™ (Convenção de Codificação Java) </li></ul></ul><ul><li>Criando classes Java </li></ul>
  33. 33. <ul><li>Definindo Métodos </li></ul><ul><ul><li>Forma </li></ul></ul><ul><ul><ul><li>modificadores = palavras reservadas que informam o nível de acesso e tipo de método </li></ul></ul></ul><ul><ul><ul><li>tipo_retorno = tipo do dado retornado (referência ou primitivo) </li></ul></ul></ul><ul><ul><ul><li>identificador = nome do método (fácil entendimento) </li></ul></ul></ul><ul><ul><ul><li>parametros = parametros de entrada do método </li></ul></ul></ul>[modificadores] tipo_retorno identificador([parametros]) { // bloco de código do método } <ul><li>Criando classes Java </li></ul>
  34. 34. <ul><li>Definindo Métodos </li></ul><ul><li>Categorias (de acordo com a função) </li></ul><ul><ul><li>accessor : (de acesso), permite ler o valor de um atributo; </li></ul></ul><ul><ul><ul><li>começa com “get” (getter) e o nome do atributo com a primeira letra em maiúscula. </li></ul></ul></ul><ul><ul><li>mutator : (de alteração), permite alterar o valor de um atributo; </li></ul></ul><ul><ul><ul><li>começa com “set” (setter) e o nome do atributo com a primeira letra em maiúscula. </li></ul></ul></ul><ul><ul><li>worker : (de trabalho), permite executar uma determinada tarefa de negócio; </li></ul></ul><ul><ul><ul><li>leva o nome de uma função/operação; </li></ul></ul></ul><ul><ul><ul><li>começa com um verbo, ou é uma ação. </li></ul></ul></ul><ul><li>Criando classes Java </li></ul>
  35. 35. <ul><li>Definindo Métodos </li></ul><ul><ul><li>Existem 2 formas de métodos em Java: </li></ul></ul><ul><ul><ul><li>De instância (métodos do objeto – non-static) </li></ul></ul></ul><ul><ul><ul><li>De classe (métodos da classe – static) </li></ul></ul></ul><ul><li>Criando classes Java </li></ul>
  36. 36. <ul><ul><li>Métodos de instância </li></ul></ul><ul><ul><ul><li>usado para manipular valor e estado e variáveis de instância e de classe; </li></ul></ul></ul><ul><ul><ul><li>definidos como membro de classe (sem o modificador static); </li></ul></ul></ul>public class Conta { // variável de instância private int numero; // metodo de instancia public int getNumero() { // manipula variavel de instancia return numero; } } <ul><li>Definindo Métodos </li></ul>
  37. 37. <ul><ul><li>Métodos de classe </li></ul></ul><ul><ul><ul><li>manipula valor e estado para variáveis de classe (accessível por todos objetos daquela classe); </li></ul></ul></ul><ul><ul><ul><li>definidos como membro de classe (COM o modificador static ); </li></ul></ul></ul>public class Conta { // variável de classe public static double tarifa = 2.5; // metodo de classe public static void setTarifa(double tarifa) { // refencia da classe Conta Conta.tarifa = tarifa; } } <ul><li>Definindo Métodos </li></ul>
  38. 38. <ul><ul><li>Exemplos gerais </li></ul></ul>// worker public void executar (int valor1, double valor2) { } // accessor public int getIdade () { return idade; } // mutator public void setIdade (int idade) { this.idade = idade; } <ul><li>Definindo Métodos </li></ul>
  39. 39. <ul><li>Métodos e atributos estáticos x referências </li></ul>public class Conta { // variável de classe public static double tarifa = 2.5; // metodo de classe public static void setTarifa(double tarifa) { // refencia da classe Conta Conta.tarifa = tarifa; } } Conta minhaConta = new Conta(); minhaConta.setTarifa(3.0); // evitar!! System.out.println(“tarifa=“ + minhaConta.tarifa); //evitar!!! Conta.setTarifa(3.0); // Mais claro! System.out.println(“tarifa=“ + Conta.tarifa); //Mais claro!
  40. 40. <ul><li>Métodos estáticos na API Java </li></ul>Método main() Classe System Classe Math <ul><li>Criando classes Java </li></ul>
  41. 41. <ul><li>Sobrecarga de métodos (Method Overloading) </li></ul>public int somar(int a, int b) public int somar(int a, int b, int c) public int somar(int a, int b, int c, int d) public int somar(int a, int b, int c, int d, int e) public int somar(int a, short b) public double somar(double a, int b) <ul><li>Criando classes Java </li></ul>
  42. 42. <ul><li>Sobrecarga de métodos </li></ul><ul><li>public class Calculadora { </li></ul><ul><li>public int somar(int a, int b){ </li></ul><ul><li>System.out.println(“soma de inteiros”); </li></ul><ul><li>return a + b; </li></ul><ul><li>} </li></ul><ul><li>public float somar(float a, float b) { </li></ul><ul><li>System.out.println(“soma de floats”); </li></ul><ul><li>return a + b; </li></ul><ul><li>} </li></ul><ul><li>public float somar(int a, float b) { </li></ul><ul><li>System.out.println(“soma de inteiro com float”); </li></ul><ul><li>return a + b; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>Criando classes Java </li></ul>
  43. 43. <ul><li>Sobrecarga de métodos na API </li></ul>System.out.println(); void println() void println(boolean x) void println(char x) void println(char[] x) void println(double x) void println(float x) void println(int x) void println(long x) void println(Object x) void println(String x) <ul><li>Criando classes Java </li></ul>
  44. 44. <ul><li>De Classe vs. De Instância </li></ul><ul><ul><li>Quando um método não possuir o modificador static , ele será considerado como de instância ( non-static ). Seu efeito restringe-se somente ao objeto chamado pela sua referência. </li></ul></ul><ul><ul><li>Quando um método possuir o modificador static , ele será considerado como de classe( static ). Seu efeito abrange todos os objetos oriundos daquela classe. </li></ul></ul><ul><ul><li>Um método de instância ( non-static ), mesmo não sendo indicado, pode manipular atributos ou métodos de classe( static ),. </li></ul></ul><ul><ul><li>Um método de classe ( static ) não pode manipular diretamente atributos ou métodos instância, para isso ele necessitará de uma referência para o objeto. </li></ul></ul><ul><li>Criando classes Java </li></ul>
  45. 45. <ul><li>Discussão </li></ul><ul><ul><li>Quando falamos de encapsulamento, entende-se por esconder somente os detalhes de implementação? </li></ul></ul><ul><ul><li>Quando definimos métodos, estamos definindo como os objetos farão suas atividades, ou seja, como funcionarão? </li></ul></ul><ul><ul><li>Finalmente, qual a diferença entre ser um membro de instância ou um membro de classe? </li></ul></ul><ul><li>Criando classes Java </li></ul>
  46. 46. <ul><li>Exercícios </li></ul><ul><li>Dada a classe Ponto.java não encapsulada, encapsule-a com métodos accessors e mutators, utilizando a keyword this para os métodos mutators. </li></ul><ul><li>Modifique a classe TestePontos.java para que utilize a sua nova classe Ponto.java encapsulada. </li></ul><ul><li>Dada a classe Pessoa.java não encapsulada, encapsule-a com métodos accessors e mutators, utilizando a keyword this para os métodos mutators. Valide o CPF no método mutator setCpf utilizando CpfValidator.validarCpf(). Utilize a classe TestePessoa.java para validar seu código. </li></ul><ul><li>Crie uma classe TesteCalculadora.java que possui um método main() e que chame todos os métodos da classe Calculadora.java </li></ul><ul><li>Criando classes Java </li></ul>

×