Métodos e Mensagens


Assim como atributos, métodos são relativos a uma classe e as suas descrições fazem parte da descrição da classe. Um método é representado por uma operação que realiza ações e modifica os valores dos atributos do objeto responsável pela execução do método. Em Java, métodos são especificados da seguinte maneira:

class Conta {

    private double saldo;
    private long numero;

    void credito(double valor) {
        saldo = saldo + valor;
    }

    void debito(double valor) {
        saldo = saldo - valor;
    }
}
onde indica-se primeiro o tipo do valor a ser retornado pelo método, seguido pelo nome da método e uma lista, possivelmente vazia, indicando o tipo e o nome dos argumentos a serem recebidos pelo método. Usa-se void para indicar que o método não retorna nenhum valor, apenas altera os valores dos atributos de um objeto. Os métodos que retornam valores como resultado usam o comando return, da mesma maneira como usa-se este comando para definir atributos derivados.

Considerando o exemplo acima, a execução do método debito com argumento 20 altera o saldo da conta bancária relativa, o qual será decrementado de 20. De uma forma geral, métodos são definidos da seguinte maneira:

TipoRetorno nomeMetodo (Parâmetros) {
    Corpo
}
onde Corpo consiste na sequência de comandos que determinam as ações do método. Estes comandos podem realizar tanto simples atualizações dos atributos de um objeto, conforme ilustrado acima, quanto ações mais complexas como se comunicar com outros objetos.

De fato, os objetos de um sistema orientado a objetos estão sempre se comunicando para realizar tarefas. Essa comunicação é feita através da troca de mensagens. Cada mensagem é uma requisição para que um objeto execute uma operação específica. Para requisitar que um objeto obj execute uma operação op (sem argumentos) escrevemos obj.op() em Java, o que indica que durante a execução a mensagem op() será enviada ao objeto obj.

Por exemplo, podemos especificar que os objetos da classe Conta se comunicam com a tela do computador, a qual é representada em Java por um objeto especial, pré-definido, chamado `System.out'. Uma das operações que este objeto pode realizar é println, que mostra valores passados como argumentos: strings, inteiros, reais, etc. Para imprimir valores na tela temos que enviar uma mensagem para `System.out' requisitando a execução do método println. Assim, podemos facilmente definir um método para imprimir o saldo de uma conta, como ilustrado a seguir:

class Conta {

    private double saldo;
    private long numero;

    void credito(double valor) {
        saldo = saldo + valor;
    }

    void debito(double valor) {
        saldo = saldo - valor;
    }

    void printSaldo() {
        System.out.println("Conta: " + numero + " Saldo: R$" + saldo);
    }
}
Através do método printSaldo, um objeto de Conta se comunica com a tela do computador. Na prática, esta comunicação se daria não em Conta, mas em uma classe que representasse uma interface de objetos de Conta com usuários. Note que concatenação de strings é representada por + e os valores de outros tipos são automaticamente convertidos para strings.


Paulo Borba (phmb@cin.ufpe.br)
Rodrigo Queiroz (rqcl@cin.ufpe.br)