什么是动态绑定?(dynamic binding?)

在计算机科学中,名称绑定是一个标识符(如函数或变量名)与一段代码或数据的关联。在最常见的场景(静态绑定)中,这种映射在编译时已知。在动态绑定中,函数映射的对象在编译时是未知的,只能在程序运行时确定。因此,它也称为后期绑定。尽管它提供了静态绑定所不具备的灵活性,但它也比静态绑定带来了更多的性能成本。...

在计算机科学中,名称绑定是一个标识符(如函数或变量名)与一段代码或数据的关联。在最常见的场景(静态绑定)中,这种映射在编译时已知。在动态绑定中,函数映射的对象在编译时是未知的,只能在程序运行时确定。因此,它也称为后期绑定。尽管它提供了静态绑定所不具备的灵活性,但它也比静态绑定带来了更多的性能成本。

In dynamic binding, the object mapped by a function is not known at compile time and can be determined only during program run time.

动态绑定与多态性密切相关,多态性是面向对象编程的一部分。多态性允许以不同的方式实现相同的方法名。如果代码的编写方式不是在编译时无法确定精确的方法,那么必须使用动态绑定。

例如,“Shape”类可能有一个名为“GetArea”的方法,因为每个形状都有一个区域。然而,“Shape”的“Circle”子类实现“GetArea”的方式与“Square”子类实现“GetArea”的方式不同。因此,如果创建了一个类型为“Shape”的新对象,并且如果代码对该形状调用方法“GetArea”,编译器将无法知道该形状最终是圆还是正方形,因此它将不知道调用哪个GetArea方法。这是一个动态绑定的示例,因为只有在程序知道对象的形状之后,才会在运行时映射正确的GetArea方法。

动态绑定允许灵活地使用抽象方法,而不知道将使用哪个具体实现。在“Shape”示例中,可以通过显式使用以下逻辑编写代码以避免动态绑定:如果形状是圆,则调用圆的GetArea方法;否则,如果形状是正方形,则为正方形调用特定的GetArea方法。动态绑定的好处是代码比其他绑定更干净、更易于维护。在静态绑定示例中,存在代码重复,并且在添加新类型的形状时必须随时更新代码。

缺点是性能和安全性。在静态绑定中,编译器确切地知道调用什么代码,并且可以优化代码以更高效地运行。类型安全可能是一个问题,因为在动态绑定的某些实现中,可以对不支持该方法的对象调用方法。例如,可能会对不是形状的对象调用“GetArea”方法,因此没有“GetArea”方法,这可能会导致运行时错误。静态绑定会引发编译错误,从而防止出现这种情况。

  • 发表于 2021-12-13 14:32
  • 阅读 ( 135 )
  • 分类:互联网

你可能感兴趣的文章

早期的(early)和后期装订(late binding)的区别

...方法使用后期绑定进行绑定。 目录 1.概述和主要区别 2. 什么是早期绑定 3. 什么是延迟绑定 4. 早期和晚期绑定的相似性 5. 并排比较-早期与晚期以表格形式装订 6. 摘要 什么是早期绑定(early binding)? 在早期绑定中,类信息用于解...

  • 发布于 2020-10-19 04:05
  • 阅读 ( 383 )

活动站点(active site)和结合位点(binding site)的区别

...让大分子发生催化化学反应。 目录 1. 概述和主要区别 2. 什么是活动站点 3. 什么是绑定站点 4. 并列比较-活动位点与结合位点的表格形式 5. 摘要 什么是活动站点(active site)? 活性中心是酶上化学反应底物结合以进行催化化学反...

  • 发布于 2020-10-22 05:58
  • 阅读 ( 350 )

动态(dynamic)和运动粘度(kinematic viscosity)的区别

...度的方法,而运动粘度是流体的动态粘度除以其密度。 什么是动态粘度(dynamic viscosity)? Whenever a fluid flows against a surface, the different layers of fluid exert frictional forces between each other, causing them to flow at different speeds. A force needs to be appli...

  • 发布于 2021-06-27 09:21
  • 阅读 ( 320 )

静止的(static)和动态哈希(dynamic hashing)的区别

...型的散列称为静态散列和动态散列。 覆盖的关键领域 1.什么是静态哈希-定义,功能2.什么是动态哈希-定义,功能3.静态哈希和动态哈希的区别是什么-关键区别的比较 关键术语 哈希、静态哈希、动态哈希 什么是静态哈希(static h...

  • 发布于 2021-07-01 07:30
  • 阅读 ( 333 )

动态绑定(dynamic binding)和消息传递(message passing)的区别

...绑定和消息传递就是这样两个特性。 覆盖的关键领域 1.什么是动态绑定-定义,功能2.什么是消息传递-定义,功能3.动态绑定和消息传递的区别是什么-关键区别的比较 关键术语 动态绑定、后期绑定、消息传递、面向对象 什么是...

  • 发布于 2021-07-01 08:23
  • 阅读 ( 353 )

贪心法(greedy method)和动态规划(dynamic programming)的区别

...种算法。两者都用于解决优化问题。 覆盖的关键领域 1.什么是贪婪方法-定义,功能2.什么是动态规划-定义,功能3.贪婪方法和动态规划的区别是什么-关键区别的比较 关键术语 贪婪法,动态规划 什么是贪心法(greedy method)? 贪...

  • 发布于 2021-07-01 11:12
  • 阅读 ( 450 )

静止的(static)和动态路由(dynamic routing)的区别

...个称为路由表的表来维护路径信息。 覆盖的关键领域 1.什么是静态路由-定义,功能2.什么是动态路由-定义,功能3.静态路由和动态路由的区别-关键区别的比较 关键术语 动态路由,非自适应路由,路由器,静态路由,网络 什么...

  • 发布于 2021-07-01 17:16
  • 阅读 ( 653 )

静止的(static)和java中的动态多态性(dynamic polymorphism in java)的区别

...程序员可以使用Java实现多态性概念。 覆盖的关键领域 1.什么是Java中的静态多态性-定义,功能2.什么是Java中的动态多态性-定义,功能3.Java中静态多态性和动态多态性的区别-主要差异的比较 关键术语 动态绑定,动态多态性,早...

  • 发布于 2021-07-01 21:17
  • 阅读 ( 306 )

静止的(static)和动态链接(dynamic linking)的区别

...静态链接和动态链接两种链接机制。 覆盖的关键领域 1.什么是静态链接-定义,功能2.什么是动态链接-定义,功能3.静态链接和动态链接的区别-关键区别的比较 关键术语 动态链接,库,链接器,静态链接 什么是静态链接(static l...

  • 发布于 2021-07-02 00:20
  • 阅读 ( 724 )

静止的(static)和动态绑定(dynamic binding)的区别

...动态绑定之间的区别之前,让我们先了解一下绑定到底是什么。绑定是指在方法调用和方法定义之间创建的链接。它让系统知道哪些代码应该以什么方式执行。如果任何方法调用都没有方法定义,则会导致系统显示错误。静态和...

  • 发布于 2021-07-12 13:01
  • 阅读 ( 326 )
mg663218
mg663218

0 篇文章

相关推荐