I metodi in Java

Nella definizione di classe, quando si parla dicaratteristiche, in pratica ci si riferisce ai dati(variabili e costanti), mentre col terminefunzionalità ci si riferisce ai metodi. Abbiamogià detto che metodo è sinonimo di azione.Quindi, affinché un programma esegua qualcheistruzione, deve contenere metodi. Infatti è il metodomain, che per default, è il punto di partenza di ogniapplicazione Java. Una classe senza metodo main, come laclasse Punto, non può essere mandata in esecuzione, masolo istanziata all’interno di un metodo diun’altra classe (nell’esempio precedente, nelmetodo main della classe Principale). Il concetto di metodoè quindi anch’esso alla base dellaprogrammazione ad oggetti. Senza metodi, gli oggetti nonpotrebbero comunicare tra loro. Essi possono essereconsiderati messaggi che gli oggetti si scambiano. Inoltrerendono i programmi più leggibili e di piùfacile manutenzione, lo sviluppo più veloce e stabile,evitano le duplicazioni, e favoriscono il riuso del software.

Il programmatore che si avvicina a Java dopo esperienze nelcampo della programmazione strutturata, spesso tende aconfrontare il concetto di funzione con il concetto dimetodo. Sebbene simili nella forma e nella sostanza,bisognerà tener presente, al momentodell’implementazione, che un metodo ha un utilizzodifferente dalla funzione. Nella programmazione strutturatainfatti, il concetto di funzione era alla base. Tutti iprogrammi erano formati da un cosiddetto programma chiamantee da un certo numero di funzioni. Queste avevano di fatto ilcompito di risolvere determinati "sotto-problemi"generati da un analisi di tipo Top-Down, allo scopo dirisolvere il problema generale. Come vedremo piùavanti, nella programmazione orientata agli oggetti, i"sotto-problemi" saranno invece risolti tramite iconcetti di classe ed oggetto, che a loro volta, faranno usodi metodi.

È bene che il lettore cominci a distinguere nettamentedue fasi per quanto riguarda i metodi: dichiarazione echiamata.

Dichiarazione di un metodo:

La dichiarazione definisce un metodo, ecco la sintassi:

[modificatori] tipo_di_ritorno nome_del_metodo ([parametri]){ corpo_del_metodo}

dove:

  • modificatori: parole chiavi di Java che possono essere usate per modificare in qualche modo le funzionalità e le caratteristiche di un metodo.
  • tipo di ritorno: il tipo di dato che un metodo potrà restituire dopo essere stato chiamato.
  • nome del metodo: identificatore che sarà utilizzato al momento della chiamata del metodo.
  • parametri: dichiarazioni di variabili che potranno essere passate al metodo, e di conseguenza essere sfruttate nel corpo del metodo, al momento della chiamata.
  • corpo del metodo: insieme di comandi (statement) che verranno eseguiti quando il metodo sarà chiamato.

Per esempio viene presentata una classe chiamata Aritmeticache dichiara un banale metodo che somma due numeri :

 

 

class Aritmetica{    public int somma(int a, int b)   {  return (a+b);   }}

 

Notare che: come modificatore il metodo presenta la parolachiave public. Si tratta di uno specificatore d’accessoche di fatto rende il metodo somma accessibile da altreclassi. Precisamente i metodi di altre classi potranno, dopoaver istanziato un oggetto della classe Aritmetica, chiamareil metodo somma. Anche per gli specificatori d’accessoapprofondiremo il discorso più avanti.

Il tipo di ritorno è un int, ovvero, un intero.Ciò significa che questo metodo avrà comeultima istruzione, un comando (return) che restituiràun numero intero.

Per quanto riguarda i parametri che verranno passati a questometodo, sono due interi che saranno sommati all’internodel blocco di codice, e la loro somma restituita comerisultato finale.

Concludendo, la dichiarazione di un metodo definisce qualiazioni deve compiere il metodo stesso quando saràchiamato.

- Chiamata di un metodo:

Presentiamo un’altra classe "eseguibile"(ovvero contenente il metodo main), che istanzia la classeAritmetica e chiama il metodo somma:

 

1 class Uno2 {3     public static void main(String args[])4     {5   Aritmetica oggetto1 = new Aritmetica();6   int risultato=oggetto1.somma(5,6);7    }8 }

 

In questo caso notiamo subito che l’accesso al metodosomma è avvenuto sempre tramite l’operatore dotcome nel caso dell’accesso alle variabili. Quindi,tutti i membri (attributi e metodi) pubblici definitiall’interno di una classe, saranno accessibili tramiteun’istanza della classe stessa che sfruttal’operatore dot, proprio con questo tipo di sintassi:

nomeOggetto.nomeMetodo;

oppure

nomeOggetto.nomeAttributo;

L’accesso al metodo di un oggetto provoca quindil’esecuzione del relativo blocco di codice. In questoesempio quindi, abbiamo definito una variabile interarisultato che ha immagazzinato il risultato della somma. Senon avessimo fatto ciò, non avrebbe avuto sensodefinire un metodo che restituisse un valore, dal momento chenon l’avremmo utilizzato in qualche modo! Da notare cheavremmo anche potuto sostituire la riga 6, con:

System.out.println(oggetto1.somma(5,6));

In questo modo, stampando a video il risultato, avremmopotuto verificare in fase di runtime del programma la realeesecuzione della somma.

Esistono anche metodi che non hanno parametri in input peresempio un metodo che somma sempre gli stessi numeri:

 

class AritmeticaFissa{  public int somma()     {  return (5+6);     }}

 

oppure metodi che non hanno tipo di ritorno, ovvero chedichiarano come tipo di ritorno void (vuoto) come il metodomain. Infatti il metodo main, è il punto di partenzadel runtime di un’applicazione Java, quindi non deverestituire niente non essendo chiamato esplicitamente da unaltro metodo.

Esistono ovviamente anche metodi che non hanno néparametri in input né in output (tipo di ritornovoid), come per esempio un ipotetico metodo stampa chevisualizza a video sempre lo stesso messaggio:

 

class Saluti{  public void stampaSaluto()     {  System.out.println("Ciao");}}