Você está na página 1de 47

Capítulo 17

Recursos Especiais do
Java

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Objetivos do Capítulo
 Indicar como documentar classes e interfaces e como gerar
esta documentação utilizando o javadoc.

 Apresentar alguns mecanismos complementares


relacionados com a programação orientada a objetos.

 Explorar os principais recursos que passaram a ser


suportados a partir da plataforma Java 5.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Visão Geral
 Documentação
 Comentários
 JavaDoc
 Orientação a objetos
 Classes internas
 Arquivos com múltiplas classes
 Objetos anônimos
 Recursos do Java 5
 Importação estática
 ForEach
 Autoboxing
 VarArgs
 Enum
 Genéricos

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Documentação
 Comentários de documentação

 Descrevem componentes e seus membros


 Sintaxe especial
 Interpretados pelo JavaDoc

 Sintaxe:

/**
<texto>
<tags>
*/

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Documentação
 Tags

 @author: nota sobre o autor.


 @param: descrição de parâmetros.
 @return: descrição do retorno de métodos.
 @see: link para classes e métodos relacionados.
 @throws: exceções disparadas por um método.
 @exception: igual à tag @throws.
 @deprecated: indica elemento depreciado.
 @link: inclusão manual de link HTML.
 @since: indica versão do JDK em que o recurso foi introduzido.
 @version: versão do componente ou método.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.2 – CalculoArea.java
 Classe documentada
 Tarefa: gerar a documentação

 No Linux:

javadoc –d /home/rui/PCJ/Cap17/Docs –author –charset UTF-8


Documentacao.java

 No Windows:

javadoc –d C:\PCJ\Cap17\Docs –author –charset ISO-8859-1


Documentacao.java

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Classes Internas
 Criadas dentro de outra classe

 Características

 Encapsuladas como os membros da classe externa.


 Invisíveis a todas as outras classes.
 Acessam diretamente os membros públicos e protegidos da
classe externa.
 Não podem conter atributos e métodos estáticos.
 Possuem a referência this.
 Acessam a referência this da classe externa:
NomeDaClasseExterna.this

 Resultado da compilação
<NomeDaClasseExterna>$<NomeDaClasseInterna>.class

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.2 – CalculoArea.java
 Classe Circulo
 Construtor: inicializar atributo
 getArea(): PI * raio2
 Classe CalculoArea
 calcular( ): solicitar o raio de um círculo, gravá-la em uma instância
da classe Circulo, calcular sua área e exibir o resultado.
 main( ): instanciar a classe CalculoArea e invocar seu método
calcular( ).

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Arquivos com Múltiplas Classes
 Número ilimitado de classes

 Todas acessíveis às demais classes do mesmo pacote

 Só uma classe pública

 Resultado da compilação

 Um arquivo por classe: <NomeDaClasse>.class

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.3 – CalculoCirculo.java
 Classe Circulo
 Construtor: inicializar atributo
 getArea(): PI * raio2
 Classe CalculoArea
 calcular( ): solicitar o raio de um círculo, gravá-la em uma instância
da classe Circulo, calcular sua área e exibir o resultado.
 main( ): instanciar a classe CalculoArea e invocar seu método
calcular( ).

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Objetos Anônimos
 Objetos desprovidos de referências

 Sintaxe

new <construtor>(<argumentos>)

 Algumas aplicações:

 Argumento na invocação de métodos


 Encapsulamento de dados para gravação em vetor
 Invocação de um único método

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.4 – Fila.java
 Atributos: ficha, nome.
 Construtor: captar dados e inicializar atributos.
 exibirDados( ): produzir mensagem com valores de atributos.
 main( ): criar dois objetos anônimos e exibir dados.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Importação Estática
 A partir do Java 5 – JSE 1.5 (2005)

 Objetivo: facilitar o uso de membros estáticos


 Atributos
 Métodos

 Sintaxe:

import static <caminho>.<componente>.<membro>;


import static <caminho>.<componente>.*;

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.5 – ImportacaoEstatica.java
 Importações estáticas:
 Todos os membros da classe Math.
 Métodos utilizados da classe javax.swing.JOptionPane.
 Método main( )
 Solicitar um número decimal.
 Calcular seu seno e seu cosseno.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


ForEach
 A partir do Java 5 – JSE 1.5 (2005)

 Objetivo: facilitar o percurso por um vetor ou coleção

 Dispensa o contador

 Sintaxe:

for (<tipo> <nome> : <vetor/coleção>) {


}

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.6 – CadastroAmigos.java
 Classe Amigo
 Atributos nome e fone.
 Construtor: captar dados e inicializar atributos.
 toString( ): <nome> - <fone>
 Classe CadastroAmigos: método main( )
 Vetor com capacidade para 20 amigos
 Laço for: permitir o registro de até 20 amigos.
 Laço ForEach: recuperar a lista de amigos cadastrados.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Autoboxing
 A partir do Java 5 – JSE 1.5 (2005)

 Objetivo: automatizar encapsulamento de tipos primitivos

 Classes empacotadoras ou classes-invólucro

 boolean: java.lang.Boolean
 char: java.lang.Character
 byte: java.lang.Byte
 short: java.lang.Short
 int: java.lang.Integer
 long: java.lang.Long
 float: java.lang.Float
 double: java.lang.Double

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Autoboxing
 Procedimento anterior:

