"La Gaceta de Linux...Ħhaciendo de Linux algo un poco más divertido!"


Introducción a la Programación Ada

Por Thomas Adam

Traducción al español por Jesús Fuenlabrada
el día 10 de Febrero de 2003, para La Gaceta de Linux


Introducción

Soy un poco anticuado cuando se trata de ordenadores. Soy uno de esos que prefieren trabajar en un interface por línea de comandos antes que en un Interfaz Gráfico de Usuario. Por eso no debe sorprenderte que muchos de los lenguajes que he experimentado sean también basados en entrada/salida textual. Ada, lo mismo que Perl, Bash, Sed, Awk, C, etc no es una excepción.

A lo largo de los años, ha habido unos pocos lenguajes mencionados en La Gaceta de Linux. Ben Okopnik ha hecho dos tutoriales muy buenos sobre Perl y Bash, y otra gente ha contribuído a describir otros lenguejs, como: Smalltalk, C++, Python. A lo largo de los dos próximos meses, escribiré una serie de artículos sobre la programación en Ada.

ż Qué es Ada?

Encantado de que preguntes :-) Originalmente Ada era un lenguaje de programación desarrollado por el gobierno de Estados Unidos (Departamento de Defensa). El estándar era conocido originalmente como Ada83, pero ya está obsoleto, y ha sido recientemente "reparado" y rebautizado como Ada95. Este es ahora el estándar e implementación preferidos del lenguaje de programación Ada.

En 1983, Ada fue estandarizado por ANSI. Por eso, a través de todas las mociones oficiales en ese año se generó la primera edición. Cuatro años más tarde en 1987, ISO generó un estándar equivalente. En este momento no obstante, la idea llamada POO (Programación Orientada a Objetos) era un concepto que todavía no había sido considerado.

Ada, no obstante, no fue diseñado por un comité. El diseño original fue implementado por Jean Ichbiah, quien ganó una competición de diseño de lenguajes. Después en 1995, Tucker Taft lideró un pequeño grupo de desarrolladores y nació Ada95. Al contrario de las versiones anteriores (Ada83), la implementación de Ada95 (o Ada9X, como se conoce a veces) soportó una prueba pública de "benchmark"; donde los probadores del lenguaje facilitaron sus respuestas, y las sugerencias para hacer la capa sintáctica y lexicográfica más eficientes.

El nombre Ada se atribuye a una mujer llamada Ada Loveless (1815-1852) que es considerada como la primera programadora del mundo. Ada se usa en toda clase de situaciones, y como es un lenguaje de programación concurrente es más comúnmente usado en sistemas empotrados. Ada se ha usado en los siguientes campos:

No obstante, de ninguna manera esta lista es exhaustiva :-)

Compiladores de Ada

Al contrario que otros lenguajes de programación de script (Perl, Bash, Python, tcsh, etc), Ada al igual que C se compila en lugar de interpretar. Esto significa que la persona que va a ejecutar el programa no necesita tener el intérprete instalado para usarlo. Los programas Ada son autónomos y no necesitan tener instalados ninguna clase de paquetes Ada. [Salvo que hayas usado pragmas para comunicar con otros lenguajes, como C, en cuyo caso debes tener las librerías, como ya veremos después -- TA]

El compilador de Ada que te recomiendo se llama GNAT, que significa: GNU NYU (Universidad de New York) Ada Traductor. Es libre (licencia GNU :-), y hay mucha información sobre él. Está basado en el compilador gcc, que tiene la sintáxis de Ada incluída en él.

Está disponible desde el siguiente sitio web, que tiene un enlace al compilador GNAT:

www.gnuada.org/alt.html

Un precaución aquí. Te recomiendo descargar una versión binaria precompilada de GNAT, y usar el paquete alien si necesitas convertirla a .DEB .RPM .TGZ, etc. La razón por la que digo esto, es porque necesitarás una versión de gcc (llamada a veces gnatcc) para arrancar el compilador. Si esta es la primera vez que instalas GNAT entonces la compilación del código fuente no será posible.

Dicho esto, puedes seguir adelante e instalar el paquete una vez que lo hayas descargado. Encontrarás que la versión en RPM de GNAT tiene un único RPM: "GNAT-3.13p-7.rpm" que contendrá todo lo que necesitas para empezar a programar en este maravilloso lenguaje :-).

EID Ada

Antes de empezar nuestro primer programa en Ada, pens´ que sería buen que conozcas algunos de los EID (Entornos Integrados de Desarrollo). Estos son programas que te ayudan a programar en el lenguaje especificado ofreciendo características como:

