作者reader (读者)
看板CSSE
标题Re: [问题] oop
时间Sun Jun 12 04:08:54 2005
※ 引述《spanky (小莫)》之铭言:
: 有4个特点
: Encapsulation
: Imfomation hiding
: Inheritance
: Polymorphism
: 我总觉得Encapsulation Information hiding
: 根本是一样的东西
: 因为有了前者当然会有後者的产生
: 可是为什麽要分开列出呢
: 这其中有什麽差异吗???
这好像是我在十年前搞的东西了,嗯,记得我们那几个讨论的结果,
都觉得资讯隐藏不是物件导向独有的特性,而是物件导向所要达成的
目标之一,所以在写书时就以封装、继承、动态连结 (多型) 为物件
导向的三个主要特性,而不是四个。
资讯隐藏不必然要经由封装达成,所以这两者分开是对的,但把资讯
隐藏视为物件导向的特性,我觉得这也太独断了,资讯隐藏算是一种
软体制作上的一个概念,我们希望软体能朝着这个方向走,但被这样
一讲,就会变成物件导向占住了历史的发展方向,这个说法颇有宣传
性质而不太诚恳。
实际上从模组化程式设计兴起,所有的软体技术都宣称它们可以达成
资讯隐藏,然後每一种技术的资讯隐藏定义都不太一样,於是只有它
一家能够成立,别家都是有问题的。
还可以特别一说,早年模组化程式设计兴起时,就已宣称达成了资讯
隐藏,而在 C 和 Pascal 之争当中, C 就是在这一点上吃了大亏,
被讥为开历史倒车,结果到了 C++, 资讯隐藏反而是成为物件导向的
成就了。历史都是由成功者定义的,由此可见一班。
这东西要讨论起来还颇复杂,认真来说,物件导向也还离完全的资讯
隐藏甚远,倒是像 Prolog 这类先天就不需要在乎内部实作的语言,
才是真的资讯隐藏。
不只资讯隐藏,这些特性归纳全都是有问题的,每一个都有例外,有
封装未必是物件导向,物件导向也未必有继承和多型,只是大家喜欢
简化过的东西,所以就成了主流的、简单易明的判准而已,特别是在
C++ 独大的状况下。
--
※ 编辑: reader 来自: 61.222.173.29 (06/12 04:12)
1F:推 Eventis:我认为dynamic binding是polymorphism的手段. 61.62.49.43 06/13
2F:→ Eventis:而达成polymorphism却不一定非得dynamic binding 61.62.49.43 06/13
3F:→ Eventis:虽然缺了dynamic binding,polymorphism等於没用. 61.62.49.43 06/13
4F:推 godfat:真想听更详细的见解… Orz140.138.241.159 06/13