Capítulo 17 - ruirossi.pro.brAltere o arquivo CadastroAmigos.java de modo que a classe Amigo passe...

Preview:

Citation preview

Capítulo 17Capítulo 17

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

Recursos Especiais do Recursos Especiais do JavaJava

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

suportados a partir da plataforma Java 5.

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

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

� Recursos do Java 5� Importação estática

� ForEach

� Autoboxing

� VarArgs

� Enum

� Genéricos

Documentação

� Comentários de documentação

� Descrevem componentes e seus membros

� Sintaxe especial

� Interpretados pelo JavaDoc

� Sintaxe:

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

/**

<texto>

<tags>

*/

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.

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

� @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.

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

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

Documentacao.java

� No Windows:

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

Documentacao.java

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.

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

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

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

calcular( ).

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

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

Resultado da compilação

� Um arquivo por classe: <NomeDaClasse>.class

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

calcular( ).

Objetos Anônimos

� Objetos desprovidos de referências

� Sintaxe

new <construtor>(<argumentos>)

� Algumas aplicações:

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

� Argumento na invocação de métodos

� Encapsulamento de dados para gravação em vetor

� Invocação de um único método

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:

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

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

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

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:

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

Sintaxe:

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

}

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.

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

� Laço ForEach: recuperar a lista de amigos cadastrados.

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

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

� 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

Autoboxing

� Procedimento anterior:

int numero = 1500;

Integer objeto = new Integer( numero );

� Procedimento atual:

int numero = 1500;

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

int numero = 1500;

Integer objeto = numero;

Autoboxing

� Procedimento anterior:

Integer objeto = new Integer( 1500 );

int numero = objeto.intValue();

� Procedimento atual:

Integer objeto = 1500;

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

Integer objeto = 1500;

int numero = objeto;

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

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

}

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

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

� Calcular a média das três

Enumerações

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

� É um novo tipo.

� São manipulados via referências.

� Declaração:

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

Declaração:� Como atributos de classes

� Em arquivo distinto

Enumerações

� É um conjunto de constantes.� Todas estáticas

� Podem especificar argumentos (valores para o construtor)

� Membros suportados:� Atributos

� Construtores

� Métodos

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

� 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.

Enumerações

� Sintaxe Geral:

[encapsulamento] enum <nome> {

<constantes>;

[atributos]

[construtores]

[métodos]

}

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

}

� As constantes devem ser separadas por vírgulas.

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

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

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

� 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”.

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

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

� 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

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);

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

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);

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

� Sortear os três primeiros argumentos

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:

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

� Objetivos:� Reduzir a redundância de código.

� Desenvolver componentes reutilizáveis.

� Ter segurança de tipo em tempo de compilação.

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.

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

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.

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

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

� 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.

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

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

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.

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

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

� 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.

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

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

� 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.

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á

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

� Ao final, deve exibir uma mensagem indicando se o aluno está aprovado ou reprovado.

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

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

� 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.

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

este vetor e retornar o maior número encontrado.

Contato

Com o autor:

Rui Rossi dos Santos

E-mail: livros@ruirossi.pro.br

Web Site: http://www.ruirossi.pro.br

Com a editora:

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

Com a editora:

Editora NovaTerra

E-mail Geral: contato@editoranovaterra.com.br

E-mail Comercial: comercial@editoranovaterra.com.br

Web Site: http://www.editoranovaterra.com.br

Recommended