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

  1. Tipus d'Accés: Són tipus que permeten referenciar altres objectes.
  2. Punteres: Són variables que emmagatzemen adreces de memòria d'altres variables.
  3. 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

type Integer_Ptr is access Integer;

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 un Integer.
  • new Integer'(X) crea un nou objecte Integer i retorna la seva adreça, que s'assigna a Ptr.
  • Ptr.all s'utilitza per accedir al valor referenciat per Ptr.

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.

type Integer_Ptr is access all Integer;

Tipus d'Accés No Limitats

Els tipus d'accés no limitats poden referenciar qualsevol objecte del tipus especificat.

type Integer_Ptr is access Integer;

Exercicis Pràctics

Exercici 1: Creació i Ús de Punteres

  1. Defineix un tipus d'accés per a Float.
  2. Crea una variable de tipus Float i una puntera que referenciï aquesta variable.
  3. 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

  1. Defineix un tipus d'accés limitat per a String.
  2. Crea una variable de tipus String i una puntera que referenciï aquesta variable.
  3. 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.

© Copyright 2024. Tots els drets reservats