En Ada, los paquetes son una herramienta fundamental para la organización y modularización del código. Permiten agrupar tipos, subprogramas y otros elementos relacionados en una unidad cohesiva, facilitando la reutilización y el mantenimiento del código. En esta sección, aprenderemos sobre la estructura y el uso de los paquetes en Ada.
Conceptos Clave
- Definición de Paquete: Un paquete en Ada es una colección de declaraciones que pueden incluir tipos, constantes, variables, subprogramas y otros paquetes.
- Especificación y Cuerpo del Paquete: Un paquete se divide en dos partes: la especificación (spec) y el cuerpo (body). La especificación declara la interfaz pública del paquete, mientras que el cuerpo contiene la implementación.
- Visibilidad: Los elementos declarados en la especificación del paquete son visibles para cualquier unidad que use el paquete. Los elementos en el cuerpo del paquete son privados y solo accesibles dentro del paquete.
Estructura de un Paquete
Especificación del Paquete
La especificación del paquete define la interfaz pública del paquete. Aquí es donde se declaran los tipos, constantes, variables y subprogramas que serán accesibles desde fuera del paquete.
package Mi_Paquete is -- Declaración de tipos type Mi_Tipo is record Campo1 : Integer; Campo2 : Float; end record; -- Declaración de constantes Constante : constant Integer := 10; -- Declaración de variables Variable : Integer; -- Declaración de subprogramas procedure Mi_Procedimiento (X : in Integer); function Mi_Funcion (Y : in Float) return Integer; end Mi_Paquete;
Cuerpo del Paquete
El cuerpo del paquete contiene la implementación de los subprogramas declarados en la especificación. También puede contener declaraciones privadas que no son accesibles desde fuera del paquete.
package body Mi_Paquete is -- Implementación del procedimiento procedure Mi_Procedimiento (X : in Integer) is begin -- Código del procedimiento Variable := X + Constante; end Mi_Procedimiento; -- Implementación de la función function Mi_Funcion (Y : in Float) return Integer is begin -- Código de la función return Integer(Y) + Constante; end Mi_Funcion; end Mi_Paquete;
Uso de Paquetes
Para utilizar un paquete en otro programa o paquete, se debe incluir una cláusula with
seguida de una cláusula use
si se desea evitar la calificación completa de los nombres.
with Mi_Paquete; use Mi_Paquete; procedure Uso_De_Paquete is -- Uso de tipos y subprogramas del paquete Mi_Variable : Mi_Tipo; begin Mi_Procedimiento(5); Put_Line(Integer'Image(Mi_Funcion(3.14))); end Uso_De_Paquete;
Ejercicio Práctico
Ejercicio 1: Crear y Usar un Paquete
-
Crear un paquete llamado
Matematicas
que contenga:- Un tipo
Vector
que es un arreglo de 3 enteros. - Una constante
PI
con el valor de 3.14159. - Un procedimiento
Suma_Vectores
que tome dos vectores y devuelva su suma. - Una función
Producto_Punto
que tome dos vectores y devuelva su producto punto.
- Un tipo
-
Implementar el cuerpo del paquete
Matematicas
. -
Escribir un programa que use el paquete
Matematicas
para sumar dos vectores y calcular su producto punto.
Solución
Especificación del Paquete
package Matematicas is type Vector is array (1 .. 3) of Integer; PI : constant Float := 3.14159; procedure Suma_Vectores (A, B : in Vector; Result : out Vector); function Producto_Punto (A, B : in Vector) return Integer; end Matematicas;
Cuerpo del Paquete
package body Matematicas is procedure Suma_Vectores (A, B : in Vector; Result : out Vector) is begin for I in A'Range loop Result(I) := A(I) + B(I); end loop; end Suma_Vectores; function Producto_Punto (A, B : in Vector) return Integer is Sum : Integer := 0; begin for I in A'Range loop Sum := Sum + A(I) * B(I); end loop; return Sum; end Producto_Punto; end Matematicas;
Programa de Uso
with Matematicas; use Matematicas; procedure Uso_Matematicas is Vec1 : Vector := (1, 2, 3); Vec2 : Vector := (4, 5, 6); Resultado : Vector; Producto : Integer; begin Suma_Vectores(Vec1, Vec2, Resultado); Producto := Producto_Punto(Vec1, Vec2); -- Imprimir resultados Put_Line("Suma de Vectores: " & Integer'Image(Resultado(1)) & ", " & Integer'Image(Resultado(2)) & ", " & Integer'Image(Resultado(3))); Put_Line("Producto Punto: " & Integer'Image(Producto)); end Uso_Matematicas;
Conclusión
En esta sección, hemos aprendido sobre la estructura y el uso de los paquetes en Ada. Los paquetes son esenciales para la organización y modularización del código, permitiendo una mejor gestión y reutilización de los componentes del programa. Hemos visto cómo definir la especificación y el cuerpo de un paquete, así como cómo utilizar un paquete en otro programa. Con estos conocimientos, estamos preparados para explorar conceptos más avanzados de programación modular en Ada.
Curso de Programación en Ada
Módulo 1: Introducción a Ada
Módulo 2: Conceptos Básicos
- Variables y Tipos de Datos
- Operadores y Expresiones
- Estructuras de Control
- Bucles en Ada
- Subprogramas: Procedimientos y Funciones
Módulo 3: Tipos de Datos Avanzados
Módulo 4: Programación Modular
Módulo 5: Concurrencia y Programación en Tiempo Real
Módulo 6: Temas Avanzados
Módulo 7: Mejores Prácticas y Optimización
- Estilo de Código y Mejores Prácticas
- Depuración y Pruebas
- Optimización del Rendimiento
- Consideraciones de Seguridad