Assinatura de Métodos
Formalizando os conceitos de nome de método e de métodos com parâmetros, vamos agora então tratar de assinatura de método.
A assinatura de um método é composta por:
- visibilidade – tipo de permissão ao método.
- retorno – tipo de retorno do método ou void caso não tenha retorno.
- parâmetros – atributos utilizados dentro do processamento do método.
- exceções – informação de algum erro que pode ocorrer na execução do método.
No exemplo a seguir, temos alguns exemplos de métodos que podemos declarar:
Para o compilador os métodos de mesmo nome, porém com parâmetros diferentes são identificados como métodos distintos entre si.
Exemplo:
Criamos a classe Televisao, contendo os seguintes métodos:
O compilador interpretaria estes três métodos de forma distinta, e em uma determinada chamada, saberia exatamente qual deles utilizar.
Note que na chamada ao método alterarCanal(), esta sendo invocado com passagem de um parâmetro inteiro, logo o método da classe Televisao a ser executado seria:
O que identifica a assinatura do método é a união das informações de nome do método e parâmetros, logo os seguintes métodos listados abaixo seriam considerados erros de compilação:
Visto que seus nomes e argumentos são idênticos, mudando apenas o tipo de retorno.
Ao conceito de se criar vários métodos de mesmo nome, porém com parâmetros diferentes entre si, damos o nome de Sobrecarga de Método.
Troca de Mensagens
Na linguagem Java, é possível que objetos distintos se relacionem entre si por meio de seus métodos. A este tipo de operação damos o nome de Troca de Mensagens. Este tipo de relacionamento pode ser representado pela troca de informações, chamada de execução de métodos, etc.
Para que seja possível aos objetos se conversarem, necessariamente não é preciso que um objeto esteja contido dentro de outro, formando uma cadeia, mas basta simplesmente que um referencie os métodos do outro.
A fim de exemplificar melhor o que estamos falando, vamos imaginar uma mesa de bilhar. Em um ambiente deste tipo, para que a bola possa se mover é necessário que o taco a atinja diretamente. Abstraindo esta idéia, para nós usuários, o que nos compete é apenas o movimento do taco, sendo que a movimentação da bola ao longo da mesa deve ser realizada pela imposição do taco.
Agora imagine que o Usuário será representado pela classe TacoTeste, logo:
Imaginando a situação acima, teríamos a classe TacoTeste instanciando objetos de cada um dos dois tipos. Feito isso, uma chamada ao método bater(Bola bola) da classe Taco, indicando qual a bola alvo do taco, este método indica apenas que estamos movendo o taco para acertar uma bola.
Já na classe Taco, o método bater(Bola bola) é encarregado de executar a ação de bater na bola. Logo, teríamos algo deste gênero:
Note então, que diferentemente das classes que desenvolvemos até então, a chamada do método mover(int forca, float angulo) da classe Bola está sendo referenciado de dentro da classe Taco, sem qualquer interferência do usuário através da classe TacoTeste.
Este relacionamento entre as classes sem a intervenção externa, assemelhando-se a uma conversa entre elas, damos o nome de troca de mensagens.