Movatterモバイル変換


[0]ホーム

URL:


Vai al contenuto
WikipediaL'enciclopedia libera
Ricerca

Metodo (programmazione)

Da Wikipedia, l'enciclopedia libera.
(Reindirizzamento daMetodo (informatica))
Niente fonti!
Questa voce o sezione sull'argomento programmazionenon cita le fonti necessarie o quelle presenti sono insufficienti.

Nellaprogrammazione orientata agli oggetti, unmetodo (o anche "funzione membro") è unafunzione associata in modo esclusivo a unaclasse e che costituisce un'operazione eseguibile sulla suaistanza o sul suo tipo.

Caratteristiche

[modifica |modifica wikitesto]

Come in una procedura di unlinguaggio di programmazione procedurale, un metodo solitamente consiste di:

  • unafirma (in inglesesignature) ovvero la definizione/dichiarazione del metodo con tipo di ritorno, nome del metodo, tipo e nome degli eventualiparametri passati ininput (dettiparametri formali); in genere dunque la definizione di un metodo usa la stessa sintassi impiegata per le procedure (nei linguaggiobject-oriented che le supportano), con alcuni indicatori aggiuntivi che consentono di ottenere l'incapsulamento delle informazioni.
  • il corpo del metodo, opportunamente delimitato da inizio e fine, con all'interno una o più sequenze o blocchi diistruzioni scritte per eseguire una determinata azione eventualmente attraversostrutture di controllo del flusso di esecuzione qualiselezioni/controllo eiterazione/cicli e sulla base dei parametri passati ininput, in grado di restituire al programma chiamante un valore di ritorno (o dioutput) dello stesso tipo di quello dichiarato nella firma iniziale. Inoltre, nei linguaggi che dispongono di un meccanismo digestione delle eccezioni, il blocco del metodo può terminare sollevando un'eccezione nel caso si verifichi una situazione anomala che impedisce il corretto completamento delle sue operazioni.

Una delle operazioni che possono essere eseguite da un metodo è la lettura/scrittura di dati "privati" memorizzati in unoggetto o in una classe: in questo modo ilprogrammatore 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 dioverloading e/ooverriding dei metodi.

Esempio

[modifica |modifica wikitesto]

Un esempio generico inJava è il seguente:

//firma o dichiarazione del metodopublictipo_ritorno<nome_Metodo>(tipo_parametro1param1,...,tipo_parametroNparamN){//segue corpo del metodo...blocco_istruzioni;...if(condizionelogica){...blocco_istruzioni;...}elseif{...blocco_istruzioni;...}else{...blocco_istruzioni;...}...blocco_istruzioni;...for(inti=0;i<10;i++){...blocco_istruzioni'';...}...blocco_istruzioni;...return<oggetto_tipo_metodo>;}

Sintassi

[modifica |modifica wikitesto]

Da un punto di vistasintattico, un formalismo molto diffuso per esprimere questa relazione fra oggetto e metodo è chiamatodot notation, dal nomeinglesedot delpunto. Per esempio,

cdplayer.play()

rappresenta l'invocazione del metodoplay sull'oggettocdplayer.

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).

Tipologie

[modifica |modifica wikitesto]

Metodi statici

[modifica |modifica wikitesto]

La 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.

Esempio

[modifica |modifica wikitesto]

Esempio generico in Java:

publicstatictipo_ritorno<nome_Metodo>(tipo_parametro1param1,...,tipo_parametroNparamN){...blocco_istruzioni;...return<oggetto_tipo_metodo>;}

Costruttori

[modifica |modifica wikitesto]
Lo stesso argomento in dettaglio:Costruttore (informatica).

