2.76
练习 2.76 一个带有通用型操作的大型系统可能不断演化,在演化中常需要加入新的数据对象类型或者新的操作。对于上面提出的三种策略——带有显式分派的通用型操作,数据导向的风格,以及消息传递的风格——请描述在加入一个新类型或者新操作时,系统所必须做的修改。哪种组织方式最适合那些经常需要加入新类型的系统?哪种组织方式最适合那些经常需要加入新操作的系统?
当要加入一个新类型时,带有显式分派的通用型操作,需要修改所有的选择函数,以适配新的类型。而数据导向的风格,只需要在已有的表格里增加一个新的类型即可,改动很少。对于消息传递的风格,仅需要增加一个新的构造函数,改动很少。或者说,后面两个方式都不需要改动已有代码,只需要新增类型代码即可。
当要加入一个新操作时,带有显式分派的通用型操作,需要在新的操作中兼容所有的类型,改动不多,但新的代码量很大。而数据导向的风格,也只需要在已有的表格里添加一个新的操作,但是代码量比显式分派的通用型操作要少很多。而消息传递,改动量也较大,因为需要在所有的构造函数里去增加这个新的操作的代码。
综上所述,数据导向的风格最适合那些经常需要加入新操作的系统。