-->

抽象VS信息隐藏VS封装抽象VS信息隐藏VS封装(Abstraction VS Informatio

2019-05-09 06:53发布

你能告诉我什么是之间的抽象信息软件开发有什么区别?

我很迷惑。 抽象隐藏详细实施和信息隐藏摘要的东西全部细节。

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

Answer 1:

转到源! 格雷迪Booch的表示(在面向对象的分析和设计,49页,第二版):

抽象和封装是相辅相成的概念:抽象的重点对象的观察行为...封装侧重于,使人们产生这种行为的实现...封装最经常通过信息隐藏,这是隐藏所有的进程中取得对象的秘密,不利于它的本质特征。

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

例如:在.NET Framework,所述System.Text.StringBuilder类提供一个字符串缓冲区的抽象。 该缓冲区接口,可以与缓冲工作,而其执行方面。 因此,你可以追加字符串到缓冲区,而不考虑如何将StringBuilder内部保存的东西跟踪这样的指针缓冲区和管理存储在缓冲区满(它通过信息隐藏与封装一样)。

RP



Answer 2:

该OP更新了自己的问题与几个引用,他发现,即在由Edward V.贝拉尔文章,题为“抽象,封装和信息隐藏” 。 我重新张贴OP的更新的略有扩大和重新格式化的版本,因为它应该是在自己的权利的答案。

(所有引文从上面提到的文章获得。)

抽象:

“关于抽象混乱的一个点是它作为过程和一个实体使用。抽象,作为一个过程,表示的关于项目,或一组项目的主要细节提取,而忽略了无关紧要的信息。抽象,作为一个实体,表示模型,视图或用于实际的项目一些其他集中表示“。

信息隐藏:

“被选为其界面或定义来尽可能少揭示其内部工作”。 - [帕尔纳斯,1972b]

“抽象可以[...]用作一种技术,用于确定哪些信息应该被隐藏”。

“混乱,可能会发生当人们失败的信息的隐藏和一种技术之间进行区分(例如,抽象),其被用来帮助识别哪个信息将被隐藏。”

封装:

“它[...]是指构建一个胶囊,在壳体中的概念障碍,周围的一些事情的集合。” - [魏尔夫斯-Brock等人,1990]

“作为一个过程,封装是指[...]的容器中。封装内包围一个或多个项目,作为一个实体的行为,是指一种包装或保持的外壳(包含,包围)一个或多个项目。”

“如果封装是‘同样的事情,信息隐藏’,那么一个可能使论点,即‘这是封装也隐藏了一切。’ 这显然是不正确的“。

结论:

“抽象,信息隐藏和封装有很大的不同,但高度相关的,概念。人们可以争辩说,抽象是一种技术,帮助我们确定哪些特定的信息应该是可见的,哪些信息应该被隐藏。封装是那么的技术在这种方式隐藏什么应该被隐藏,使人们看到何意可见包装信息“。



Answer 3:

Abstraction是通过在基本功能提供层隐藏实现细节。

Information Hiding就隐藏其中受着该实现的数据。 使用privatepublic自带根据本。 举例来说,隐藏类的变量。

Encapsulation只是将所有类似的数据和功能的成团例如Class在编程; Packet在网络中。

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



Answer 4:

请不要复杂化简单的概念。

封装 :结束语数据和方法的成单个单元是封装(例如类)

抽象 :它是唯一的代表,而不包括背景细节的本质的东西的行为。 (例如接口)

有关示例等详细信息GOTO:

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

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

批准的定义在这里

PS:我还记得从一个名为C ++住田阿罗拉本书,我们在第11类阅读的定义;)



Answer 5:

由牛津英语词典(OED)最近提供给打算在这里的含义抽象的含义是“在思想分离的行为”。 一个更好的定义可能是“代表事物的本质特征,而不包括背景或无关紧要的细节。”

