b'\n_START_ARTICLE_\nMetodo (programmazione)\n_START_SECTION_\nEsempio\n_START_PARAGRAPH_\nUn esempio generico in Java \xc3\xa8 il seguente:_NEWLINE_ //firma o dichiarazione del metodo_NEWLINE_ public tipo_ritorno <nome_Metodo> (tipo_parametro1 param1, ... , tipo_parametroN paramN){_NEWLINE_   //segue corpo del metodo_NEWLINE_          ... _NEWLINE_    blocco_istruzioni;_NEWLINE_          ..._NEWLINE_     if  (condizione logica){_NEWLINE_          ..._NEWLINE_       blocco_istruzioni;_NEWLINE_          ..._NEWLINE_       } _NEWLINE_      else if {_NEWLINE_           ..._NEWLINE_       blocco_istruzioni;_NEWLINE_           ..._NEWLINE_       }_NEWLINE_      else {_NEWLINE_           ..._NEWLINE_       blocco_istruzioni;_NEWLINE_           ..._NEWLINE_       }_NEWLINE_           ..._NEWLINE_       blocco_istruzioni;_NEWLINE_            ..._NEWLINE_     for (int i=0; i<10; i++){_NEWLINE_           ..._NEWLINE_      blocco_istruzioni;_NEWLINE_           ..._NEWLINE_      }_NEWLINE_           ..._NEWLINE_    blocco_istruzioni;_NEWLINE_           ..._NEWLINE_ return <oggetto_tipo_metodo>;_NEWLINE_ }\n_START_SECTION_\nMetodi statici\n_START_PARAGRAPH_\nLa categoria di metodi pi\xc3\xb9 comune \xc3\xa8 quella dei metodi che, come si \xc3\xa8 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.\n_START_SECTION_\nEsempio\n_START_PARAGRAPH_\nEsempio generico in Java:_NEWLINE_ public static tipo_ritorno <nome_Metodo> (tipo_parametro1 param1, ... , tipo_parametroN paramN){_NEWLINE_           ... _NEWLINE_      blocco_istruzioni;_NEWLINE_           ..._NEWLINE_  return <oggetto_tipo_metodo>;_NEWLINE_ }\n_START_SECTION_\nEsempio\n_START_PARAGRAPH_\nEsempio generico in Java:_NEWLINE_\'\'\'public\'\'\' <nome_classe> (tipo_parametro1 param1, ..., tipo_parametroN paramN){_NEWLINE_    attributo1 = param1;_NEWLINE_    ..._NEWLINE_    attributoN = paramN;}\n_START_SECTION_\nMetodi astratti\n_START_PARAGRAPH_\nIn 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\xc3\xb2 accadere che, analogamente, un metodo rappresenti un\'operazione troppo astratta per poter avere un\'implementazione. Un metodo astratto \xc3\xa8 un metodo privo di implementazione (definito in una classe astratta) che rappresenta un\'operazione generale._NEWLINE_Un esempio potrebbe essere un ipotetico metodo area() nella classe Poligono. Sebbene si possa dire che di ogni poligono si pu\xc3\xb2 calcolare l\'area, potrebbe non essere semplice scrivere le istruzioni che svolgono effettivamente tale calcolo in termini cos\xc3\xac generali. Tale calcolo si pu\xc3\xb2 invece agevolmente introdurre nelle implementazioni di specifiche sottoclassi di Poligono, come Rettangolo. Dichiarando il metodo area nella classe Poligono come metodo astratto, si indica che tutti i poligoni (tutte le sottoclassi di Poligono) devono avere quell\'operazione, e allo stesso tempo non la si fornisce (implementata) nel corpo della classe. La conseguenza \xc3\xa8 che ogni sottoclasse dovr\xc3\xa0 necessariamente fornire una propria implementazione del metodo attraverso overriding.\n_START_SECTION_\nMetodi di accesso\n_START_PARAGRAPH_\nUn metodo di accesso (accessor method in inglese) \xc3\xa8 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 \xc3\xa8 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 \xc3\xa8 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.\n_START_SECTION_\nMetodi di estensione\n_START_PARAGRAPH_\nUn metodo di estensione (extension method in inglese) \xc3\xa8 un tipo di metodo che, una volta dichiarato, viene aggiunto automaticamente ad una classe o ad un tipo dopo la sua compilazione. Non c\'\xc3\xa8 differenza sintattica tra la chiamata ad un metodo di estensione e la chiamata ad un metodo dichiarato nella definizione del tipo. I metodi di estensione esistono in molti linguaggi di programmazione; in C#, ad 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 \xc3\xa8 preceduto dalla parola chiave "this". Il vantaggio dei metodi di estensione \xc3\xa8 la possibilit\xc3\xa0 di evitare la creazione di vari helper, solitamente sotto forma di classi statiche con metodi statici, che rappresenterebbero un\'alternativa peggiore dal punto di vista della leggibilit\xc3\xa0 del codice. Inoltre, i metodi di estensione vengono automaticamente integrati nell\'Intellisense dell\'ambiente di sviluppo Visual Studio, migliorando cos\xc3\xac anche la manutenzione del codice stesso. Il motivo principale per cui i metodi di estensione furono introdotti \xc3\xa8 rappresentato da LINQ, componente del .NET Framework di Microsoft dal 2007._NEWLINE__NEWLINE_Esempio in C# di una classe con due metodi d\'estensione della classe String: il primo ne capovolge il contenuto, e il secondo ne trasforma in maiuscola la prima lettera:_NEWLINE_public static class StringExtensions{_NEWLINE_    public static string Reverse(this string input)_NEWLINE_    {_NEWLINE_        if (string.IsNullOrEmpty(input))_NEWLINE_        {_NEWLINE_            return string.Empty;_NEWLINE_        }_NEWLINE_        char[] chars = input.ToCharArray();_NEWLINE_        Array.Reverse(chars);_NEWLINE_        return new String(chars);_NEWLINE_    }_NEWLINE_    _NEWLINE_    public static string FirstCharToUpper(this string input)_NEWLINE_    {_NEWLINE_        if (string.IsNullOrEmpty(input))_NEWLINE_        {_NEWLINE_            return string.Empty;_NEWLINE_        }_NEWLINE_        return char.ToUpper(input[0]) + input.Substring(1);_NEWLINE_    }}'