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