跳转到内容

编程基础/封装

来自维基教科书,开放的书籍,开放的世界

封装是面向对象编程 (OOP) 的基本原理之一。 它指的是将数据与其操作这些数据的函数捆绑在一起。 封装用于隐藏类内部结构化数据对象的属性或状态,防止未经授权的访问。 通常,类中会提供公开可访问的方法 (称为 getter 和 setter) 来访问这些属性,其他客户端类调用这些方法来检索和修改对象内部的属性。[1]

面向对象最重要的原则是 封装:对象内部的数据只能通过公共 接口 访问,也就是对象的函数。

如果我们想使用对象中存储的数据来执行操作或计算派生值,我们定义与对象关联的函数来执行此操作。 然后,当我们想要执行此操作时,我们调用对象上的函数。 我们认为从对象内部检索信息并在对象外部编写单独的代码来执行操作是一种不好的做法。

封装有很多好处

  • 功能在 一个地方 定义,而不是多个地方。
  • 它在逻辑位置定义 - 数据保存的位置。
  • 对象内部的数据不会被我们程序中完全不同的外部代码意外修改。
  • 当我们使用函数时,我们只需要知道函数会产生什么结果 - 我们不需要了解对象的内部细节就能使用它。 我们可以切换到使用内部完全不同的另一个对象,而无需更改任何代码,因为这两个对象具有相同的接口。

我们可以说对象“知道如何”处理自己的数据,而我们自己访问其内部并处理数据则不是一个好主意。 如果一个对象没有一个接口函数来做我们想做的事情,我们应该添加一个新的函数或更新一个现有的函数。

有些语言具有允许我们严格执行封装的功能。 在 Java 或 C++ 中,我们可以定义对象属性的访问权限,并使其非法从对象函数外部访问它们。 在 Java 中,对于所有属性编写 setter 和 getter 也是最佳实践,即使 getter 只检索属性,而 setter 只是将属性分配为传入参数的值。

在 Python 中,封装不是由语言强制执行的,但有一个约定我们可以用来指示一个属性应该私有且不是对象公共接口的一部分:我们以下划线开头它的名称。 Python 还支持使用属性装饰器来替换简单属性,而不会改变对象的接口。

关键词

[编辑 | 编辑源代码]
抽象
一种组织计算机系统复杂性的技术,使功能可以与具体的实现细节分离。[2][3]
访问器
用于返回私有成员变量的值的方法,也称为 getter 方法。[4]
封装
一种语言机制,用于限制对对象某些组件的直接访问。[5]
信息隐藏
在计算机程序中将设计决策与程序其他部分分离的原则。 请参阅封装。[6]
修改器
用于控制对私有成员变量更改的方法,也称为 setter 方法。[7]
私有
一种访问修饰符,将属性或方法的可见性限制为定义它的类。[8]
公共
一种访问修饰符,将属性或方法的可见性对所有其他类开放。[9]

参考资料

[编辑 | 编辑源代码]
华夏公益教科书