Diferencia entre revisiones de «Programación en Ada/Tipos etiquetados»

Contenido eliminado Contenido añadido
Esbozo para enlazar con las secciones existentes
 
Ampliación. En desarrollo
Línea 1:
{{navegador|libro=Programación en Ada|actual=Tipos etiquetados|anterior=Tipos: Derivados|siguiente=Diseño y programación de sistemas grandes}}
 
{{en desarrollo}}
Los tipos etiquetados de Ada 95 son los que permiten realizar el polimorfismo. A menudo se asimilan la combinación de un tipo etiquetado y el paquete que lo contiene a una clase en otros lenguajes de programación orientados a objetos. Sin embargo hay algunas diferencias de sintaxis que veremos en este apartado.
 
Los tipos etiquetados de Ada 95 son los que permiten realizar el [[w:Polimorfismo en programación orientada a objetos|polimorfismo]]. A menudo se asimilanasimila la combinación de un tipo etiquetado y el paquete que lo contiene a una clase en otros lenguajes de programación también orientados a objetos. Sin embargo hay algunas diferencias de sintaxis, que no de filosofía, que veremos en este apartado.
package Persona is
 
Un tipo etiquetado puede ser un registro de modo que sus estructura es pública, o puede ser un {{Ada:|Tipos privados|tipo privado|}}
type T_Instancia is tagged
 
type T_InstanciaTInstancia is tagged
record
Nombre : String (1 .. 10);.
Sexo : T_Sexo;
end record;
 
type TInstancia is tagged private;
{{esbozo}}
 
Un tipo etiquetado se puede extender.
 
type TDerivado is new TInstancia with
record
...
end record;
 
type TDerivado is new TInstancia with private;
 
El nuevo tipo hereda todos las {{Ada:|O|o|peraciones primitivas}} del tipo base y las puede redefinir por sobrecarga.
 
Todo objeto de un tipo etiquetado contiene una etiqueta (''tag'') que permite reconocer su tipo en tiempo de ejecución.
 
== Tipos polimórficos (class-wide type) ==
En Ada el polimorfismo se consigue con un tipo especial que puede contener objetos de cualquier tipo derivado de uno dado.
 
TInstancia'Class; -- Puede almacenar cualquier objeto derivado del tipo TInstancia.
 
Este tipo de la clase es un {{Ada:|T|t|ipo irrestringido}}, es decir, para declarar un objeto de este tipo tenemos que inicializarlo llamando a una función, asignándole otro objeto o con un ''new'' (si es un puntero a tipo polimórfico).
 
== Llamadas que despachan ==
La ventaja del polimorfismo es poder escribir algoritmos que no dependen del tipo concreto de los objetos que se manejan.
 
El polimorfismo dinámico que proporciona la programación orientada a objetos permite que una operación sobre un objeto polimórfico se realice de distinto modo dependiendo del tipo concreto del objeto de que se trate en la ejecución. Otras formas de polimorfismo son el polimorfismo paramétrico que se implementa en Ada con las {{Ada:|U|u|nidades genéricas}} y el polimorfismo por {{Ada:|S|s|obrecarga}}.
 
En Ada este polimorfismo se consigue llamando a una operación primitiva de un objeto polimórfico. Cuando el objeto sobre el que se realiza la operación es polimórfico y el parámetro formal del subprograma llamado es concreto, el subprograma realmente llamado puede ser uno redefinido para el tipo concreto si se ha sobrecargado para él una implementación distinta de la del tipo base.
 
Nota para programadores de C++: esto quiere decir que en Ada todos los "métodos" son virtuales, pero no todas las llamadas son virtuales, sólo las que llaman a un método de un objeto polimórfico (semejante a un puntero a clase base).
[[en:Programming:Ada:OO]]