Els paquets en Ada són una característica poderosa que permet l'organització i la modularització del codi. Els paquets ajuden a agrupar subprogrames, tipus de dades i altres entitats relacionades en una unitat lògica, facilitant la gestió i la reutilització del codi.
Conceptes Clau
- Declaració de Paquets: Un paquet es declara amb la paraula clau
package. - Especificació i Cos del Paquet: Un paquet es divideix en dues parts: l'especificació (interface) i el cos (implementació).
- Visibilitat: Els elements declarats en l'especificació del paquet són visibles per altres unitats que utilitzen el paquet.
- Reutilització: Els paquets permeten la reutilització del codi en diferents parts del programa.
Estructura d'un Paquet
Especificació del Paquet
L'especificació del paquet defineix la interfície pública del paquet, és a dir, els elements que seran visibles i accessibles des de fora del paquet.
package My_Package is
-- Declaració de tipus de dades
type My_Type is record
Field1 : Integer;
Field2 : Float;
end record;
-- Declaració de constants
My_Constant : constant Integer := 10;
-- Declaració de subprogrames
procedure My_Procedure(X : in Integer);
function My_Function(Y : in Float) return Float;
end My_Package;Cos del Paquet
El cos del paquet conté la implementació dels subprogrames declarats en l'especificació.
package body My_Package is
procedure My_Procedure(X : in Integer) is
begin
-- Implementació de My_Procedure
Put_Line("Valor de X: " & Integer'Image(X));
end My_Procedure;
function My_Function(Y : in Float) return Float is
begin
-- Implementació de My_Function
return Y * 2.0;
end My_Function;
end My_Package;Exemple Pràctic
Especificació del Paquet
package Math_Operations is
-- Declaració de constants
Pi : constant Float := 3.14159;
-- Declaració de subprogrames
function Add(X, Y : Float) return Float;
function Subtract(X, Y : Float) return Float;
function Multiply(X, Y : Float) return Float;
function Divide(X, Y : Float) return Float;
end Math_Operations;Cos del Paquet
package body Math_Operations is
function Add(X, Y : Float) return Float is
begin
return X + Y;
end Add;
function Subtract(X, Y : Float) return Float is
begin
return X - Y;
end Subtract;
function Multiply(X, Y : Float) return Float is
begin
return X * Y;
end Multiply;
function Divide(X, Y : Float) return Float is
begin
if Y = 0.0 then
raise Constraint_Error with "Divisió per zero";
end if;
return X / Y;
end Divide;
end Math_Operations;Utilització d'un Paquet
Per utilitzar un paquet en un altre programa o unitat, es fa servir la clàusula with seguida de la clàusula use per evitar haver de prefixar els noms dels elements del paquet.
with Ada.Text_IO; use Ada.Text_IO;
with Math_Operations; use Math_Operations;
procedure Main is
A, B, Result : Float;
begin
A := 10.0;
B := 5.0;
Result := Add(A, B);
Put_Line("Addició: " & Float'Image(Result));
Result := Subtract(A, B);
Put_Line("Subtracció: " & Float'Image(Result));
Result := Multiply(A, B);
Put_Line("Multiplicació: " & Float'Image(Result));
Result := Divide(A, B);
Put_Line("Divisió: " & Float'Image(Result));
end Main;Exercicis Pràctics
Exercici 1
Descripció: Crea un paquet anomenat String_Operations que contingui subprogrames per a les següents operacions amb cadenes:
- Concatenació de dues cadenes.
- Comprovació si una cadena és un palíndrom.
Solució:
Especificació del Paquet
package String_Operations is
function Concatenate(S1, S2 : String) return String;
function Is_Palindrome(S : String) return Boolean;
end String_Operations;Cos del Paquet
package body String_Operations is
function Concatenate(S1, S2 : String) return String is
begin
return S1 & S2;
end Concatenate;
function Is_Palindrome(S : String) return Boolean is
Reverse_S : String := S'Range => S(S'Last .. S'First);
begin
return S = Reverse_S;
end Is_Palindrome;
end String_Operations;Exercici 2
Descripció: Utilitza el paquet String_Operations en un programa que llegeixi dues cadenes de l'usuari, les concateni i comprovi si la cadena resultant és un palíndrom.
Solució:
with Ada.Text_IO; use Ada.Text_IO;
with String_Operations; use String_Operations;
procedure Main is
S1, S2, Result : String(1 .. 100);
Len1, Len2 : Natural;
begin
Put("Introdueix la primera cadena: ");
Get_Line(S1, Len1);
S1 := S1(1 .. Len1);
Put("Introdueix la segona cadena: ");
Get_Line(S2, Len2);
S2 := S2(1 .. Len2);
Result := Concatenate(S1, S2);
Put_Line("Cadena concatenada: " & Result);
if Is_Palindrome(Result) then
Put_Line("La cadena resultant és un palíndrom.");
else
Put_Line("La cadena resultant no és un palíndrom.");
end if;
end Main;Resum
En aquesta secció, hem après sobre els paquets en Ada, incloent la seva estructura, com es declaren i com es poden utilitzar per modularitzar i organitzar el codi. També hem vist exemples pràctics i exercicis per reforçar els conceptes apresos. Els paquets són una eina essencial per a la programació en Ada, ja que permeten una millor gestió del codi i la seva reutilització.
Curs de Programació en Ada
Mòdul 1: Introducció a Ada
Mòdul 2: Conceptes Bàsics
- Variables i Tipus de Dades
- Operadors i Expressions
- Estructures de Control
- Bucles en Ada
- Subprogrames: Procediments i Funcions
Mòdul 3: Tipus de Dades Avançats
Mòdul 4: Programació Modular
Mòdul 5: Concurrència i Programació en Temps Real
Mòdul 6: Temes Avançats
Mòdul 7: Millors Pràctiques i Optimització
- Estil de Codi i Millors Pràctiques
- Depuració i Proves
- Optimització del Rendiment
- Consideracions de Seguretat
