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
Matematicasque contenga:- Un tipo
Vectorque es un arreglo de 3 enteros. - Una constante
PIcon el valor de 3.14159. - Un procedimiento
Suma_Vectoresque tome dos vectores y devuelva su suma. - Una función
Producto_Puntoque tome dos vectores y devuelva su producto punto.
- Un tipo
-
Implementar el cuerpo del paquete
Matematicas. -
Escribir un programa que use el paquete
Matematicaspara 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
