Recursos Especiais do Java

Propaganda
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: [email protected]
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
Download