Cómo definir un Genérico.

            En nuestro lenguaje existen dos clases de Genéricos: los Tipos Genéricos y las Funciones Genéricas. Ambos van a ser entidades “huecas” que van a hacer referencia a un Tad o a una Función respectivamente.  Su uso es muy útil, pues se nos permite gracias a ellos definir un conjunto de TADes de una sola vez. Así pues definiendo el Tad Lista que contenga un Tipo Genérico Elemento estaremos definiendo cualquier clase de Lista posible, pudiendo ser ésta empleada para contener cualquier otro Tipo. Es decir, podremos hacer uso de Lista(Natural), Lista(Booleano) e incluso estructuras más complejas como Lista(Lista(Lista(Natural)))).

            La definición de genéricos se realiza en su correspondiente zona, la cual empieza por la palabra reservada “GENERICOS”. En ella se pueden definir tantos como queramos. Veamos cada una de las dos posibilidades.

-       Para definir un Tipo Genérico se escribe la palabra reservada “TIPO” y a continuación se escribe un nombre. Éste, al igual que los nombres de las funciones, debe comenzar por letra y puede ir seguido de tantos números, letras o “_” como se desee.

Seguidamente se le puede exigir que tenga una serie de operaciones. Para ello se escribe la palabra reservada “OPERACIONES”. Tras esto se pueden escribir tantas funciones como se desee. En ellas se puede hacer uso de los tipos definidos en los dominios y de los tipos genéricos definidos previamente en este mismo TAD, incluyendo este mismo.

A cada una de estas operaciones se le puede exigir además que cumplan unas precondiciones. Para ello se emplea la palabra reservada “PRECONDICIONES” después de la función. Es importante destacar que estas precondiciones solo pueden hacer uso de funciones declaradas anteriormente para este mismo genérico. Veamos un ejemplo:

GENERICOS

TIPO

Elemento

OPERACIONES

MenorIgual:Elemento*Elemento->Booleano

Resta:Elemento*Elemento-/>Elemento

PRECONDICIONES a,b:Elemento

Resta(a,b):MenorIgual(b,a)

-        Para definir una Función Genérica haremos uso de la palabra reservada “FUNCIÓN”. Tras ella se hará la definición de una función, pero en este caso sólo está permitido definir una por vez. Para definir más de una se debe volver a usar la palabra reservada “FUNCIÓN”. A las funciones genéricas no se les permite definir precondiciones. Veamos un ejemplo:

GENERICOS

FUNCION

Cota:->Natural

                                    FUNCION

                                                Máximo:Pila-/>Natural