Metodo (programmazione)Nella programmazione orientata agli oggetti, un metodo (o anche "funzione membro") è una funzione associata in modo esclusivo a una classe e che costituisce un'operazione eseguibile sulla sua istanza o sul suo tipo. CaratteristicheCome in una procedura di un linguaggio di programmazione procedurale, un metodo solitamente consiste di:
Una delle operazioni che possono essere eseguite da un metodo è la lettura/scrittura di dati "privati" memorizzati in un oggetto o in una classe: in questo modo il programmatore può gestire in modo flessibile l'accesso ai dati, prevedendo, ove necessario, opportuni meccanismi di protezione e validazione. Le differenze fra il concetto generale di sottoprogramma e quello di metodo derivano dal fatto che il metodo viene interpretato come un'operazione eseguita da un oggetto. Per riferirsi all'invocazione di un metodo si usano talvolta locuzioni che rendono più esplicito questo legame; si parla per esempio di dare un comando a un oggetto o anche spedire un messaggio a un oggetto.[N 1] Molti linguaggi supportano inoltre le tecniche di overloading e/o overriding dei metodi. EsempioUn esempio generico in Java è il seguente: //firma o dichiarazione del metodo
public tipo_ritorno <nome_Metodo> (tipo_parametro1 param1, ... , tipo_parametroN paramN){
//segue corpo del metodo
...
blocco_istruzioni;
...
if(condizione logica){
...
blocco_istruzioni;
...
}
else if {
...
blocco_istruzioni;
...
}
else {
...
blocco_istruzioni;
...
}
...
blocco_istruzioni;
...
for (int i=0; i<10; i++){
...
blocco_istruzioni'';
...
}
...
blocco_istruzioni;
...
return <oggetto_tipo_metodo>;
}
SintassiDa un punto di vista sintattico, un formalismo molto diffuso per esprimere questa relazione fra oggetto e metodo è chiamato dot notation, dal nome inglese dot del punto. Per esempio,
rappresenta l'invocazione del metodo Il riferimento a un oggetto nell'invocazione di un metodo serve anche a indicare il contesto operativo dell'attivazione del metodo; questo infatti ha la possibilità di accedere a tutti i dati interni dell'oggetto su cui è stato invocato. All'atto della chiamata o invocazione vanno passati, se richiesti dal metodo, i valori dei parametri da passare (parametri attuali). TipologieMetodi staticiLa categoria di metodi più comune è quella dei metodi che, come si è detto sopra, vengono invocati con riferimento a un oggetto; questi possono essere detti anche metodi di istanza. I metodi di classe — detti anche metodi statici — rappresentano invece operazioni che non sono da riferirsi ai singoli oggetti, ma alla classe nel suo insieme. Per richiamare o invocare un metodo statico basta scrivere il nome del metodo seguito dalla specifica dei parametri attuali. EsempioEsempio generico in Java: public static tipo_ritorno <nome_Metodo> (tipo_parametro1 param1, ... , tipo_parametroN paramN){
...
blocco_istruzioni;
...
return <oggetto_tipo_metodo>;
}
CostruttoriUna particolare categoria di metodi è costituita dai costruttori,[N 2] che vengono invocati implicitamente ogni volta che un oggetto viene creato, e che hanno lo scopo generale di inizializzarne i dati interni. In molti linguaggi, tra cui ad esempio Java, C++, C# e PHP (fino alla versione 4), i costruttori sono facilmente distinguibili perché il loro nome deve coincidere con quello della classe di appartenenza. EsempioEsempio generico in Java: public <nome_classe> (tipo_parametro1 param1, ..., tipo_parametroN paramN)
{
attributo1 = param1;
...
attributoN = paramN;
}
Metodi astrattiIn programmazione a oggetti, le classi astratte sono classi che rappresentano concetti troppo generali (e quindi astratti) per poter avere istanze dirette. In una classe di questo genere può accadere che, analogamente, un metodo rappresenti un'operazione troppo astratta per poter avere un'implementazione. Un metodo astratto è un metodo privo di implementazione (definito in una classe astratta) che rappresenta un'operazione generale. Un esempio potrebbe essere un ipotetico metodo Metodi di accessoUn metodo di accesso (in inglese accessor method) è un tipo di metodo, di solito molto semplice e composto da poche righe di codice, che consente l'accesso (in lettura o scrittura) a un attributo dell'oggetto. L'uso di metodi di accesso è preferibile rispetto all'accesso diretto ai dati di stato in quanto compatibile con il principio dell'information hiding. La pratica di scrivere metodi di lettura e di scrittura degli attributi è talmente diffusa che in letteratura esistono nomi specifici per questo genere di metodi: setter (per un metodo che scrive un attributo) e getter (per un metodo che serve a leggere il valore di un attributo). Molti IDE (per esempio Netbeans e Eclipse) forniscono strumenti di refactoring che consentono la generazione automatica dei getter e dei setter degli attributi degli oggetti. Metodi di estensioneUn metodo di estensione (in inglese extension method) è un tipo di metodo che, una volta dichiarato, viene aggiunto automaticamente a una classe o a un tipo dopo la sua compilazione. Non c'è differenza sintattica tra la chiamata a un metodo di estensione e la chiamata a un metodo dichiarato nella definizione del tipo.[1] I metodi di estensione esistono in molti linguaggi di programmazione; in C#, per esempio, vengono implementati come metodi statici all'interno di classi statiche, e il primo argomento della loro firma ha per tipo la classe estesa ed è preceduto dalla parola chiave
Esempio in C# di una classe con due metodi d'estensione della classe public static class StringExtensions
{
public static string Reverse(this string input)
{
if (string.IsNullOrEmpty(input))
{
return string.Empty;
}
char[] chars = input.ToCharArray();
Array.Reverse(chars);
return new String(chars);
}
public static string FirstCharToUpper(this string input)
{
if (string.IsNullOrEmpty(input))
{
return string.Empty;
}
return char.ToUpper(input[0]) + input.Substring(1);
}
}
Note
Voci correlateAltri progetti
Collegamenti esterni
Information related to Metodo (programmazione) |