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