Los dos que podría recomendarte son:-

TIA (TIny Ada) -- un EID basado en consola escrito en Ada y construído alrededor del uso de GNAT

GRASP -- un EID X11 que soporta entre otros lenguajes Ada.

Para todos los fanáticos de EMACS, hay una extensión llamada Glade que se instala como una parte de la distribución principal de GNAT. Esta es una extensión de EMACS que soporta el compilador GNAT, el resaltado sintáctico, etc. Se puede encontrar más información en el sitio web gnuada

No tienes que usar un EID para ser capaz de usar GNAT. Yo no me molesto, y en su lugar uso jed si estoy en la consola (aunque actualmente no soporta todavía resaltado sintáctico) y Nedit si estoy en X11. Este soporta el resaltado sintáctico de Ada :-)

Las Características de Ada

Ada95 ha sido grandemente mejorado sobre su predecesor Ada83. La mejora más grande ha sido la orientación a objetos, que mucha gente encontrará útil. Algunas de las características de Ada son:

Adicionalmente a lo anterior, tambié hay:

Y mucho más....

ĦHola Mundo!

Ahora es tiempo de escribir nuestro primer programa Ada. En honor a una tradición ancestral, vamos a empezar escribiendo un ejemplo de Hola Mundo. Abre un editor, y teclea lo siguiente:

  
  with text_io;
  use text_io;

  procedure hola_mundo is  

  begin

    put("ĦHola Mundo!");

  end hola_mundo;
  

Fácil, no es verdad :-). Antes de que podamos ejecutar el programa, tenemos que salvarlo. Pero tiene que ser hecho con el sufijo correcto. GNU/Linux no requiere ningún sufijo (extensión de ficheros) como una regla, pero es esencial cuando se programa en Ada y se usa el compilador GNAT. Una lista válida de extensiones es:

Cuando se escribe cualquier cosa que no sea un paquete (que nosotros no vamos a hacer durante un tiempo -- Te lo puedo asegurar) :-) debes añadir una extensión ".adb" al nombre del fichero. Esto es así para que el compilador reconozca que lo que está compilando es un programa y Ħno la especificación de un paquete!

Por eso, salva tu fichero como hola_mundo.adb

Ahora estamos preparados para compilar/construir nuestro programa. Esto tiene que ser hecho para que podamos ejecutarlo. No puedes ejecutar un programa Ada hasta que haya sido compilado y construído.

Cambia al directorio donde hayas salvado el fichero, y teclea el comando:

gnatmake hola_mundo.adb

Esto compilará -> enlazará -> construirá tu código Ada en un programa compilado.

Ahora si tecleas:

./hola_mundo

la respuesta:

ĦHola Mundo!

se muestra en la pantalla, y el programa termina.

Habrás notado cuando has tecleado el comando, que la siguiente salida se producía:

gnatgcc -c hola_mundo.adb
gnatbind -x hola_mundo.ali
gnatlink hola_mundo.ali

Puedes, si quieres, teclear cada uno de los comandos anteriores para compilar, unir y enlazar tu programa (respectivamente). Afortunadamente gnatmake provee un atajo agradable para esto :-). Si ahora miras en tu directorio, junto con el programa principal, encontrarás que GNAT ha creado también otros ficheros, llamados:

Los ficheros .ali son ficheros de enlace GNAT que contienen información acerca de la depuración y enlazado del programa principal.

Los ficheros .o son ficheros objeto que pueden ser usados en en unión con el programa de depuración: gdb.

Enseguida, salvo que planees depurar tu programa, puedes borrar esos ficheros.

Explicación: Hola Mundo

En Perl, tu puedes teclear un programa como: print("Hola"); y esta puede ser la única línea en tu programa (excluyendo la línea inicial), y se ejecutará.

En Ada no obstante, tiene que ser dicho exactamente qué paquetes usará antes de que se pueda realizar incluso el más simple de los comandos como las sentencias de presentación en la pantalla. Un paquete es una colección de funciones y procedimientos que realizan tareas específicas. Si no declaras explícitamente éstas al inicio del programa, GNAT, cuando llega a compilar tu programa, saldrá inmediatamente.

Entonces, si queremos leer o escribir E/S (Entrada/Salida) a una pantalla, esto tiene que ser establecido. Todas las funciones de E/S se encuentran dentro del paquete text_io, y las dos primeras líneas de nuestro ejemplo hola_mundo son cruciales....

 
  with text_io;
  use text_io;