Una particolare categoria di metodi è costituita daicostruttori,[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 esempioJava,C++,C# ePHP (fino alla versione 4), icostruttori sono facilmente distinguibili perché il loro nome deve coincidere con quello della classe di appartenenza.

Esempio

[modifica |modifica wikitesto]

Esempio generico in Java:

public<nome_classe>(tipo_parametro1param1,...,tipo_parametroNparamN){attributo1=param1;...attributoN=paramN;}

Metodi astratti

[modifica |modifica wikitesto]

In programmazione a oggetti, leclassi 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 diimplementazione (definito in una classe astratta) che rappresenta un'operazione generale.

Un esempio potrebbe essere un ipotetico metodoarea() nella classePoligono. Sebbene si possa dire che di ogni poligono si può calcolare l'area, potrebbe non essere semplice scrivere le istruzioni che svolgono effettivamente tale calcolo in termini così generali. Tale calcolo si può invece agevolmente introdurre nelle implementazioni di specifiche sottoclassi diPoligono, comeRettangolo. Dichiarando il metodoarea nella classePoligono come metodo astratto, si indica che tutti i poligoni (tutte le sottoclassi diPoligono) devono avere quell'operazione, e allo stesso tempo non la si fornisce (implementata) nel corpo della classe. La conseguenza è che ogni sottoclasse dovrà necessariamente fornire una propria implementazione del metodo attraversooverriding.[N 3]

Metodi di accesso

[modifica |modifica wikitesto]

Un metodo di accesso (in ingleseaccessor 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 unattributo 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). MoltiIDE (per esempioNetbeans eEclipse) forniscono strumenti direfactoring che consentono la generazione automatica deigetter e deisetter degli attributi degli oggetti.

Metodi di estensione

[modifica |modifica wikitesto]

Un metodo di estensione (in ingleseextension method) è un tipo di metodo che, una volta dichiarato, viene aggiunto automaticamente a unaclasse o a un tipo dopo la suacompilazione. Non c'è differenza sintattica tra la chiamata a un metodo di estensione e la chiamata a un metodo dichiarato nella definizione deltipo.[1] I metodi di estensione esistono in moltilinguaggi di programmazione; inC#, per esempio, vengonoimplementati come metodistatici all'interno di classi statiche, e il primo argomento della loro firma ha per tipo la classe estesa ed è preceduto dallaparola chiavethis. Il vantaggio dei metodi di estensione è la possibilità di evitare la creazione di varihelper, solitamente sotto forma di classi statiche con metodi statici, che rappresenterebbero un'alternativa peggiore dal punto di vista della leggibilità delcodice. Inoltre, i metodi di estensione vengono automaticamente integrati nell'Intellisense dell'ambiente di sviluppoVisual Studio, migliorando così anche la manutenzione del codice stesso. Il motivo principale per cui i metodi di estensione furono introdotti è rappresentato daLINQ, componente del.NET Framework diMicrosoft dal 2007.

Esempio in C# di una classe con due metodi d'estensione della classestring: il primo ne capovolge il contenuto, e il secondo ne trasforma in maiuscola la prima lettera:

publicstaticclassStringExtensions{publicstaticstringReverse(thisstringinput){if(string.IsNullOrEmpty(input)){returnstring.Empty;}char[]chars=input.ToCharArray();Array.Reverse(chars);returnnewString(chars);}publicstaticstringFirstCharToUpper(thisstringinput){if(string.IsNullOrEmpty(input)){returnstring.Empty;}returnchar.ToUpper(input[0])+input.Substring(1);}}

Note

[modifica |modifica wikitesto]
Annotazioni
  1. ^La metafora della chiamata di metodo comemessaggio deriva storicamente dalla terminologia diSmalltalk, uno dei primilinguaggi di programmazione a oggetti, ed è tuttora molto diffusa (in certi contesti, per esempio, viene utilizzata anche nella terminologia dellinguaggio di modellazioneUML).
  2. ^Nella terminologia tecnica dei vari linguaggi icostruttori vengono talvolta classificati come metodi, altre volte no.
  3. ^Più propriamente, una sottoclassepotrebbe non fornire l'implementazione diarea, ma in tal caso il metodo rimarrebbe astratto anche nella sottoclasse. Poiché i metodi astratti sono ammessi solo nelle classi astratte, la sottoclasse dovrebbe quindi a sua volta essere astratta. Questo schema può essere effettivamente usato per rappresentare gerarchie di concetti astratti.
Fonti
  1. ^Metodi di estensione (Guida per programmatori C#), sudocs.microsoft.com, 20 luglio 2015.URL consultato il 18 dicembre 2018.

Voci correlate

[modifica |modifica wikitesto]

Altri progetti

[modifica |modifica wikitesto]

Altri progetti

Collegamenti esterni

[modifica |modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Metodo_(programmazione)&oldid=142155408"
Categoria:
Categorie nascoste:

[8]ページ先頭

©2009-2025 Movatter.jp