6. Genericità
Un'altra delle caratteristiche desiderabili del linguaggi OOP tipati la genericità, cioè la possibilità di definire delle classi con uno o pi parametri di tipo "tipo". Questa possibilità utile soprattutto quando si vogliono definire delle classi di tipo contenitore di dati: array, pile, code, alberi, ecc.
|
L'idea quella di estendere la possibilità di dichiarare il tipo degli elementi presente per il tipo predefinito array (ad es. array of integer, array of string, ecc. ) ai contenitori definiti dall'utente (pila of integer, pila of string, ecc. ).
In assenza di questo strumento (ad es. Java ne sprovvisto) si costretti a definire una classe di oggetti "qualsiasi" (ANY o Object) e fare quindi un downcasting, ciòuna conversione forzata al sottotipo che ci interessa di volta in volta.
|
Il ricorso al downcasting si rivela comunque necessario in altre occasioni, come quelle che si presentano quando dobbiamo elaborare una collezione di oggetti di varie classi utilizzando le loro operazioni specifiche (non polimorfe).
A volte esiste la necessità di restringere i possibili parametri attuali di tipo "tipo" a quelli che possiedono determinate operazioni (tipico il caso dell'operazione di confronto : <, >, ecc.). Alcuni linguaggi (ad es. Eiffel e Sather) mettono a disposizione a tale proposito la cosiddetta genericità vincolata: solo le classi discendenti di una certa classe specificata possono essere sostituite al posto del parametro.