Programação Java - Classes, Objetos, Atributos e Métodos Marco Fagundes [email protected] © 2007 Marco Fagundes - [email protected] 1 Tópicos Programação Orientada a Objetos Classes e Objetos Definindo e Instanciando Classes Atributos Métodos Exercício Leitura Recomendada © 2007 Marco Fagundes - [email protected] 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 Classificação Instanciação Objetos/Instâncias © 2007 Marco Fagundes - [email protected] Aeronave capacidade prefixo ... decolar manter pousar ... 3 Classes e Objetos Banco Conta Corrente numero cc001 cc002 $ Abstração $ $ saldo 10,00 20,00 Objeto Conta Corrente depositar depositar () () numero 001 © 2007 Marco Fagundes - [email protected] 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{ ... } © 2007 Marco Fagundes - [email protected] 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 (); © 2007 Marco Fagundes - [email protected] 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){ ... } } © 2007 Marco Fagundes - [email protected] 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. © 2007 Marco Fagundes - [email protected] 8 Atributos © 2007 Marco Fagundes - [email protected] 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 Atributos ou ou variáveis variáveis membro membro ou ou variáveis variáveis de de instância instância public class ContaCorrente{ String numero; double saldo; } © 2007 Marco Fagundes - [email protected] 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) © 2007 Marco Fagundes - [email protected] 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 cc linha 3 numero = null saldo = 0.0 linhas 4 e 5 cc © 2007 Marco Fagundes - [email protected] 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. © 2007 Marco Fagundes - [email protected] 13 Modelo de Referência a Objetos © 2007 Marco Fagundes - [email protected] 14 Modelo de Referência a Objetos ContaCorrente c1 = new ContaCorrente(); c1.numero = "001”; c1 c1 numero = ”001" Variável de Referência Memó Mem Memó ria Memóória © 2007 Marco Fagundes - [email protected] 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) ?? c1 c1 Variáveis de Referência numero=”001" c2 c2 numero=”001" Memó Mem Memó ria Memóória © 2007 Marco Fagundes - [email protected] 16 Modelo de Referência a Objetos Continuando o exemplo anterior observe a instrução c1 = c2;//atribuição Destruído pelo GC c1==c2 ?? c1.equals(c2) ?? c1 c1 numero = ”001" Variáveis de Referência c2 c2 numero = ”001" Memó Mem Memó ria Memóória Aliasing © 2007 Marco Fagundes - [email protected] 17 Métodos © 2007 Marco Fagundes - [email protected] 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); } © 2007 Marco Fagundes - [email protected] 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; } © 2007 Marco Fagundes - [email protected] 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); } } © 2007 Marco Fagundes - [email protected] 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 Variável local local variável variável de de instância instância class ContaCorrente { String numero; void impNumero(){ String num; System.out.println(num); } } Erro Erro !!! !!! Variáveis de instância são inicializadas implicitamente, enquanto as variáveis locais devem ser inicializadas explicitamente © 2007 Marco Fagundes - [email protected] 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. © 2007 Marco Fagundes - [email protected] 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. © 2007 Marco Fagundes - [email protected] 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. © 2007 Marco Fagundes - [email protected] 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 © 2007 Marco Fagundes - [email protected] 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. © 2007 Marco Fagundes - [email protected] 27 Relação entre Classes © 2007 Marco Fagundes - [email protected] 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 possui num: String * public class Conta{ private String num; private Cliente correntista; } © 2007 Marco Fagundes - [email protected] Cliente 1 cpf: String 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) © 2007 Marco Fagundes - [email protected] 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 © 2007 Marco Fagundes - [email protected] 31