Métodos
Autor: oberdan martins | Publicado: 2012-02-12T04:31:00-08:00


Vimos no artigo anterior como criar uma classe e definir os atributos do objeto. Agora, vamos ver como definimos os métodos, ou seja, os comportamentos do objeto.



Tomando por base o algoritmo feito no artigo passado,&nbsp;é possível realizar diversas operações em uma conta:&nbsp;depósito, saque, transferência,&nbsp;consultas, etc.&nbsp;Essas operações são realizadas em métodos definidos na própria classe Conta.



Normalmente, os métodos acessam ou alteram os valores armazenados nos atributos dos objetos. Para acessar os atributos, devemos&nbsp;utilizar a palavra reservada this.



Por exemplo, para&nbsp;realizar a operação de depósito, podemos acrescentar o seguinte método na classe Conta.Veja a sua sintaxe:






Com base nesses novos conhecimentos, o programa do artigo passado ficaria o seguinte:




class Conta {
   int numero = 1;      
   double saldo = 1000.0;   
   double limite = 500.0;
 
   void deposita(double valor) { //Declarando método Deposita.
       this.saldo += valor;      //Adicionando valor ao atributo Saldo.
   }
}

class OrientacaoObjetos {
   public static void main(String[] args) {
  
     Conta referencia = new Conta();  // Referência de um objeto
  
     referencia.deposita(1000); // Chama o método deposita()
                                // e passa a quantia 1000 a variável valor
   
     System.out.println("Saldo Disponível: " + referencia.saldo);

  }
}



O método deposita() não possui nenhum retorno lógico. Por isso, foi marcado com void. Mas,&nbsp;para outros métodos, pode ser necessário definir um tipo de retorno específico.&nbsp;



Por exemplo, suponha um método para realizar a operação que consulta o saldo disponível das&nbsp;contas. Suponha também que o saldo disponível é igual a soma do saldo e do limite. Então, esse&nbsp;método deve somar os atributos saldo e limite e devolver o resultado. Por outro lado, esse método&nbsp;não deve receber nenhum valor, pois todas as informações necessárias para realizar a operação estão&nbsp;nos atributos dos objetos que representam as contas.



Então o código ficaria assim:




class Conta {  // Criando uma classe para o objeto Conta
    int numero = 1;         // Atributo numero
    double saldo = 1000.0;  // Atributo saldo 
    double limite = 500.0;  // Atributo limite
 
    void deposita(double valor) { //Declarando método Deposita.
        this.saldo += valor;      //Adicionando valor ao atributo Saldo.
    }
 
    double limiteTotal(){                //Declarando método limiteTotal.
        return this.saldo + this.limite; // Faz a soma do saldo + limite
    }
}

class OrientacaoObjetos {  // Classe que contém o método principal
    public static void main(String[] args) {  // método principal
  
      Conta referencia = new Conta();  // Referência de um objeto
  
      referencia.deposita(1000); // Chama o método deposita()
                                 // e passa a quantia 1000 a variável valor
  
      double total = referencia.limiteTotal(); // Armazenando a resposta 
                                               // de um método em uma variável
  
      System.out.println("Saldo Disponível: " + total); // Imprimindo

   }
}

Sobrecarga de Métodos

Nas nossas classes, podemos necessitar de criar métodos que tenham os&nbsp;mesmos nomes, mas que funcionem de maneira diferente dependendo dos&nbsp;argumentos que informamos. Esta capacidade é chamada de sobrecarga de métodos, ou overloading de&nbsp;métodos.





Uma sobrecarga de métodos só é válida se as listas de parâmetros dos métodos são&nbsp;diferentes entre si. Veja o exemplo:

/* Nesta classe de nome gerente temos dois métodos com o mesmo nome 
 * porém, o primeiro, responsável por aumentar o salário em 10% 
 * não recebe parâmetro nenhum, já o segundo, recebe uma variável 
 * que será utilizada para realizar o cálculo do aumento do salário. 
*/

class Gerente {
    String nome;
    double salario;
 
    void aumentaSalario() {
        this.aumentaSalario(10);
    }
 
    void aumentaSalario(double taxa) {
       this.salario += (this.salario * taxa) / 100;
    }
}


// ......... Classe que contém o método principal ......... 

public class ExemploSobrecarga {
    public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
  
      Gerente c = new Gerente();
      c.salario = 1000;
  
      c.aumentaSalario(); // Faz chamada ao primeiro método
                          // Note que não passa parâmetro nenhum.
  
      System.out.println("Salario aumentado em 10%: " + c.salario);
  
      System.out.print("\nDigite o percentual de aumento: ");
      int x = scanner.nextInt();
  
      c.aumentaSalario(x); // Faz chamada ao segundo método, passando 
                           // o valor de x a variável taxa.
    
      System.out.println("Aumento de salario em " + x + "%: " + c.salario);
   }
}

Por hoje é isso, qualquer dúvida não hesite em comentar ai em baixo.

Abraços...