lunedì 17 dicembre 2012

INTERFACE


Interface

Scopo delle Interfacce
Le interfacce sono un'entità davvero singolare all'interno del .NET Framework. La loro funzione è assimilabile a quella delle classi astratte, ma il modo con cui esse la svolgono è molto diverso.
Il principale scopo di un'interfaccia è definire lo scheletro di una classe; potrebbe essere scherzosamente assimilata alla ricetta con cui si prepara un dolce. Quello che l'interfaccia X fa, ad esempio, consiste nel dire che per costruire una classe Y che rispetti "la ricetta" descritta in X servono una proprietà Id di tipo Integer, una funzione GetSomething senza parametri che restituisce una stringa e una procedura DoSomething con un singolo parametro Double. Tutte le classi che avranno intenzione di seguire i precetti di X (in gergo implementare X) dovranno definire, allo stesso modo, quella proprietà di quel tipo e quei metodi con quelle specifiche signature (il nome ha importanza relativa).

Dichiarazione e implementazione
La sintassi usata per dichiarare un'interfaccia è la seguente:

Interface [nome]

    'membri’

End Interface

I membri delle interfacce, tuttavia, sono un po' diversi dai membri di una classe, e nello scriverli bisogna rispettare queste regole:

·         Nel caso di metodi, proprietà od eventi, il corpo non va specificato;

·         Non si possono mai usare gli specificatori di accesso;

·         Si possono comunque usare dei modificatori come Shared, ReadOnly e WriteOnly.

Il primo ed il secondo punto saranno ben compresi se ci si sofferma a pensare che l'interfaccia ha il solo scopo di definire quali membri una classe debba implementare: per questo motivo, non se ne può scrivere il corpo, dato che spetta espressamente alle classi implementanti, e non ci si preoccupa dello specificatore di accesso, dato che si sta specificando solo il "cosa" e non il "come".
Ora che sappiamo come dichiarare un'interfaccia, dobbiamo scoprire come usarla. Per implementare un'interfaccia in una classe, si usa questa sintassi:  

Class Esempio

   Implements (Nome Interfaccia)

   [Membro] Implements [Nome Interfaccia].[Membro]

End Class

Definizione di tipi in un'interfaccia
Così come è possibile dichiarare una nuova classe all'interno di un'altra, o una struttura in una classe, o un'interfaccia in una classe, o una struttura in una struttura, o tutte le altre possibili combinazioni, è anche possibile dichiarare un nuovo tipo in un'interfaccia. In questo caso, solo le classi che implementeranno quell'interfaccia saranno in grado di usare quel tipo.

Perchè preferire un'interfaccia a una classe astratta
Ci sono casi e casi. In genere, un'interfaccia va preferita quando si dovranno abbracciare grandi quantità di classi diverse: con grandi mi riferisco a numeri abbastanza grandi da rendere difficile l'uso di una sola classe astratta. È bene usare le interfacce anche quando si progetta di usarne più di una: una classe, infatti, può implementare quante interfacce vuole, ma può ereditare da una sola classe base.
Proprio per questi motivi, è ideale usare un'interfaccia quando si vuole delineare una caratteristica o un particolare comportamento che può essere comune a più tipi, mentre è meglio puntare a una classe astratta quando si vuole sottolineare l'appartenenza di molti tipi ad un unico archetipo base.



Nessun commento:

Posta un commento