O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
Carregando em…3
×

Confira estes a seguir

1 de 25 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (16)

Anúncio

Semelhante a Aula5 (20)

Mais recentes (20)

Anúncio

Aula5

  1. 1. Programação Orientada a Objetos com Java Aula 5 professor: Fábio Kimura e-mail: fkimura@yahoo.com
  2. 2. <ul><li>M e t o d o l o g i a </li></ul><ul><li>Avaliação </li></ul>– 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. 3. <ul><li>Conteúdo da prova </li></ul><ul><ul><li>Plataforma Java </li></ul></ul><ul><ul><li>Método main </li></ul></ul><ul><ul><li>Variáveis (declaração, inicialização e uso) </li></ul></ul><ul><ul><li>Tipos primitivos e de referência </li></ul></ul><ul><ul><li>casting/promotion </li></ul></ul><ul><ul><li>Métodos e construtores </li></ul></ul><ul><ul><li>Sobrecarga de métodos e construtores </li></ul></ul><ul><ul><li>Loops (for, when, etc) </li></ul></ul><ul><ul><li>Controle de fluxo (if/else, etc) </li></ul></ul><ul><ul><li>Encapsulamento </li></ul></ul><ul><ul><li>Padrão JavaBean (getters/setters) </li></ul></ul>
  4. 4. <ul><li>Agenda Aula 5 </li></ul><ul><li>Operador ternário </li></ul><ul><li>Enums </li></ul><ul><li>Varargs </li></ul><ul><li>Autoboxing/Unboxing </li></ul><ul><li>Definindo construtores </li></ul><ul><li>Sobrecarga de construtores </li></ul><ul><li>Uso do this </li></ul><ul><li>Exercícios </li></ul>
  5. 5. <ul><li>Operador Ternário </li></ul>[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.
  6. 6. <ul><ul><li>Uma alternativa às constantes, quando se precisa de uma seqüência de constantes (enum pattern). </li></ul></ul><ul><ul><li>// int Enum Pattern - has severe problems! </li></ul></ul><ul><ul><li>public static final int SEASON_WINTER = 0; </li></ul></ul><ul><ul><li>public static final int SEASON_SPRING = 1; </li></ul></ul><ul><ul><li>public static final int SEASON_SUMMER = 2; </li></ul></ul><ul><ul><li>public static final int SEASON_FALL = 3; </li></ul></ul><ul><ul><li>Não é typesafe (não tem garantia de tipo) </li></ul></ul><ul><ul><li>Não tem namespace (é necessário prefixo para não colidir com outras variáveis </li></ul></ul><ul><ul><li>Frágil - exige recompilação a cada nova constante adicionada ao enum. </li></ul></ul><ul><ul><li>Valor não dá informação. </li></ul></ul><ul><li>Enums </li></ul>
  7. 7. <ul><ul><li>Java 5: Enums </li></ul></ul><ul><ul><li>enum Season { WINTER, SPRING, SUMMER, FALL } </li></ul></ul><ul><ul><li>enum Naipe { OUROS, ESPADAS, COPAS, PAUS } </li></ul></ul><ul><li>Enums são muito poderosos, veja mais informações em: </li></ul><ul><li>http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html </li></ul><ul><li>Enums (Java 5) </li></ul>
  8. 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)); } } <ul><li>Enums (Java 5) </li></ul>
  9. 9. <ul><ul><li>public class Carta { </li></ul></ul><ul><ul><li>public enum Valor { DOIS, TRES, QUATRO, CINCO, SEIS, </li></ul></ul><ul><ul><li>SETE, OITO, NOVE, DEZ, VALETE, DAMA, REIS, AS } </li></ul></ul><ul><ul><li>public enum Naipe { OUROS, ESPADAS, COPAS, PAUS } </li></ul></ul><ul><ul><li>private final Valor valor; </li></ul></ul><ul><ul><li>private final Naipe naipe; </li></ul></ul><ul><ul><li>public Carta(Valor valor, Naipe naipe) { </li></ul></ul><ul><ul><li>this.valor = valor; </li></ul></ul><ul><ul><li>this.naipe = naipe; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public Valor getValor() { return valor; } </li></ul></ul><ul><ul><li>public Naipe getNaipe() { return naipe; } </li></ul></ul><ul><ul><li>public String toString() { </li></ul></ul><ul><ul><li>return valor + &quot; de &quot; + naipe; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>Enums (Java 5) </li></ul>
  10. 10. <ul><ul><li>public class Teste { </li></ul></ul><ul><ul><li>public void testar(int... args) { </li></ul></ul><ul><ul><li>System.out.println(&quot;Recebi um array de &quot; + args.length); </li></ul></ul><ul><ul><li>for (int a: args) { </li></ul></ul><ul><ul><li>System.out.print(a + &quot; &quot;); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>System.out.println(); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public static void main(String... args) { </li></ul></ul><ul><ul><li>Teste teste = new Teste(); </li></ul></ul><ul><ul><li>teste.testar(1, 2, 3); </li></ul></ul><ul><ul><li>teste.testar(1, 2); </li></ul></ul><ul><ul><li>teste.testar(1, 2, 3, 4, 5, 6); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>varargs (Java 5) </li></ul>
  11. 11. <ul><ul><li>public class Teste { </li></ul></ul><ul><ul><li>public static void main(String[] args) { </li></ul></ul><ul><ul><li>Integer a = new Integer(1); </li></ul></ul><ul><ul><li>Integer b = 1; // Java 5: Autoboxing </li></ul></ul><ul><ul><li>double c = 2.5; </li></ul></ul><ul><ul><li>Double d = new Double(c); </li></ul></ul><ul><ul><li>Double e = c; </li></ul></ul><ul><ul><li>double f = new Double(c); // Unboxing </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>Autoboxing (Java 5) </li></ul>
  12. 12. <ul><li>Definindo Construtores </li></ul><ul><ul><li>Métodos construtores: </li></ul></ul><ul><ul><ul><li>são definidos nas classes com o intuito de permitir a inicialização de objetos, atribuindo valores a variáveis de instância. </li></ul></ul></ul><ul><ul><ul><li>são métodos especiais, sem tipo de retorno e levam sempre o nome da Classe. </li></ul></ul></ul><ul><ul><ul><li>executados uma única vez para cada objeto. </li></ul></ul></ul><ul><li>Criando classes Java </li></ul>
  13. 13. <ul><li>Definindo Construtores </li></ul><ul><ul><li>Forma </li></ul></ul><ul><ul><ul><li>modificador = palavra reservada que informa o nível de acesso </li></ul></ul></ul><ul><ul><ul><li>identificador = nome da classe (fácil entendimento) </li></ul></ul></ul><ul><ul><ul><li>parametros = parametros de entrada do método construtor </li></ul></ul></ul>[modificador] identificador([parametros]) { // bloco de código do método construtor } <ul><li>Criando classes Java </li></ul>
  14. 14. <ul><ul><li>Construtor padrão </li></ul></ul><ul><ul><ul><li>toda classe Java deve ter pelo menos um construtor </li></ul></ul></ul><ul><ul><ul><li>O Construtor padrão é inserido pelo compilador javac caso o programador não tenha definido nenhum outro. </li></ul></ul></ul><ul><ul><ul><li>Se o programador criar um construtor diferente do padrão (vazio), o construtor padrão NÃO será adicionado pelo compilador. </li></ul></ul></ul>public NomeClasse () { } <ul><li>Definindo Construtores </li></ul>
  15. 15. <ul><ul><li>Construtor padrão </li></ul></ul><ul><ul><ul><li>exemplos </li></ul></ul></ul>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(); <ul><li>Definindo Construtores </li></ul>
  16. 16. <ul><ul><li>Construtor padrão </li></ul></ul><ul><ul><ul><li>exemplos </li></ul></ul></ul>É 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. <ul><li>Definindo Construtores </li></ul>
  17. 17. <ul><li>Definindo Construtores </li></ul><ul><ul><li>Construtor padrão </li></ul></ul><ul><ul><ul><li>exemplos </li></ul></ul></ul>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. <ul><li>Criando classes Java </li></ul>
  18. 18. <ul><ul><li>Sobrecarga: podemos definir vários construtores, com parâmetros diferentes, numa mesma classe. </li></ul></ul>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? <ul><li>Definindo Construtores: Sobrecarga de construtores </li></ul>
  19. 19. <ul><ul><li>Usando efetivamente </li></ul></ul><ul><ul><ul><li>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. </li></ul></ul></ul><ul><ul><ul><li>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 </li></ul></ul></ul><ul><li>Definindo Construtores </li></ul>
  20. 20. <ul><ul><li>Usando efetivamente </li></ul></ul><ul><ul><ul><li>Vendo o exemplo abaixo: </li></ul></ul></ul><ul><ul><ul><li>Pessoa pessoa = new Pessoa(&quot;Jose Antonio&quot;); </li></ul></ul></ul><ul><ul><ul><li>  </li></ul></ul></ul><ul><ul><ul><li>Pessoa pessoa = new Pessoa(&quot;Jose Antonio&quot;, &quot;123456789-00&quot;); </li></ul></ul></ul><ul><ul><ul><li>A variável pessoa , do tipo referência de Pessoa, recebe o endereço de memória em que o objeto foi alocado. </li></ul></ul></ul><ul><ul><ul><li>A partir desta referência, temos acesso aos valores passados ao objeto através de seus atributos e métodos de instância </li></ul></ul></ul><ul><li>Definindo Construtores </li></ul>
  21. 21. <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><ul><li>Construtores; </li></ul></ul></ul><ul><ul><li>Facilita a codificação </li></ul></ul><ul><li>Criando classes Java </li></ul>
  22. 22. <ul><li>Uso do this </li></ul><ul><ul><li>Construtores </li></ul></ul>... 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. <ul><li>Criando classes Java </li></ul>
  23. 23. <ul><li>Discussão </li></ul><ul><ul><li>Resumidamente o que uma classe Java contém? </li></ul></ul><ul><ul><li>Qual a ordem dos membros de uma classe Java segundo a convenção? </li></ul></ul><ul><ul><li>Os construtores são considerados métodos? </li></ul></ul><ul><ul><li>Por que o compilador não coloca sempre um construtor vazio? </li></ul></ul><ul><ul><li>Quando usar construtores ao invés de métodos mutators (setters)? </li></ul></ul><ul><ul><li>Para que serve um construtor privado? </li></ul></ul><ul><li>Criando classes Java </li></ul>
  24. 24. <ul><li>Anatomia de uma classe Java </li></ul>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. 25. <ul><li>Exercícios </li></ul><ul><li>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 </li></ul><ul><li>Olhe, compile e teste as classes CartaEnum e BaralhoEnum </li></ul><ul><li>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 . </li></ul><ul><li>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. </li></ul><ul><li>Implemente o design pattern Singleton na classe Banco. Altere a classe TesteBanco para comprovar a implementação do Singleton. </li></ul><ul><li>Criando classes Java </li></ul>

×