Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Sintassi dei metodi in Java, Schemi e mappe concettuali di Programmazione Java

Argomenti trattati: • Cos'è un Metodo e la sua sintassi • Procedure in Java (metodi void) • Funzioni in Java (metodi con tipo di ritorno) • Passaggio dei parametri • Regole di visibilità delle variabili • Convenzione sul nome dei metodi • Overloading dei metodi • Flusso del controllo • Esercizio pratico completo • Passaggio dei parametri in Java

Tipologia: Schemi e mappe concettuali

2025/2026

In vendita dal 17/04/2026

airruh
airruh 🇮🇹

4.7

(17)

73 documenti

1 / 26

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
I METODI IN JAVA — PARTE 1
Corso di Programmazione in Java — Dispensa didattica
Argomenti trattati:
• Cos'è un Metodo e la sua sintassi
• Procedure in Java (metodi void)
• Funzioni in Java (metodi con tipo di ritorno)
• Passaggio dei parametri
• Passaggio dei parametri in Java
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a

Anteprima parziale del testo

Scarica Sintassi dei metodi in Java e più Schemi e mappe concettuali in PDF di Programmazione Java solo su Docsity!

I METODI IN JAVA — PARTE 1

Corso di Programmazione in Java — Dispensa didattica

Argomenti trattati:

  • Cos'è un Metodo e la sua sintassi
  • Procedure in Java (metodi void)
  • Funzioni in Java (metodi con tipo di ritorno)
  • Passaggio dei parametri
  • Passaggio dei parametri in Java

1. Cos'è un Metodo

1.1 Definizione

Tutti i linguaggi di programmazione permettono di raggruppare istruzioni sotto un unico nome in modo da poterle richiamare senza riscriverle. In Java questi blocchi di codice riutilizzabili si chiamano metodi (in altri linguaggi: funzioni, procedure, sottoprogrammi).

1.2 Sintassi di dichiarazione

Ogni metodo deve essere dichiarato all'interno di una classe. La struttura generale è:

