Sunteți pe pagina 1din 15

04/11/2008

Aula 07 - Documentação,
Objects e RunTime

Prof. Jucimar Souza


jucibs@gmail.com

7.1 - Documentação

 Como conhecer as classes do Java e seus


respectivos métodos ?
 Aprender a usar a documentação é essencial
para quem deseja desenvolver aplicações
em Java.
 A documentação do Java vem separado do
JDK, pode ser baixada do site ou acessada
on line.
 Disponível no CD dentro do diretório :
\software\sun\jdk-6u10-docs.zip

1
04/11/2008

7.1 – Documentação (cont)

 Para acesso on line :


 http://java.sun.com/javase/6/docs/
 Para instalar a documentação, abra o
arquivo .zip e instale no diretório do
$JAVA_HOME
 %JAVA_HOME%\docs
 A documentação da API está em :
 %JAVA_HOME%\docs\api\index.html
 O tutoriais está em:
 %JAVA_HOME%\docs\index.html

2
04/11/2008

7.1 – Documentação (cont)

7.1 – Documetação (cont)

3
04/11/2008

7.1 – Documentação (cont)

 Lista as classes internas, atributos, métodos


e construtores

7.1 – Documentação (cont)

4
04/11/2008

7.1 – Documentação (cont)

7.2 – Gerando um Javadoc

 Você pode gerar a documentação do seu


programa.
 Utilize o comentário de documentação para
documentar seu programa.
 /* Este é um comentario de
* documentação
*/
 Você pode utilizar os parâmetros conforme
o próximo slide

5
04/11/2008

Marcas do Javadoc

7.3 – Usando o utilitário Javadoc

 Acessar o arquivo de documentação do


Javadoc
 http://java.sun.com/javase/6/docs/api/

 Abrir o apendice F do livro do Deitell

 Copiar o programa timer3.java para analisar


a documentação
 Para gerar a documentação faça:
 javadoc Timer3.java –d ./docs

6
04/11/2008

7.3 – Pacote padrão

 Já usamos por diversas vezes as classes


String e System. Vimos o sistema de
pacotes do java, e nunca precisamos dar um
import nessas classes. Isso ocorre porque
elas estão dentro do pacote java.lang, que é
automaticamente importado para você.
É o único pacote com esta característica.

7.4 – java.lang.Object

 Sempre quando declaramos uma classe, essa classe é obrigada a


herdar de outra. Isto é, para toda classe que declararmos, existe uma
superclasse. Porém criamos diversas classes sem herdar de ninguém:
class MinhaClasse {
}
 Quando o Java não encontra a palavra chave extends, ele então
considera que você está herdando da classe Object, que também se
encontra dentro do pacote java.lang. Você até mesmo pode escrever
essa herança, que é a mesma coisa:
class MinhaClasse extends Object {
}
 Todas as classes, sem exceção, herdam de Object, seja direta ou
indiretamente.
 Podemos também afirmar que qualquer objeto em Java é um Object,
podendo ser referenciado como tal. Então qualquer objeto possui todos
os métodos declarados na classe Object.

7
04/11/2008

7.4.1 – Alguns método de Object

 O método toString - As classes podem reescrever


esse método para mostrar uma mensagem, uma
String, que o represente. Você pode usá-lo assim:
 Conta c = new Conta();
 System.out.println(c.toString());
 O método toString do Object retorna o nome da
classe @ um número de identidade:
 Conta@34f5d74a
 Mas isso não é interessante para nós. Então
podemos reescrevê-lo:

7.4.2 – toString (cont)


public class Conta {
private double saldo;
// outros atributos...
public Conta(double saldo) {
this.saldo = saldo;
}
public String toString() {
return “Uma conta com valor: ” + this.saldo;
}
}
 Chamando o toString agora:
 Conta c = new Conta(100);
 System.out.println(c.toString()); //imprime: Uma conta com valor: 100.
 E o melhor, se for apenas para jogar na tela, você nem precisa chamar
o toString! Ele já é chamado para você:
 Conta c = new Conta(100);
 System.out.println(c); // O toString é chamado pela classe PrintStream

8
04/11/2008

3.3 – Método equals


Conta c1 = new Conta(100);
Conta c2 = new Conta(100);
if (c1 != c2) {
System.out.println(”objetos referenciados são diferentes!”);
}

 O equals recebe um Object como


argumento, e deve verificar se ele mesmo é
igual ao Object recebido para retornar um
boolean. Se você não reescrever esse
método, o comportamento herdado é fazer
um == com o objeto recebido como
argumento.

3.3 – Equals (cont)


public class Conta {
private double saldo;
// outros atributos...
public Conta(double saldo) {
this.saldo = saldo;
}
public boolean equals(Object object) {
Conta outraConta = (Conta) object;
if (this.saldo == outraConta.saldo) {
return true;
}
return false;
}
public String toString() {
return “Uma conta com valor: ” + this.saldo;
}
}

9
04/11/2008

