Anterior | Superior | Siguiente

Guía de referencia básica de Ada 95

Tipos de datos.

Tipos y subtipos.

Un tipo de datos define un conjunto de valores y operaciones primitivas aplicables a los mismos. El lenguaje proporciona tipos predefinidos junto con mecanismos para que el usuario pueda definir nuevos tipos y subtipos. Los tipos se agrupan en clases formando una jerarquía.

La declaración de un tipo requiere la especificación de un nombre y la definición (descripción) del mismo; la forma general de una declaración de tipo es: type Nombre_Tipo is Definición_tipo;. La forma de la definición depende de la clase de tipo que se esté definiendo. Un tipo se dice que es derivado si en su definición se utiliza la palabra new en referencia a otro tipo (como los tipos Entero y Entero_Corto del siguiente ejemplo); un tipo derivado obtiene las características del que deriva (su "tipo padre").

type Octeto is range 0..255;
type Entero is new Integer;
type Entero_Corto is new Entero range 0..1000;
type Vector is array(1..20) of Float;

A veces (Ej. cuando se crean estructuras de datos dinámicas) es conveniente hacer una declaración incompleta de tipo que permita disponer de un nombre de tipo que en realidad se definirá con posterioridad en la misma región del programa.

type Un_Tipo; --sólo se declara un nombre
              --la definición del tipo requiere
              --una nueva declaración

Una declaración de tipo define los valores del tipo y un conjunto de operaciones predefinidas en función de su clase; el usuario puede adjuntar su propia definición de operaciones primitivas adicionales para el tipo que está definiendo (simplemente tiene que adjuntar subprogramas que tengan entre sus parámetros objetos del tipo).

Un subtipo define un subconjunto restringido de valores de un tipo base con atributos específicos. Se declara utilizando la palabra subtype en vez de type; en la definición hay que indicar cuál es el tipo base del subtipo.

subtype Byte is Integer range 0..255;

Compatibilidad y conversión de tipos.

Ada es un lenguaje fuertemente tipado: en general no se pueden mezclar valores de tipos diferentes aún cuando pudieran parecer equivalentes (ni siquiera de un tipo derivado y su tipo padre). Esta regla no incluye a los subtipos: los valores de un subtipo son valores del tipo base.

Se pueden realizar conversiones explícitas entre tipos estrechamente relacionados tal como se establece en la sección 4.6 del "Ada 95 Reference Manual"; para ello se utiliza el tipo destino como si fuera el nombre de una función con un parámetro que es una expresión del tipo origen de la conversión.

X: Float;
Y: Integer := 5;
...
X := Float(Y); --se asigna a X el valor real 5.0

Una conversión de tipo cuyo parámetro es una variable no cambia el tipo de la variable, lo que hace es devolver el valor que en el tipo destino corresponde al valor del tipo origen asociado a la variable según las reglas de conversión.

Los tipos escalares ofrecen atributos (image, value) para obtener la representación de un valor como ristra de caracteres (string) y viceversa.

Otros tipos (Ej. ristras de tamaño limitado y ristras de tamaño dinámico) ofrecen, entre sus operaciones primitivas, funciones de conversión a tipos relacionados.

Tipos limitados.

Cualquier tipo heterogéneo o privado puede declararse limitado usando la palabra limited. Un tipo limitado es uno para el que no está definida la asignación ni los operadores relacionales de igualdad.

type T1 is limited record
   ...
end record;
type T2 is limited private;

Tipos privados.

Una declaración de tipo privado es una en la que como descripción se utiliza la palabra private. La declaración proporciona una vista restringida de un tipo que está definido en otro sitio.

type T_Privado is private;

En el ámbito de su declaración un tipo privado sólo admite asignación y operadores relacionales de igualdad (a menos que además sea limitado).

Una declaración de tipo privado se puede hacer en la sección pública de la especificación de un paquete; tal tipo debe redeclararse en la sección privada (private) de dicha especificación, donde se definirán sus características "ocultas" que sólo podrán usarse dentro del paquete.

También puede declararse privado un parámetro formal genérico en cuyo caso dentro de la unidad genérica sólo se le podrán aplicar las operaciones antes mencionadas, independientemente del tipo que actúe como parámetro real.

Clasificación de operaciones.

Se dice que una operación opera sobre un tipo, T, si produce un valor de tipo T o tiene un parámetro que, o es de tipo T, o es un access a objetos de tipo T (el parámetro debe, en este caso estar declarado como "access T", no de un tipo que sea "access T"). Los operadores y demás operaciones predefinidas en el lenguaje que operen sobre el tipo T, se dice que son "operaciones predefinidas del tipo T". El conjunto de operaciones primitivas de un tipo está constituido por sus operaciones predefinidas junto con los subprogramas primitivos definidos por el programador.

Son subprogramas primitivos de un tipo:

Un subprograma primitivo cuyo nombre es un símbolo de operador es un operador primitivo.

Jerarquía de clases de tipos.

La jerarquía de clases de tipos de Ada 95, tal como se recoge en la sección 3.2 del "Ada 95 Reference Manual", es:

all types
        elementary
            scalar
                discrete
                    enumeration
                        character
                        boolean
                        other enumeration
                    integer
                        signed integer
                        modular integer
                real
                    floating point
                    fixed point
                        ordinary fixed point
                        decimal fixed point
            access
                access-to-object
                access-to-subprogram
        composite
            array
                string
                other array
            untagged record
            tagged
            task
            protected

© Grupo de Estructuras de Datos y Lingüística Computacional - ULPGC.

Anterior | Superior | Siguiente