你能告诉我在软件开发中抽象和信息隐藏有什么区别吗?
我很迷惑.抽象隐藏了细节实现和信息隐藏抽象的东西的整个细节.
更新:我找到了这三个概念的好答案.请参见下面的单独答案从采取了一些引文出现.
去源头!Grady Booch说(在面向对象的分析和设计,第49页,第二版):
抽象和封装是互补的概念:抽象侧重于对象的可观察行为......封装侧重于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.对象的秘密不会对其基本特征产生影响.
换句话说:抽象=对象外部; 封装(通过信息隐藏实现)=内部对象,
示例:在.NET Framework中,System.Text.StringBuilder
该类提供字符串缓冲区的抽象.此缓冲区抽象允许您使用缓冲区而不考虑其实现.因此,您可以将字符串附加到缓冲区,而无需考虑StringBuilder
内部如何跟踪指向缓冲区的指针以及在缓冲区已满时管理内存(通过信息隐藏进行封装).
RP
OP通过他发现的几个引用更新了他的问题,即Edward V. Berard撰写的题为"抽象,封装和信息隐藏"的文章.我正在重新发布一个稍微扩展和重新格式化的OP更新版本,因为它本身应该是一个答案.
(所有引用均来自上述文章.)
抽象:
"关于抽象的一个混淆点是它作为一个过程和一个实体的使用.抽象,作为一个过程,表示提取关于一个项目或一组项目的基本细节,而忽略了不必要的细节.抽象,作为一个实体,表示实际项目的模型,视图或其他一些集中表示."
信息隐藏:
"它的界面或定义被选中以尽可能少地揭示它的内部运作." - [Parnas,1972b]
"抽象可以用作识别应隐藏哪些信息的技术."
"当人们无法区分隐藏信息和用于帮助识别哪些信息被隐藏的技术(例如,抽象)时,就会发生混淆."
封装:
"它[...]指的是围绕一些东西建造一个胶囊,在一个概念屏障的情况下." - [Wirfs-Brock等,1990]
"作为一个过程,封装意味着将一个或多个物品封装在一个容器内.封装作为一个实体,是指包含(包含,封闭)一个或多个物品的包裹或外壳."
"如果封装与信息隐藏相同,那么人们可能会提出这样的论点:'封装的所有内容也都是隐藏的'.这显然不是真的."
结论:
"抽象,信息隐藏和封装是非常不同的,但是高度相关的概念.人们可以争辩说,抽象是一种技术,可以帮助我们识别哪些特定信息应该是可见的,哪些信息应该被隐藏.封装就是技术以这样的方式打包信息,以隐藏应隐藏的内容,并使可见的内容可见."
Abstraction
通过在基本功能上提供一个层来隐藏实现细节.
Information Hiding
正在隐藏受该实现影响的数据.使用private
和public
来自此.例如,隐藏类的变量.
Encapsulation
只是将所有类似的数据和功能放入一个组中,例如Class
编程; Packet
在网络中.
通过使用类,我们实现了所有三个概念- Abstraction
,Information Hiding
和Encapsulation
请不要简单概念复杂化.
封装:将数据和方法包装到单个单元中是封装(例如Class)
抽象:这是一种仅包含基本事物而不包括背景细节的行为.(例如界面)
例子和更多信息GOTO:
http://thecodekey.com/C_VB_Codes/Encapsulation.aspx
http://thecodekey.com/C_VB_Codes/Abstraction.aspx
这里批准了定义
PS:我还记得Sumita Arora的一本名为C++的书中的定义,我们在第11课阅读了这本书;)
牛津英语词典(OED)给出的抽象意义最接近于此处的意思是"思想中的分离行为".一个更好的定义可能是"代表某些东西的基本特征,而不包括背景或不必要的细节."
信息隐藏是软件组件(例如类)的用户仅需要知道如何初始化和访问组件的基本细节的原则,并且不需要知道实现的细节.
编辑:在我看来,抽象是决定应该隐藏的实现的哪些部分的过程.
所以它不是抽象的VERSUS信息隐藏.这是隐藏VIA抽象的信息.