Programación en Ada/Diseño y programación de sistemas grandes
Los sistemas empotrados suelen ser grandes y complejos, formados por subsistemas relacionados, pero relativamente independientes. Algunos lenguajes ignoran el hecho de que los programas se construyen por partes, cada una de ellas compilada por separado y todas ellas enlazadas en una aplicación final. El resultado se convierte en aplicaciones monolíticas difíciles de mantener. Otros lenguajes, en contraste, parten del concepto de módulo y proporcionan mecanismos de encapsulamiento y abstracción que ayudan a programar sistemas grandes, ya que el trabajo del equipo de programación y posterior mantenimiento del sistema se ve facilitado. Uno de estos lenguajes es Ada, que está fuertemente fundamentado en la disciplina de la ingeniería del software por lo que es el lenguaje más apropiado en la programación de sistemas empotrados industriales grandes.
Ada asume la necesidad de la compilación separada y proporciona dos mecanismos para realizarla, uno ascendente y otro descendente:
- El mecanismo descendente (descomposición): consiste en dividir un sistema complejo en componentes más sencillos. Es apropiado para el desarrollo de grandes programas coherentes que, son divididos en varias subunidades que pueden compilarse por separado. Las subunidades se compilan después que la unidad de la que forman parte.
- El mecanismo ascendente (abstracción): consiste en la especificación de los aspectos esenciales de un componente, posponiendo su diseño detallado. Es apropiado para la creación de bibliotecas de programa en las que las unidades se escriben para uso general y, consecuentemente, se escriben antes que los programas que las vayan a utilizar.
El diseño de sistemas mediante módulos permite encapsular partes del sistema mediante interfaces bien definidas y permiten utilizar técnicas que facilitan el desarrollo de sistemas grandes como:
- Ocultación de información.
Las unidades de programa en Ada son las siguientes:
- Subprograma: que define los algoritmos ejecutables. Los procedimientos y las funciones son subprogramas.
- Paquete: define una colección de entidades. Los paquetes son el principal mecanismo de agrupación de Ada.
- Tarea: define una computación que puede llevarse a cabo en paralelo con otras computaciones.
- Unidades genéricas: ayudan a realizar código reutilizable. Pueden ser subprogramas o paquetes.
- Unidad protegida: puede coordinar el acceso a datos compartidos en el procesamiento paralelo. Aparece en el estándar Ada 95.
En Ada, las unidades de compilación pueden ser:
- Especificaciones de subprogramas
- Especificaciones de paquetes
- Cuerpos de subprogramas o paquetes
Algunos compiladores pueden establecer ciertos requisitos para las unidades de compilación. Por ejemplo, GNAT en su configuración predefinida exige que cada unidad esté definida en un fichero, con el nombre de la unidad y la extensión .ads para especificaciones y .adb para cuerpos. El guión "-" se ha de utilizar en sustitución del punto "." para unidades hijas y subunidades.