next up previous contents
Siguiente: Formación (array) Subir: Registro Anterior: Valores por omisión   Índice General

Registro con variantes

La definición de un registro puede tener, simultáneamente, varios formatos posibles que llamamos variantes. Por ejemplo, si vamos a crear una ficha médica para los pacientes de un médico, deberemos diferenciar la información que almacenamos cuando el paciente es un hombre o una mujer. En caso de que también haya campos comunes (por ejemplo la edad), Ada nos obliga a colocarlos al principio (las variantes van siempre al final del registro). Por ejemplo:

       type T_Sexo is (Hombre, Mujer);
       type Persona(Sexo : T_Sexo) is 
            record 
              Edad : Natural := 0;
              case Sexo is 
                 when Varon => 
                      Problemas_De_Prostata: Boolean := False;
                 when Mujer => 
                      Problemas_De_Ovarios : Boolean := False;
                      Numero_De_Embarazos  : Natural := 0;
              end case; 
            end record; 
       Ficha_Medica: T_Persona;

En este ejemplo hemos dicho a Ada que todas las personas tienen un campo común con la Edad. Además hemos dicho a Ada que si es un hombre, el registro tiene un campo de tipo lógico para almacenar si ha tenido alguna vez problemas de próstata, mientras que si es una mujer, queremos que el registro tenga dos campos para recordar si ha tenido problemas en los ovarios y el número de embarazos.

Las variables de este tipo de registro se declaran y se inicializan igual que el resto de los registros. Por ejemplo:

   Antonio : Persona(Sexo => Hombre) := (Sexo => Hombre,
                                         Edad => 21, 
                                         Problemas_De_Prostata => False);
   Isabel  : Persona(Sexo => Mujer)  := (Sexo => Mujer,
                                         Edad => 18, 
                                         Problemas_De_Ovarios => False,
                                         Numero_De_Embarazos  => 0);

Si intentamos acceder al campo Antonio.Numero_De_Embarazos o al campo Isabel.Problemas_De_Prostata Ada eleva la excepción Constraint_Error.


next up previous contents
Siguiente: Formación (array) Subir: Registro Anterior: Valores por omisión   Índice General
Javier Miranda 2002-10-03