int numero = 1500;


Integer objeto = new Integer( numero );

 Procedimento atual:

int numero = 1500;


Integer objeto = numero;

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Autoboxing
 Procedimento anterior:

Integer objeto = new Integer( 1500 );


int numero = objeto.intValue();

 Procedimento atual:

Integer objeto = 1500;


int numero = objeto;

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


VarArgs
 A partir do Java 5 – JSE 1.5 (2005)

 Objetivo: permitir a invocação de métodos com número


variável de argumentos.

 Sintaxe:

[encapsulamento] <retorno> <nome>(<tipo>... <nome>) {


}

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.7 – Varargs.java
 calcularMedia( )
 Método estático
 Parâmetro notas: número variável de valores
 ForEach para somar as notas
 Método main( )
 Solicitar três notas
 Calcular a média das duas primeiras
 Calcular a média das três

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Enumerações
 A partir do Java 5 – JSE 1.5 (2005)

 É um novo tipo.

 São manipulados via referências.

 Declaração:
 Como atributos de classes
 Em arquivo distinto

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Enumerações
 É um conjunto de constantes.
 Todas estáticas
 Podem especificar argumentos (valores para o construtor)

 Membros suportados:
 Atributos
 Construtores
 Métodos

 Instanciação:
 Uma instância sempre será uma de suas constantes.
 Procedimento: atribuir uma constante a uma referência.
 Construtores públicos não são permitidos.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Enumerações
 Sintaxe Geral:

[encapsulamento] enum <nome> {


<constantes>;
[atributos]
[construtores]
[métodos]
}

 As constantes devem ser separadas por vírgulas.


 Se houver argumentos, especificá-los entre parênteses.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.8 – SorteioCaractere.java
 Enumeração TipoCaractere
 Atributo da classe
 Constantes: NUMERO, LETRA_MAIUSCULA, LETRA_MINUSCULA,
OUTRO
 Método main( )
 Sortear um número: de 0 a 150
 Converter em caractere
 Criar referência para a enumeração: TipoCaractere tipo
 Atribuir-lhe uma das constantes com base no caractere sorteado
 Utilizar estrutura switch para mapear a referência para um texto
descritivo: “Número”, “Letra maiúscula” (65-90), “Letra minúscula”
(97-122) ou “Caractere especial”.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.9 – Meses.java
 Código 17.10 – Revista.java
 Código 17.11 – CadastroRevistas.java
 Permitir o cadastro de até 20 revistas
 Listar as revistas cadastradas

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Métodos Genéricos
 A partir do Java 5 – JSE 1.5 (2005)

 Métodos que podem ser invocados com argumentos de


diferentes tipos.

 Parâmetros de tipo:
 Declarados em uma seção própria
 Entre colchetes angulares
 Antes do retorno
 Letras maiúsculas (convenção)
 Podem ser utilizados como:
 Tipo de retorno do método
 Tipo dos parâmetros do método
 Tipo de variáveis locais

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Métodos Genéricos
 Exemplo:

public <X,Y> int contarCaracteres(X obj1, Y obj2) {


return obj1.toString().length() + obj2.toString().length();
}

int i = 0;
i = contarCaracteres("Java",12);
System.out.println(i);
i = contarCaracteres(5.67,"JSE");
System.out.println(i);
i = contarCaracteres(5.67,1500);
System.out.println(i);
i = contarCaracteres("Java","JSE 5");
System.out.println(i);
i = contarCaracteres("Java",Meses.AGOSTO);
System.out.println(i);
Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra
Estudo de Caso
 Código 17.12 – MetodoGenerico.java
 exibirObjeto( )
 Método estático e genérico: parâmetro de tipo “O”
 Produzir uma mensagem com o nome da classe e a representação
textual de um objeto especificado.
 main( )
 Invocar o método exibirObjeto( ) com argumentos de diferentes tipos:
Integer, Double, Character e String
 Sortear os três primeiros argumentos

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso
 Código 17.13 – MenorNumero.java
 localizarMenor( )
 Método estático e genérico: parâmetro de tipo “L” que deve ser uma
instância de Number
 Receber um vetor de números de qualquer tipo e retornar o menor.
 main( )
 Invocar o método locallizarMenor( ) sobre vetores de números inteiros
e de números decimais e exibir o retorno produzido

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Classes Genéricas
 A partir do Java 5 – JSE 1.5 (2005)

 São classes parametrizadas.


 Contém uma seção de parâmetros de tipo após seu nome
 Na sua instanciação, especificar um valor para cada parâmetro
de tipo (valor omitido = Object assumido)

 Objetivos:
 Reduzir a redundância de código.
 Desenvolver componentes reutilizáveis.
 Ter segurança de tipo em tempo de compilação.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Estudo de Caso

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 1
 Insira comentários de documentação em todas as classes
