Programación en Ada/Ada 2005
La previsión es que cada 10 años se publique una revisión del estándar ISO del lenguaje Ada. En 1983 apareció la primera versión auspiciada por el ministerio de defensa de EE. UU. Doce años más tarde apareció la revisión conocida como Ada 95 que produjo muchas novedades, entre otras una implementación completa de la orientación a objetos.
Ya han pasado 10 años y un grupo de trabajo de la ISO preparó en el año 2005 la siguiente revisión del lenguaje. La profundidad de la revisión es más modesta que la anterior y de hecho está considerada técnicamente como una enmienda, no una revisión.
Para el diseño de los cambios se partió de las siguientes premisas:
- Los cambios han de mantener o mejorar las ventajas actuales de Ada, especialmente en los dominios en los que goza de una mayor implantación que son los que necesitan seguridad y criticidad. Se espera que se mejoren aspectos de tiempo real y de sistemas de alta integridad.
- Los cambios han de resolver ciertos problemas detectados en el uso de Ada 95.
El estándar fue definido por un grupo de expertos de ISO, ACM SigAda y Ada-Europe.
La publicación del estándar por parte de la ISO se produjo en enero de 2007. A pesar de ello la definición técnica terminó en 2005. Es por esto que los miembros del grupo dudaron si comenzar a llamar a la nueva versión Ada 2006, pero finalmente acordaron promover el nombre Ada 2005. Y decimos promover porque al fin y al cabo Ada 2005 no es un nombre oficial, el nombre oficial continúa siendo simplemente Ada programming language, ISO/IEC 8652:2005(E).
Cambios en el modelo OO
editarInterfaces al estilo Java
editarLa principal novedad en el modelo de Orientación a Objetos es la incorporación de interfaces al estilo de Java. Es de notar que Ada 95 no admitía herencia múltiple por sus problemas asociados. En Java se resolvió el problema de una manera elegante con la distinción de la herencia de clases de la herencia de interfaces para los que sólo se definen y se heredan los métodos, pero no la implementación.
Este cambio, aparte de mejorar la herencia en Ada, permite mejorar la interoperabilidad de Ada con Java, C# y otros lenguajes con interfaces.
Notación Objeto.Método
editarUna de las principales diferencias entre Ada 95 y otros lenguajes orientados a objetos más populares es la llamada a métodos de un objeto.
En Java y C++:
Objeto.Método (Parámetros);
En Ada 95 (sin cláusula use):
Paquete.Método (Objeto, resto de parámetros);
La notación de Ada 95 tiene la única ventaja de que la parte imperativa y la parte orientada a objetos son más ortogonales entre sí. Sin embargo es un aspecto que le aleja de otros lenguajes orientados a objetos en cuanto a su sintaxis.
Para Ada 2005 se ha decidido adoptar la notación Objeto.Método que resultará más familiar para programadores que vengan de otros lenguajes.
Este cambio sólo afecta a los tagged types (clases en Ada 95) y a la notación de llamada, el resto continúa como en Ada 95. La llamada convencional se sigue admitiendo.
Explicitar cuándo se redefine un método
editarSe ha añadido la posibilidad de definir un método como overriding
o not
overriding
. Esto proporciona un nivel de seguridad contra futuros cambios en una clase base como eliminar un método que ha sido redefinido por alguna clase derivada. También prevendrá el problema de querer redefinir un método y por escribirlo mal, se cree un nuevo método en vez de redefinirlo. Este descuido nos puede hacer perder horas hasta encontrar que no se llama el método de la clase derivada en vez de la clase base porque hemos puesto Annadir en vez de Anyadir. Además el explicitarlo servirá como documentación para comprender la derivación de clases.
Cambios en los tipos puntero
editarLos punteros en Ada 95 sólo podían ser de un tipo anónimo en los parámetros de subprogramas. Es decir, esta definición era ilegal:
type
Ais
x;type
A_Accessis
access
A;type
Bis
record
Campo_Puntero :access
A;-- NO, era obligatorio A_Access
end
record
;
Ahora se admite un puntero de tipo anónimo en casi cualquier sitio donde se admite un tipo. Esto eliminará la proliferación de tipos puntero nombrados y las consiguientes conversiones de tipo entre ellos.
También es posible definir un tipo de puntero que apunta a constante y si el tipo admite el valor null o no.
type
Ais
x;type
Bis
access
constant
A;type
Cis
access
not
null
A;
Especialmente útil es especificar que un parámetro de tipo acceso no admite ser llamado con el valor null. Nos ayudará a definir claramente el contrato del subprograma y a detectar problemas lo antes posible.
function
F (V :access
not
null
A)return
Integer;
V := null;
F (V); -- Levantará Constraint_Error
Dependencia mutua de tipos definidos en paquetes distintos
editarSe amplía el concepto de tipos incompletos para poder hacer tipos interdependientes definidos en paquetes distintos. Para ello se introduce la sentencia limited
with
que sólo nos permite hacer uso de los nombres de los tipos del otro paquete.
Visibilidad en la parte privada
editarAhora es posible hacer visible un paquete únicamente en la parte privada de una especificación. Esto permitirá usar paquetes hijos privados en la parte privada de un paquete dentro de la misma jerarquía.
private
package
Wikilibros.Privadois
...end
Wikilibros.Privado;
private
with
Wikilibros.Privado;package
Wikilibros.Ejemplosis
...-- Aquí no es visible Wikilibros.Privado
private
-- Aquí podemos hacer uso de Wikilibros.Privado
type
Mi_Ejemplois
new
Wikilibros.Privado.Mi_Tipo;end
Wikilibros.Ejemplos;
Inicializaciones por defecto
editarEn un agregado será posible decir que cierto componente de un registro se rellena con el valor por defecto definido en su declaración.
Sintaxis especial para elevar excepciones con mensaje
editarSe ha simplificado la sintaxis para elevar una excepción con mensaje, y se ha hecho semejante a levantarla sin mensaje:
- Ada 95
raise
Problema_Interno;-- Sin mensaje asociado
Ada.Exceptions.Raise_Exception (Problema_Interno'Identity,"No más identificadores libres"
);-- Con mensaje asociado
- Ada 2005
raise
Problema_Interno;-- Sin mensaje asociado
raise
Problema_Internowith
"No más identificadores libres"
;-- Con mensaje asociado
Nuevos pragmas y atributos
editarAparecen nuevos pragmas y otros que ya existían en algunas implementaciones como GNAT se estandarizan:
- Unsuppress
- Para desactivar el efecto del
pragma
Suppress. - Assert
- Para realizar chequeos y asignarles un tratamiento común por configuración.
- Preelaborable_Initialization
- Para indicar que la inicialización de un tipo es preelaborable.
- No_Return
- Para indicar que un procedimiento no devuelve el control de modo normal.
- Unchecked_Union
- Para importar uniones del lenguaje C.
Aparece el atributo Mod que da el módulo de un entero sin signo.
Ampliación de la biblioteca predefinida
editarSe incluye una biblioteca completa de contenedores al estilo de la STL de C++. Se ha estandarizado un paquete de manejo de directorios y otro de variables de entorno. Aunque estos paquetes los proveían todos los fabricantes de compiladores, la estandarización mejora la portabilidad de programas Ada entre distintos compiladores.
Así mismo se estandarizan operaciones con vectores y matrices, más operaciones sobre tiempos y fechas y algunos algoritmos de algebra lineal.
Nuevo tipo de caracteres
editarAparte del tipo Character (8 bits) y Wide_Character (16 bits) de Ada 95 se añade un tercer tipo Wide_Wide_Character (32 bits) con soporte completo de Unicode.
Además los compiladores deben admitir código fuente codificado en Unicode 4.0, y los identificadores pueden contener letras en cualquier sistema alfabético.
Mejoras en tiempo real y concurrencia
editarSe ha incluido en el estándar el perfil de Ravenscar. Se han añadido paquetes predefinidos para controlar relojes de tiempo de ejecución.
Se pueden definir interfaces que han de implementar tareas u objetos protegidos. Esta posibilidad traza un puente entre las capacidades de concurrencia y de orientación a objetos del lenguaje.
Enlaces externos
editarTodo el siguiente material está en inglés:
Publicaciones y ponencias
editar- Ada 2005: Putting it all together (ponencia de SIGAda 2004)
- GNAT: The road to Ada 2005 (ponencia de Ada-Spain 2005)
- GNAT and Ada 2005, y esta ponencia en SIGAda 2004
- An invitation to Ada 2005, y esta ponencia en Ada-Europe 2004
Ada 2005 Rationale
editarEl Rationale de Ada 2005 describe y justifica los cambios realizados al lenguaje. Está escrito por John Barnes y consta de los siguientes capítulos:
- Introduction
- Object Oriented Model
- Access Types
- Structure and Visibility
- Tasking and Real-Time
- Exceptions, Generics, Etc.
- Predefined Library
- Containers
- Epilogue
Requisitos de Ada 2005
editar- Instructions to the Ada Rapporteur Group from SC22/WG9 for Preparation of the Amendment to ISO/IEC 8652 (10 octubre 2002), y la ponencia de este documento en SIGAda 2002
Manual de referencia de Ada
editarAda 2005
editar- Ada Reference Manual, ISO/IEC 8652:1995(E) with COR.1:2001 and AMD.1:200y (borrador)
- Annotated Ada Reference Manual, ISO/IEC 8652:1995(E) with COR.1:2001 and AMD.1:200y (borrador con marcas de color para los cambios)
- Lista de borradores de la enmienda 1 a Ada (Ada 2005)