当前位置:  开发笔记 > 编程语言 > 正文

抽象VS信息隐藏VS封装

如何解决《抽象VS信息隐藏VS封装》经验,为你挑选了5个好方法。

你能告诉我在软件开发中抽象信息隐藏有什么区别吗?

我很迷惑.抽象隐藏了细节实现和信息隐藏抽象的东西的整个细节.

更新:我找到了这三个概念的好答案.请参见下面的单独答案从采取了一些引文出现.



1> rp...:

去源头!Grady Booch说(在面向对象的分析和设计,第49页,第二版):

抽象和封装是互补的概念:抽象侧重于对象的可观察行为......封装侧重于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.对象的秘密不会对其基本特征产生影响.

换句话说:抽象=对象外部; 封装(通过信息隐藏实现)=内部对象,

示例:在.NET Framework中,System.Text.StringBuilder该类提供字符串缓冲区的抽象.此缓冲区抽象允许您使用缓冲区而不考虑其实现.因此,您可以将字符串附加到缓冲区,而无需考虑StringBuilder内部如何跟踪指向缓冲区的指针以及在缓冲区已满时管理内存(通过信息隐藏进行封装).

RP


你会说,抽象和封装是相辅相成的,封装和信息隐藏也是互补的吗?当然,封装是通过信息隐藏来实现的,但是...不是封装实现信息隐藏的机制吗?

2> stakx suppor..:

OP通过他发现的几个引用更新了他的问题,即Edward V. Berard撰写的题为"抽象,封装和信息隐藏"的文章.我正在重新发布一个稍微扩展和重新格式化的OP更新版本,因为它本身应该是一个答案.

(所有引用均来自上述文章.)

抽象:

"关于抽象的一个混淆点是它作为一个过程和一个实体的使用.抽象,作为一个过程,表示提取关于一个项目或一组项目的基本细节,而忽略了不必要的细节.抽象,作为一个实体,表示实际项目的模型,视图或其他一些集中表示."

信息隐藏:

"它的界面或定义被选中以尽可能少地揭示它的内部运作." - [Parnas,1972b]

"抽象可以用作识别应隐藏哪些信息的技术."

"当人们无法区分隐藏信息和用于帮助识别哪些信息被隐藏的技术(例如,抽象)时,就会发生混淆."

封装:

"它[...]指的是围绕一些东西建造一个胶囊,在一个概念屏障的情况下." - [Wirfs-Brock等,1990]

"作为一个过程,封装意味着将一个或多个物品封装在一个容器内.封装作为一个实体,是指包含(包含,封闭)一个或多个物品的包裹或外壳."

"如果封装与信息隐藏相同,那么人们可能会提出这样的论点:'封装的所有内容也都是隐藏的'.这显然不是真的."

结论:

"抽象,信息隐藏和封装是非常不同的,但是高度相关的概念.人们可以争辩说,抽象是一种技术,可以帮助我们识别哪些特定信息应该是可见的,哪些信息应该被隐藏.封装就是技术以这样的方式打包信息,以隐藏应隐藏的内容,并使可见的内容可见."



3> Shashwat..:

Abstraction 通过在基本功能上提供一个层来隐藏实现细节.

Information Hiding正在隐藏受该实现影响的数据.使用privatepublic来自此.例如,隐藏类的变量.

Encapsulation只是将所有类似的数据和功能放入一个组中,例如Class编程; Packet在网络中.

通过使用类,我们实现了所有三个概念- Abstraction,Information HidingEncapsulation



4> Rashy..:

请不要简单概念复杂化.

封装:将数据和方法包装到单个单元中是封装(例如Class)

抽象:这是一种仅包含基本事物而不包括背景细节的行为.(例如界面)

例子和更多信息GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

这里批准了定义

PS:我还记得Sumita Arora的一本名为C++的书中的定义,我们在第11课阅读了这本书;)



5> jamting..:

牛津英语词典(OED)给出的抽象意义最接近于此处的意思是"思想中的分离行为".一个更好的定义可能是"代表某些东西的基本特征,而不包括背景或不必要的细节."

信息隐藏是软件组件(例如类)的用户仅需要知道如何初始化和访问组件的基本细节的原则,并且不需要知道实现的细节.

编辑:在我看来,抽象是决定应该隐藏的实现的哪些部分的过程.

所以它不是抽象的VERSUS信息隐藏.这是隐藏VIA抽象的信息.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有