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
Stack
com a privat i definim les operacionsPush
,Pop
iIs_Empty
. - Part privada: Implementem el tipus
Stack
com 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
,Pop
iIs_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