4.2. Procedimentos

Chamamos procedimento a um método que “faz” algo e que não devolve nenhum valor como resultado da sua execução. Imprimir algo no ecrã é um exemplo de um procedimento.

Distinguimos entre:

 

4.2.1. Definição do procedimento

Para que possamos indicar qual o conjunto de instruções que compõe o procedimento, temos que o definir num local acessível pelo programa que o vai usar. Para já vamos considerar que o vamos definir na mesma classe que contém o nosso programa.

Para definir um procedimento que imprime no ecrã três linhas com cruzes podemos escrever o seguinte no mesmo ficheiro onde o vamos usar:

Podemos colocar esta definição do procedimento em qualquer parte do nosso ficheiro java, desde que não seja no meio de outro método!

A definição de um procedimento inclui o corpo e a assinatura.

No exemplo acima o corpo do procedimento compõe-se de três instruções iguais. O seu nome é imprimeTresLinhas. A palavra void precede o nome e significa “o método não produz nenhum resultado”.

A preceder as outras palavras, a palavra static vai ser usada, para já, sempre que definirmos métodos. Não a usaremos para sempre, mas explicaremos o seu significado mais tarde.

4.2.2. Definição de parâmetros

Até agora vimos como abstrair um conjunto de instruções dando-lhe um nome. O método imprimeTresLinhas, por exemplo, escreve três linhas com cruzes no standard output.

Este procedimento terá sempre o mesmo efeito quando é executado (já veremos mais à frente como invocá-lo). Podemos executá-lo 100 vezes seguidas que o efeito será sempre o mesmo.

Há situações em que, num programa, queremos executar um mesmo conjunto de ações várias vezes mas com ligeiras variações. Para isso podemos definir um método em que o conjunto de instruções que o compõe tem pontos de variação que são desconhecidos na altura da definição, mas que serão conhecidos quando o método for invocado e executado.

Fazemos isso usando uma variável no ponto de variação e incluindo-a numa parte da assinatura do método que é a lista de parâmetros.

Um parâmetro representa um valor que é desconhecido na definição do método mas que vai ser indicado (instanciado) pelo programador quando invoca o método. Desta maneira podemos ter efeitos diferentes em várias execuções do mesmo método.

 

Relembre o método imprimeInformacao da classe NotasFinaisLegivel:

Neste exemplo definimos dois parâmetros na assinatura do método – nrAluno e notaAluno.

A forma como lemos a primeira instrução do corpo do método

pode ser a seguinte:

Imprimir no ecrã a string resultante de concatenar as strings:

A segunda instrução do corpo do método

não depende dos valores dos parâmetros e, como já sabemos, escreve ++++++++++++++++++++++++++++ no ecrã.

Então, se numa dada execução deste método os parâmetros nrAluno e notaAluno tiverem os valores "58000" e 15, o efeito da execução do método é a impressão, no ecrã, da frase:

Falta-nos então ver como se faz para invocar um procedimento; é nessa altura que são definidos os valores que os seus parâmetros irão tomar na execução.

4.2.3. Invocação de procedimentos

Para executarmos um procedimento temos que o invocar. Já que um procedimento pode ter parâmetros, os valores desses parâmetros terão que ser conhecidos antes de iniciada a execução.

A invocação de um procedimento é feita através de uma instrução composta por

Como resultado da invocação, os valores indicados para os parâmetros são copiados para esses mesmos parâmetros e as instruções do corpo do método são executadas.

Qualquer referência ao nome de um parâmetro no corpo do método representa o valor “guardado” nesse parâmetro.

Por exemplo, a instrução

é uma invocação do procedimento imprimeInformacao. Os valores escolhidos para instanciar os valores dos parâmetros são o literal 12345 e o valor da variável nota.

 

Relembre de novo a definição do método imprimeInformacao da classe NotasFinaisLegivel:

Se, no método main da classe NotasFinaisLegivel, tivéssemos, por exemplo, a instrução

ela invocaria o método imprimeInformação, copiando os valores 33333 e 10 para os parâmetros nrAluno e notaAluno, respetivamente, e executaria as instruções que compõem o corpo desse método.

O efeito dessa invocação seria a impressão, no standard output, de:

É óbvio que se um procedimento não tem parâmetros, não se escrevará nada entre os parêntesis. O método imprimeTresLinhas, por exemplo, é invocado através da instrução

Já agora repare que System.out.println(...) é também uma invocação de um procedimento. A grande diferença é que esse procedimento não está definido no ficheiro NotasFinaisLegivel.java (mais tarde veremos onde).

 

NOTA: Um engano muito comum dos alunos é indicarem os tipos dos parâmetros aquando da invocação como, por exemplo, imprimeInformacao(int 33333, int 10);. Os tipos dos parâmetros são indicados na definição do método! Na invocação só temos que indicar os valores que os parâmetros devem tomar, sejam eles dados por literais, por nomes de variáveis ou por expressões mais complexas.

 

Vamos agora fazer uma variação do nosso programa NotasFinaisLegivel, começando por escrever três linhas de cruzes e de seguida as informações de cada aluno, separadas também por três linhas de cruzes:

Repare que o método ImprimeInformaçãoB invoca o método imprimeTresLinhas.

Este programa escreve o seguinte no standard output:

 


 

Anterior: 4.1. Alguns métodos já nossos conhecidos

Seguinte: 4.3. Funções