Value of Information Hiding

信息隐藏的价值

信息隐藏是少数几个得到公认的、在实践中证明了其自身价值的理论技术,并且已经有很长一段时间了(Boehm 1987a)。几年前人们就发现,那些运用了信息隐藏技术的大型项目与没有应用这一技术的项目相比,修改起来大约容易4倍(Korson and Vaishnavi 1986)。而且,信息隐藏还是结构化程序设计和面向对象设计的根基之一。

信息隐藏有着独特的启发力,它能够激发出有效的设计方案。传统的面向对象设计通过把周围世界建模为对象来激发设计,但是这种基于对象的思考却不能帮助你避免把ID声明为int而不是IdType。面向对象设计者会这样问,“能否把ID看作是一个对象?”取决于这个项目的编码标准,如果回答了“是的”,那么可能就意味着程序员必须要写构造函数、析构函数、拷贝操作符和赋值操作符;注释掉所有的原有语句,然后放回源码控制系统里。大多数的程序员可能会决定说,“不,没必要为了一个ID而新建一个类,我还是用int得了。”

看看都发生了什么。一个能够简单地把ID的数据类型隐藏起来的有用的设计方案甚至都没有被考虑。可是如果设计者改变一下问法,“如果ID应该被隐藏起来该怎样呢?”,那么他很可能会用IdType来取代int,即用一个简单的类型声明来隐藏ID的 类型。在这个例子里,面向对象设计与信息隐藏之间的差异,要比规章与临时制度之间的差异还要微妙。面向对象设计也会和信息隐藏一样接受这种设计方案。两者 间的区别更多地是在于,按照信息隐藏的原则来思考,能够激发和促进某些设计决策的形成,而仅仅按照对象原则思考却不会。其差异也很有启发性。

信 息隐藏同样有助于设计类的公开接口。在设计类的理论与实践之间有着很大的差距,有很多类的设计者认为,把什么内容放在类的公开接口里,就等同于找出使用最 方便的那个接口,这通常就导致类内部过多的内容被暴露出来。以我看来,一些程序员宁愿把一个类的私用数据都暴露出来,也不愿多写十行代码来保护类的秘密不 被泄漏。

问题“这个类需要隐藏些什么?”正切中了接口设计的核心。如果你能在给类的公开接口中增加函数或者数据而不牺牲该类的隐密性,那么就做下去,否则请停住。

在设计的所有层面上,都可以通过询问该隐藏些什么来促成好的设计决策。这一问题可以在构建层面(construction level)上协助你用具名常量来取代字面量,可以在类的内部生成好的子程序和参数名称,还有助于指导在系统层上做出有关类和子系统分解以及交互设计的决策。

请养成问“我该隐藏些什么?”的习惯,你会惊奇地发现,有很多很棘手的设计难题都会在你面前化解。


posted on 2008-03-17 23:04 邓文宇 阅读(70) 评论(0)  编辑 收藏 引用 网摘

只有注册用户登录后才能发表评论。

统计