【发布时间】:2021-06-13 08:22:43
【问题描述】:
封装有两种常见的definitions:
- 一种语言机制,用于限制直接访问某些 对象的组件。
- 一种便于将数据与 操作该数据的方法(或其他函数)。
通常的做法是从不使用公共属性,而是使用 getter/setter。如果公共属性打破了封装,为什么现代编程语言提供了使用它们的可能性?
【问题讨论】:
-
我能想到一些,尽管它们并不适用于所有语言。 1. 它们不会完全破坏封装(您可以在 getter/setter 中包含调试代码或副作用)。 2. 对于某些语言,通过静态分析很难知道 setter/getter 是什么。 3. 许多语言在某种程度上是多范式。 4. 有时尊重封装是不可取的——例如在编写小程序时。 5. Getter/Setter 是不同的东西,它们都减少了封装。但是按值获取的 getter 仍然不允许您修改源对象。
-
您将公共字段与公共属性混合在一起。公共属性是“限制直接访问某些对象组件的语言机制”。有些语言没有属性的概念,它们唯一的机制是使用 getter/setter。属性是实现封装的更高级机制,它们可以由 getter/setter 支持,但它们不一定是 - 使用由字段和字段支持的属性之间的主要区别在于,您可以在不破坏公共的情况下将 getter/setter 添加到属性API。
标签: oop