Notes
Slide Show
Outline
1
Modulo II – Tópicos em
Java - Extra
  • Prof. Ismael H F Santos




2
Ementa
  • Modulo II - Tópicos em JAVA - Extra
    • Logging
    • Asserções
    • Classe java.lang.Object e a Interface Cloneable
    • Documentação com Javadoc


3
Bibliografia
  • Linguagem de Programação JAVA
    •  Ismael H. F. Santos, Apostila UniverCidade, 2002
  • The Java Tutorial: A practical guide for programmers
    •  Tutorial on-line: http://java.sun.com/docs/books/tutorial
  • Java in a Nutshell
    •  David Flanagan, O´Reilly & Associates
  • Just Java 2
    •  Mark C. Chan, Steven W. Griffith e Anthony F. Iasi, Makron Books.
  • Java 1.2
    •  Laura Lemay & Rogers Cadenhead, Editora Campos
4
Livros
  • Core Java 2, Cay S. Horstmann, Gary Cornell
    • Volume 1 (Fundamentos)
    • Volume 2 (Características Avançadas)
  • Java: Como Programar, Deitel & Deitel
  • Thinking in Patterns with JAVA, Bruce Eckel
    • Gratuito. http://www.mindview.net/Books/TIJ/
5
POO-Java
6
Logging
7
Logger
8
Exemplo Logging
9
Níveis de Severidade
10
POO-Java
11
Asserções – since JSDK 1.4.0
  • Expressões booleanas que o programador define para afirmar uma condição que ele acredita ser verdade
    • Asserções são usadas para validar código ( ter a certeza que um vetor tem determinado tamanho, ter a certeza que o programa não passou por determinado lugar, etc)
    • Melhoram a qualidade do código: tipo de teste caixa-branca
    • Devem ser usadas durante o desenvolvimento e desligadas na produção (afeta a performance)
    • Não devem ser usadas como parte da lógica do código

  • Asserções são um recurso novo do JSDK1.4.0
    • Nova palavra-chave: assert
    • É preciso compilar usando a opção -source 1.4:
      • >javac -source 1.4 Classe.java
    • Para executar, é preciso habilitar afirmações (enable assertions):
      • >java -ea Classe
12
Asserções: sintaxe
  • Asserções testam uma condição. Se a condição for falsa, um AssertionError é lançado
    • Sintaxe:
      • assert expressão;
      • assert expressãoUm : expressãoDois;


  • Se primeira expressão for true, a segunda não é avaliada. Sendo falsa, um AssertionError é lançado e o valor da segunda expressão é passado no seu construtor.
13
Asserções: exemplo
  • Trecho de código que afirma que controle nunca passará pelo default:


    • switch(estacao) {
      • case Estacao.PRIMAVERA:
      • ...
      • break;
      • case Estacao.VERAO:
      • ...
      • break;
      • case Estacao.OUTONO:
      • ...
      • break;
      • case Estacao.INVERNO:
      • ...
      • break;
      • default:
      • assert false: "Controle nunca chegará aqui!";
    • }
14
POO-Java
15
Classe java.lang.Object
  •  Modelo de Classes de Java
    •  Conforme já dissemos anteriormente em Java a classe Object é a raiz da hierarquia de classes à qual todas as classes existentes pertencem. Quando não declaramos que uma classe estende outra, ela implicitamente estende Object;


    • Uma das vantagens de termos uma superclasse comum, é termos uma funcionalidade comum a todos os objetos. Principais métodos de Object
      • public boolean equals(Object obj)
      • public String toString()
      • public int hashCode()
      • protected Object clone() throws CloneNotSupportedException
      • public void wait() throws InterruptedException
      • public void notify()

16
Redefinindo métodos de Object
  • Há vários métodos em Object que podem ser sobrepostos pelas subclasses
    •  A subclasse que você está estendendo talvez já tenha sobreposto esses métodos mas, alguns deles, talvez precisem ser redefinidos para que sua classe possa ser usada de forma correta
  •  Métodos que devem ser sobrepostos
    • boolean equals(Object o): Defina o critério de igualdade para seu objeto
    • int hashCode(): Para que seu objeto possa ser localizado em Hashtables
    • String toString(): Sobreponha com informações específicas do seu objeto
    • Object clone(): se você desejar permitir cópias do seu objeto
17
Redefinindo métodos de Object
  • Determine quais os critérios ( que propriedades do objeto) que podem ser usados para dizer que um objeto é igual a outro
    • raio, em um objeto Círculo
    • número de série, em um objeto genérico
    • nome, sobrenome, departamento, para um objeto Empregado
    • A chave primária, para um objeto de negócio


  •  Implemente o equals(), testando essas condições e retornando true apenas se forem verdadeiras (false, caso contrário)
    • Garanta que a assinatura seja igual à definida em Object
18
Redefinindo métodos de Object
  • instanceof é um operador usado para comparar uma referência com uma classe
    • A expressão será true se areferência for do tipo de uma classe ou subclasse testada e false, caso contrário
  • Exemplo: sobreposição de equals()
  • class Point {
  •    private int x, y;
  •    public boolean equals(Object obj) {
  •         if ( obj instanceof Point ) {
  •          Point ponto = (Point)obj;
  •          if ( ponto.x == this.x && ponto.y == this.y) {
  •               return true;
  •             }
  •       }
  •          return false;
  •        }                Agora posso usar: if(p1.equals(p2))... !
  •     }
