En aquest tema, explorarem els tipus privats i els paquets privats en Ada. Aquests conceptes són fonamentals per a la programació modular i l'encapsulació, permetent als desenvolupadors crear codi més segur i mantenible.
Objectius
- Entendre què són els tipus privats i com s'utilitzen.
- Aprendre a definir i utilitzar paquets privats.
- Veure exemples pràctics de tipus i paquets privats.
- Realitzar exercicis per reforçar els conceptes apresos.
Tipus Privats
Definició
Un tipus privat en Ada és un tipus de dades que es declara en la part visible d'un paquet, però la seva implementació es manté oculta en la part privada del paquet. Això permet encapsular la implementació i exposar només la interfície necessària.
Exemple de Tipus Privat
package Stack_Package is
type Stack is private;
procedure Push(S: in out Stack; Element: Integer);
procedure Pop(S: in out Stack; Element: out Integer);
function Is_Empty(S: Stack) return Boolean;
private
type Stack is
record
Elements: array (1..100) of Integer;
Top: Integer := 0;
end record;
end Stack_Package;Explicació
- Part visible: Declarem el tipus
Stackcom a privat i definim les operacionsPush,PopiIs_Empty. - Part privada: Implementem el tipus
Stackcom un registre amb un array d'elements i un índexTop.
Avantatges dels Tipus Privats
- Encapsulació: La implementació del tipus està oculta, permetent canvis interns sense afectar el codi que utilitza el tipus.
- Seguretat: Els usuaris del paquet no poden accedir directament als detalls interns del tipus.
Paquets Privats
Definició
Un paquet privat en Ada és un paquet que conté una part visible i una part privada. La part visible defineix la interfície pública, mentre que la part privada conté la implementació detallada.
Exemple de Paquet Privat
package body Stack_Package is
procedure Push(S: in out Stack; Element: Integer) is
begin
if S.Top < 100 then
S.Top := S.Top + 1;
S.Elements(S.Top) := Element;
else
raise Constraint_Error with "Stack Overflow";
end if;
end Push;
procedure Pop(S: in out Stack; Element: out Integer) is
begin
if S.Top > 0 then
Element := S.Elements(S.Top);
S.Top := S.Top - 1;
else
raise Constraint_Error with "Stack Underflow";
end if;
end Pop;
function Is_Empty(S: Stack) return Boolean is
begin
return S.Top = 0;
end Is_Empty;
end Stack_Package;Explicació
- Part visible: Defineix la interfície pública del paquet.
- Part privada: Conté la implementació de les operacions
Push,PopiIs_Empty.
Exercicis Pràctics
Exercici 1: Crear un Tipus Privat
Crea un paquet que defineixi un tipus privat Queue amb operacions per afegir elements (Enqueue), eliminar elements (Dequeue) i comprovar si la cua està buida (Is_Empty).
Solució
package Queue_Package is
type Queue is private;
procedure Enqueue(Q: in out Queue; Element: Integer);
procedure Dequeue(Q: in out Queue; Element: out Integer);
function Is_Empty(Q: Queue) return Boolean;
private
type Queue is
record
Elements: array (1..100) of Integer;
Front: Integer := 1;
Rear: Integer := 0;
end record;
end Queue_Package;
package body Queue_Package is
procedure Enqueue(Q: in out Queue; Element: Integer) is
begin
if Q.Rear < 100 then
Q.Rear := Q.Rear + 1;
Q.Elements(Q.Rear) := Element;
else
raise Constraint_Error with "Queue Overflow";
end if;
end Enqueue;
procedure Dequeue(Q: in out Queue; Element: out Integer) is
begin
if Q.Front <= Q.Rear then
Element := Q.Elements(Q.Front);
Q.Front := Q.Front + 1;
else
raise Constraint_Error with "Queue Underflow";
end if;
end Dequeue;
function Is_Empty(Q: Queue) return Boolean is
begin
return Q.Front > Q.Rear;
end Is_Empty;
end Queue_Package;Exercici 2: Utilitzar un Tipus Privat
Utilitza el paquet Queue_Package per crear una cua, afegir elements, eliminar elements i comprovar si la cua està buida.
Solució
with Queue_Package; use Queue_Package;
procedure Test_Queue is
Q: Queue;
Element: Integer;
begin
Enqueue(Q, 10);
Enqueue(Q, 20);
Enqueue(Q, 30);
while not Is_Empty(Q) loop
Dequeue(Q, Element);
Put_Line("Element: " & Integer'Image(Element));
end loop;
end Test_Queue;Resum
En aquest tema, hem après sobre els tipus privats i els paquets privats en Ada. Hem vist com aquests conceptes ajuden a encapsular la implementació i a crear codi més segur i mantenible. També hem realitzat exercicis pràctics per reforçar els conceptes apresos. En el següent tema, explorarem les unitats genèriques en Ada.
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
