远隔作用 (计算机科学)
外观
远隔作用(Action at a distance)是一种程式设计中的反模式,是指程式某一部份的行为会广泛的受到程式其他部份指令的影响,而且要找到影响其他程式的指令很困难,甚至根本无法进行。
避免远隔作用的方法是避免使用全域变数,利用可控制的区域变数来调整资料,或是使用有参照透明度的纯函数程式语言。
此词语的由来是来自物理学中的远距作用,是指一个物体在和另一物体中间没有粒子交换的情形下,影响另一物体的现象,量子力学的量子缠结就是远距作用的一个例子,爱因斯坦将此称为“鬼魅似的远距作用”(spooky action-at-a-distance)。
远隔作用造成的程序错误常是因为程式模组的特定机能在错误的时间动作,或是影响了不应当影响的变数。不过很难找出是哪一个模组造成的影响。一些看似没有问题的动作的副作用使得程式在一个未知的状态中,因此局部的资料也可能不是局部的,有可能受到其他模组的影响。改善远隔作用的方式是定义一个模组可以影响模组的范围。若在软体设计时准确的定义各模组之间的介面,避免使用共享的资料或是全域变数,可以大幅减少远隔作用造成的问题。
借由物件的远隔作用
[编辑]有些物件导向程式设计设计原则也可以避免远隔作用。得墨忒耳定律提到一个物件只能影响它邻近的物件。若物体之间有必要有远隔作用,必需用讯息传递的方式进行。适当的设计可以大幅限制远隔作用的发生,因此也使系统比较容易维护。不良的介面设计会造成不羁的对象,上帝对象或是其他不依照得墨忒耳定律的物件。
程式语言的好处是减少远隔作用出现的可能性,若是使用纯函数程式语言,甚至根本不会出现远隔作用。