19
Sobrecarregando toString()
  • toString() deve devolver um String que possa representar o objeto quando este for chamado em uma concatenação ou representado como texto
    • Decida o que o toString() deve retornar
    • Faça chamadas super.toString() se achar conveniente
    • Prefira retornar informações que possam identificar o objeto (e não apenas a classe)
    • toString() é chamado automaticamente em concatenções usando a referência do objeto
20
Sobrecarregando hashCode()
  • hashCode() deve devolver um número inteiro que represente o objeto
    •  Use uma combinação de variáveis, uma chave primária ou os critérios usados no equals()
    • Número não precisa ser único para cada objeto mas dois objetos iguais devem ter o mesmo número.
  •  método hashCode() é chamado automaticamente quando referências do objeto forem usadas em coleções do tipo hash (Hashtable, HashMap)
  •  equals() é usado como critério de desempate, portanto, se implementar hashCode(), implemente equals() também.
21
Interface Cloneable
  • Interface Cloneable
    • Usada para permitir que um objeto seja clonado/copiado. Não possui declaração de métodos (Marker Interface).
    • Indica para o método Object.clone() que o mesmo pode fazer uma cópia campo a campo quando tiver que clonar (criar via copia) uma nova instância da classe.
    • Como fazer:
      • class MyClass implements Cloneable
      • class MyClass extends SuperClass implements Cloneable
22
Interface Cloneable
  • Interface Cloneable (cont.)
    • Exemplo:
    • Point p1, p2, p3;
    • p1 = new Point(0, 0);
    • p2 = p1;         // p2 e p1 se referenciam ao mesmo obj
    • p3 = (Point)p1.clone(); // p3 novo obj criado com os valores p1
23
Sobrecarregando Clone()
  • clone() é chamado para fazer cópias de um objeto
  •    Circulo c = new Circulo(4, 5, 6);
  •    Circulo copia =(Circulo)c.clone();
  • Se o objeto apenas contiver tipos primitivos como seus campos de dados, é preciso
    • 1. Declarar que a classe implementa Cloneable
    • 2. Sobrepor clone() e invocar o método Object.clone() que faz uma copia bit-wise dos atributos do objeto


24
Sobrecarregando Clone()
  • Se o objeto contiver campos de dados que são referências a objetos, é preciso fazer cópias desses objetos também


25
POO-Java
26
Documentação
  • Ferramenta javadoc
  • Documentação a partir de comentários, colocados no código fonte
  • Formato HTML: permite visualização via browser
  • Manual do usuário ´ Guia de referência
  • A saída (conteúdo e formato) gerada pelo Javadoc pode ser customizada através do uso de doclets.
27
Uso do javadoc
  • Comentário especiais /** ... */
    • se referem ao próximo identificador definido
    • permitem o uso de tags HTML


  • Parágrafos especiais
    • documentam assinaturas de métodos
    • fazem referências cruzadas
    • sinalizam código depreciado
    • identificam autoria
28
Exemplo
  • package org.enterprise.myapp;
  • /**
  •  * Classe exemplo. Documentada com javadoc.
  •  * <p>
  •  * Exemplo de uso tags HTML (see the {@link Exemplo2} class)
  •  * @since 1.0
  •  * @see org.enterprise.myapp
  •  */
  • public class Exemplo {
  •   /**
  •    * Divide um número por dois. Esse método retorna a
  •    * divisão inteira por 2 do número fornecido.
  •    * @param i número a ser dividido.
  •    * @return resultado da divisão inteira por 2.
  •    */
  •   public int div2(int i) { return i/2; }
  • }
29
Parágrafo @param
  • Documenta um parâmetro de um método
  • Recebe o nome do parâmetro e sua descrição
  • Exemplo:


  • @param id Identificador a ser buscado
30
Parágrafo @return
  • Documenta o valor de retorno de um método
  • Recebe a descrição do valor
  • Exemplo:


  • @return Nome do elemento encontrado
31
Parágrafo @exception
  • Documenta uma exceção gerada por um método
  • Recebe o tipo da exceção e sua descrição
  • Exemplo:


  • @exception IdNotFound Identificador não encontrado
32
Parágrafo @see
  • Cria de uma referência cruzada
  • Recebe o nome de um identificador
  • Exemplo:


  • @see estruturas.Coleção#insere
33
Parágrafo @deprecated
  • Marca um identificador como depreciado
  • Qualquer código que utilize o identificador receberá um aviso em tempo de compilação
  • Recebe uma descrição
  • Exemplo:


  • @deprecated Esse método foi descontinuado. Use o método xxx.
34
Parágrafo @author
  • Identifica o autor do código
  • Recebe um nome
  • Exemplo:


  • @author João José
35
Parágrafo @version
  • Identifica a versão do código
  • Recebe o identificador da versão
  • Exemplo:


  • @version 1.0b
36
Parágrafo @since
  • Especifica a versão onde o identificador foi introduzido
  • Recebe o identificador da versão
  • Exemplo:


  • @since 1.0b