[specificatore_accesso] [static] tipo_ritorno nomeMetodo(tipo1 param1, tipo2 param2, ...) { // blocco di codice }

Esempio concreto:

public static int calcolaAreaRettangolo(int base, int altezza) { // blocco di codice }

1.3 Elementi della dichiarazione

Elemento Obbligatori o

Descrizione

Specificatore di accesso public / private / protected

No Stabilisce quali altri metodi possono chiamare questo metodo.

Tipo dichiarazione static No Indica che il metodo appartiene alla classe (static) e non alle singole istanze. Per ora si usano solo metodi static.

Tipo di ritorno int, double, String, …, void

Sì Tipo del valore restituito. void indica che il metodo non restituisce nulla.

Nome del metodo Sì Identificatore usato per richiamare il metodo (es. calcolaArea, stampa).

Parametri No Valori di input del metodo, indicati con tipo e nome separati da virgola.

2. Procedure in Java

2.1 Caratteristiche

Una procedura raggruppa istruzioni riutilizzabili senza produrre un valore di ritorno. In Java si dichiara con tipo di ritorno void :

public static void nomeProcedura(... parametri ...) { // blocco di codice }

void indica che il metodo esegue operazioni (stampa, modifica stato, ecc.) ma non restituisce nessun valore al chiamante.

2.2 Chiamata di una procedura

Dopo la dichiarazione, la procedura si invoca usando solo il suo nome e i valori degli eventuali parametri:

nomeProcedura(param1, param2, ...);

2.3 Esempio completo

Dichiarazione della procedura:

public static void hello(String nome) { System.out.println("Hello " + nome); }

Chiamata nel main:

hello("Mario"); // stampa: Hello Mario

2.4 Regola importante

I valori passati alla procedura devono essere dello stesso tipo dei parametri formali dichiarati nell'intestazione. Se la procedura dichiara String nome, la chiamata deve passare una String; non è possibile passare un int.

3. Funzioni in Java

3.1 Caratteristiche

Una funzione è una procedura speciale che calcola e restituisce un valore al chiamante. Il tipo di ritorno non è mai void, ma il tipo concreto del valore restituito (int, double, String, ecc.). La restituzione avviene con l'istruzione return.

public static tipo-ritorno nomeFunzione(... parametri ...) { tipo-ritorno risultato = ...; .... return risultato; }

3.2 L'istruzione return

return termina l'esecuzione della funzione e restituisce il valore al chiamante. Il tipo del valore restituito deve essere uguale o compatibile (più capiente) con il tipo di ritorno dichiarato:

Tipo ritorno dichiarato Variabile ricevente Esito

int double numero = esempio(); OK — double è più capiente di int

int short numero = esempio(); ERRORE — short è più piccolo di int

3.3 Esempio completo

Dichiarazione della funzione:

public static int calcolaPerimetroQuadrato(int lato) { int perimetro = lato * 4; return perimetro; }

Chiamata nel main:

int lato = 5; int p = calcolaPerimetroQuadrato(lato); // p = 20

La variabile p riceve il valore restituito dalla return. Anche qui vale la regola della compatibilità dei tipi tra parametri chiamante e dichiarazione.

3.4 Confronto sintetico: procedura vs funzione

4. Passaggio dei Parametri

Esistono due modalità generali con cui i linguaggi di programmazione passano i parametri a un metodo: per valore e per riferimento.

4.1 Passaggio per valore

Nel passaggio per valore il chiamante crea una copia del parametro e la passa al metodo. Il metodo lavora sulla copia, quindi qualsiasi modifica effettuata al parametro all'interno del metodo non ha effetto sulla variabile originale del chiamante. Ogni metodo ha il proprio ambiente locale di esecuzione, con celle di memoria separate.

Flusso: base e altezza del main vengono copiati nei parametri b e a del metodo; il valore calcolato (result) viene poi copiato indietro nella variabile area del main.

4.2 Passaggio per riferimento

Nel passaggio per riferimento, invece di copiare il valore, si passa l' indirizzo di memoria della variabile originale. Il metodo accede e modifica direttamente la cella di memoria del chiamante, quindi le modifiche si riflettono sulla variabile originale.

Esempio mnemonico: la variabile nome è memorizzata all'indirizzo 1040 con valore 'Mario'. Per valore si passa 'Mario' (copia); per riferimento si passa 1040 (l'indirizzo), e le modifiche al metodo cambiano direttamente il contenuto di quella cella.

Modalità Cosa si passa Modifica originale?

Per valore Copia del valore No — la variabile originale non cambia

Per riferimento Indirizzo di memoria Sì — la variabile originale viene modificata

5. Passaggio dei Parametri in Java

5.1 Premessa: tipi primitivi e oggetti

In Java ogni valore appartiene a una di queste due categorie:

  • Tipi primitivi: int, double, float, long, short, byte, char, boolean. Le variabili di tipo primitivo contengono direttamente il valore.
  • Oggetti (tipi riferimento): String, array, e tutte le classi. Le variabili oggetto non contengono l'oggetto stesso, ma un riferimento (indirizzo di memoria) all'oggetto.

Quando si copia un tipo primitivo si ottengono due valori indipendenti; quando si copia un riferimento a oggetto, sia l'originale che la copia puntano allo stesso oggetto in memoria.

5.2 Regola in Java

Java usa sempre e solo il passaggio per valore. Tuttavia, per i tipi riferimento (array e oggetti) il valore passato è l'indirizzo di memoria, quindi le modifiche all'oggetto puntato si riflettono sul chiamante:

  • Tipi primitivi: passaggio per valore puro → nessuna modifica alla variabile originale.
  • Array e oggetti: passaggio per valore dell'indirizzo (effetto di riferimento) → le modifiche al contenuto dell'oggetto/array si riflettono nel chiamante.

5.3 Esempio — tipo primitivo (passaggio per valore)

public class Parametri {

public static void main(String[] args) { int var1 = 18; cambiaValore(var1); System.out.println(var1); // stampa: 18 }

public static void cambiaValore(int var1) { var1 = 45; // modifica solo la copia locale } }

L'output è 18 e non 45: la modifica al parametro var1 dentro cambiaValore agisce sulla copia locale, non sulla variabile del main.

5.4 Ordine dei parametri

L'ordine in cui i parametri vengono passati alla chiamata deve corrispondere esattamente all'ordine in cui sono dichiarati nell'intestazione del metodo:

Riepilogo Generale

Metodo: Blocco di codice con un nome, dichiarato in una classe. Unifica il concetto di procedura e funzione in Java. Struttura: [accesso] [static] tipo_ritorno nomeMetodo(params) { corpo } Procedura Java: Metodo con tipo di ritorno void. Non restituisce valori; si chiama con nomeProcedura(args); Funzione Java: Metodo con tipo di ritorno specifico (int, double, String, …). Contiene obbligatoriamente return valore; si assegna con var = nomeFunzione(args); Compatibilità tipi: I parametri nella chiamata devono avere tipo uguale o compatibile con i parametri formali. Il valore di return deve essere compatibile con il tipo dichiarato. Passaggio per valore: Java copia il valore nella variabile locale del metodo. Nessuna modifica al parametro formale cambia la variabile nel chiamante (per tipi primitivi). Passaggio per riferimento (implicito): Per array e oggetti, Java copia l'indirizzo (riferimento). Le modifiche all'oggetto puntato si riflettono nel chiamante. Ordine parametri: Deve corrispondere esattamente alla dichiarazione del metodo.

Attraverso i metodi possiamo riutilizzare un blocco di codice in molte parti del programma, semplicemente richiamando il nome con cui l'abbiamo definito, senza dover riscrivere lo stesso codice più volte.

Programmazione in Java

I Metodi (Parte 2)

  • Regole di visibilità delle variabili
  • Convenzione sul nome dei metodi
  • Overloading dei metodi
  • Flusso del controllo
  • Esercizio pratico completo

1. Regole di visibilità delle variabili

In Java, ogni dichiarazione di una variabile possiede una propria visibilità (o scope ). Lo scope determina l'ambiente in cui quella variabile può essere letta o modificata. Comprendere le regole di visibilità è fondamentale per evitare errori logici e garantire che i dati siano accessibili solo dove necessario.

All'interno di una classe Java esistono due grandi categorie di variabili:

  • Variabili locali: dichiarate all'interno di un singolo metodo (o blocco). Sono visibili esclusivamente nel metodo in cui sono definite e non possono essere utilizzate al di fuori di esso.
  • Variabili globali (di classe): dichiarate all'interno della classe ma al di fuori di qualsiasi metodo. Sono accessibili sia dal metodo main sia da tutti gli altri metodi della stessa classe.

1.1 Variabili locali

I parametri formali dichiarati nell'intestazione di un metodo sono considerati variabili locali di quel metodo: sono visibili soltanto all'interno del suo blocco di codice.

public static void metodo(int a, double b, String s) { // a, b ed s sono visibili SOLO qui dentro // ... } // <-- a, b, s cessano di esistere

Analogamente, le variabili dichiarate all'interno del corpo del metodo sono anch'esse locali e cessano di esistere al termine del blocco.

public static void metodo(int a, double b, String s) { int varLocale1 = 43; String varLocale2 = "Variabile locale di tipo stringa"; // varLocale1 e varLocale2 sono visibili solo qui }

Regola chiave: non è possibile dichiarare due variabili con lo stesso nome all'interno dello stesso metodo. È invece lecito che metodi diversi utilizzino variabili con lo stesso nome, poiché i loro scope sono separati.

public static void metodo(int a, double b, String s) { int varLocale1 = 43; // OK: prima dichiarazione int varLocale1 = 12; // KO: già dichiarata! double varLocale1 = 23.3; // KO: già dichiarata! int a = 33; // KO: 'a' è già un parametro

varLocale1 = 3; // OK: semplice assegnazione (non dichiarazione) a = 7; // OK: semplice assegnazione }

1.2 Variabili globali (statiche)

Le variabili globali sono visibili in tutti i metodi della classe: sia nel main sia negli altri metodi statici. Vengono dichiarate all'interno della classe ma fuori da qualsiasi metodo, di norma subito dopo l'intestazione della classe.

Poiché in questa fase non sono legate ad alcuna istanza di oggetto, devono essere dichiarate con il modificatore static :

// Solo dichiarazione static int variabileGlobale;

// Dichiarazione con inizializzazione static int variabileGlobale = 10;

Esempio completo – lettura e modifica di una variabile globale:

public class VisibilitaVariabili {

static int variabileGlobale = 10;

public static void main(String[] args) { System.out.println("Stampa1: " + variabileGlobale); // 10 variabileGlobale = 33; stampaModifica(); System.out.println("Stampa3: " + variabileGlobale); // 100 }

public static void stampaModifica() { System.out.println("Stampa2: " + variabileGlobale); // 33 variabileGlobale = 100; } }

Output atteso:

Stampa1: 10 Stampa2: 33 Stampa3: 100

1.3 Shadowing: variabile locale con lo stesso nome di una globale

È legalmente permesso dichiarare, all'interno di un metodo, una variabile locale con lo stesso nome di una variabile globale. In questo caso si parla di shadowing (oscuramento): all'interno di quel metodo la variabile locale nasconde la variabile globale, che diventa inaccessibile per la durata del metodo.

public class VisibilitaVariabili {

static int variabileGlobale = 10;

1.4 Nome dei parametri: chiamante vs chiamato

Un dettaglio importante: il nome del parametro formale dichiarato nell'intestazione del metodo non deve essere necessariamente uguale al nome della variabile utilizzata dal chiamante. Ciò che conta è l' ordine e il tipo degli argomenti.

// METODO CHIAMATO public static int calcolaPerimetroQuadrato(int lato) { int perimetro = lato * 4; return perimetro; }

// METODO CHIAMANTE (es. main) int l = 5; int p = calcolaPerimetroQuadrato(l); // 'l' viene passato come 'lato'

Il valore della variabile l viene copiato nel parametro lato : i due nomi sono indipendenti e possono differire senza alcun problema.

2. Convenzione sul nome dei metodi

In Java esistono delle convenzioni (o naming conventions ) riconosciute e adottate da sviluppatori di tutto il mondo, allo scopo di standardizzare il codice e migliorarne la leggibilità e la manutenibilità.

Le regole fondamentali per il nome dei metodi sono:

  • Il nome del metodo inizia sempre con una lettera minuscola (es. calcola() ).
  • Se il nome è composto da più parole, si usa la notazione camelCase : la prima parola è tutta minuscola e le successive iniziano con lettera maiuscola (es. calcolaArea() , sommaDueNumeri() ).
  • L'identificatore di un metodo dovrebbe contenere almeno un verbo , poiché il metodo rappresenta un'azione. Esempi: stampa() , leggiInput() , calcolaPerimetro().

Esempi corretti:

calcola() // OK: minuscola, verbo calcolaArea() // OK: camelCase, verbo sommaDueNumeri() // OK: camelCase, verbo stampa() // OK: minuscola, verbo leggiCodiceCliente() // OK: camelCase, verbo

Esempi NON conformi alle convenzioni:

Calcola() // KO: inizia con maiuscola calcola_area() // KO: underscore non usato per i metodi area() // Accettabile ma privo di verbo

Rispettare queste convenzioni non influisce sul comportamento del programma, ma rende il codice più leggibile e professionale, facilitando la collaborazione in team e la manutenzione nel tempo.

  • I nomi dei parametri formali non contano ai fini della firma

4. Flusso del controllo

Quando un metodo ne chiama un altro, si instaura una catena di chiamate. Consideriamo la sequenza:

m1 --> m2 --> m

Il comportamento è il seguente:

  • Il metodo m1 avvia la sua esecuzione e, ad un certo punto, chiama m.
  • m1 si sospende in attesa che m2 completi il proprio compito.
  • m2 avvia la sua esecuzione e, a sua volta, chiama m.
  • m2 si sospende in attesa che m3 completi il proprio compito.
  • m3 esegue il suo codice e termina (eventualmente con un return ). Il controllo torna a m.
  • m2 riprende l'esecuzione dal punto in cui era rimasto e poi termina. Il controllo torna a m.
  • m1 riprende e prosegue fino alla propria conclusione.

Questo meccanismo è gestito internamente dalla call stack (pila delle chiamate): ad ogni chiamata viene aggiunto un nuovo frame alla pila; quando il metodo termina, il frame viene rimosso e l'esecuzione riprende nel metodo chiamante.

Rappresentazione schematica del flusso:

m1 invoca m |-- m2 invoca m | |-- m3 esegue e ritorna |-- m2 riprende e ritorna m1 riprende m1 termina