在研究OOP(主要是java)时,这两个概念总是相互关联的,但我发现它们之间没有真正的关系或相似性。如果我错了,请纠正我,但是:
抽象用于识别对象的关键部分,并忽略接口中使用的所有其他内容。 封装仅描述数据如何受到保护和隐藏,它会影响权限。
我没有看到两者之间真正的关系,有没有?如果我的每一个都以任何方式表现糟糕,那么每个人的简单描述都会有所帮助。
答案 0 :(得分:2)
这两个概念在某种程度上实现了相同的目标,即使是Abstraction is more about the design, and encapsulation is more about the implementation
(在讨论抽象时也没有字段和数据)。
这个共同的目标是为用户提供一个简单且定义良好的界面,因此他不需要为细节而烦恼,而只需要关注它的作用以及如何与它连接。
例如,如果你看一下开/关开关,Abstraction将定义它的两个条件,以及它们之间切换的方式,封装将选择隐藏开关内的电线和东西,并让你看到熟悉的开关我们都知道。由于这两个概念,它的用法很简单,也很标准。
关于这些概念还有更多的说法,但我可以告诉你它们之间的关系。
答案 1 :(得分:0)
Scott Ambler有一个很好的主题简历:
我们说的不是说我们确定一个班级知道什么做了什么 “抽象”了这个班级。而不是说我们设计了怎么上课 将完成这件事,我们说“封装”他们(...)
作者使用大学生的例子作为注册系统。学生拥有的许多属性(头发颜色,宗教,种族)和他将承担的许多责任(参加派对,体育运动,去图书馆);我们选择只需要存储学生姓名和地址,并且每个学生都应该能够参加研讨会。这是我们对学生的抽象。
但我们仍然不知道我们的系统将如何执行注册。典型的Java应用程序由类组成,这些类具有属性和方法。然后我们说系统功能封装在类中,并且每个类功能都封装在方法中。封装说明了如何实现功能,但隐藏了实现细节。
答案 2 :(得分:0)
<强>抽象强> 抽象集中在对象的外部视图上。只展示了必要的内容。
封装(信息隐藏)可防止客户端看到内部视图,其中实现了抽象行为。