Overloading

Oggi discuteremo di un altro importante costrutto specifico del paradigma della programmazione orientata agli oggetti: vedremo insieme cosa si intende per overloading (in italiano: sovraccarico) e come questa tecnica sia implementata in FreeBASIC.

Introduzione

Abbiamo visto nell’articolo introduttivo alla programmazione orientata agli oggetti in FreeBASIC che tra i membri di una classe, oltre alle proprietà ci sono anche i cosiddetti metodi che, in ultima analisi, non sono altro che procedure: ovvero subroutines o funzioni.

Come ben sappiamo ogni procedura è caratterizzata da uno specifico nome, dalla possibilità di ricevere degli argomenti e, nel caso delle funzioni, anche di restituire un valore di ritorno.

La lista degli argomenti viene definita la firma (signature) della procedura.

La tecnica di overloading consiste nello scrivere più procedure aventi lo stesso nome, ma firma differente.

Questa tecnica viene normalmente applicata anche alla procedura costruttore.

Utilità della tecnica di overloading

Arrivati a questo punto è lecito domandarci: ma a che ci serve applicare questa tecnica?

La risposta è semplice:

  • Se sovraccarichiamo un costruttore abbiamo la possibilità di creare degli oggetti (istanze della nostra classe) inizializzandoli in maniera differente.
  • Se sovraccarichiamo un metodo abbiamo la possibilità di specializzare un certo comportamento in base proprio ai parametri passati come argomenti.

Esempio di overloading su un metodo

''definizione della classe "sommatore"
type sommatore
  public:
    ''dichiarazione del metodo "somma" sovraccaricato
    declare function somma(a as integer, b as integer) as integer
    declare function somma(a as string, b as string) as string
  ''dimensionamento della proprietà "etichetta"
  dim as string etichetta = "Il risultato e': "
end type

''definizione delle funzioni "somma"
function sommatore.somma(a as integer, b as integer) as integer
  return a+b
end function
function sommatore.somma(a as string, b as string) as string
  return a+b
end function

''creazione dell'oggetto istanza della classe "sommatore"
dim as sommatore mio_sommatore

''primo caso: somma con valori interi
dim as integer c, d
c = 3
d = 4
print mio_sommatore.etichetta & mio_sommatore.somma(c,d)

''secondo caso: somma con valori stringa
dim as string e, f
e = "3"
f = "4"
print mio_sommatore.etichetta & mio_sommatore.somma(e,f)

sleep ''pausa

Nota: se applichiamo la tecnica di overloading alle procedure che sono dei membri di una classe, non è necessario specificarlo esplicitamente, ma se vogliamo applicarla alle normali procedure, allora è obbligatorio far seguire al nome della procedura la parola-chiave overload, almeno per la prima procedura che si vuole sovraccaricare.

Bene. Un altro piccolo passo è stato fatto. 🙂

Nel prossimo articolo parleremo del concetto di polimorfismo.