[Java] Differenze tra funzioni e procedure

coppetta

Nuovo Utente
18 Mag 2007
1
1
0
Salve a tutti. Volevo chiedere quali sono secondo voi le principali differenze tra funzioni e procedure nel linguaggi C C++ e Java. Grazie
 
  • Like
Reactions: ottofonsuppost

hellslord

Utente Attivo
28 Nov 2006
99
3
0
Venezia
www.squall.it
Innanzitutto ciao! :)

Allora... Partiamo col dire che sia le funzioni sia le procedure fanno parte dei cosìdetti "sottoprogrammi"... La differenza sostanziale che distingue le une dalle altre (ed è anche la differenza più visibile e tangibile) è che le funzioni restituiscono "qualcosa", le procedure no...

Faccio un esempio in C
Codice:
int foo() {
  return 0;
}

Questa è evidentemente una funzione, in quanto nella sua firma è presente l'indicazione del tipo restituito. In fase di compilazione se mancasse il "return 0;" ci verrebbe restituito un errore. Tra l'altro le funzioni sono "tipizzate", nel senso che non possono restituire qualunque cosa: Devono OBBLIGATORIAMENTE restituire qualcosa che sia del tipo indicato nella firma, o completamente compatibile (i.e. char e int).

Se io invece scrivo:
Codice:
void foo2()
{
  printf("foo2");
}

Ho palesemente scritto una procedura... La parola chiave "void" che precede il nome del sottoprogramma nella sua firma sta ad indicare che quel sottoprogramma non restituirà nulla (nel nostro caso si produrrebbe solo la scritta "foo2" nello standard output). Anche nelle procedure è possibile usare "return" ma solo per ritornare il controllo al chiamante (di fatto se inserisco qualcosa dopo il return in una procedura ottengo un errore in compilazione).

C'è anche un aspetto importante e più sottile: Le funzioni, dato che restituiscono qualcosa, possono essere valutate... Sotto questo profilo possono essere viste come vere e proprie espressioni o parte di esse. Possono infatti stare a destra di un operatore di assegnamento, possono stare a destra o a sinistra di un operatore binario e così via (ovviamente le tipizzazioni devono essere corrette).
Le procedure invece non possono assolutamente essere viste come espressioni, in quanto non restituendo nulla non possono essere valutate... Le procedure sono più dei "comandi", e come tali vengono eseguiti senza produrre risultati restituiti.

Tra C, C++ e Java non ci sono grandi differenze... Il discorso che ho fatto prima è validissimo per tutti e tre i linguaggi... Le differenze casomai si riscontrano parlando di oggetti. In effetti C++ e Java sono due linguaggi OOP... Normalmente in questi linguaggi si fa riferimento indistintamente a funzioni e procedure parlando di "metodi". Talvolta si tende a differenziare funzioni e procedure cambiandogli il nome... Le funzioni diventano "metodi osservatori dello stato" e le procedure "metodi modificatori dello stato". Questo perchè tutto è orientato agli oggetti... Se ci pensi (per me è scontato che tu conosca gli oggetti, se non è così quello che segue ti sarà un po' oscuro), le funzioni, restituendo un valore, sono adatte ad essere lo strumento sonda dello stato in cui un oggetto si trova (osservano dunque lo stato): una funzione è ottima se il chiamante vuole sapere in che stato si trova un oggetto (di fatto cosa vale una sua variabile di istanza, o combinazioni di variabili di istanza). Le procedure invece sono molto più adatte per comandare un oggetto, e quindi modificarne lo stato interno (modificando le sue variabili d'istanza).
Nella programmazione orientata agli oggetti è importantissimo, infine, non confondere metodi costruttori con le procedure... Entrambi non restituiscono nulla, MA i primi sono metodi che inizializzano lo stato di un oggetto, e non restituiscono NEMMENO void, le seconde invece restituiscono void e sono di solito i modificatori dello stato.

Mi scuso se ho scritto così tanto, ma spero di esserti stato d'aiuto... Se ci sono problemi fai un fischio :)
 
  • Like
Reactions: ottofonsuppost

ottofonsuppost