信息隐藏的原则是,一个软件组件的用户(如类)只需要知道如何初始化和访问组件的重要细节,也不需要知道实现的细节。

编辑 :我在我看来,抽象是决定应该被隐藏在实现这部分内容的过程

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



Answer 6:

抽象化

抽象是代表essentail细节,而不包括背景细节的行为。 一个抽象类只有方法签名和实现类可以有它自己的实现,这样复杂的细节将会从用户隐藏。 抽象集中在外景。 。换句话说,抽象是从实际执行的接口的盲分离Blind。

封装

封装说明数据成员和方法结合成一个单一的单元。 信息隐藏是封装的主要目的。 封装是通过使用访问修饰符如私有,公共保护来达到的。 类成员变量是由私人,让他们水湿直接接触到外面的世界。 封装聚焦在内视图。 。换句话说,封装是用于保护在从其他对象的对象的信息的技术。



Answer 7:

因为你把它抽象是隐藏实现细节。

你抽象的东西,足够高的点,你就只需要做一些非常简单的操作来执行。

信息隐藏就隐藏实现细节。 编程是很难的。 你可以有很多事情要处理和处理。 有可能是你想要/需要保持非常密切的跟踪变量。 隐藏信息,确保没有一个不小心打破了使用您公开暴露的变量或方法的东西。

这两个概念在面向对象的编程非常紧密捆绑在一起。



Answer 8:

抽象 -它是识别对象的本质特征,而不包括不相关的和繁琐的细节的过程。

封装 -它是封闭的数据和功能这个数据操纵成单个单元的过程。

抽象和封装是相关的,但互补的概念。

  1. 抽象是过程。 封装是通过抽象实现的机制。

  2. 抽象的重点对象的观察到的行为。 封装侧重于认为产生这种行为的实现。

信息隐藏 -这是隐藏对象的实现细节的过程。 这是封装的结果。



Answer 9:

封装:结合所述数据成员和成员函数一起被称为封装。 封装是通过类来完成。 抽象:隐藏实现细节形成使用或从视图称为抽象。 例如:INT X; 我们不知道如何INT将在内部工作。 但我们知道INT会工作。 这是抽象。



Answer 10:

抽象:抽象是用来标识应该是什么的对象的外部视图的概念/技术。 使只有所需的接口可用。

信息隐藏:这是抽象的互补性,通过信息隐藏抽象的实现。 隐藏一切,但外观图。

封装:是数据和相关功能的结合成一个单元。 它有利于抽象和信息隐藏。 状部件的访问允许特征被在单元上施加到实现抽象和信息隐藏



Answer 11:

查看漏抽象法乔尔的帖子

JoelOnsoftware

基本上,文摘为您提供了更高层次的概念,思想的自由。 非编程的比喻是,我们大多数人不知道我们的食物来源,或者它是如何产生的,但事实是,我们(通常)不必担心它让我们能够做其他事情一样,节目。

至于信息隐藏,我同意jamting。



Answer 12:

抽象允许你将一个复杂的过程,作为一个简单的过程。 例如,标准的“文件”的抽象把文件作为连续的字节数组。 用户/开发者甚至不必去想集群和碎裂的问题。 (抽象通常显示为类或子例程)。

信息隐藏是保护你的抽象恶意/使用不当。 通过限制某些国家的控制(硬盘驱动器分配,例如)到原来的开发商,错误处理大量变得多余。 如果没有其他人,除了文件系统驱动程序可以写入到硬盘,然后将文件系统驱动程序确切地知道已经写入到硬盘驱动器和。 (这一概念的通常表现是privateprotected在面向对象语言的关键字。)



Answer 13:

抽象的东西,我们需要隐藏的细节或隐藏的,我们需要将它抽象的东西细节。 但是,他们都可以通过封装来实现。

所以,信息隐藏是一个目标,是抽象的过程,和封装的技术。



Answer 14:

