Capítulo 12 A Anatomia das Classes Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Objetivos do Capítulo Relacionar cada um dos elementos constitutivos das classes: os atributos, os construtores e os métodos. Apresentar a sintaxe utilizada para a declaração de classes e para a instanciação de objetos. Indicar como são declarados os atributos de uma classe e como podem ser empregados para o armazenamento de dados dos objetos que a ela pertencem. Analisar o papel dos construtores para a instanciação de objetos e para a inicialização de seus atributos. Apontar como as ações e serviços de um conjunto de objetos podem ser implementados na forma de métodos em sua classe. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução Membros das classes: Atributos Construtores Métodos Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Declaração de Classes Sintaxe [public] [abstract|final] class <NomeDaClasse> { } Exemplo: public class Professor { } Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Instanciação de Classes Significado: Criação de objetos Declaração de objetos: sintaxe <NomeDaClasse> <NomeDoObjeto>; Declaração de objetos: exemplos Professor professor_augusto; Professor professor_cezar; Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Instanciação de Classes Instanciação de classes: sintaxe <nomeDoObjeto> = new <construtor>([argumentos]); Instanciação de classes: exemplos professor_augusto = new Professor(); professor_cezar = new Professor(“Cezar Botelho”); Declaração e instanciação de classes: exemplos Professor professor_augusto = new Professor(); Professor professor_cezar = new Professor(“Cezar Botelho”); Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Atributos Definição: Dados membro Variáveis de instância Características dos objetos Declarados no corpo da classe Sintaxe: [encapsulamento] <tipo> <nomeDoAtributo>; Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Atributos Exemplos: public class Endereco { public byte tipo; public String logradouro; public int numero; public String complemento; public String bairro; public String cep; public String cidade; public String estado; } Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Atributos Inicialização: Endereco endereco_residencial = new Endereco( ); endereco_residencial.tipo = 1; endereco_residencial.logradouro = “Rua XV de Novembro”; endereco_residencial.numero = 1556; endereco_residencial.complemento = “Apartamento 112”; endereco_residencial.bairro = “Centro”; endereco_residencial.cep = “85903-550”; endereco_residencial.cidade = “Toledo”; endereco_residencial.estado = “Paraná”; Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Atributos Código 12.1 – Cliente.java Implemente a classe Cliente conforme representação. Código 12.2 – TestaCliente.java Implemente a classe TestaCliente conforme representação. Implemente o seguinte procedimento no seu método main( ): Instancie dois objetos da classe Cliente. Armazene um dado em cada atributo destes objetos. Recupere e exiba o conteúdo dos atributos destes objetos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Construtores Finalidade: Instanciação de classes. Inicialização de atributos. Sintaxe: public <NomeDoConstrutor>([parâmetros]) { } Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Construtores Código 12.3 – Gato.java Implemente a classe Gato conforme representação. O construtor deve inicializar todos os atributos. Código 12.4 – TestaGato.java Implemente a classe TestaGato conforme representação. Implemente o seguinte procedimento no seu método main( ): Instancie um objeto da classe Gato. Recupere e exiba o conteúdo dos atributos deste objeto. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Construtores Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Construtores Código 12.5 – Peixe.java Implemente a classe Peixe conforme representação. Os dois construtores devem inicializar os atributos. Código 12.6 – TestaPeixe.java Implemente a classe TestaPeixe conforme representação. Implemente o seguinte procedimento no seu método main( ): Instancie um objeto da classe Peixe utilizando seu construtor padrão. Armazene um dado em cada atributo deste objeto. Instancie um objeto da classe peixe com seu construtor alternativo. Recupere e exiba o conteúdo dos atributos do primeiro objeto. Recupere e exiba o conteúdo dos atributos do segundo objeto. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Construtores Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Métodos Definição: Tarefas realizadas pelos objetos. Serviços prestados pelos objetos. Operações realizadas com os objetos no interior do programa. Sintaxe: [encapsulamento] <tipo> <identificador>([parâmetros]) { } Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Métodos Exemplos: public int some(int primeiroValor, int segundoValor) { int resultado; resultado = primeiroValor + segundoValor; return resultado; } public void exibir(String texto) { JOptionPane.showMessageDialog(null,texto); } Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Métodos Código 12.7 – Matematico.java Implemente a classe Matematico conforme representação. Especificação do método fatorial( ): Parâmetro valor: número inteiro igual ou inferior a 127. Retorno: o fatorial deste número Obs.: o fatorial de zero é um. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Métodos Código 12.8 – TestaMatematico.java Implemente a classe TestaMatematico conforme representação. Implemente o seguinte procedimento no seu método main( ): Peça ao usuário que informe dois números. o Se ocorrer uma NumberFormatException, exiba uma mensagem e encerre o programa. Crie uma instância da classe Matematico. Utilize os métodos deste objeto para realizar os seguintes cálculos com os dois valores informados: o o o o o Some os dois valores. Subtraia o segundo do primeiro. Multiplique os dois valores. Divida o primeiro pelo segundo. Calcule o fatorial de ambos. Exiba uma mensagem com todos os resultados. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Métodos Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Métodos Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Unindo as Partes Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Unindo as Partes Código 12.9 – Estado.java Implemente a classe Estado conforme representação. Especificação dos métodos: exibirDados( ): deve exibir o conteúdo dos dois atributos, separados por um hífen, através de um diálogo gráfico. A sigla deve ser apresentada em maiúsculo. recuperarDados( ): deve retornar uma string com o conteúdo dos dois atributos, separados por um hífen. A sigla deve ser apresentada em maiúsculo. validarNome( ): deve avaliar se seu parâmetro contém um valor válido para ser armazenado no atributo nome da classe. Ele só será válido se tiver de 2 a 50 caracteres. Este método deve retornar true para indicar que o dado é válido e retornar false para indicar que o dado é inválido. validarSigla( ): deve avaliar se seu parâmetro contém um valor válido para ser armazenado no atributo sigla da classe. Ele só será válido se tiver de 2 caracteres. Este método deve retornar true para indicar que o dado é válido e retornar false para indicar que o dado é inválido. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Unindo as Partes Código 12.10 – CadastroEstado.java Implemente a classe CadastroEstado conforme representação. Implemente o seguinte procedimento em seu método main( ): Instancie um objeto da classe Estado. Solicite ao usuário o nome e a sigla do estado a ser cadastrado e grave-os nos atributos correspondentes deste objeto. Se o usuário cancelar um destes diálogos, encerre o aplicativo. Utilize o método exibirDados( ) para exibir o conteúdo dos atributos deste objeto. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Unindo as Partes Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Unindo as Partes Código 12.11 – CadastroEstados.java Implemente a classe CadastroEstados conforme representação. Implemente o seguinte procedimento em seu método main( ): Crie um vetor capaz de armazenar até 26 objetos da classe Estado. Permita que o usuário registre os dados de até 26 estados. o Grave os dados de cada estado em um objeto da classe Estado. o Grave todos os objetos criados no vetor supracitado. Ao final, apresente um relatório contendo os dados de todos os estados que foram cadastrados. o Recupere os objetos que foram gravados no vetor. o Utilize o método recuperarDados( ) destes objetos para obter o conteúdo de seus atributos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Unindo as Partes Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Unindo as Partes Código 12.12 – CadastroEstadosValidacao.java Implemente a classe CadastroEstadosValidacao. Implemente o seguinte procedimento em seu método main( ): Crie um vetor capaz de armazenar até 26 objetos da classe Estado. Permita que o usuário registre os dados de até 26 estados. o Grave os dados de cada estado em um objeto da classe Estado. o Grave todos os objetos criados no vetor supracitado. Se o usuário informar um dado inválido, solicite-o novamente. o Realize a validação do nome com o método validarNome( ) da classe Estado. o Realize a validação da sigla com o método validarSigla( ) da classe Estado. Ao final, apresente um relatório contendo os dados de todos os estados que foram cadastrados. o Recupere os objetos que foram gravados no vetor. o Utilize o método recuperarDados( ) destes objetos para obter o conteúdo de seus atributos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Unindo as Partes Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 1 Crie um novo aplicativo que capte o nome completo de pessoas e indique quais são as suas iniciais. Este aplicativo deve ser composto por duas classes: Pessoa e GeradorIniciais. Implemente estas classes de acordo com a representação a seguir. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 1 Especificação dos métodos da classe Pessoa. validarNome( ): este método deve avaliar se determinada string é um nome completo válido. O nome só é válido quando: o Possui de 5 a 50 caracteres. o É composto de duas partes. o Cada parte contém pelo menos 2 caracteres. Parâmetros: o nome: uma string contendo o nome a ser avaliado. Retorno: true quando o dado é válido e false quando o dado é inválido. gerarIniciais( ): este método deve produzir a string correspondente às iniciais do nome de uma pessoa. Este método deve utilizar o conteúdo do atributo nome como valor de entrada para a realização desta operação. As iniciais devem ser compostas apenas por letras maiúsculas (A-Z). Retorno: uma string com as iniciais da pessoa. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 1 Dica para implementação dos métodos da classe Pessoa. Utilize o método split( ) da classe String sempre que precisar desmembrar o nome completo em suas partes. String str = “Rui Rossi dos Santos”; String[ ] partes = str.split(“ ”); Para testar se este nome contém menos de duas partes: if (partes.length < 2) ... ; Para recuperar o primeiro caractere de cada parte: for (String s : partes) { char c = s.charAt(0); ... } Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 1 O método main( ) da classe GeradorIniciais deve captar o nome completo de pessoas e indicar quais são as suas iniciais. Fluxo normal: O usuário informa o nome completo de uma pessoa. O aplicativo exibe as iniciais deste nome. O aplicativo solicita outro nome. Tratamento de fluxos excepcionais: O nome informado não é válido. o Exibir mensagem de erro: “nome inválido!”. o Solicitar novamente o nome. O usuário cancela o diálogo de entrada onde deveria informar o nome. o O aplicativo é encerrado. Utilize uma instância da classe Pessoa para validar e armazenar o nome informado e para gerar as iniciais correspondentes a ele. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 1 Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 2 Crie um novo aplicativo que calcule a área de um círculo com base em sua circunferência. Este aplicativo deve ser composto por duas classes: Circulo e AreaCirculo. Implemente estas classes de acordo com a representação a seguir. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 2 Especificação dos métodos da classe Circulo. validarCircunferencia( ): este método deve avaliar se determinada string é uma circunferência válida. A circunferência só é válida quando é um número maior que zero. Parâmetros: o cf: uma string contendo a circunferência de um círculo. Retorno: true quando o dado é válido e false quando o dado é inválido. Exceções a serem tratadas: RuntimeException. calcularArea( ): este método deve calcular a área de um círculo com base em sua circunferência. Este método deve utilizar o conteúdo do atributo circunferencia como valor de entrada para a realização desta operação. Passos para a realização do cálculo: o Divida o valor da circunferência do círculo pelo valor de PI e obtenha o diâmetro deste círculo. o Divida o diâmetro do círculo por 2 e obtenha o seu raio. o Eleve o raio do círculo à segunda potência e multiplique este resultado pelo valor de PI para obter sua área. Retorno: a área do círculo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 2 O método main( ) da classe AreaCirculo deve captar a circunferência de um círculo e indicar qual é sua área. Fluxo normal: O usuário informa a circunferência de um círculo. O aplicativo exibe a área deste círculo. O aplicativo solicita a circunferência de outro círculo. Tratamento de fluxos excepcionais: A circunferência informada não é válida. o Exibir mensagem de erro: “Dado inválido!”. o Solicitar novamente a circunferência. O usuário cancela o diálogo de entrada. o O aplicativo é encerrado. Utilize uma instância da classe Circulo para validar e armazenar a circunferência informada e para calcular a sua área. 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 novo aplicativo que capte o nome, peso e altura de pacientes e que calcule seu IMC (Índice de Massa Corporal). Este aplicativo deve ser composto por duas classes: Paciente e TesteIMC. Implemente estas classes de acordo com a representação a seguir. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 3 Especificação dos métodos da classe Paciente. validarNome( ): deve avaliar se determinado nome é válido. O nome só é válido se tiver de 2 a 50 caracteres. validarPeso( ): deve avaliar se determinada string contém um peso válido. O peso só é válido se for um número fracionário maior que 0,0 e menor ou igual a 350,0. Exceções a serem tratadas: RuntimeException. validarAltura( ): deve avaliar se determinada string contém uma altura válida. A altura só é válida se for um número fracionário maior que 0,0 e menor ou igual a 2,5. Exceções a serem tratadas: RuntimeException. calcularIMC( ): este método deve calcular o IMC de um paciente. Este método deve utilizar o conteúdo dos atributos peso e altura como valores de entrada para a realização desta operação. Fórmula para a realização do cálculo: IMC = Peso / Altura2 Retorno: o IMC do paciente. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 3 Especificação dos métodos da classe Paciente. classificarIMC( ): este método deve analisar o IMC do paciente e indicar a que categoria ele pertence. Utilize o método calcularIMC( ) para implementar este método. Retorno: a categoria a que pertence o IMC do paciente. recuperarResultado( ): este método deve retornar uma string contendo todos os dados do paciente. Cada dado deve ser apresentado em uma linha distinta. Os dados devem ser listados na seguinte ordem: nome, peso, altura, IMC e categoria. Rui Rossi dos Santos IMC Categoria Até 18,4 Abaixo do peso De 18,5 a 24,9 Peso normal De 25,0 a 29,9 Sobrepeso De 30,0 a 34,9 Obesidade Grau I De 35,0 a 39,9 Obesidade Grau II Acima de 40,0 Obesidade Grau III Programação de Computadores em Java Editora NovaTerra Exercício 3 O método main( ) da classe TesteIMC deve captar o nome, o peso e a altura de um paciente e exibir o resultado de seu teste de IMC. Fluxo normal: O usuário informa o nome do paciente. O usuário informa o peso do paciente. O usuário informa a altura do paciente. O aplicativo exibe o resultado de seu teste de IMC. O aplicativo inicia outro teste de IMC. Tratamento de fluxos excepcionais: O usuário cancela um diálogo de entrada. o O aplicativo é encerrado. O nome informado não é válido. o Exibir mensagem de erro: “Nome inválido!”. o Solicitar novamente o nome. O peso informado não é válido. o Exibir mensagem de erro: “Peso inválido!”. o Solicitar novamente o peso. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 3 Método main( ) da classe TesteIMC Tratamento de fluxos excepcionais: A altura informada não é válida. o Exibir mensagem de erro: “Altura inválida!”. o Solicitar novamente a altura. Utilize uma instância da classe Paciente para validar e armazenar o nome, o peso e a altura informados e para realizar o teste de IMC e exibir o seu resultado. 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 novo aplicativo que realize o cadastro de clientes. Este aplicativo deve ser composto por duas classes: Cliente e CadastroCliente. Implemente estas classes de acordo com a representação a seguir. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 4 Especificação dos métodos da classe Cliente. recuperarDados( ): este método deve retornar uma string contendo todos os dados do cliente. Os dados devem ser apresentados separados por hífens. validarNome( ): deve avaliar se determinado nome é válido. O nome só é válido se tiver de 2 a 50 caracteres. Só pode conter letras o As letras podem ser maiúsculas (A-Z) ou minúsculas (a-z) o Não pode conter nenhuma acentuação validarTelefone( ): deve avaliar se determinado telefone é válido. Só é válido se tiver 10 dígitos (Ex.: 4532789553) validarEmail( ): deve avaliar se determinado e-mail é válido. Deve conter de 5 a 50 caracteres. Deve conter um único símbolo da arroba (@). A arroba deve ser precedida por pelo menos 2 caracteres. Deve haver pelo menos 2 caracteres após a arroba. validarCpf( ): deve avaliar se determinado CPF é válido. Só é válido se tiver 11 dígitos (Ex.: 87693288512) Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 4 O método main( ) da classe CadastroCliente deve captar os dados de cadastrais de clientes e armazená-los em um vetor de objetos. Este aplicativo deve ser capaz de armazenar até 32767 cadastros de clientes. Se um dado informado for inválido, o aplicativo deve exibir uma mensagem de erro e solicitá-lo novamente. Ao final, o aplicativo deve exibir uma mensagem contendo os dados cadastrais que foram gravados. Se o usuário cancelar qualquer diálogo de entrada, somente os dados dos cadastros que já haviam sido concluídos devem ser exibidos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 4 Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 5 Crie um novo aplicativo que realize o cadastro de produtos. Este aplicativo deve ser composto por duas classes: Produto e CadastroProduto. Implemente estas classes de acordo com a representação a seguir. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 5 Especificação dos métodos da classe Produto. recuperarDados( ): deve retornar uma string contendo todos os dados do produto. Os dados devem ser apresentados separados por hífens. O preço deve receber a formatação de um valor monetário. validarCodigo( ): avalia se determinado código é válido. Deve ser um número inteiro maior que zero. Exceções a serem tratadas: RuntimeException. validarDescricao( ): avalia se determinada descrição é válida. Deve conter de 1 a 50 caracteres. validarPreco( ): avalia se determinado preço é válido. Deve ser um número fracionário maior que zero. Exceções a serem tratadas: RuntimeException. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 5 O método main( ) da classe CadastroProduto deve captar os dados de cadastrais de produtos e armazená-los em um vetor de objetos. Este aplicativo deve ser capaz de armazenar os cadastros de até 2.000.000 produtos. Se um dado informado for inválido, o aplicativo deve exibir uma mensagem de erro e solicitá-lo novamente. Ao final, o aplicativo deve exibir uma mensagem contendo os dados cadastrais que foram gravados. Se o usuário cancelar qualquer diálogo de entrada, somente os dados dos cadastros que já haviam sido concluídos devem ser exibidos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Exercício 5 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 E-mail Geral: [email protected] E-mail Comercial: [email protected] Web Site: http://www.editoranovaterra.com.br Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra