Métodos

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, é possível realizar diversas operações em uma conta: depósito, saque, transferência, consultas, etc. 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 utilizar a palavra reservada this.

Por exemplo, para 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, para outros métodos, pode ser necessário definir um tipo de retorno específico. 

Por exemplo, suponha um método para realizar a operação que consulta o saldo disponível das contas. Suponha também que o saldo disponível é igual a soma do saldo e do limite. Então, esse método deve somar os atributos saldo e limite e devolver o resultado. Por outro lado, esse método não deve receber nenhum valor, pois todas as informações necessárias para realizar a operação estão 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 mesmos nomes, mas que funcionem de maneira diferente dependendo dos argumentos que informamos. Esta capacidade é chamada de sobrecarga de métodos, ou overloading de métodos.

Uma sobrecarga de métodos só é válida se as listas de parâmetros dos métodos são 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...

2 comentários: