《UML面向对象设计基础》—第1章1.2节信息/实现隐藏

简介:

本节书摘来自异步社区《UML面向对象设计基础》一书中的第1章1.2节信息/实现隐藏,作者【美】Meliir Page-Jones,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 信息/实现隐藏
UML面向对象设计基础
你可以从对象的外部(“公共角度”)或对象的内部(“私有角度”)两种不同的角度来看待封装单元。好的封装结果是对公共视角封闭大量的细节。这种封闭有两种形式即信息隐藏和实现隐藏。

术语“信息隐藏”指不能被外界察觉的单元内的信息。术语“实现隐藏”指不能被外界察觉的单元内的实现细节。

信息/实现隐藏(information/implementation hiding)是使用封装将某些信息或实现方法限制在封装结构内部,限制外部的可见性。

机器人对象包含一些外界无法访问的私有信息,它说明信息隐藏特性。例如,机器人所代表的方向,从该对象外部可以改变这一信息(也许通过turnLeft),但不能得到它的值,除非假设显示该机器人本身并说明机器人鼻子的朝向。

然而,术语“信息隐藏”只说明好的封装可以隐藏的部分。封装通常提供信息而隐藏实现方法。这点对面向对象是十分重要的:对象内部变量存储的属性信息无需用与属性本身一样的方法实现,其他对象也可利用。

例如,尽管机器人对象(通过location操作)告诉我们它所处的位置,但我们却不知道对象内部如何存储它的位置。可能为(xCoord,yCoord)或(yCood,xCoord)或经纬度坐标或是设计者在半夜1点钟想出的某个重要方法。只要对象能以我们所能接受的方式输出其位置,我们就不会关心它是如何存储位置的。

因此,Hominoid的方向既是信息隐藏又是实现隐藏的例子。我们不知道对象中存储的方向信息是以数字角的方式(取值范围从0°到359°),还是以单个字符(N、E、S及W)或是precentDirection ,表示机器人的朝向占整个圆的百分比(从0到99.999)。

在以后的再设计中,我们也许决定显示方向信息并提供将direction属性输出给其他对象的操作。即便如此,我们仍保留实现隐藏,因为仍不需知道对象内的实现是否与公共信息的实现一样。

例如,我们可能决定对象内部以字符形式保存direction,然后经转换以角的公共形式输出。换言之,提供该属性值的操作可以将特殊的内部表示转换为大多数人希望看到的数字角的形式,与direction属性一样。

信息/实现隐藏是降低软件复杂性的有效技术。对外部观察者而言,可以将对象看作一个黑箱子。换言之,即外部观察者知道对象可以做什么,而不知道对象如何做或对象内部是如何构造的。如图1.5所示。


3897f19693afd65f969b0b8221ca616dbe55a0b4

信息/实现隐藏有两个主要优点:

① 设计决策局部化。私有设计决策(在对象内)对系统的其余部分影响很小或没有影响。因此,这种局部决策的修改对整个系统影响最小。这样限制了“修改波及”的影响。

② 其表示形式减弱了信息的内容。因此,对象外部的信息用户不会受到任何特殊的内部信息格式的困扰。这样,对象的外部用户(如其他程序员)就不用干涉对象内部的事情,也防止无聊的程序员对对象引入不稳定的连接(我知道你不会干这种事情,但你可能交叉运行我曾提到过的软件库)。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章