que foram escritas para compor o último exemplo
apresentado.
 Esse exemplo tratou do uso de classes genéricas e o foi
composto pelas classes VetorObjetos, ListaCompras, Produto
e ListaProdutos.
 Insira comentários de documentação para todos os atributos,
construtores e métodos dessas classes.
 Depois disso, utilize o javadoc para gerar os arquivos HTML
que comporão a documentação completa deste exemplo.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 2
 Altere o arquivo CadastroAmigos.java de modo que a classe
Amigo passe a ser uma classe interna da classe
CadastroAmigos.
 Além disso, declare o vetor que abrigará as instâncias da
classe Amigo como um atributo da classe CadastroAmigos e
transfira todas as instruções que realiza o cadastro dos
amigos para um método chamado realizarCadastros( ).
 Inclua apenas uma instrução em seu método main( ), que crie
uma instância anônima da classe CadastroAmigos e que
invoque o método realizarCadastros( ) da mesma.
 A figura do slide seguinte apresenta como deverá ficar a
estrutura das classes Amigo e CadastroAmigos após você ter
realizado todos estes ajustes.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 2

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 3
 Crie um aplicativo, chamado CalculoRaiz, que permita a
realização do cálculo da raiz quadrada de qualquer número
informado.
 Este aplicativo deve solicitar o número através de um diálogo de
entrada e deve exibir o resultado através de outro diálogo.
 A figura do slide seguinte ilustra como devem ser apresentados
estes dois diálogos.
 Este aplicativo deve permitir que seja realizado uma quantidade
indefinida de cálculos e só deve ser encerrado quando o primeiro
destes diálogos for cancelado.
 Faça a importação estática do método showInputDialog( ) e do
método showMessageDialog( ) da classe
javax.swing.JOptionPane e os utilize para produzir os dois
diálogos supracitados.
 Também faça a importação estática do método sqrt( ) da classe
Math e o utilize para realizar o cálculo da raiz quadrada.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 3

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 4
 Crie um aplicativo, chamado GeradorNumeros, que crie um
vetor capaz de armazenar números inteiros e que grave um
número em cada posição deste vetor.
 A definição do tamanho deste vetor deve ser sorteada pelo
aplicativo e deve variar de 5 a 10 posições.
 O número a ser gravado em cada posição deste vetor também
deve ser sorteado pelo aplicativo e não deve ser inferior a 1000
ou superior a 1500.
 Ao final, utilize um laço ForEach para percorrer este vetor e
recuperar todos os números que foram armazenados nele.
 Depois, exiba estes números através de uma mensagem como
aquela que é apresentada na figura abaixo.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 5
 Crie uma nova classe, chamada RegistroNotas, de acordo
com a representação gráfica do slide seguinte.
 O método avaliar( ) desta classe deve calcular a média de um
conjunto de notas e definir se o aluno está aprovado ou
reprovado.
 Se ele estiver aprovado, o retorno produzido deve ser true.
 Se ele estiver reprovado, o retorno produzido deve ser false.
 O parâmetro chamado minimo indica a média mínima que deve
ser obtida para a aprovação.
 O parâmetro chamado notas representa o conjunto de notas
obtidas pelo aluno.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 5
 O método main( ) dessa classe deve realizar a interação do
aplicativo com o usuário.
 Primeiro, ele deve solicitar a média mínima que deve ser obtida
pelos alunos para que sejam aprovados.
 Em seguida, deve solicitar quantas avaliações foram realizadas
no período letivo em questão.
 Depois, deve solicitar a nota obtida pelo aluno em cada uma das
avaliações.
 Ao final, deve exibir uma mensagem indicando se o aluno está
aprovado ou reprovado.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 6
 Crie uma nova enumeração, chamada EstadoCivil, de acordo
com a representação gráfica apresentada na figura abaixo.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 7
 Crie uma nova classe genérica, chamada VetorNumeros, de
acordo com a representação gráfica do slide seguinte.
 O parâmetro de tipo desta classe, chamado E, só deve
aceitar instâncias da classe java.lang.Number.
 O atributo chamado numeros será um vetor do tipo
especificado pelo parâmetro de tipo e abrigará um conjunto
de números.
 Utilize o atributo quantidade para controlar a quantidade de
números gravados neste vetor.
 O parâmetro do construtor será utilizado para definir o
tamanho deste vetor e, por conseguinte, a quantidade
máxima de números que ele poderá receber.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Exercício 7
 O método incluirNumero( ) deve receber um número qualquer
e gravá-lo no vetor.
 O método calcularMedia( ) deve somar todos os números que
encontram-se neste vetor e retornar a sua média.
 O método encontrarMenor( ) deve percorrer o vetor e retornar
o menor valor encontrado.
 O método encontrarMaior( ), por outro lado, deve percorrer
este vetor e retornar o maior número encontrado.

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra


Contato
Com o autor:

Rui Rossi dos Santos


E-mail: livros@ruirossi.pro.br
Web Site: http://www.ruirossi.pro.br

Com a editora:

Editora NovaTerra
Telefone: (21) 2218-5314
Web Site: http://www.editoranovaterra.com.br

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Você também pode gostar