L’utilità delle interfacce nella programmazione ad oggetti

2007-10-31 | Tags: , , ,

Molto spesso è possibile arrivare ad una soluzione intraprendendo diverse strade.

Ad esempio, potremmo avere la necessità di salvare delle informazioni per poi recuperarle in seguito. La soluzione a questo problema può essere individuata nell’utilizzo di un database; ma potremmo anche decidere di salvare tali informazioni in un file di testo, piuttosto che in un tracciato CSV o XML.

Anche la stessa scelta di utilizzare un database per immagazzinare i dati può portare ad ulteriore decisioni da prendere: ad esempio decidere se utilizzare MySQL, SQ Server o Oracle.

Avvolte accade anche che, fatta una scelta iniziale, col passare del tempo occorra passare ad un’altra soluzione.

Un approccio OOP per l’implementazione di una soluzione è propedeutica per rendere la stessa soluzione flessibile e facilmente modificabile. Tuttavia, occorre tenere presente che col tempo potremmo dimenticare esattamente cosa abbiamo implementato come soluzione.

Non possiamo correre il rischio di implementare una nuova soluzione (ad esempio, passare da un database MySQL a SQL Server o Oracle) che risulti essere incompleta, cioè con metodi incompatibili, di diverso nome o addirittura mancanti.

Le interfacce hanno lo scopo di definire una API che una classe deve implementare.

E’ come se la classe che implementa l’interfaccia stipuli un contratto con quest’ultima in cui si impegna ad implementare esattamente tutte le funzioni che essa possiede (compresi gli argomenti, le costanti e le variabili in essa definite).

Nel caso di un database, un interfaccia tipica potrebbe essere la seguente:

Semplicemente stabiliamo che la classe che implementa questa interfaccia debba avere almeno tutti i metodi dichiarati esattamente come indicati. Ovviamente la nuova classe può avere ulteriori metodi, con qualsiasi livello di accesso.

Un esempio di implementazione può essere il seguente:

Come abbiamo già detto, nulla vieta di aggiungere ulteriori metodi, costanti o quant’altro. Tuttavia, non possiamo omettere ciò che è espressamente dichiarato all’interno dell’interfaccia. Un’eventuale omissione genererà un fatal error che indicherà se e cosa manca; oppure indicherà che un eventuale metodo non è stato implementato correttamente (ad esempio perché non abbiamo rispettato il numero di argomenti che il metodo si aspetta di ricevere).

Per finire, non dimentichiamo che possiamo implementare più di una sola interfaccia e che le implementazioni possono avvenire anche quando si sta estendendo una classe:

Come si può notare, le varie interfacce vanno separate da una virgola.

Ricorda: una classe può estendere una sola classe, ma può implementare più interfacce.

  1. 1 trackbacks
    1. 2007-11-01 - diggita.it