3.4 – Clonando objetos

 Objetos podem usar o método clone() da classe


Object para fazer uma copia deles mesmos. Um
objeto copiado será uma nova instancia deste
objeto, separado do original. Isto pode ou não
conter exatamente o mesmo estado (os mesmo
valores da instância) do original — isto deve ser
controlado pelo objeto copiado.
 Para fazer um clone, um objeto deve implementar
a interface java.lang.Cloneable. Se o objeto não
pode ser clonado, o método clone() vai gerar uma
execeção CloneNotSupportedException.

3.4 – Clonando objetos (cont)

10
04/11/2008

3.4 – Clonando objetos (cont)

3.4 – Clonando objetos (cont)

Copiando um objeto
Employee original = new Employee("John Public", 50000);
Employee copy = original;
copy.raiseSalary(10); // oops—tambem altera o original

Clonando um objeto

Employee copy = (Employee)original.clone();


// Devemos usar um cast—clone retorna um Object
copy.raiseSalary(10); // OK—-original não é alterado

11
04/11/2008

3.4 – Clonando objetos (cont)

O método padão clone não é suficiente para efetuar clones de objetos


que tem um definição de um outro objeto detro dele.

Neste caso o atributo payDay é da classe GregorianCalendar. Para essa situação


podemos implementar o método clone através da interface cloneable.

3.4 – Clonando objetos (cont)


class Employee implements Cloneable
{
...
public Object clone()
{
try
{
// chamada do Object.clone()
Employee cloned = (Employee)super.clone();
// clona os campos mutaveis
cloned.payDay = (GregorianCalendar)payDay.clone()
return cloned;
}
catch (CloneNotSupportedException e)
{ return null; }
}
}

12
04/11/2008

Exemplo Completo usando cloneable


1. import java.util.*;
2.
3. public class CloneTest
4. {
5. public static void main(String[] args)
6. {
7. Employee original = new Employee("John Q. Public", 50000);
8. original.setPayDay(2000, 1, 1);
9. Employee copy = (Employee)original.clone();
10. copy.raiseSalary(10);
11. copy.addPayDay(14);
12. System.out.println("original=" + original);
13. System.out.println("copy=" + copy);
14. }
15. }
16.
17. /**
18. * An employee class with a mutable payDay field
19. */
20. class Employee implements Cloneable
21. {
22. public Employee(String n, double s)
23. {
24. name = n;
25. salary = s;
26. }
27.

28. public Object clone()


29. {
30. try
31. {
32. // call Object.clone()
33. Employee cloned = (Employee)super.clone();
34.
35. // clone mutable fields
36. cloned.payDay = (GregorianCalendar)payDay.clone();
37.
38. return cloned;
39. }
40. catch (CloneNotSupportedException e) { return null; }
41. }
42.
43. /**
44. * Set the pay day to a given date
45. * @param year the year of the pay day
46. * @param month the month of the pay day
47. * @param day the day of the pay day
48. */
49. public void setPayDay(int year, int month, int day)
50. {
51. payDay = new GregorianCalendar(year, month - 1, day);
52. }
53.

13
04/11/2008

 54.
 55. /**
 56. * Add a number of days to the pay day (e.g. add 14 days)
 57. * @param days the number of days to add
 58. */
 59. public void addPayDay(int days)
 60. {
 61. payDay.add(Calendar.DAY_OF_MONTH, days);
 62. }
 63.
 64. public Date getPayDay()
 65. {
 66. return payDay.getTime();
 67. }
 68.
 69. public void raiseSalary(double byPercent)
 70. {
 71. double raise = salary * byPercent / 100;
 72. salary += raise;
 73. }
 74.
 75. public String toString()
 76. {
 77. return "Employee[name=" + name
 78. + ",salary=" + salary
 79. + ",payDay=" + getPayDay()
 80. + "]";
 81. }
 82.
 83. private String name;
 84. private double salary;
 85. private GregorianCalendar payDay;
 86. }

4 – Classe Class

 O codigo fonte das classes em Java são representados em


tempo de execução por instâncias da classe
java.lang.Class. Existe um objeto Class para cada classe
que você usa; este objeto Class é responsavel por produzir
instâncias para estas classes. Você não precisa se
preocupar com isso a não ser que você esteja interessado
em carregar novas classes dinamicamente em tempo de
execução. O objeto Class é também a base para “reflexão”
na classe para encontrar estes métodos e outras
propriedades.
 Podemos pegar a Classe associada com o método getClass(
):
 String myString = "Foo!"
 Class c = myString.getClass( );

14
04/11/2008

4 – Classe Class (cont)

 Nós podemos também a referência de Class


usando a notação de .class:
 Class c = String.class;
 Nós podemos fazer com o objeto Class é pedir
pelo nome da classe do objeto:
 String s = “Teste!";
 Class mycls= s.getClass( );
 System.out.println( mycls.getName( ) ); //
"java.lang.String"

15

S-ar putea să vă placă și