В чем разница между ранним и поздним связыванием?

В компилируемых языках разница dynamicbinding разительна.

Ява:

//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);

В первом примере bindings компилятор может делать все, что binding угодно, во время компиляции. Во-вторых, вы static-binding просто должны надеяться, что dynamic-binding тот, кто использует метод, делает binding это ответственно. (Конечно, более dynamicbinding новые JVM поддерживают структуру binding Class klass, что может значительно снизить dynamic-binding этот риск.)

Еще одно преимущество binding заключается в том, что IDE bindings могут напрямую ссылаться bindings на определение класса, поскольку dynamic-binding оно объявлено прямо в методе. Вызов static-binding create_something(Foo) может dynamic-binding быть очень далек от определения bindings метода, и если вы смотрите static-binding на определение метода, было binding бы неплохо увидеть его реализацию.

Основное bindings преимущество позднего связывания static-binding заключается в том, что оно bindings упрощает такие вещи, как static-binding инверсия управления, а также binding некоторые другие способы bindings использования полиморфизма dynamicbinding и утиного ввода (если ваш dynamic-binding язык поддерживает такие вещи).

binding

dynamic-binding

static-binding

2022-10-21T17:36:50+00:00