抽象和封装都是基本的面向对象编程(OOP)概念,允许您将真实世界的对象实现为程序和代码。虽然这两者是并行不悖的,但它们却有很大的不同。虽然每个方法都是一个封装,但它也是一个抽象。简单地说,当你把不同的东西放在一起创建一个实体时,你实际上创建了一个概念——一个抽象概念。虽然两者在技术上是不可分割的,但实际上却毫无共同之处。几乎所有的封装都是一个抽象,因为它们都隐藏了一些东西,但是它们也有各自的区别。
抽象是一个基本的OOP概念,它只关注对象的相关数据,隐藏所有不相关的细节,这些细节可能是通用的,也可能不是专用的行为。它隐藏了背景细节,强调了减少复杂性和提高效率的要点。基本上,抽象是管理复杂性的编程工具。抽象关注的是思想而不是事件。它通过向用户提供功能来隐藏设计层的细节。结果对象也可以称为抽象。程序员确保命名实体包含所有基本方面,而不包含任何不相关的方面。
让我们举一个抽象的真实例子。让我们考虑一辆车的情况,在这种情况下,它就是你的车。一个技工试图修理你的车,或者说修理你车的某个特定部分。在这里,你是用户,你不想进入你的车的细节或什么部分实际上打破了。你其实并不在乎那些事情;你只想让你的车回到原来的状态,而不用担心细节。所以,你实际上是通过分离实现部分来告诉机械师你想要什么。这是抽象。你专注于最重要的事情,那就是修车,而不是关注细节。
封装是另一个OOP概念,它将数据和函数绑定到单个组件中,同时限制对某些组件的访问。它是OOP的主要基本概念之一,将数据和信息封装在一个单元下。从技术上讲,封装意味着隐藏属性以屏蔽外部访问变量,这样应用程序的一部分中的更改就不会影响其他部分。相反,通过使信息更加公开,您将面临数据被滥用的风险。它通过保护数据不受外界影响来提供数据的基本完整性。简单地说,它对外界隐藏了额外的细节。
以蓝牙鼠标为例。你只需要知道设备的行为,而不用担心实现细节,比如鼠标有什么样的传感器,是不是无线的等等。每一个细节都描述了鼠标,但不管细节如何,它只是一个鼠标。您只需要一个接口来使用鼠标,在本例中是鼠标指针。这是封装。
虽然这两个概念都是面向对象的基本概念,在技术上是不可分割的,但在很多方面还是有区别的。
抽象 | 封装 |
它只处理相关的细节,通过隐藏不相关的细节来降低复杂性,从而提高效率。 | 它将数据和信息绑定到一个实体中,以保护数据不受外部来源的影响。 |
它指的是隐藏不需要用于表示目的的数据的思想。 | 它隐藏数据和代码以限制不必要的访问。 |
它关注的是什么而不是如何。 | 它隐藏了它做某事的内在机制。 |
它隐藏了设计层上不必要的细节。 | 它也隐藏了细节,但在实现级别。 |
信息和数据与相关数据分开。 | 信息隐藏在一个胶囊里,以便近距离接触。 |
它处理的是思想而不是事件。 | 这样做是为了保护数据不受外界影响。 |
它是使用抽象类和接口实现的。 | 它是使用protected、private和package private访问修饰符实现的。 |
虽然这两个都是与数据隐藏相关的OOP概念,但它们彼此有很大的不同。抽象还涉及到类似于隐藏的封装,但是前者隐藏了复杂性,而后者通过控制对数据的访问来保持它所封装的数据。抽象是指通过隐藏不相关的细节来表示必要的特性,从而降低应用程序的复杂性,从而提高效率。另一方面,封装指的是隐藏程序的所有内部机制,以保护信息不受不必要的访问。它通过限制对其他组件的访问,将数据和信息绑定到一个组件中。
...嘴唇。此外,它们对轻触有反应。 什么是包裹神经末梢(encapsulated nerve endings)? 与游离神经末梢不同,包裹的神经末梢不包含神经传递的开放端。因此,与游离神经末梢相比,包裹神经末梢的敏感性较低。一些机械感受器有包...
.... 并列比较-以表格形式封装与去封装 6. 摘要 什么是封装(encapsulation)? 网络模型用于标准化网络通信。当从一个位置向另一个位置发送数据时,数据会经过许多层。TCP/IP模型有四层。它们是应用层、传输层、互联网层和网络接入...
数据隐藏(data hiding)和封装(encapsulation)的区别 面向对象程序设计(OOP)是程序设计的一个主要范式。它有助于使用对象开发程序或软件。对象是使用蓝图创建的。它被称为一个类。类由应该包含在对象中的属性和行为组成。类...
...藏了一些东西,但是它们也有各自的区别。 什么是抽象(abstraction)? 抽象是一个基本的OOP概念,它只关注对象的相关数据,隐藏所有不相关的细节,这些细节可能是通用的,也可能不是专用的行为。它隐藏了背景细节,强调了减...
...们详细研究一下两者的区别。 什么是java中的抽象类(an abstract class in java)? Java中的抽象类是一个声明为抽象的类——它可能包含也可能不包含抽象方法。它与Java接口非常相似,只是它可以包含默认的方法实现。与面向对象编程...
...ollective nouns, countable and uncountable nouns. 什么是抽象名词(an abstract noun)? 抽象名词是具体名词的对立面。抽象名词指思想、信仰、概念或事物的状态。它们指的是不能通过五种感官来体验的事物:视觉、声音、嗅觉、触觉和味觉。...
...键术语 抽象类、接口、多重继承 什么是java中的抽象类(abstract class in java)? 用abstract关键字声明的类称为抽象类。抽象类既可以有抽象方法,也可以有非抽象方法。类可以扩展抽象类并实现抽象类的抽象方法。不能从抽象类创...
...ShapeFactory以获取所需的对象类型。 什么是抽象工厂模式(abstract factory pattern)? 抽象工厂模式使用超级工厂并创建其他工厂。它也被称为工厂的工厂。在这种模式中,接口创建相关对象的工厂,而不显式指定它们的类。换言之,...
...总的来说,数据隐藏有助于保护类的成员。 什么是抽象(abstraction)? 抽象隐藏了内部细节,只向用户显示功能。换句话说,它隐藏了实现细节,并向外界展示了功能。例如,假设一个真实世界的应用程序,例如移动电话。用户不...