设计中应对变化的方法
来源:互联网 发布:西门子840d编程代码 编辑:程序博客网 时间:2024/05/03 06:53
sicp习题2.76:一个带有通用型操作的大型系统可能不断演化,在演化中常需要加入新的数据对象类型或者新的操作。
对于上面提出的三种策略--带有显式分派的通用型操作,数据导向的风格,以及消息传递的风格--请描述在加入一个新类型
或者新操作时,系统所必须做的修改。哪种组织方式最适合那些经常需要加入新类型的系统?哪种组织方式最适合那些经常
需要加入新操作的系统?
我们可以看看OO是哪一种。
OO出现以前,我们是这样写函数的。
fun
{
if (isCat)
miaomiao
else if (isDog)
wangwang
else if (isCow)
miemie
}
这就是典型的“带有显式分派的通用型操作“,这里把“操作”看成“变化”,把“类型”看成“不变”, 适合加入“新操作”,
不适合加入“新类型”。
为了解决加入新类型的问题,很容易就想到把“操作”看成“不变”,把“类型”看成“变化”。这就是”消息传递“的风格。
也就是现在所谓的OO风格。C++里面的虚表就是按照这种逻辑设计的,只用告诉对象要调用哪个函数,即表的第几行,就行了。
当然这个表由编译器负责填写。
但是OO加“操作”是不方便的,即通常意义上的改接口。
但OO流行的原因在于,我们通常可以先确定接口,但无法确定今后会有哪些扩展的对象。
最灵活的就是“数据导向的风格”,类型和操作都可以不确定,完全由运行时数据驱动。
- 设计中应对变化的方法
- 设计,为了更好的应对变化
- 完美的应对SEO算法变化方法
- 如何应对变化--闲扯Subversion和Perforce的设计
- 关于安卓配置信息发生变化的应对方法
- 用敏捷方法应对需求变化
- 设计编码中常见Bug及应对方法
- 良好的设计是应对需求变更的最佳方法
- 应对企业不断变化的系统
- 应对Scrum项目带来的变化
- 应对Scrum项目带来的变化
- 应对linux中磁盘设备名称变化造成的不能自动mount问题
- “设计应对变化”--实例讲解一个数据同步系统
- 发现数据库中有D99_Tmp表的应对方法
- 发现数据库中有D99_Tmp表的应对方法
- 发现数据库中有D99_Tmp D99_CMD表的应对方法
- Android中常见的内存泄漏分析及应对方法
- linux 死机的应对方法
- Hibernate+MyEclipse+weblogic使用小结[附weblgic配置](一)
- 篮球的各个位置的职能!!!
- tftp
- JAVA的for each在多线程环境下问题
- Unity的shader
- 设计中应对变化的方法
- 禁止页面后退按钮的最简单方法
- 斐波纳契数
- java.lang.UnsupportedClassVersionError: Bad version number in .class file
- 软件开发生命周期各阶段的任务
- 服务器应用程序不可用
- iframe,Frame中Session丢失的解决方法
- C#中break、continue的用法
- 招聘Windows程序员