En aquest tema, explorarem els tipus d'accés i punteres en Ada. Els tipus d'accés són similars als punters en altres llenguatges de programació, però Ada proporciona mecanismes més segurs i controlats per treballar amb ells.
Conceptes Clau
- Tipus d'Accés: Són tipus que permeten referenciar altres objectes.
- Punteres: Són variables que emmagatzemen adreces de memòria d'altres variables.
- Seguretat de Tipus: Ada proporciona mecanismes per assegurar que els tipus d'accés es gestionin de manera segura.
Tipus d'Accés
Els tipus d'accés en Ada es defineixen per referenciar altres tipus. Aquests tipus es poden utilitzar per crear punteres a objectes d'altres tipus.
Definició de Tipus d'Accés
En aquest exemple, Integer_Ptr és un tipus d'accés que pot referenciar objectes de tipus Integer.
Creació i Ús de Punteres
procedure Access_Types_Example is
type Integer_Ptr is access Integer;
Ptr : Integer_Ptr;
X : Integer := 10;
begin
Ptr := new Integer'(X); -- Assigna l'adreça de X a Ptr
Put_Line("Valor de X: " & Integer'Image(X));
Put_Line("Valor referenciat per Ptr: " & Integer'Image(Ptr.all));
end Access_Types_Example;En aquest exemple:
Ptrés una puntera a unInteger.new Integer'(X)crea un nou objecteIntegeri retorna la seva adreça, que s'assigna aPtr.Ptr.alls'utilitza per accedir al valor referenciat perPtr.
Seguretat de Tipus
Ada proporciona mecanismes per assegurar que els tipus d'accés es gestionin de manera segura, evitant errors comuns com la referència a memòria no vàlida.
Tipus d'Accés Limitats
Els tipus d'accés limitats només poden referenciar objectes creats dinàmicament.
Tipus d'Accés No Limitats
Els tipus d'accés no limitats poden referenciar qualsevol objecte del tipus especificat.
Exercicis Pràctics
Exercici 1: Creació i Ús de Punteres
- Defineix un tipus d'accés per a
Float. - Crea una variable de tipus
Floati una puntera que referenciï aquesta variable. - Modifica el valor de la variable a través de la puntera i mostra el resultat.
Solució
procedure Float_Access_Example is
type Float_Ptr is access Float;
Ptr : Float_Ptr;
Y : Float := 5.5;
begin
Ptr := new Float'(Y);
Put_Line("Valor de Y: " & Float'Image(Y));
Ptr.all := 10.0; -- Modifica el valor de Y a través de Ptr
Put_Line("Nou valor de Y: " & Float'Image(Ptr.all));
end Float_Access_Example;Exercici 2: Seguretat de Tipus
- Defineix un tipus d'accés limitat per a
String. - Crea una variable de tipus
Stringi una puntera que referenciï aquesta variable. - Intenta referenciar un objecte no dinàmic amb la puntera i observa el resultat.
Solució
procedure String_Access_Example is
type String_Ptr is access all String;
Ptr : String_Ptr;
Str : String := "Hello, Ada!";
begin
Ptr := new String'("Hello, Ada!"); -- Correcte
-- Ptr := Str'Access; -- Error: No es pot referenciar un objecte no dinàmic
Put_Line("Valor referenciat per Ptr: " & Ptr.all);
end String_Access_Example;Conclusió
En aquest tema, hem après sobre els tipus d'accés i punteres en Ada. Hem vist com definir tipus d'accés, crear i utilitzar punteres, i assegurar la seguretat de tipus. Els exercicis pràctics ens han ajudat a reforçar aquests conceptes. En el següent mòdul, explorarem la programació modular en Ada, incloent paquets i unitats genèriques.
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
