设计中应对变化的方法

sicp习题2.76:一个带有通用型操作的大型系统可能不断演化,在演化中常需要加入新的数据对象类型或者新的操作。

对于上面提出的三种策略--带有显式分派的通用型操作,数据导向的风格,以及消息传递的风格--请描述在加入一个新类型

或者新操作时,系统所必须做的修改。哪种组织方式最适合那些经常需要加入新类型的系统?哪种组织方式最适合那些经常

需要加入新操作的系统?

我们可以看看OO是哪一种。

OO出现以前,我们是这样写函数的。

fun

{

if (isCat)

miaomiao

else if (isDog)

wangwang

else if (isCow)

miemie

}

这就是典型的“带有显式分派的通用型操作“,这里把“操作”看成“变化”,把“类型”看成“不变”, 适合加入“新操作”,

不适合加入“新类型”。

 

为了解决加入新类型的问题,很容易就想到把“操作”看成“不变”,把“类型”看成“变化”。这就是”消息传递“的风格。

也就是现在所谓的OO风格。C++里面的虚表就是按照这种逻辑设计的,只用告诉对象要调用哪个函数,即表的第几行,就行了。

当然这个表由编译器负责填写。

 

但是OO加“操作”是不方便的,即通常意义上的改接口。

但OO流行的原因在于,我们通常可以先确定接口,但无法确定今后会有哪些扩展的对象。

 

最灵活的就是“数据导向的风格”,类型和操作都可以不确定,完全由运行时数据驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值