Lenguaje de programación Ada

Lenguaje de programación Ada
Información sobre la plantilla
Progada.jpeg
Ada es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++. El nombre del lenguaje de programación Ada fue escogido como homenaje a Ada Lovelace quien fue la primera programadora.
CreadorJean Ichbiah
Fecha de Creación1979

Ada es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++. Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous.

Ada se usa principalmente en entornos en los que se necesita una gran seguridad y fiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indra en España) y la industria aeroespacial entre otros.

Introducción

La programación de computadores, esto es, la creación de software para ordenadores, es un proceso de escritura en sí. Así como los escritores de libros y artículos de revistas, los programadores (escritores de programas) deben expresar sus ideas por medio de una lengua escrita. Sin embargo, a diferencia de los escritores de novelas, los programadores deben expresar sus textos en lenguajes de propósito especial, basados en las matemáticas, conocidos como lenguajes de programación.

Ada, es uno de entre muchos posibles lenguajes de programación. Fue diseñado con un claro propósito en mente: la calidad del producto. Entendiéndose por calidad, la confianza que los usuarios van a poder depositar en el programa. Si bien es posible escribir cualquier programa en Ada, éste ha sido utilizado principalmente, en el desarrollo de software de control, de tiempo real y de misión crítica. Típicamente, estos sistemas son responsables de procesos industriales y militares, muy costosos, y en los cuales incluso vidas humanas dependen del buen funcionamiento del software. Es vital en tales sistemas, utilizar un lenguaje que como Ada, ayuda en la creación de software de alta calidad.

Por otro lado, Ada, como lenguaje que promueve las buenas prácticas en ingeniería del software, es usado en la enseñanza de la programación en muchas universidades de todo el mundo.

Historia

El lenguaje fue diseñado bajo encargo del Departamento de Defensa de los Estados Unidos (DoD). Durante los años 1970, este departamento tenía proyectos en una infinidad de lenguajes y estaba gastando mucho dinero en software.

Para solucionarlo se buscó un lenguaje único que cumpliese unas ciertas normas recogidas en el documento Steelman. Después de un estudio de los lenguajes existentes en la época se decidió que ninguno las cumplía totalmente, por lo que se hizo un concurso público al que se presentaron cuatro equipos, cuyas propuestas se nombraron con un color: Rojo (Intermetrics), Verde (CII Honeywell Bull), Azul (SofTEch) y Amarillo (SRI International).

Finalmente en mayo de 1979 se seleccionó la propuesta Verde diseñada por Jean Ichbiah de CII Honeywell Bull, y se le dio el nombre de Ada. Esta propuesta era un sucesor de un lenguaje anterior de este equipo llamado LIS y desarrollado durante los años 1970.

El nombre se eligió en conmemoración de Ada Lovelace (Lady Ada Augusta Byron King (1815-1852) Condesa de Lovelace), hija del poeta Lord George Byron, a quien se considera la primera programadora de la Historia, por su colaboración y relación con Charles Babbage, creador de la máquina analítica.

El lenguaje se convirtió en un estándar de ANSI en 1983 (ANSI/MIL-STD 1815) y un estándar ISO en 1987 (ISO-8652:1987).

El DoD y los ministerios equivalentes de varios países de la OTAN exigían el uso de este lenguaje en los proyectos que contrataban (el Ada mandate). La obligatoriedad en el caso de Estados Unidos terminó en 1997, cuando el DoD comenzó a usar productos COTS (commercial off the shelf). Ada ha sido utilizado por la NASA en sistemas VAX.

Características principales

Ada es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.

Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva Rendezvous.

Ada se usa principalmente en entornos en los que se necesita una gran seguridad y fiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indra en España) y la industria aeroespacial entre otros. La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura).

Es indiferente el uso de mayúsculas y minúsculas en los identificadores y palabras claves, es decir es un lenguaje case-insensitive. En Ada, todo el programa es un único procedimiento, que puede contener subprogramas (procedimientos o funciones).

