Generics

di: Mauro Bennici     24 Febbraio 2006

Lo scopo di ogni programmatore ad oggetti e di scrivere del codice che sia il più riutilizzabile possibile. Questo perchè, oltre ad un minore tempo di sviluppo, diminuisce il numero di errore che andremo a scrivere e renderà più facile la loro individuazione e correzione. E' risaputo infatti che la prima regola del programmatore è 'Più codice scrivi, più errori commetti', quando poi la maggior parte di esso è una ripetizione infinita di operazioni molto simili la cosa diviene insostenibile. Visual Basic 2005, così come tutti i linguaggi del Framework 2.0, sono ora in grado di gestire oggetti 'generici', i 'Generics' appunto.

I 'Generics' sono speciali classi, metodi ed insiemi in cui il tipo non viene definito ma passato come parametro ad ogni sua creazione, in questo modo quel particolare algoritmo può essere utilizzato per infiniti tipi, sia base che custom. Così facendo non solo ridurremo le righe di codice ma avremo sempre un insieme 'Type-Safe' che, come vedremo nel dettaglio, renderà più sicura la nostra applicazione.

Lo spazio dei nomi del Framework che contiene gli insiemi 'Generics' è la 'Systems.Collections.Generic'. Qui troveremo:

  1. Collection, equivalente generico di CollectionBase.
  2. Dictionary, equivalente generico di HashTable.
  3. LinkedList, non ha equivalente non generico.
  4. List, equivalente generico di ArrayList.
  5. Queue (FIFO), stesso nome dell'equivalente non generico.
  6. ReadOnlyCollection, equivalente generico di ReadOnlyCollectionBase.
  7. SortedDictionary, non equivalente non generico.
  8. SortedList, stesso nome dell'equivalente non generico.
  9. Stack (LIFO), stesso nome dell'equivalente non generico.

È l'utilizzo di queste nuove classi che apporterà il maggiore vantaggio alla produttività sebbene, come detto, i 'Generics' possano essere usati ben oltre i soli insiemi.

La spiegazione dei 'Generics' non può non essere accompagnata da degli esempi che facciano capire chiaramente il loro utilizzo.

Immaginiamo di dover gestire un sito di commercio elettronico e di aver creato un oggetto per ogni singolo attore della catena di vendita. Avremo quindi a nostra disposizione svariati oggetti tra cui Prodotto, Articolo (che contiene una o più specifiche del nostro prodotto), e Carrello.

Senza i 'Generics' per tenere traccia dei prodotti inseriti nel Carrello avremmo utilizzato un 'ArrayList'. L'ArrayList ci permette di inserire al suo interno N elementi trattandoli come oggetti qualsiasi (Object). Cosa accadrebbe però se al posto di un oggetto Prodotto gli venisse inserito un oggetto Articolo? Purtroppo niente. Seppure l'operazione secondo la nostra logica di progettazione sia errata a livello di programmazione risulta corretta: abbiamo inserito un oggetto in un contenitore di oggetti. L'eventualità che questo possa accadere comporta, per non correre rischi più avanti, di dovere controllare se l'oggetto passato è quello che ci aspettavamo o meno. Il tutto comporterà un aumento del codice da dovere scrivere e rivedere ogni volta che viene effettuata una modifica ai vari Oggetti per verificare che i nostri controlli siano ancora validi.

Esaminiamo il seguente codice e vediamo i problemi che andremo ad incontrare con ArrayList e osserviamo come i 'Generics' risolvano una volta per tutte questi inconvenienti.

Partiamo dal codice di Prodotto e di Articolo:

Public Class Prodotto
Dim _nome As String
Private Sub New()
' non visibile
End Sub

Public Sub New(ByVal nome As String)
_nome = nome
End Sub

Public Property GetNomeProdotto() As String
Get
Return _nome
End Get

Private Set(ByVal value As String)
_nome = value
End Set
End Property

End Class


Public Class Articolo
Dim _nome As String

Friend Sub New()
' non visibile
End Sub

Public Sub New(ByVal nome As String)
_nome = nome
End Sub

Public Property GetNomeArticolo() As String
Get
Return _nome
End Get

Private Set(ByVal value As String)
_nome = value
End Set
End Property

End Class

Guide ASP.Net

Guida Nant

Nant è il porting del celebre Ant per Java, un 'build tool', un...

Guida ASP.NET MVC

Un percorso per capire i meccanismi del nuovo Framework Microsoft...

Guida Silverlight

Sviluppare Rich Internet Application e contenuti multimediali...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Windows server 2008

29 Marzo 2010 a Milano
Disponibilità: 7 Posti

Corso Webmaster con ASP.Net

22 Marzo 2010 a Roma
Disponibilità: 7 Posti