Cos’è il sovraccarico del metodo?

L’overload dei metodi è una funzionalità nella maggior parte dei linguaggi di programmazione orientati agli oggetti in cui due o più metodi condividono lo stesso nome ma hanno parametri diversi. In particolare, il numero, il tipo di dati e/o l’ordine dei parametri sono diversi. Quando il codice viene compilato, il metodo corretto verrà selezionato automaticamente in base a come viene chiamato. I metodi sono noti anche come funzioni in alcuni linguaggi di programmazione, quindi l’overload dei metodi viene talvolta definito sovraccarico di funzioni.

Un semplice esempio di sovraccarico del metodo sarebbe un metodo che calcola l’area di un quadrato. Potrebbe essere definito come getArea(Square s). Questo metodo potrebbe essere sovraccaricato per calcolare ulteriormente l’area del cerchio aggiungendo il metodo getArea(Circle c).

Il requisito principale per l’overload dei metodi è che i metodi condividano lo stesso nome. Le loro firme del metodo, il nome del metodo, il numero di parametri e i tipi di dati dei parametri, dovrebbero essere altrimenti univoci. In questo modo, il compilatore può determinare quale metodo eseguire.

I costruttori, i metodi utilizzati per istanziare gli oggetti, sono spesso sovraccarichi. Questo viene fatto per inizializzare un oggetto con valori non predefiniti. Ad esempio, un oggetto dipendente con due campi (nome e data di nascita o dob) potrebbe avere i seguenti costruttori di overload: Employee(), Employee(name) e Employee(name, dob). Il primo costruttore crea un oggetto dipendente con nome e campi dob vuoti. Il secondo imposta il campo del nome, ma lascia vuoto il campo dob e il terzo definisce sia il campo del nome che il campo dob.

L’overload del metodo viene spesso eseguito per far apparire logicamente più di un metodo come un unico metodo. Nell’esempio getArea(), mentre ci sono fisicamente due metodi, al chiamante viene presentato un unico metodo logico getArea(). In questo modo, getArea() può essere espanso per lavorare su altre forme – triangoli, trapezi e così via – pur presentandosi logicamente come un unico metodo.

Anche i metodi vengono sovraccaricati per preservare la compatibilità con le versioni precedenti. Un metodo che esegue un calcolo complesso potrebbe ricevere un nuovo requisito per eseguire facoltativamente lo stesso calcolo con una leggera modifica. Viene aggiunto un nuovo parametro al metodo che determinerà come eseguire il calcolo: il vecchio modo o il nuovo modo.
Per evitare di dover trovare tutti i casi in cui viene chiamato il metodo e aggiungere il nuovo parametro, è possibile eseguire l’overload del metodo. Il nuovo metodo avrà la vecchia firma e sarà chiamato dal codice esistente. Non conterrà alcuna logica in sé e chiamerà semplicemente il metodo modificato e passerà al “vecchio modo” predefinito per il nuovo parametro. Il nuovo codice chiamerà il metodo modificato e passerà il nuovo parametro con il valore appropriato, vecchio modo o nuovo modo.
Il metodo di overloading è un tipo di polimorfismo, in cui lo stesso metodo logico può essere, in pratica, utilizzato in più modi. L’override del metodo non è uguale all’override del metodo. L’override del metodo è dove la definizione di un metodo in una classe padre viene modificata da una classe figlio. In questo caso, entrambi i metodi avranno la stessa firma.