2. Classes e Objetos Uma classe é um modelo que define os atributos e métodos comuns a um conjunto de objetos de forma encapsulada. Atributos são informações ou dados que descrevem, categorizam ou quantificam um objeto. Um objeto da classe Conta, por exemplo, terá o nome e saldo como atributos. Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos. Uma classe pode conter também métodos que especifiquem o comportamento ou ações que a classe consegue realizar. A classe Conta, por exemplo, pode depositar, retirar e ver saldo. 2.1 - Criando uma classe Uma classe em Java é sempre declarada com a reservada class seguida do nome da classe. O nome da classe não pode conter espaços, deve ser sempre iniciado por um letra sendo esta em maiúsculo. Vamos agora criar a classe Conta com a seguinte especificação: Conta String nome int saldo Conta (String nome) void deposita (int valor) void retira (int valor) int getsaldo() atributos métodos public class Conta { public String nome; private int saldo; public Conta (String nome){ this.nome = nome; saldo = 0; saldo += valor; public void retira (int valor){ return saldo; Capítulo 2 Classes e Objetos Página 1
2.2 - Criando instâncias de objetos Para criar (construir) uma instância do objeto da classe Conta, basta usar a palavra reservada new (aciona o construtor da classe). class ExemploConta { public static void main(string[] args) { new Conta( João ); O código acima cria um objeto do tipo Conta, mas como acessar o objeto criado? Para isso é necessário criar uma variável de referência para o objeto criado. class ExemploConta { public static void main(string[] args) { Conta c; c = new Conta( João ); Através da variável c, agora podemos acessar o objeto recém criado para informar o nome do correntista, realizar um depósito e uma retirada e consultar saldo. Realizar mais uma retirada, um novo depósito e consultar o saldo novamente. Programa que usa a classe Conta public class ExemploConta { public static void main (String args[]) { Conta c; c=new Conta("João"); System.out.println("Nome:" +c.nome); c.deposita(1000); c.retira(200); System.out.println("Saldo:" +c.getsaldo()); c.retira(300); c.deposita(150); System.out.println("Saldo:" +c.getsaldo()); Acessando o conteúdo de um atributo: System.out.println("Nome:" +c.nome); objeto.atributo Chamando um método: c.deposita(1000); argumento de entrada System.out.println("Saldo:" +c.getsaldo()); objeto.metodo O valor retornado pode ser argumento de outro método. Capítulo 2 Classes e Objetos Página 2
2.3 - Métodos Quando você define uma classe é necessário também as operações que farão parte desta classe. Cada operação terá uma implementação específica que é conhecida como método. Um método em Java é equivalente a uma função, procedimento ou subrotina em outras linguagens, com a diferença que ele deve ser definido dentro da declaração da classe. 2.3.1 - Formato de uma definição de método Os elementos integrantes de um método são: modificador de acesso, tipo de retorno, nome da operação, parâmetros e corpo da operação. Modificador de acesso: utilizados para restringirem o acesso as operações. Pode ser public, default, protected ou private. public: Permite o acesso em qualquer classe; private: Permite o acesso somente dentro da classe onde foi declarado; package/default: Acesso público dentro do mesmo package da classe; protected: Usada em herença de classes. Permite que classes-filhas acessem ou modifiquem métodos na classe-pai. Tipo de retorno: pode ser um tipo primitivo (int, char) ou um tipo composto (um objeto String ou Clientes, por exemplo), ou mesmo não haver retorno algum. Neste caso deverá constar void como tipo de retorno. Nome da operação: deve expressar o que a operação faz, dando a idéia de uma ação. Parâmetros ou Argumento do método: representam os valores que podemos passar para a operação. Toda operação pode receber um ou mais parâmetros, sendo assim cada um deles deve ser separado dos demais por vírgula. Essa variável (int valor) é uma variável comum, chamada também de temporária ou local, pois, ao final da execução desse método, ela deixa de existir. Capítulo 2 Classes e Objetos Página 3
Dentro do método, podemos declarar uma nova variável. Essa variável, assim como o parâmetro (argumento), vai morrer no fim do método, pois este é seu escopo. Havendo ou não parâmetros, os mesmos devem ser representados entre parênteses. Corpo da operação: é o local onde fica a implantação da mesma. Este código deve ficar entre chaves, que representam o início e o fim do bloco. public void retira (int valor){ 2.3.2 Método com retorno Um método sempre tem que retornar alguma coisa, nem que essa coisa seja nada, como nos exemplos anteriores onde estávamos usando o void. Um método pode retornar um valor para o código que o chamou. No caso do nosso método getsaldo, podemos devolver o saldo (observe que o tipo retornado é inteiro, para apenas uso exemplificativo). return saldo; A palavra reservada return indica que o método vai terminar ali, retornando o saldo. Agora vamos colocar sofisticar o método retira da classe Conta: public void retira (int valor){ Observe que o método realiza a operação independente de possuir saldo ou não. Para melhorar isso, uma alternativa seria modificarmos o método: boolean retira(int valor) { if (saldo < valor) { return false; else { return true; Agora a declaração do método mudou. O método retira não tem void na frente. Isto quer dizer que quando é acessado, ele devolve algum tipo de informação(um boolean). Capítulo 2 Classes e Objetos Página 4
Exemplo de uso: c.saldo = 5000; if (c.retira(8000)){ System.out.println("Consegui sacar"); else { System.out.println("Não consegui sacar"); 2.3.3 A especificação this Como foi observado na classe Conta a especificação this é utilizada para fazer referência a partes da própria classe (depois veremos que é opcional). Em alguns casos, pode haver um nome de um argumento ou variável declarada por um método que coincida com o nome de um atributo da classe. Neste caso, para que neste método se possa referenciar o atributo, seja necessário usar this (o this referencia o objeto corrente). public Conta (String nome){ nome = nome; // ERRO this.nome = nome; // Forma correta saldo = 0; 2.4 Método Construtor Construtores são métodos especiais que são executados automaticamente pelo ambiente de execução Java quando um objeto é criado. Algumas características presentes na definição de um método construtor: Um construtor sempre possui o mesmo nome de sua classe; O construtor pode ou não ter argumentos; Pode-se ter vários métodos construtores numa mesma classe, o que os diferencia são os argumentos (sobrecarga de construtores); O construtor é diferente de outros métodos, pois ele não possui tipo de retorno. Não se pode chamar um construtor; É acionado pela palavra-chave new. Vamos analisar o construtor da classe Conta: public Conta (String nome){ this.nome = nome; saldo = 0; É possível colocar dentro do construtor um código a ser executado no momento da criação do objeto. Assim quando o objeto da classe Conta for instanciado este código será executado. No exemplo, é atribuído o nome do objeto e o saldo 0 para os atributos nome e saldo respectivamente. Construtor com mais de um parâmetro: public class Retangulo { private double base; private double altura; Capítulo 2 Classes e Objetos Página 5
public Retangulo (double b, double a) { base = b; altura = a; O que acontece se um construtor não é fornecido? Caso nenhum construtor seja fornecido, Java supre esta ausência com um construtor default. Este construtor não recebe nenhum parâmetro e não executa nenhuma tarefa de inicialização. 2.5 - Escopo de variáveis No Java, podemos declarar variáveis a qualquer momento. Porém, dependendo de onde você as declarou, ela vai valer de um determinado ponto a outro. As variáveis quando são declaradas estão visíveis dentro de um determinado escopo de código. Este escopo é delimitado por chaves que representam blocos de códigos. Isto significa que uma variável declarada dentro de um bloco de código é visível somente àquele bloco de código bem como a outros blocos que estiverem dentro deste. Veja o exemplo abaixo: Public class Conta{ ESCOPO DE CLASSE ESCOPO DO MÉTODO // código fonte ESCOPO DE BLOCO for, if, while etc Observe na classe Conta o escopo do atributo saldo foi definido dentro do escopo de classe, ou seja, dentro das chaves da classe. Pode, portando, ser acessado por qualquer operação que estiver também definida dentro do escopo de classe, como o método retira(). Capítulo 2 Classes e Objetos Página 6
Classe Conta Exemplo com duas contas: Utilizando a classe Conta, faça um programa que controle a conta corrente da Ana e da Beatriz. A seguir faça a entrada de um valor correspondente a um depósito. O valor informado deve instanciado (armazenado) em ambas as contas, para isso utilize o método deposita. O programa deverá solicitar um retirada de uma das contas, com a opção 1 para Ana e 2 para Beatriz, use o método retira. No final com o método getsaldo, imprima o saldo de Ana e Beatriz. import javax.swing.joptionpane; public class Exemplo2Contas { public static void main (String args[]) { Conta ca,cb; String sdep, sret, stipo; int dep, ret, tipo; ca = new Conta ("Ana"); cb = new Conta ("Beatriz"); sdep = JOptionPane.showInputDialog ("Depósito: "); dep = Integer.parseInt(sDep); ca.deposita(dep); cb.deposita(dep); sret = JOptionPane.showInputDialog("Retirada: "); ret = Integer.parseInt(sRet); stipo = JOptionPane.showInputDialog("1.Ana 2.Beatriz"); tipo = Integer.parseInt(sTipo); if (tipo==1) ca.retira(ret); else cb.retira(ret); System.out.println("Saldo conta Ana: "+ ca.getsaldo()); System.out.println("Saldo conta Beatriz: "+ cb.getsaldo()); System.exit(0); Exercícios utilizado a Classe Conta Capítulo 2 Classes e Objetos Página 7