抽象简单地指其软件只必要的细节是可见的用户,以帮助中使用或与软件操作的用户的技术,因此该软件的实施细节未显示(由不可见)。 封装是具有容纳一个或多个项目,因此一些的信息(特别是节目详情)变得可见,有些不是对用户可见包的技术中,这样的封装是通过信息来实现隐藏。 综上所述。 抽象是可观察的行为(外部)和封装是隐形(内部),但是这两个是真正的互补性。



Answer 15:

只需添加围绕InformationHiding更多的细节,发现这个链接是真正的好来源举例

InformationHiding的理念是设计决策应该从系统的其余部分被隐藏,以防止意外的耦合。 InformationHiding是一个设计原则。 InformationHiding应告知你的东西封装的方式, 但当然这并不一定

封装是一种编程语言功能。



Answer 16:

我也正要抽象和封装的两个概念很困惑。 但是,当我看到抽象的文章上myjavatrainer.com,很明显,我认为抽象和封装是苹果和桔子,你真的不能对它们进行比较,因为两者都需要。

封装是对象是如何创建的,而抽象是对象如何在外界观察。



Answer 17:

通过一个阅读上述所有的答案之一后我不能从发布停止自己,

涉及抽象工厂定义代表抽象的“演员”,可以在执行工作中,报告而改变自己的状态,而“沟通”与系统中的其他对象的对象。

封装是从上面很清楚不过 - >

术语封装是指状态细节隐藏,但是从早期的编程语言扩展数据类型的概念,行为与数据最强烈的关联,以及标准化,不同的数据类型进行交互的方式,是一个抽象的开始。

参考维基



Answer 18:

封装:结合数据和就此采取行动的方法。 这允许从其他类中所有其他方法的数据隐藏。 例如: MyList类,可以添加项目,删除项目,并删除方法的所有项目addremove ,和removeAll名单上不能从外部直接访问行为(私有数组)。

抽象:隐藏着不相关的行为和数据。 如何实际存储的项目,添加或删除隐藏(抽象)。 我的数据可以在简单的数组,数组列表,链表举行,等等。 此外,将方法实现从外部隐藏。



Answer 19:

Encapsulation-执行访问内部数据以受控的方式或防止部件被直接访问。

Abstraction-隐藏某些方法的实施细则被称为抽象

让我们用一个例子来帮助理解: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

现在的抽象定义,才可以访问的方法和用户完全不认识什么是法的身体,它是如何工作让我们考虑上面的例子中,我们可以定义计算矩形的面积的方法区域。

 public int area()
 {
  return length*breadth;
 }

现在,每当用户使用上面的方法,他将刚刚得到的面积不是它是如何计算的方式。 我们可以考虑的println()方法的一个例子,我们只知道它被用于印刷,我们不知道它是如何打印数据。 我已经写了一篇博客,详细,你可以看到下面的链接了解更多信息抽象VS封装



Answer 20:

值得一提的这些条款已经标准化,IEEE定义,它可以在搜索https://pascal.computer.org/ 。

抽象化

  1. 视图中的对象的一个​​专注于信息与特定的目的而忽略的信息的其余部分
  2. 配制的视图的过程
  3. 抑制不相关的细节的过程中建立的简化模型,或者过程的结果

信息隐藏

  1. 从使用关于不是在模块的接口规范的模块信息被防止软件开发的技术,其中每个模块的接口揭示尽可能少有关模块内部工作和其它模块
  2. 在单个模块中一个设计或实现决策的遏制,使得判定来自其他模块的隐藏

封装

  1. 软件开发技术,该技术是由分离的系统功能或模块中的一组上的那些数据的数据和操作,并提供精确的规格为模块的
  2. 访问的名字,含义,和一类的责任价值观的概念完全来自接入分离的实现
  3. 想法,一个模块具有外即从它的内部不同,它具有一个外部接口和内部实现


文章来源: Abstraction VS Information Hiding VS Encapsulation