Cada sentencia se cierra con end qué_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen. El operador de asignación es :=, el de igualdad =. A los programadores de C y similares les puede confundir este rasgo inspirado en Pascal. La sintaxis de atributos predefinidos es Objeto'Atributo (o Tipo'Atributo) (nota: esto sólo aplica a atributos predefinidos por el lenguaje, ya que no es el concepto de atributo típico de OOP).

Se distingue entre "procedimientos" (subrutinas que no devuelven ningún valor pero pueden modificar sus parámetros) y "funciones" (subrutinas que devuelven un valor y no modifican los parámetros). Muchos lenguajes de programación no hacen esta distinción. Las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no pueden tener parámetros in out.

Legibilidad

Los programas profesionales se leen muchas más veces de las que se escriben, por tanto, conviene evitar una notación que permita escribir el programa fácilmente, pero que sea difícil leerlo excepto, quizás, por el autor original y no mucho tiempo después de escribirlo.

Tipado fuerte

Esto asegura que todo objeto tenga un conjunto de valores que esté claramente definido e impide la confusión entre conceptos lógicamente distintos. Como consecuencia, el compilador detecta más errores que en otros lenguajes.

Construcción de grandes programas

Se necesitan mecanismos de encapsulado para compilar separadamente y para gestionar bibliotecas de cara a crear programas transportables y mantenibles de cualquier tamaño.

Manejo de excepciones

Los programas reales raramente son totalmente correctos. Es necesario proporcionar medios para que el programa se pueda construir en capas y por partes, de tal forma que se puedan limitar las consecuencias de los errores que se presenten en cualquiera de las partes.

Abstracción de datos

Se puede obtener mayor transportabilidad y mejor mantenimiento si se pueden separar los detalles de la representación de los datos y las especificaciones de las operaciones lógicas sobre los mismos.

Procesamiento paralelo

Para muchas aplicaciones es importante que el programa se pueda implementar como una serie de actividades paralelas. Dotando al lenguaje de estos mecanismos, se evita tener que añadirlos por medio de llamadas al sistema operativo, con lo que se consigue mayor transportabilidad y fiabilidad.

Unidades genéricas

En muchos casos, la lógica de parte de un programa es independiente de los tipos de los valores que estén siendo manipulados. Para ello, se necesita un mecanismo que permita la creación de piezas de programa similares a partir de un único original. Esto es especialmente útil para la creación de bibliotecas.

Alfabeto

El alfabeto de Ada consta de:

  • Letras mayúsculas: A, ..., Z y minúsculas: a, ..., z.
  • Dígitos: 0, ..., 9.
  • Caracteres especiales.

Es de destacar que en Ada 95 se admiten caracteres como 'Ñ', 'Ç' y vocales acentuadas ya que se permiten los 256 caracteres comprendidos en ISO Latin-1 . El alfabeto de minúsculas puede usarse en vez de o junto con el alfabeto de mayúsculas, pero se considera que los dos son idénticos (a excepción de las cadenas de caracteres y literales tipo carácter).

Componentes léxicos

Se pueden encontrar en Ada los siguientes componentes léxicos:

  • Identificadores
  • Literales numéricos
  • Literales de tipo carácter
  • Cadenas de caracteres
  • Delimitadores
  • Comentarios
  • Palabras reservadas

Hacer constar, que el espacio no constituye nada más que un separador de elementos léxicos, pero es muy importante utilizarlos para una mayor legibilidad, tanto dentro de las sentencias, como elemento de sangrado para ayudar a diferenciar los bloques.

Ejemplo: Temperatura_Sala := 25;-- Temperatura que debe tener la sala. Esta línea contiene 5 elementos léxicos:

  • El identificador Temperatura_Sala
  • El delimitador compuesto :=
  • El número 25
  • El delimitador simple ;
  • El comentario -- Temperatura que debe tener la sala.

Identificadores

Definición en BNF : identificador ::= letra { [ subrayado ] letra | cifra } letra ::= A | ... | Z | a | ... | z cifra ::= 0 | ... | 9 subrayado ::= _

Aunque dentro de esta definición entrarían las palabras reservadas que tienen un significado propio en el lenguaje y, por tanto, no pueden ser utilizadas como identificadores.

