Metodo (programmazione)
Da Wikipedia, l'enciclopedia libera.
Il termine metodo viene usato principalmente nel contesto della programmazione orientata agli oggetti per indicare un sottoprogramma associato in modo esclusivo ad una classe (metodo statico) oppure ad un oggetto (metodo di istanza). Come in una procedura di un linguaggio di programmazione strutturale, un metodo solitamente consiste in una sequenza di istruzioni scritte per eseguire una determinata azione, eventualmente personalizzata da un set di parametri e in grado di restituire al programma chiamante un valore di ritorno (o di output) di un determinato tipo.
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 molto flessibile l'accesso ai dati, prevedendo, ove necessario, opportuni meccanismi di protezione e validazione.
Un metodo deve sempre assicurare la conservazione delle variabili di classe non modificabili (invarianti) memorizzate nell'oggetto a cui è esso associato, e si deve sempre presupporre che tali invarianti contengano un valore valido nel momento in cui il metodo entra in esecuzione. Per garantire che ciò avvenga si applicano precisi vincoli ai parametri trasmessi in input al metodo e si verica che l'output soddisfi a determinate regole. Se questi vincoli o queste regole vengono violati, il metodo può sollevare un' eccezione. Se lo stato in cui si viene a trovare l'oggetto prima o dopo l'esecuzione del metodo genera valori non validi degli invarianti, si assume che il programma è affetto da un bug.
La differenza fra una procedura ed un metodo è che il metodo, essendo associato ad un ben determinato oggetto, può accedere ai dati "privati" di quel oggetto secondo modalità "consistenti" con il comportamento che il programmatore intende dare a quello stesso oggetto. Quindi, ragionando nell'ottica della programmazione orientata agli oggetti, un metodo è qualcosa di più di una semplice sequenza di istruzioni. In effetti potrebbe essere definito come "un modo in cui un oggetto fornisce al programma un certo servizio": la chiamata del metodo, in questa ottica, è la "richiesta" inoltrata all'oggetto, affinché esso esegua un preciso "compito". Un altro modo di esprimere lo stesso concetto è quello di dire che, con l'esecuzione di un metodo, si trasmette un "messaggio" all'oggetto.
[modifica] Tipi di metodi
Come detto sopra, i metodi di istanza sono associati ad un particolare oggetto, mentre i metodi di classe - detti anche metodi statici - sono associati ad una classe. Si definisce costruttore un particolare tipo di metodo di istanza chiamato automaticamente al momento della creazione di un'istanza di una classe. In Java, C++, C# e PHP ai costruttori viene attribuito lo stesso nome della classe a cui si riferiscono. Un metodo astratto è un metodo privo di implementazione, spesso usato come segnaposto che, per poter essere eseguito, deve essere successivamente ridefinito in una sottoclasse derivata da quella che contiene il prototipo del metodo astratto. Questa tecnica di programmazione è molto comoda, perché permette di predefinire una struttura generale di base (framework) prima di implementare le singole funzionalità del programma.
Un metodo di accesso è un tipo di metodo, di solito molto semplice e composto da poche righe di codice, che fornisce al programmatore un modo per accedere ai dati che descrivono lo stato interno di un oggetto. Benché introduca una nuova condizione di dipendenza l'uso di questo tipo di metodi è preferibile rispetto all'accesso diretto ai dati di stato in quanto fornisce al programmatore un livello di astrazione. Ad esempio, una classe ContoBancario
potrebbe disporre di un metodo LeggiSaldo()
per ricavare il valore attuale del saldo, piuttosto che accedere direttamente alla variabile, membro della classe, in cui il valore del saldo è memorizzato: con questo accorgimento si avrebbe il vantaggio di potere, in successive versioni del programma, implementare meccanismi più elaborati per ricavare questo stesso dato (ad esempio ricavarlo da un database) senza dover riscrivere il relativo codice. Un metodo che cambia lo stato di un oggetto viene spesso chiamato modificatore.