内容提要
后期绑定是一种保持灵活性和安全性的想法,可以在运行时更改地址和寻址。它还可以延迟绑定对象和方法,实现替代方案和透明度。需要注意不要产生有害的依赖关系。
延伸解读
后期绑定的层次:从硬件到软件
文章指出,后期绑定不仅存在于软件层面,硬件中的索引寄存器、内存管理单元(MMU)和间接寻址都体现了后期绑定思想。软件本身可视为计算机行为的后期绑定,而解释器则延迟绑定计算机语义。这种跨层次的视角表明,后期绑定是计算机系统的一种普遍策略,用于在保持灵活性的同时获得所需功能。
封装与反射:实现灵活性的机制
封装的对象延迟绑定方法,允许仅通过“什么”(意义)来使用,而隐藏“怎么做”(实现),从而更容易实现替代方案和透明度。在Lisp或Smalltalk中,“怎么做”本身也可后期绑定,这支持反射——程序分析系统其他部分如何设置。良好的反射允许在低级别安全高效地进行务实操作,如《元对象协议的艺术》所述。
战略优势:保留自由度与优化权衡
从战略角度看,尽可能保留后期绑定是明智的,因为动态去除自由度容易,而从早期绑定转向灵活方式则非常困难。优化常违反模块边界,但可以以有原则的方式处理:将后期绑定模块作为模型,将违规行为实现为编程系统的“务实特性”。例如,方法可以有语义上的“左侧”和可选的优化“右侧”,在关闭右侧时仍能完美运行。
有害依赖:后期绑定的深层敌人
文章强调,优雅且有用的后期绑定的深层敌人是有害的(尤其是不必要的)依赖关系。这类依赖在早期绑定系统中也可能出现,但在后期绑定系统中可能性更多,因此需要更多设计来真正利用后期绑定的思想。避免有害依赖是发挥后期绑定优势的关键,这将在许多方面得到回报。
Q&A
后期绑定的定义是什么?
后期绑定是一种在保持灵活性和安全性的同时获得所需功能的思想。
后期绑定在软件和硬件中的应用有哪些?
软件本身是计算机行为的后期绑定,硬件中的索引寄存器也可以实现后期绑定地址。
后期绑定如何促进模块之间的交互?
模块之间的交互可以以双重方式处理,例如Smalltalk作为消息传递系统的例子。
后期绑定的主要优势是什么?
后期绑定允许延迟绑定对象和方法,促进替代方案和透明度的实现。
后期绑定面临哪些挑战?
后期绑定的深层敌人是有害的依赖关系,这需要设计来真正利用后期绑定的思想。
Alan Kay对后期绑定的看法是什么?
Alan Kay认为OOP意味着消息传递、本地保留和极端的后期绑定,Smalltalk和LISP可以实现这一点。