Nota: en la versión Ada 95 se incorporan los caracteres de Latín-1 , con lo que se pueden escribir identificadores como Año o Diámetro.

No hay límite en el número de caracteres de un identificador, aunque todo identificador deberá caber en una única línea.

Números

Los literales numéricos constan de:

  • dígitos 0 .. 9
  • el separador de decimales .
  • el símbolo de exponenciación e o E
  • el símbolo de negativo -
  • el separador _

Como ejemplo, el número real 98,4 se puede representar como: 9.84E1, 98.4e0, 984.0e-1 ó 0.984E+2. No estaría permitido 984e-1.

Para representación de número enteros, por ejemplo 1.900, se puede utilizar 19E2, 190e+1 ó 1_900E+0. Sirviendo el carácter _ como mero separador para una mejor visualización.

Una última característica es la posibilidad de expresar un literal numérico en una base distinta de 10 encerrando el número entre caracteres #, precedido por la base: un número entre 2 y 16. Por ejemplo, 2#101# equivale a 101 en base binaria, es decir al número 5 en decimal. Otro ejemplo con exponente sería 16#B#E2 que es igual a 11 × 16² = 2.816 (nótese que es 16² y no 10² porque la base en este caso es 16).

Literales de tipo carácter

Contienen un único carácter, por ejemplo: A. Aquí sí se diferencian mayúsculas de minúsculas. Se delimitan por un apóstrofe.

Ejemplos: 'A' 'ñ' '%'

Cadenas de caracteres

Contienen uno o varios caracteres y se delimitan por el carácter de dobles comillas: ", por ejemplo: "ABC". En este caso se diferencian mayúsculas de minúsculas.

Delimitadores

Los delimitadores pueden ser uno de los siguientes caracteres especiales: &'()*+,-./:;= O ser uno de los delimitadores compuestos por dos caracteres especiales: "=..**:=/==="

Comentarios

Los comentarios se utilizan para ayudar a comprender los programas y lo constituye toda parte de texto precedida de dos guiones (--) hasta el fin de línea. No existe la posibilidad de insertar otro elemento léxico en la misma línea a partir de los dos guiones, es decir, el resto de la línea se interpreta como comentario en su totalidad. -- Este comentario ocupa una línea completa. Mis_Ahorros := Mis_Ahorros * 10.0; -- Este está después de una sentencia. Mis_Ahorros := Mis_Ahorros * -- Este está entre medias de una sentencia que ocupa dos líneas.100_000_000.0;

Palabras reservadas

Como el resto de los elemento léxicos, las palabras reservadas de Ada son equivalentes tanto en mayúsculas como en minúsculas. El estilo más extendido es escribirlas completamente en minúsculas. En Ada las palabras reservadas pueden tener un uso distinto dependiendo del contexto, los distintos usos de cada una se puede consultar en la bibliografía especializada.

Lista de palabras reservadas: " abort, else, new, return, abs, elsif, not, reverse, abstract, end, null, accept, entry, select access, exception, of, separate, aliased, exit, or, subtype, all, others, and, for, out, tagged, array, function, task, at, package, terminate, generic, pragma, then, begin, goto, private, type, body, procedure, if, protected, until, case, in, use, constant, is, raise, range, when, declare, limited, record, while delay, loop, rem, with, delta, renames, digits, mod, requeue, xor, do"

Compiladores

GNAT - compilador de Ada

Un compilador de Ada muy usado es GNAT, originalmente desarrollado por la Universidad de Nueva York bajo patrocinio del DoD. Está basado en la tecnología de GCC y es software libre. Actualmente está mantenido por AdaCore (antes llamada Ada Core Technologies), empresa que ofrece soporte y servicios sobre el compilador.Existen otros compiladores comerciales.

Ejemplo

Éste es el típico "Hola Mundo" escrito en Ada:

with Ada.Text_IO;

procedure Hola_Mundo is
begin
  Ada.Text_IO.Put("¡Hola, mundo!");
end Hola_Mundo;

Enlaces externos

Véase también: