首页 / 知识
抽象与信息隐藏和封装
2023-04-13 00:46:00

Abstraction VS Information Hiding VS Encapsulation你能告诉我在软件开发中抽象和信息隐藏有什么区别吗?
我很困惑。 抽象隐藏了详细的实施和 更新:我找到了这三个概念的好答案。 请参阅下面单独的答案,从中获取几个引用。 去源头! Grady Booch说(在面向对象的分析和设计,第49页,第二版):
换句话说:抽象=对象外部;封装(通过信息隐藏实现)=内部对象,
例: RP OP通过他发现的几个引用更新了他的问题,即Edward V. Berard撰写的题为"抽象,封装和信息隐藏"的文章。我正在重新发布一个稍微扩展和重新格式化的OP更新版本,因为它本身应该是一个答案。 (所有引用均来自上述文章。) 抽象:
信息隐藏:
封装:
结论:
通过使用Classes,我们实现了所有三个概念 - 请不要简单概念复杂化。 封装:将数据和方法包装到单个单元中是封装(例如,类) 抽象:这是一种仅包含基本事物而不包括背景细节的行为。 (例如界面) 例子和更多信息GOTO: http://thecodekey.com/C_VB_Codes/Encapsulation.aspx http://thecodekey.com/C_VB_Codes/Abstraction.aspx 这里批准了定义 P.S。:我还记得Sumita Arora的一本名为C ++的书中的定义,我们在第11课阅读了这本书;) 牛津英语词典(OED)给出的抽象意义最接近于此处的意思是"思想中的分离行为"。一个更好的定义可能是"代表某些东西的基本特征,而不包括背景或不必要的细节。" 信息隐藏是软件组件(例如类)的用户仅需要知道如何初始化和访问组件的基本细节的原则,并且不需要知道实现的细节。 编辑:在我看来,抽象是决定应该隐藏的实现的哪些部分的过程。 所以它不是抽象的VERSUS信息隐藏。这是隐藏VIA抽象的信息。 抽象化 抽象是表示essentail细节而不包括背景细节的行为。抽象类只有方法签名,实现类可以有自己的实现,这样复杂的细节就会对用户隐藏。抽象侧重于外部视图。换句话说,抽象是从实际实现中分离接口。 封装 封装解释了将数据成员和方法绑定到单个单元中。信息隐藏是封装的主要目的。通过使用私有,公共,受保护等访问说明符来实现封装。类成员变量是私有的,因此无法直接访问外部世界。封装侧重于内部视图。换句话说,封装是一种用于保护对象中的信息不受其他对象影响的技术。 正如您所说,抽象隐藏了实现的细节。 你抽象的东西足够高,你只需要做一些非常简单的事情来执行一个动作。 信息隐藏隐藏了实现细节。编程很难。你可以有很多事情需要处理和处理。您可能需要/需要保持非常接近的变量。隐藏信息可确保没有人通过使用您公开暴露的变量或方法意外破坏某些内容。 这两个概念在面向对象的编程中非常紧密地联系在一起。
抽象 - 这是识别对象基本特征的过程 封装 - 将数据和函数封装到一个单元中的过程。 抽象和封装是相关但互补的概念。 抽象是一个过程。封装是实现抽象的机制。 抽象集中于对象的可观察行为。封装侧重于导致此行为的实现。 信息隐藏 - 隐藏对象的实现细节的过程。这是封装的结果。 抽象:抽象是用于识别对象的外部视图的概念/技术。仅提供所需的界面。 信息隐藏:它是对抽象的补充,因为通过信息隐藏抽象实现。隐藏除外部视图之外的所有其他内容。 封装:将数据和相关功能绑定到一个单元中。它有助于抽象和信息隐藏。允许在单元上应用成员访问等功能以实现抽象和信息隐藏
封装:将数据成员和成员函数绑定在一起称为封装。封装是通过类完成的。 请参阅Joel关于漏洞抽象法的文章 JoelOnsoftware 基本上,抽象可以让您自由地思考更高层次的概念。一个非编程的类比是,我们大多数人都不知道我们的食物来自何处,或者它是如何产生的,但事实上我们(通常)不必担心它会使我们自由地做其他事情,比如节目。 至于信息隐藏,我同意干扰。 只需添加有关InformationHiding的更多详细信息,发现此链接是非常好的源代码示例
我也对抽象和封装这两个概念感到非常困惑。但是当我在myjavatrainer.com上看到抽象文章时,我清楚地知道抽象和封装是苹果和橘子,你不能真正比较它们,因为两者都是必需的。 封装是对象的创建方式,抽象是对象在外部世界中的查看方式。
要抽象一些东西,我们需要隐藏细节或隐藏我们需要抽象它的细节。 因此,信息隐藏是一个目标,抽象是一个过程,封装是一种技术。 抽象允许您将复杂过程视为一个简单的过程。例如,标准"文件"抽象将文件视为连续的字节数组。用户/开发人员甚至不必考虑集群和碎片问题。 (抽象通常表现为类或子例程。)
信息隐藏是为了保护您的抽象免受恶意/无能用户的侵害。通过将某些状态(例如硬盘驱动器分配)的控制限制为原始开发人员,大量的错误处理变得多余。如果除文件系统驱动程序之外没有其他人可以写入硬盘驱动器,则文件系统驱动程序确切地知道已写入硬盘驱动器的位置以及位置。 (这个概念的通常表现形式是OO语言中的
抽象仅仅意味着这样一种技术,其中只有软件的基本细节对用户可见,以帮助用户使用或操作软件,因此不显示该软件的实现细节(使其不可见)。 很短的 封装: - 信息隐藏 抽象: - 实施隐藏
在逐一阅读上述所有答案后,我无法阻止自己发布
然而封装从上面可以清楚地看出 - >
参考维基
封装:绑定数据和作用于它的方法。这允许隐藏其他类中的所有其他方法的数据。
抽象:隐藏不相关的行为和数据。 封装 - 以受控方式强制访问内部数据或阻止成员直接访问。 抽象 - 隐藏某些方法的实现细节称为抽象 让我们借助一个例子来理解: -
现在用于抽象定义一个只能被访问且用户不知道的方法
现在,只要用户使用上述方法,他就会得到的区域不是计算方式。我们可以考虑println()方法的一个例子,我们只知道它用于打印,我们不知道它是如何打印数据的。 值得注意的是,这些术语具有标准化的IEEE定义,可以在https://pascal.computer.org/上进行搜索。 抽象化 信息隐藏 封装 |
最新内容
相关内容
python如何引用模块
python如何引用模块,培训,模块,环境,系统,功能,别名,路径,顺序,文件,结尾,python引用模块的方法:模块实际上就是以.py为结尾的文件注意点:自定python值传递和引用传递的作用是什
python值传递和引用传递的作用是什么?,培训,作用,python封装是什么
python封装是什么,数据,培训,方法,函数,实例,定义,写法,外部,细节,内部,“封装”就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整python引用计数机制的使用
python引用计数机制的使用,实时,培训,对象,机制,实例,时机,内存,核心,以上,东西,python引用计数机制的使用说明1、python里每一个东西都是对关于oop:如何从Java的匿名内部类中
关于oop:如何从Java的匿名内部类中获取对封闭类的引用?,关于oop:如何从Java的匿名内部类中获取对封闭类的引用?,外部类,中创,点这里,最关于本地化:对C#中的资源文件的动态
关于本地化:对C#中的资源文件的动态引用,关于本地化:对C#中的资源文件的动态引用,应用程序,引用,动态,资源文件,Dynamic reference to关于数据库:SQL2005:将一个表链接到
关于数据库:SQL2005:将一个表链接到多个表并保留引用完整性?,关于数据库:SQL2005:将一个表链接到多个表并保留引用完整性?,数据库,这是,简关于.net:接口/抽象类中的静态方法
关于.net:接口/抽象类中的静态方法,关于.net:接口/抽象类中的静态方法,抽象,静态方法,接口,术语,Static Methods in an Interface/Abst如何在Perl中确定祝福引用的类型?
如何在Perl中确定祝福引用的类型?,如何在Perl中确定祝福引用的类型?,引用,数据类型,对象,已被,How can I determine the type of a ble关于c#:企业库CacheFactory.GetCach
关于c#:企业库CacheFactory.GetCacheManager抛出空引用,关于c#:企业库CacheFactory.GetCacheManager抛出空引用,应用程序,缓存,版本,关于C#:何时在嵌入式系统中使用类型
关于C#:何时在嵌入式系统中使用类型抽象,关于C#:何时在嵌入式系统中使用类型抽象,用于,类型,嵌入式系统,这是,When should I use type关于iphone:了解使用Cocoa和Objecti
关于iphone:了解使用Cocoa和Objective-C的引用计数,关于iphone:了解使用Cocoa和Objective-C的引用计数,我对,如何使用,我刚刚,Cocoa,Un