ADA - Enlace dinámico (Late binding)

 
Vista:

Enlace dinámico (Late binding)

Publicado por rbaenama (1 intervención) el 04/04/2011 12:52:37
Hola a todos, para un proyecto piloto que estoy realizando en ADA , necesito implementar enlaces dinámicos, es decir, que durante la ejecución se determine la procedure a la que se debe llamar, esta procedure estará contenida en un programa objeto diferente al llamante. Teniendo en cuenta que este tema puede estar orientado por el uso de polimorfismo, pues los tres nombres de procedure para con el mismo nombre pero con implementación diferente para cada tipo de objeto, es decir para cada objeto tendremos un objeto independiente en el que tenemos implementadas las procedures que le corresponeden, en tiendo que esto es lo que se llama late binding, pero por mucho que busco no encuentro ejemplos de uso de esta técnica. Aguien que me pueda orientar, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de enlaces dinámicos y late binding

Publicado por Alejandro (155 intervenciones) el 03/07/2023 16:32:23
Para implementar enlaces dinámicos y utilizar late binding en ADA, puedes hacer uso de los tipos discriminantes. Los tipos discriminantes te permiten determinar en tiempo de ejecución qué implementación de un procedimiento utilizar, según el tipo de objeto en particular.

Aquí tienes un ejemplo de cómo puedes implementar esto en ADA:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package Enlaces_Dinamicos is
   type Objeto is abstract tagged null record;
   procedure Realizar_Accion(Obj: in out Objeto);
 
   type Objeto1 is new Objeto with null record;
   overriding procedure Realizar_Accion(Obj: in out Objeto1);
 
   type Objeto2 is new Objeto with null record;
   overriding procedure Realizar_Accion(Obj: in out Objeto2);
 
   type Objeto3 is new Objeto with null record;
   overriding procedure Realizar_Accion(Obj: in out Objeto3);
end Enlaces_Dinamicos;
 
with Ada.Text_IO; use Ada.Text_IO;
package body Enlaces_Dinamicos is
   procedure Realizar_Accion(Obj: in out Objeto) is null;
   procedure Realizar_Accion(Obj: in out Objeto1) is
   begin
      Put_Line("Realizando acción para Objeto1");
   end Realizar_Accion;
 
   procedure Realizar_Accion(Obj: in out Objeto2) is
   begin
      Put_Line("Realizando acción para Objeto2");
   end Realizar_Accion;
 
   procedure Realizar_Accion(Obj: in out Objeto3) is
   begin
      Put_Line("Realizando acción para Objeto3");
   end Realizar_Accion;
end Enlaces_Dinamicos;
 
with Enlaces_Dinamicos; use Enlaces_Dinamicos;
procedure Main is
   procedure Llamar_Procedure(Obj: in out Objeto'Class') is
   begin
      Realizar_Accion(Obj);
   end Llamar_Procedure;
 
   O1: Objeto1;
   O2: Objeto2;
   O3: Objeto3;
begin
   Llamar_Procedure(O1);  -- Llamada a Realizar_Accion(Objeto1)
   Llamar_Procedure(O2);  -- Llamada a Realizar_Accion(Objeto2)
   Llamar_Procedure(O3);  -- Llamada a Realizar_Accion(Objeto3)
end Main;

En este ejemplo, se define un paquete `Enlaces_Dinamicos` que contiene los tipos de objetos (Objeto1, Objeto2, Objeto3) y el procedimiento `Realizar_Accion` que será implementado de forma diferente para cada tipo de objeto.

Dentro del procedimiento `Main`, se define un procedimiento `Llamar_Procedure` que toma como parámetro un objeto del tipo base `Objeto'Class`. Esto permite que el enlace se resuelva en tiempo de ejecución y se llame a la implementación correspondiente según el tipo de objeto pasado como argumento.

Al ejecutar este código, se realizarán las acciones específicas para cada tipo de objeto, demostrando así el late binding y la capacidad de determinar en tiempo de ejecución qué implementación utilizar.

Espero que este ejemplo te oriente y te ayude a implementar enlaces dinámicos y late binding en tu proyecto piloto en ADA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar