Programação Orientada a Objetos com Java Aula 5 professor: Fábio Kimura e-mail: fkimura@yahoo.com
M e t o d o l o g i a Avaliação –  Trabalhos individuais. –  Desconto por atraso de 1 ponto por dia.  Nota Final Média :   Média das 2 melhores notas >= 7.0 Trabalho Nota Data Participação em sala e  exercícios em casa  0 – 10 Todos os dias Jogo de Truco 0 – 10 27/08 Prova 0 – 10 01/09
Conteúdo da prova Plataforma Java Método main Variáveis (declaração, inicialização e uso) Tipos primitivos e de referência casting/promotion Métodos e construtores Sobrecarga de métodos e construtores Loops (for, when, etc) Controle de fluxo (if/else, etc) Encapsulamento Padrão JavaBean (getters/setters)
Agenda Aula 5 Operador ternário Enums Varargs Autoboxing/Unboxing Definindo construtores Sobrecarga de construtores Uso do this Exercícios
Operador Ternário [expressão condicional] ? [expressão se verdadeiro] : [expressão se falso] int   x   =   6; System.out.println(x   <   5   ?   ”menor que 5”   :   “maior que 5”); Utilizar com muito cuidado e critério. Preferir o if/else quando possível por motivos de clareza.
Uma alternativa às constantes, quando se precisa de uma seqüência de constantes (enum pattern). // int Enum Pattern - has severe problems!  public static final int SEASON_WINTER = 0;  public static final int SEASON_SPRING = 1;  public static final int SEASON_SUMMER = 2;  public static final int SEASON_FALL = 3;  Não é typesafe (não tem garantia de tipo) Não tem namespace (é necessário prefixo para não colidir com outras variáveis Frágil - exige recompilação a cada nova constante adicionada ao enum. Valor não dá informação. Enums
Java 5: Enums enum Season { WINTER, SPRING, SUMMER, FALL } enum Naipe { OUROS, ESPADAS, COPAS, PAUS } Enums são muito poderosos, veja mais informações em: http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html Enums (Java 5)
public class CalculadoraEnum { public enum Operacao {   MAIS, MENOS, VEZES, DIVIDIDO;   double eval(double a, double b) { switch(this) { case MAIS:  return a + b; case MENOS:  return a - b; case VEZES:  return a * b; case DIVIDIDO: return a / b; default: return 0.0; } } } public static void main(String[] args) {   double a = 5, b = 2;   for (Operacao op : Operacao.values())   System.out.println(a+&quot; &quot;+op+&quot; &quot;+b+&quot; = &quot;+op.eval(a,b)); } } Enums (Java 5)
public class Carta { public enum Valor { DOIS, TRES, QUATRO, CINCO, SEIS, SETE, OITO, NOVE, DEZ, VALETE, DAMA, REIS, AS } public enum Naipe { OUROS, ESPADAS, COPAS, PAUS } private final Valor valor; private final Naipe naipe; public Carta(Valor valor, Naipe naipe) { this.valor = valor; this.naipe = naipe; } public Valor getValor() { return valor; } public Naipe getNaipe() { return naipe; } public String toString() {  return valor + &quot; de &quot; + naipe;  } } Enums (Java 5)
public class Teste { public void testar(int... args) { System.out.println(&quot;Recebi um array de &quot; + args.length); for (int a: args) { System.out.print(a + &quot; &quot;); } System.out.println(); } public static void main(String... args) { Teste teste = new Teste(); teste.testar(1, 2, 3); teste.testar(1, 2); teste.testar(1, 2, 3, 4, 5, 6); } } varargs (Java 5)
public class Teste { public static void main(String[] args) { Integer a = new Integer(1); Integer b = 1; // Java 5: Autoboxing double c = 2.5; Double d = new Double(c);  Double e = c; double f = new Double(c); // Unboxing } } Autoboxing (Java 5)
Definindo Construtores Métodos construtores:  são definidos nas classes com o intuito de permitir a inicialização de objetos, atribuindo valores a variáveis de instância. são métodos especiais, sem tipo de retorno e levam sempre o nome da Classe. executados uma única vez para cada objeto. Criando classes Java
Definindo Construtores Forma modificador   = palavra reservada que informa o nível de acesso identificador  = nome da classe (fácil entendimento) parametros  = parametros de entrada do método construtor [modificador] identificador([parametros]) { // bloco de código do método construtor } Criando classes Java
Construtor padrão toda classe Java deve ter pelo menos um construtor O Construtor padrão é inserido pelo compilador  javac  caso o programador não tenha definido nenhum outro. Se o programador criar um construtor diferente do padrão (vazio), o construtor padrão NÃO será adicionado pelo compilador. public NomeClasse () { }   Definindo Construtores
Construtor padrão exemplos Para a classe Conta, o construtor padrão fica:   public Conta () { } Para criar uma instância de objeto da classe Conta: Conta conta = new Conta(); Definindo Construtores
Construtor padrão exemplos É por isso que nos programas de Teste vistos até agora, quando são chamadas as linhas que possuem o operador  new   e um construtor vazio, funcionam. Pois durante a compilação, o compilador  javac   insere o construtor padrão se não nos lembrarmos dele. Definindo Construtores
Definindo Construtores Construtor padrão exemplos public class Conta {   private int numero; private double saldo; private double juros; private java.util.Date vencimento; .. // construtor padrão public Conta() { // saldo padrao é ZERO. numero = 0; // saldo padrao é ZERO. saldo = 0; // juros padrao é ZERO. juros = 0; // data atual do sistema vencimento = new java.util.Date(); }   .. Analisando a classe Conta, podemos inicializá-la com um saldo padrão, com um saldo inicial, com juros iniciais, e data.   Criando classes Java
Sobrecarga: podemos definir vários construtores, com parâmetros diferentes, numa mesma classe. public class Pessoa {   private String nome; private String cpf;   public Pessoa() { }   public Pessoa(String nomePessoa) { nome = nomePessoa; }   public Pessoa(String nomePessoa, String cpfPessoa) { nome = nomePessoa; cpf = cpfPessoa; } ... O que ganhamos com isso? Definindo Construtores: Sobrecarga de construtores
Usando efetivamente os construtores de uma classe se originarão a partir da análise de como o objetos devem ser inicializados durante a execução dos aplicativos. a função do construtor, além de inicializar a instância de um objeto a partir de uma classe, é retornar o endereço de memória para a referência que a instrução  new  está sendo associada Definindo Construtores
Usando efetivamente Vendo o exemplo abaixo: Pessoa pessoa = new Pessoa(&quot;Jose Antonio&quot;);   Pessoa pessoa = new Pessoa(&quot;Jose Antonio&quot;, &quot;123456789-00&quot;); A variável  pessoa , do tipo referência de Pessoa, recebe o endereço de memória em que o objeto foi alocado.  A partir desta referência, temos acesso aos valores passados ao objeto através de seus atributos e métodos de instância Definindo Construtores
Uso do  this Keyword  Representa a referência da própria instância (este) Usado para acessar membros de instância: Atributos; Métodos; Construtores; Facilita a codificação Criando classes Java
Uso do  this Construtores ... private String nome, cpf; public Pessoa(String nome, String cpf) { this.nome = nome; this.cpf = cpf; } public Pessoa(String nome) { this(nome, null); } ... Usamos o this em chamadas de construtores dentro da mesma classe, aumentando o reaproveitamento de código e facilitando a leitura. Criando classes Java
Discussão Resumidamente o que uma classe Java contém?  Qual a ordem dos membros de uma classe Java segundo a convenção? Os construtores são considerados métodos? Por que o compilador não coloca sempre um construtor vazio? Quando usar construtores ao invés de métodos mutators (setters)? Para que serve um construtor privado? Criando classes Java
Anatomia de uma classe Java Declaração da  Classe (package) (imports) (class) Declaração e inicialização de  Atributos  (opcional) (constantes) (atributos estáticos) (atributos públicos) (atributos privados) Declaração de  Construtores  (opcional) Declaração de  Métodos  (opcional) (workers) (getters/setters) (método main)
Exercícios Utilizando o operador ternário, crie uma classe Formatados.java que imprima na tela todos os números de 1 a 15, na forma:  01  02  03  04  05  06  07  08  09  10  11  12  13  14  15 Olhe, compile e teste as classes CartaEnum e BaralhoEnum Olhe, compile e teste as classes Conta, TesteConta, TesteConta2, e TesteConta3. Altere a classe Conta para que os construtores economizem código, utilizando a keyword  this . Na classe Banco, crie uma variável de classe chamada  numeroInstancias , que conte quantas instâncias da classe Banco foram criadas. Crie uma classe TesteBanco que mostre o funcionamento do contador. Implemente o design pattern Singleton na classe Banco. Altere a classe TesteBanco para comprovar a implementação do Singleton. Criando classes Java

Aula5

  • 1.
    Programação Orientada aObjetos com Java Aula 5 professor: Fábio Kimura e-mail: fkimura@yahoo.com
  • 2.
    M e to d o l o g i a Avaliação – Trabalhos individuais. – Desconto por atraso de 1 ponto por dia. Nota Final Média : Média das 2 melhores notas >= 7.0 Trabalho Nota Data Participação em sala e exercícios em casa 0 – 10 Todos os dias Jogo de Truco 0 – 10 27/08 Prova 0 – 10 01/09
  • 3.
    Conteúdo da provaPlataforma Java Método main Variáveis (declaração, inicialização e uso) Tipos primitivos e de referência casting/promotion Métodos e construtores Sobrecarga de métodos e construtores Loops (for, when, etc) Controle de fluxo (if/else, etc) Encapsulamento Padrão JavaBean (getters/setters)
  • 4.
    Agenda Aula 5Operador ternário Enums Varargs Autoboxing/Unboxing Definindo construtores Sobrecarga de construtores Uso do this Exercícios
  • 5.
    Operador Ternário [expressãocondicional] ? [expressão se verdadeiro] : [expressão se falso] int x = 6; System.out.println(x < 5 ? ”menor que 5” : “maior que 5”); Utilizar com muito cuidado e critério. Preferir o if/else quando possível por motivos de clareza.
  • 6.
    Uma alternativa àsconstantes, quando se precisa de uma seqüência de constantes (enum pattern). // int Enum Pattern - has severe problems! public static final int SEASON_WINTER = 0; public static final int SEASON_SPRING = 1; public static final int SEASON_SUMMER = 2; public static final int SEASON_FALL = 3; Não é typesafe (não tem garantia de tipo) Não tem namespace (é necessário prefixo para não colidir com outras variáveis Frágil - exige recompilação a cada nova constante adicionada ao enum. Valor não dá informação. Enums
  • 7.
    Java 5: Enumsenum Season { WINTER, SPRING, SUMMER, FALL } enum Naipe { OUROS, ESPADAS, COPAS, PAUS } Enums são muito poderosos, veja mais informações em: http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html Enums (Java 5)
  • 8.
    public class CalculadoraEnum{ public enum Operacao { MAIS, MENOS, VEZES, DIVIDIDO; double eval(double a, double b) { switch(this) { case MAIS: return a + b; case MENOS: return a - b; case VEZES: return a * b; case DIVIDIDO: return a / b; default: return 0.0; } } } public static void main(String[] args) { double a = 5, b = 2; for (Operacao op : Operacao.values()) System.out.println(a+&quot; &quot;+op+&quot; &quot;+b+&quot; = &quot;+op.eval(a,b)); } } Enums (Java 5)
  • 9.
    public class Carta{ public enum Valor { DOIS, TRES, QUATRO, CINCO, SEIS, SETE, OITO, NOVE, DEZ, VALETE, DAMA, REIS, AS } public enum Naipe { OUROS, ESPADAS, COPAS, PAUS } private final Valor valor; private final Naipe naipe; public Carta(Valor valor, Naipe naipe) { this.valor = valor; this.naipe = naipe; } public Valor getValor() { return valor; } public Naipe getNaipe() { return naipe; } public String toString() { return valor + &quot; de &quot; + naipe; } } Enums (Java 5)
  • 10.
    public class Teste{ public void testar(int... args) { System.out.println(&quot;Recebi um array de &quot; + args.length); for (int a: args) { System.out.print(a + &quot; &quot;); } System.out.println(); } public static void main(String... args) { Teste teste = new Teste(); teste.testar(1, 2, 3); teste.testar(1, 2); teste.testar(1, 2, 3, 4, 5, 6); } } varargs (Java 5)
  • 11.
    public class Teste{ public static void main(String[] args) { Integer a = new Integer(1); Integer b = 1; // Java 5: Autoboxing double c = 2.5; Double d = new Double(c); Double e = c; double f = new Double(c); // Unboxing } } Autoboxing (Java 5)
  • 12.
    Definindo Construtores Métodosconstrutores: são definidos nas classes com o intuito de permitir a inicialização de objetos, atribuindo valores a variáveis de instância. são métodos especiais, sem tipo de retorno e levam sempre o nome da Classe. executados uma única vez para cada objeto. Criando classes Java
  • 13.
    Definindo Construtores Formamodificador = palavra reservada que informa o nível de acesso identificador = nome da classe (fácil entendimento) parametros = parametros de entrada do método construtor [modificador] identificador([parametros]) { // bloco de código do método construtor } Criando classes Java
  • 14.
    Construtor padrão todaclasse Java deve ter pelo menos um construtor O Construtor padrão é inserido pelo compilador javac caso o programador não tenha definido nenhum outro. Se o programador criar um construtor diferente do padrão (vazio), o construtor padrão NÃO será adicionado pelo compilador. public NomeClasse () { } Definindo Construtores
  • 15.
    Construtor padrão exemplosPara a classe Conta, o construtor padrão fica:   public Conta () { } Para criar uma instância de objeto da classe Conta: Conta conta = new Conta(); Definindo Construtores
  • 16.
    Construtor padrão exemplosÉ por isso que nos programas de Teste vistos até agora, quando são chamadas as linhas que possuem o operador new e um construtor vazio, funcionam. Pois durante a compilação, o compilador javac insere o construtor padrão se não nos lembrarmos dele. Definindo Construtores
  • 17.
    Definindo Construtores Construtorpadrão exemplos public class Conta {   private int numero; private double saldo; private double juros; private java.util.Date vencimento; .. // construtor padrão public Conta() { // saldo padrao é ZERO. numero = 0; // saldo padrao é ZERO. saldo = 0; // juros padrao é ZERO. juros = 0; // data atual do sistema vencimento = new java.util.Date(); } .. Analisando a classe Conta, podemos inicializá-la com um saldo padrão, com um saldo inicial, com juros iniciais, e data. Criando classes Java
  • 18.
    Sobrecarga: podemos definirvários construtores, com parâmetros diferentes, numa mesma classe. public class Pessoa {   private String nome; private String cpf;   public Pessoa() { }   public Pessoa(String nomePessoa) { nome = nomePessoa; }   public Pessoa(String nomePessoa, String cpfPessoa) { nome = nomePessoa; cpf = cpfPessoa; } ... O que ganhamos com isso? Definindo Construtores: Sobrecarga de construtores
  • 19.
    Usando efetivamente osconstrutores de uma classe se originarão a partir da análise de como o objetos devem ser inicializados durante a execução dos aplicativos. a função do construtor, além de inicializar a instância de um objeto a partir de uma classe, é retornar o endereço de memória para a referência que a instrução new está sendo associada Definindo Construtores
  • 20.
    Usando efetivamente Vendoo exemplo abaixo: Pessoa pessoa = new Pessoa(&quot;Jose Antonio&quot;);   Pessoa pessoa = new Pessoa(&quot;Jose Antonio&quot;, &quot;123456789-00&quot;); A variável pessoa , do tipo referência de Pessoa, recebe o endereço de memória em que o objeto foi alocado. A partir desta referência, temos acesso aos valores passados ao objeto através de seus atributos e métodos de instância Definindo Construtores
  • 21.
    Uso do this Keyword Representa a referência da própria instância (este) Usado para acessar membros de instância: Atributos; Métodos; Construtores; Facilita a codificação Criando classes Java
  • 22.
    Uso do this Construtores ... private String nome, cpf; public Pessoa(String nome, String cpf) { this.nome = nome; this.cpf = cpf; } public Pessoa(String nome) { this(nome, null); } ... Usamos o this em chamadas de construtores dentro da mesma classe, aumentando o reaproveitamento de código e facilitando a leitura. Criando classes Java
  • 23.
    Discussão Resumidamente oque uma classe Java contém? Qual a ordem dos membros de uma classe Java segundo a convenção? Os construtores são considerados métodos? Por que o compilador não coloca sempre um construtor vazio? Quando usar construtores ao invés de métodos mutators (setters)? Para que serve um construtor privado? Criando classes Java
  • 24.
    Anatomia de umaclasse Java Declaração da Classe (package) (imports) (class) Declaração e inicialização de Atributos (opcional) (constantes) (atributos estáticos) (atributos públicos) (atributos privados) Declaração de Construtores (opcional) Declaração de Métodos (opcional) (workers) (getters/setters) (método main)
  • 25.
    Exercícios Utilizando ooperador ternário, crie uma classe Formatados.java que imprima na tela todos os números de 1 a 15, na forma: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Olhe, compile e teste as classes CartaEnum e BaralhoEnum Olhe, compile e teste as classes Conta, TesteConta, TesteConta2, e TesteConta3. Altere a classe Conta para que os construtores economizem código, utilizando a keyword this . Na classe Banco, crie uma variável de classe chamada numeroInstancias , que conte quantas instâncias da classe Banco foram criadas. Crie uma classe TesteBanco que mostre o funcionamento do contador. Implemente o design pattern Singleton na classe Banco. Altere a classe TesteBanco para comprovar a implementação do Singleton. Criando classes Java