Els paquets fills en Ada són una característica poderosa que permet l'organització jeràrquica del codi. Aquesta estructura facilita la modularitat i la reutilització del codi, permetent que els desenvolupadors divideixin grans sistemes en components més petits i manejables.

Conceptes Clau

  1. Paquet Pare i Paquet Fill:

    • Un paquet fill és un paquet que es defineix com a part d'un altre paquet, anomenat paquet pare.
    • Els paquets fills poden accedir als elements visibles del paquet pare.
  2. Visibilitat:

    • Els paquets fills tenen accés a les entitats visibles del paquet pare, però no a les entitats privades.
    • Els paquets fills poden declarar les seves pròpies entitats visibles i privades.
  3. Organització Jeràrquica:

    • Els paquets fills permeten una organització jeràrquica del codi, facilitant la gestió de projectes grans.

Estructura d'un Paquet Fill

Definició del Paquet Pare

package Parent_Package is
    -- Declaracions visibles
    procedure Parent_Procedure;
private
    -- Declaracions privades
    X : Integer := 0;
end Parent_Package;

Definició del Paquet Fill

package Parent_Package.Child_Package is
    -- Declaracions visibles del paquet fill
    procedure Child_Procedure;
end Parent_Package.Child_Package;

Implementació del Paquet Pare

package body Parent_Package is
    procedure Parent_Procedure is
    begin
        -- Implementació de Parent_Procedure
    end Parent_Procedure;
end Parent_Package;

Implementació del Paquet Fill

package body Parent_Package.Child_Package is
    procedure Child_Procedure is
    begin
        -- Implementació de Child_Procedure
        -- Pot accedir a Parent_Procedure però no a X
        Parent_Procedure;
    end Child_Procedure;
end Parent_Package.Child_Package;

Exemple Pràctic

Paquet Pare: Library

package Library is
    procedure Add_Book (Title : String);
    procedure Remove_Book (Title : String);
private
    type Book is record
        Title : String (1 .. 100);
        Author : String (1 .. 100);
    end record;
    Books : array (1 .. 100) of Book;
    Book_Count : Integer := 0;
end Library;

Paquet Fill: Library.Catalog

package Library.Catalog is
    procedure List_Books;
end Library.Catalog;

Implementació del Paquet Pare

package body Library is
    procedure Add_Book (Title : String) is
    begin
        if Book_Count < 100 then
            Book_Count := Book_Count + 1;
            Books(Book_Count).Title := Title;
        end if;
    end Add_Book;

    procedure Remove_Book (Title : String) is
    begin
        -- Implementació per eliminar un llibre
    end Remove_Book;
end Library;

Implementació del Paquet Fill

package body Library.Catalog is
    procedure List_Books is
    begin
        for I in 1 .. Book_Count loop
            Ada.Text_IO.Put_Line(Books(I).Title);
        end loop;
    end List_Books;
end Library.Catalog;

Exercicis Pràctics

Exercici 1: Crear un Paquet Fill

  1. Objectiu: Crear un paquet fill que afegeixi funcionalitat a un paquet pare existent.
  2. Descripció:
    • Defineix un paquet pare Math_Operations amb una funció Add.
    • Defineix un paquet fill Math_Operations.Advanced amb una funció Multiply.

Solució

Paquet Pare: Math_Operations

package Math_Operations is
    function Add (A, B : Integer) return Integer;
end Math_Operations;

Implementació del Paquet Pare

package body Math_Operations is
    function Add (A, B : Integer) return Integer is
    begin
        return A + B;
    end Add;
end Math_Operations;

Paquet Fill: Math_Operations.Advanced

package Math_Operations.Advanced is
    function Multiply (A, B : Integer) return Integer;
end Math_Operations.Advanced;

Implementació del Paquet Fill

package body Math_Operations.Advanced is
    function Multiply (A, B : Integer) return Integer is
    begin
        return A * B;
    end Multiply;
end Math_Operations.Advanced;

Exercici 2: Utilitzar Paquets Fills

  1. Objectiu: Utilitzar un paquet fill en un programa principal.
  2. Descripció:
    • Utilitza el paquet Math_Operations i el seu paquet fill Math_Operations.Advanced per realitzar operacions matemàtiques en un programa principal.

Solució

Programa Principal

with Ada.Text_IO; use Ada.Text_IO;
with Math_Operations;
with Math_Operations.Advanced;

procedure Main is
    A, B : Integer := 5;
    Sum, Product : Integer;
begin
    Sum := Math_Operations.Add(A, B);
    Product := Math_Operations.Advanced.Multiply(A, B);
    Put_Line("Sum: " & Integer'Image(Sum));
    Put_Line("Product: " & Integer'Image(Product));
end Main;

Conclusió

Els paquets fills en Ada permeten una organització jeràrquica i modular del codi, facilitant la gestió de projectes grans i complexos. Amb la pràctica, els programadors poden utilitzar aquesta característica per crear sistemes més estructurats i mantenibles.

© Copyright 2024. Tots els drets reservats