开发者社区> 异步社区> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《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

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

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

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《面向对象设计实践指南:Ruby语言描述》—第1章 1.1节设计赞歌
世界是过程式的。时间不停在向前流动,而事件也一个接一个地逝去。你每天早上的过程或许就是:起床、刷牙、煮咖啡、穿衣,然后上班。这些活动都可以使用过程软件来建模。因为了解事件的顺序,所以你可以编写代码来完成每一件事情,然后仔细地将这些事情一个接一个地串在一起。
1603 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载