Utente Attivo
10 Mag 2016
170
13
18
L'ottimo commento precedente ha mancato di sottolineare che, tra le differenze tra JAVA ed il linguaggio C++, vi è che in JAVA per protezione dei programmi, il passaggio dei parametri avviene solo per VALORE e mai per riferimento. Infatti il linguaggio C ha una "bestia" capace di far impazzire un programma; ed è proprio il passaggio di un riferimento, di un puntatore di memoria che può facilmente determinare il CRASH di sistema, per memoria esaurita, o per sovrascrittura di parti della memoria, cancellazione, e per, gran finale, la mancata liberazione della memoria precedentemente utilizzata. La matematica dei puntatori è il grave difetto del linguaggio C, che rende vantaggioso l'uso del linguaggio JAVA. Anche se la programmazione ad oggetti sta spopolando, nei linguaggi a basso livello, quelli che dialogano direttamente con il processore e quelli che costruiscono il SISTEMA OPERATIVO, non si può fare a meno della PROGRAMMAZIONE PROCEDURALE che usavamo in passato.
 
Discussioni simili
Autore Titolo Forum Risposte Data
G differenze di performances e velocita' tra PHP e JAVA? PHP 1
L java api_google Javascript 0
F NetBeans problema creazione progetto Java Windows e Software 0
Z [java] bufferizzare stream audio da mic Java 1
L java + Api di google Javascript 1
A [Cerchiamo] [Retribuito/a] "Java Solution Architect" Offerte e Richieste di Lavoro e/o Collaborazione 1
F Script java elenco alfabetico non funziona Javascript 3
C Serializzazione in java Java 1
M AIUTO ESERCIZIO JAVA Javascript 1
M Ripasso Java Offerte e Richieste di Lavoro e/o Collaborazione 0
F [OFFRO - RETRIBUITO] Sviluppatori JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
L leggere RGB di un pixel dello schermo in java Java 1
I Creazione programmino JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
F Aiuto java script Javascript 2
T [Java] tipi generici con esempio pratico Java 1
J File audio in java Java 0
V [JAVA] come integrare un software scritto in java su una pagina web? Java 4
C Java client / server Java 0
F [OFFRO][RETRIBUITO] PROGRAMMATORE JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
C [Java] testare un metodo con Junit Java 1
A [Java] caricare un url esterno senza utilizzo di iframe Java 0
S [OFFRO] Debug delle tue applicazioni Java Offerte e Richieste di Lavoro e/o Collaborazione 1
L [Java] Aggiungere elementi ad array JSON Java 0
B [Java] Paginazione in risposta HTTP Java 0
A [Java]Date diminuite di un giorno su db MySQL Java 0
K [Java] aiuto switch case Java 1
P [Java] limite destro di un JFrame Java 5
D [Java] far partire JProgressBar all'apertura di un JFrame Java 1
N [java con eclipse]metodo ricorsivo che accetta in ingresso un char e restituisce un int Java 0
A Verifica validità data in Java Java 2
L [Java] Errore json conversione Java 0
Drago73 [Java] leggere/scrivere txt server Java 0
M [Javascript] Java card Java 0
serena.cerutti posizioni aperte: PhP, Java, .Net Offerte e Richieste di Lavoro e/o Collaborazione 0
N [Java]problema jasper report dopo compilazione file .jar Java 0
N [Java] Piccolo jform per calcolo totale da 2 campi i double Java 0
N [Java] jbutton con funzioni Java 2
M [java] esercizio lunghezza array di stringhe Java 0
A [java] problema esercizio Java 0
filograndipad2 Esempi chiari e completi sul funzionamento degli eventi in Java Java 1
Raziel84 [Java] Combinazione elementi matrice Java 0
A [java] problema esercizio array Java 5
L da php a popup java PHP 2
W Piccolo sistema per gestire alcune periferiche, Java o altro linguaggio? Java 8
S Cerco programmatore java Offerte e Richieste di Lavoro e/o Collaborazione 0
Z [Java] Grassetto assente su font incorporato nel pacchetto jar Java 0
O [Java] Lettura da JSON File Java 0
Z [Java] Caratteri distorti e spaziature errate nelle stampe di componenti swing Java 0
W Aiutino per compilare o eseguire un App Java Java 0
S [JAVA] Geocoding Java Java 0

Discussioni simili