Pregunta

¿Cuál es la diferencia entre principios y finales de unión?

¿Fue útil?

Solución

La respuesta corta es que los primeros (o estática) de la unión se refiere a la compilación de unión y tarde (o dinámica) de la unión se refiere al tiempo de ejecución de unión (por ejemplo, cuando se utiliza la reflexión).

Otros consejos

En los lenguajes compilados, la diferencia es enorme.

Java:

//early binding:
public create_a_foo(*args) {
 return new Foo(args)
}
my_foo = create_a_foo();

//late binding:
public create_something(Class klass, *args) {
  klass.new_instance(args)
}
my_foo = create_something(Foo);

En el primer ejemplo, el compilador puede hacer todo tipo de cosas ordenadas en tiempo de compilación.En el segundo, sólo tiene la esperanza de que quien utiliza el método no es tan responsable.(Por supuesto, los nuevos Jvm de apoyo a la Class<? extends Foo> klass la estructura, que puede reducir considerablemente este riesgo.)

Otro beneficio es que los IDEs puede hotlink a la definición de la clase, ya que es declarado justo allí en el método.La llamada a create_something(Foo) podría ser muy lejos de la definición de método, y si usted está buscando en la definición de método, que sería bueno para ver la aplicación.

La principal ventaja de enlace es que hace cosas como la inversión de un control más fácil, así como algunos otros usos de polimorfismo y escribiendo duck (si tu idioma es compatible con tales cosas).

Tomado directamente de http://word.mvps.org/fAQs/InterDev/EarlyvsLateBinding.htm

Hay dos formas de utilizar la Automatización (o Automatización OLE) a programación del control de la aplicación.

El enlace utiliza CreateObject para crear la instancia y de la objeto de la aplicación, que usted puede controlar.Por ejemplo, para crear una nueva instancia de Excel mediante el enlace:

 Dim oXL As Object
 Set oXL = CreateObject("Excel.Application")

Por otro lado, para manipular a una instancia existente de Excel (si Excel ya está abierto) utilizaría GetObject (independientemente de si estás usando tarde o temprano el enlace):

 Dim oXL As Object
 Set oXL = GetObject(, "Excel.Application")

Utilizar el enlace, primero es necesario establecer una referencia en su proyecto para la aplicación que desea manipular.En el Editor de VB cualquier aplicación de Office, o en VB sí mismo, puede hacer esto mediante la selección de Herramientas de + las Referencias, y la selección de la aplicación que desea desde la lista (por ejemplo,"Microsoft Excel 8.0 Biblioteca De Objetos").

Para crear una nueva instancia de Excel utilizando el enlace:

 Dim oXL As Excel.Application
 Set oXL = New Excel.Application

En cualquier caso, por cierto, puede intentar en primer lugar obtener una existente instancia de Excel, y si devuelve un error, puede crear una nueva instancia en su controlador de error.

Similar, pero más detallado de la respuesta de Herbert Schildt C++ libro:-

El enlace se refiere a los eventos que ocurren en tiempo de compilación.En esencia, el enlace se produce cuando toda la información que necesita para llamar a una función es conocido en tiempo de compilación.(Dicho de otra manera, los primeros vinculante significa que un objeto y una llamada de función están obligados durante la compilación.) Ejemplos de enlace incluyen la función normal de llamadas (incluyendo funciones de biblioteca estándar), sobrecarga de llamadas a funciones, operadores sobrecargados.La principal ventaja de enlace es la eficiencia.Porque toda la información necesaria para llamar a una función se determina en tiempo de compilación, estos tipos de llamadas de función son muy rápidos.

El opuesto de enlace es el enlace.El enlace se refiere a las llamadas de función que no se resuelven hasta el tiempo de ejecución.Las funciones virtuales son utilizados para lograr el enlace.Como usted sabe, cuando el acceso es a través de un puntero base o de referencia, la función virtual llamado en realidad está determinada por el tipo de objeto al que apunta el puntero.Porque en la mayoría de los casos no se puede determinar en tiempo de compilación, el objeto y la función no están vinculados hasta el tiempo de ejecución.La principal ventaja para el enlace es el de la flexibilidad.A diferencia de principios de enlace, el enlace le permite crear programas que pueden responder a los eventos que ocurren mientras el programa se ejecuta sin necesidad de crear un gran cantidad de "contingencia código." Tenga en cuenta que, debido a una llamada de función no se ha resuelto hasta el tiempo de ejecución, el enlace puede hacer un poco más lentos los tiempos de ejecución.Sin embargo hoy en día, equipos rápidos han reducido considerablemente los tiempos de ejecución relacionados con el enlace.

En lenguajes interpretados, la diferencia es un poco más sutil.

Ruby:

# early binding:
def create_a_foo(*args)
  Foo.new(*args)
end
my_foo = create_a_foo

# late binding:
def create_something(klass, *args)
  klass.new(*args)
end
my_foo = create_something(Foo)

Porque Ruby es (en general) no se compila, no hay un compilador para hacer el ingenioso frente a las cosas.El crecimiento de JRuby significa que más de Ruby es compilado en estos días, aunque, por lo que es actuar más como Java, anteriormente.

El problema con IDEs sigue en pie:una plataforma como la de Eclipse puede buscar definiciones de clase si el disco duro de código, pero no si los dejas a la persona que llama.

La inversión de control no es muy popular en Ruby, probablemente a causa de su extrema de tiempo de ejecución de la flexibilidad, pero Rieles hace un gran uso de enlace para reducir la cantidad de la configuración necesaria para conseguir su aplicación.

public class child()
{    public void method1()
     {     System.out.println("child1");
     }
    public void method2()
     {     System.out.println("child2");
     }

}
public class teenager extends child()
{    public void method3()
     {      System.out.println("teenager3");
     }
}
public class adult extends teenager()
{     
    public void method1()
    {    System.out.println("adult1);
         super.method1();
     }
}


//In java
public static void main(String []args)
{    ((teenager)var).method1();
}

Esto va a imprimir

adult1
child1

En tiempo de compilación el compilador tendrá acceso a todos los métodos en el niño y adolescente pero en el enlace en tiempo de ejecución), se revisará para los métodos que se reemplaza en tiempo de ejecución.

Por lo tanto method1(de niño-enlace) será reemplazado por el method1 de los adultos en tiempo de ejecución(enlace) A continuación, se va a implementar method1 desde niño ya que no hay method1 en method1 en el adolescente.

Tenga en cuenta que si el niño no tiene un method1 a continuación el código en la principal no compilar.

El tiempo de compilación polimorfismo también se conoce como la sobrecarga o el enlace estático o de unión cuando tenemos el mismo nombre de método con diferentes comportamientos.Mediante la aplicación de los múltiples prototipo del mismo método y se produce un comportamiento diferente en ella.El enlace se refiere la primera compilación del programa .Pero a finales de enlace de objeto en tiempo de ejecución se produce en el programa.También se conoce como Dinámica de unión o reemplazar o polimorfismo en tiempo de ejecución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top