La sentencia with en Ada indica que requeriremos el uso del paquete, en este caso text_io. Si se requiere más de un paquete entonces puede ser añadido, separando cada paquete por una coma (,). Cuando hayamos terminado, debemos añadir un punto y coma (;) al final de la línea, similar a Perl. La sentencia with es un comando obligatorio que debe SIEMPRE estar presente al inicio de tu programa para que funcione.

El paquete text_io, como he establecido permite funciones/procedimientos de E/S. Esto incluye escribir mensajes en la pantalla, permitiendo la entrada del usuario, etc. Es un paquete que es usado virtualmente en cada programa que escribas en Ada.

La sentencia use DEBE ser siempre usada después de la sentencia with. Permite hacer referencias sin cualificar a procedimientos y funciones de otros paquetes. Sin el uso de esta sentencia, cada llamada a un procedimiento o función debe tener el nombre del paquete al que pertenece, seguido por un punto precediéndolo. Por ejemplo, debajo está como el programa hola_mundo quedaría sin la sentencia use.

with text_io;
  
  procedure hola_mundo is  

  begin

    text_io.put("ĦHola Mundo!"); 

  end hola_mundo;
  

Puedes ver como esto ha incrementado la cantidad de información que tenemos que teclear, sin el uso de la sentencia use. Cuando se usa más de un paquete que puede tener los mismos nombres de procedimientos o funciones, el compilador puede usualmente decidir a qué paquete te estás refiriendo, basado en los parámetros que se le han pasado.

La tercera línea:

procedure hola_mundo is  

declara que estamos escribiendo un nuevo procedimiento con el nombre hola_mundo. La palabra de la sentecia is nos dice que estamos a punto de empezar la sección declarativa del procedimiento, más sobre esto después.

La palabra clave

begin

nos dice que vamos a empezar la parte ejecutable del procedimiento -- es decir, donde todas las sentencias que aparezcan se ejecutarán, como es el caso de:

put("ĦHola Mundo!")

que le dice al procedimiento put del paquete text_io que imprima el mensaje ĦHola Mundo! en la pantalla.

La última línea:

end hola_mundo;

simplemente termina el procedimiento.

En resumen, la estructura básica para un programa Ada se parece a lo siguiente:

with text_io;
use text_io;

procedure nombre_de_programa is 

      [ parte declarativa aquí  ]

begin

      [ sección ejecutable aquí ]  

end nombre_de_programa;

También en el paquete text_io están comandos como:


put
put_line
get
get_line
new_line

Y muchos otros...

put hace lo que ya hemos visto.
put_line hace lo mismo que put, excepto que empieza una línea nueva.
new_line es un comando por si mismo, que empieza una nueva línea. Si lo usas, asegurate que pones un punto y coma al final, como:

new_line;

De hecho, la afirmación acerca del punto y coma (;) afecta a cada comando que hagas en Ada.

El mes que viene, veremos:

Ejercicios

Bien, esto es todo por este mes. Lo siento si ha parecido que no he explicado suficientes cosas esta vez, pero intentar explicar algo más en este punto, creo que es contraproducente. Por eso, te voy a dejar con unos pocos ejercicios para que los intentes.....

1. Escribe tu nombre en la pantalla

2. Escribe tu dirección en la pantalla, usando solamente put y new_line

3. Repite el ejercicio 2, esta vez con put_line

Si me los envías, Ħlos imprimiré en mi siguiente parte de este artículo!

Como con todos mis artículos, si tienes cualquier pregunta o sugerencia, ĦĦenvíame unas líneas!!


with text_io, ada.integer_text_io;
use text_io, ada.integer_text_io;

procedure programacion_feliz is

numero_bucle : integer :=0;

begin

  while numero_bucle /= 10 loop
    numero_bucle := numero_bucle + 1;
    put("Programación Feliz en Ada");
    new_line;
  end loop;

end programacion_feliz; 

Thomas Adam

Mi nombre es Thomas Adam. Tengo 18 años, y actualmente estoy estudiando mi examen de acceso a la universidad. Vivo en una pequeña granja, en el condado de Dorset en Inglaterra. Soy un gran entusiasta de Linux, y ayudo con los temas de los proxys Linux mientras estoy en la escuela. He estado usando Linux desde hace seis años. Cuando no estoy usando Linux, toco el piano, y me divierto caminando y montando en bicicleta.


Copyright © 2002, Thomas Adam.
Licencia de copiado http://www.linuxgazette.com/copying.html
Publicado en el Número 81 de Linux Gazette, Agosto 2002