Programação Java - Classes, Objetos, Atributos e Métodos - Marco Fagundes mfagundes@tre-pa.gov.br 1
Tópicos Programação Orientada a Objetos Classes e Objetos Definindo e Instanciando Classes Atributos Métodos Exercício Leitura Recomendada 2
Classes e Objetos Uma classe de objetos descreve um grupo de objetos com: Propriedades (atributos) e comportamentos (métodos) semelhantes Relacionamentos comuns com outros objetos Objetos/Instâncias Classificação Instanciação Aeronave capacidade prefixo... decolar manter pousar... 3
Classes e Objetos Banco Conta Corrente $ $ $ Abstração numero cc001 cc002 saldo 10,00 20,00 Objeto Conta Corrente depositar () numero 001 saldo 10,00 4
Especificando Classes Classe define um tipo abstrato de dados (TAD) dentro de um domínio específico de aplicação Por exemplo: Em um sistema bancário podem-se ter as seguintes classes: Cliente, Conta Corrente, Conta Poupança Especificação ContaCorrente Implementação em Java public class ContaCorrente{... } 5
Definindo e Instanciando Classes Java considera uma classe vazia como válida. Por exemplo: ContaCorrente class ContaCorrente{ } Para instanciar a classe definida deve-se: 1. Declarar uma variável do tipo da classe ContaCorrente cl; 2. Usar o operador new para criar o objeto cl = new ContaCorrente (); 6
Utilizando o Tipo Abstrato de Dados Para ilustrar o uso do TAD (classe) serão usadas 2 classes Classe do TAD Classe aplicativo (método main) public class ContaCorrente{... } public class TestaContaCorrente{ public static void main(string[] args){... } } 7
Lab1 - Definindo Abstrações Construa uma classe ContaCorrente. Construa uma classe TestaContaCorrente para criar um objeto do tipo ContaCorrente. Compile e execute o programa. 8
Atributos 9
Atributos Uma classe contém atributos e métodos Atributos são variáveis membro que armazenam informações de estado/propriedades do objeto ContaCorrente numero: String saldo: double Atributos ou variáveis membro ou variáveis de instância public class ContaCorrente{ String numero; double saldo; } 10
Acessando Membros de Objetos Uma vez criado o objeto seus atributos e métodos podem ser acessados através do operador. (<objeto>.<membro>) Por exemplo: c1.numconta = 001 ; //Acessando atributos c1.depositar(); //Acessando métodos É importante destacar que o acesso a atributos é somente para ilustração, pois os atributos devem estar protegidos (a ser visto em tópicos posteriores - Encapsulamento) 11
Acessando Atributos 1.public class TestaContaCorrente{ 2. public static void main(string[] args){ 3. ContaCorrente c = new ContaCorrente(); 4. c.numero = 001 ; 5. c.saldo = 10.0; 6. System.out.println(c.numero+ \t +c.saldo); 7. } 8. } Variável de Referência c linha 3 numero = null saldo = 0.0 linhas 4 e 5 c numero = "001" saldo = 10.0 12
Lab2 - Especificando Atributos Acrescente à classe ContaCorrente (criada no Lab1) os atributos numero e saldo. Na classe aplicativo crie um objeto do tipo ContaCorrente e atribua valores a seus atributos. Exiba o conteúdo do objetos criado. 13
Modelo de Referência a Objetos 14
Modelo de Referência a Objetos ContaCorrente c1 = new ContaCorrente(); c1.numero = "001 ; c1 Variável de Referência numero = 001" Memória 15
Modelo de Referência a Objetos ContaCorrente c1 = new ContaCorrente(); c1.numero = "001 ; ContaCorrente c2 = new ContaCorrente(); c2.numero = "001 ; c1 == c2?? c1.equals(c2)?? Variáveis de Referência c1 c2 numero= 001" numero= 001" Memória 16
Modelo de Referência a Objetos Continuando o exemplo anterior observe a instrução c1 = c2;//atribuição c1==c2?? c1.equals(c2)?? Destruído pelo GC Variáveis de Referência c1 c2 Aliasing numero = 001" numero = 001" Memória 17
Métodos 18
Métodos Implementam as operações que agem sobre os atributos do objeto São definidos da seguinte forma: <modificador_acesso><tipo_retorno> <nome><parâmetros> public boolean sacar(double pval){ return (saldo >= pval); } 19
Métodos Caso o método não retorne valor utiliza-se a keyword void public void depositar(double pvalor){ saldo += pvalor; //saldo = saldo + pvalor; } 20
Métodos - Exemplo ContaCorrente numero: String saldo: double depositar(x) class ContaCorrente{ String numero; double saldo;... public void depositar(double pval){ saldo += pval; } } class TestaContaCorrente{ public static void main(string[] args){ ContaCorrente c = new ContaCorrente(); c.numero = 001 ; c.saldo = 10; System.out.println(c.numero + \t +c.saldo); c.depositar(50); System.out.println(c.numero + \t +c.saldo); } } 21
Métodos - Escopo de Variáveis Variáveis de instância: global à classe Variáveis locais: residem no bloco em que foram definidas class ContaCorrente{ String numero; void impnumero(){ System.out.println(numero); } } Variável local variável de instância class ContaCorrente { String numero; void impnumero(){ String num; System.out.println(num); } } Erro!!! Variáveis de instância são inicializadas implicitamente, enquanto as variáveis locais devem ser inicializadas explicitamente 22
Lab3 - Implementando Métodos Implemente os métodos depositar e sacar na classe conta corrente. O método depositar recebe o valor a ser depositado como argumento e o adiciona ao saldo O método sacar recebe o valor a ser sacado como argumento, verifica se o saldo é suficiente para a operação Caso positivo debita o valor do saldo e retorna uma string informando ao usuário que o saque foi efetuado com sucesso. Caso negativo retorna uma string informando que o saldo é insuficiente para a operação. 23
Lab3 - Implementando Métodos Na classe aplicativo: crie um objeto do tipo conta informando número e saldo Exiba o número da conta e o saldo do cliente Efetue um depósito passando como argumento um valor(em hardcode) Exiba novamente o saldo da conta para confirmar se o depósito foi efetuado Efetue um saque passando como argumento um valor(em hardcode). Caso o saque seja efetuado com sucesso, exiba o novo saldo. Caso contrário exiba o saldo corrente. 24
Exercício 1 Construa uma aplicação que permita ao usuário informar dados de 3 candidatos. Crie uma abstração para representar os candidatos, com as propriedades: número e nome. Na classe aplicativo, deve-se listar os dados dos 3 candidatos. 25
Exercício2 Estenda o exercício anterior para permitir a realização de uma eleição entre os 3 candidatos cadastrados Para isso considere o seguinte: Os números 00 e 99 correspondem aos candidatos branco e nulo. Caso o eleitor digite um número inválido seu voto será nulo Caso o eleitor não informe nenhum número seu voto será branco Caso seja informado (-1) para o número do candidato a eleição termina Deve-se acrescentar uma propriedade no candidato que armazene seu total de votos 26
Exercício2 Ao término da eleição deve-se exibir: Total de Comparecimento. Qual candidato foi eleito (mostrar: número, nome e total de votos). Total de Branco e Nulos. 27
Relação entre Classes 28
Associação Refere-se ao modo como objetos interagem Objetos estão associados quando um usa os serviços ou operações de outro Conta num: String possui * 1 Cliente cpf: String public class Conta{ private String num; private Cliente correntista; } public class Cliente{ private String cpf;...; } 29
Pontos Principais Dois passos são envolvidos na criação de uma instância da classe 1º Passo: Criação da referência para o objeto ContaCorrente c1; 2º Passo: Criação da instância da classe (objeto) c1 = new ContaCorrente(); Uma vez criado o objeto os atributos e métodos da classe podem ser acessados usando o operador. O acesso direto aos atributos foi utilizado somente para facilitar a ilustração de conceitos, pois eles devem estar protegidos. (a ser visto na próxima aula) 30
Leitura Recomendada Tutorial Sun: Learning the Java Language Lesson: Object-Oriented Programming Concepts http://java.sun.com/docs/books/tutorial/java/concepts/ index.html Lesson: Classes and Objects http://java.sun.com/docs/books/tutorial/java/javaoo/i ndex.html 31