在计算机科学中,名称绑定是一个标识符(如函数名或变量名)与代码或数据段的关联。在最常见的情况下,静态绑定是在编译时已知的。在动态绑定中,函数映射的对象在编译时未知,只能在程序期间确定由于这个原因,它也被称为后期绑定...
在计算机科学中,名称绑定是一个标识符(如函数名或变量名)与代码或数据段的关联。在最常见的情况下,静态绑定是在编译时已知的。在动态绑定中,函数映射的对象在编译时未知,只能在程序期间确定由于这个原因,它也被称为后期绑定。虽然它提供了静态绑定所不具备的灵活性,但它也比静态绑定需要更多的性能开销。在动态绑定中,函数映射的对象在编译时是未知的,只能在程序运行时确定。动态绑定与多态性密切相关,它是面向对象编程的一部分。多态性允许以不同的方式实现相同的方法名。如果代码的编写方式不足以在编译时确定精确的方法,则必须使用动态绑定。例如,“Shape”类可能有一个名为“GetArea”的方法,因为shape有一个区域。“shape”的“Circle”子类的实现方式与“Square”子类的实现方式不同。因此,如果创建了“shape”类型的新对象,并且代码在该形状上调用了“GetArea”方法,编译器将无法知道该形状最终是圆还是正方形,因此它不知道调用哪个GetArea方法。这是动态绑定的一个例子,因为正确的GetArea方法只有在程序知道对象的形状之后,才会在运行时映射。动态绑定允许灵活地使用抽象方法,而不必知道具体的实现是什么用过在“Shape”示例中,可以通过显式使用以下逻辑编写代码以避免动态绑定:如果形状是圆,则调用circle~s GetArea方法;否则,如果形状是正方形,为squares调用特定的GetArea方法。动态绑定的好处是代码比其他方法更干净、更易于维护。在静态绑定示例中,存在代码重复,只要添加新类型的形状,代码都必须更新。缺点是性能和安全性。在静态绑定中,编译器确切知道要调用什么代码,并可以优化代码以更高效地运行。类型安全可能是一个问题,因为在某些动态绑定实现中,可以对不支持该方法的对象调用方法。例如,“GetArea”方法可能对不是形状的对象调用,因此没有“GetArea”方法,这可能会导致运行时错误。静态绑定将通过引发编译错误来阻止这种情况
-
发表于 2020-08-06 19:02
- 阅读 ( 1222 )
- 分类:电脑网络