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 objecteInteger
i retorna la seva adreça, que s'assigna aPtr
.Ptr.all
s'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
Float
i 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
String
i 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