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

  1. Definición de Paquete: Un paquete en Ada es una colección de declaraciones que pueden incluir tipos, constantes, variables, subprogramas y otros paquetes.
  2. 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.
  3. 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

  1. 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.
  2. Implementar el cuerpo del paquete Matematicas.

  3. 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.

© Copyright 2024. Todos los derechos reservados