什么是封装,它如何防御腐败抽象?

时间:2010-03-21 13:57:03

标签: oop encapsulation

引自Bjarne的一篇报道:

  

封装 - 提供的能力   保证使用抽象   只根据其规格 -   对于捍卫抽象至关重要   反腐败。

有人可以解释一下吗?

由于

2 个答案:

答案 0 :(得分:2)

假设您有一个包含公共方法的类,您必须使用它来执行某些操作。类的规范说,为了执行此操作,您必须以特定方式配置类(调用此方法,设置此属性等)。

这种情况的问题在于,可能不清楚需要发生什么或以什么顺序发生。因此,对于大多数开发人员而言,该类的API难以使用并且令人困惑。

使用封装,您可以“封装”不仅仅是类,而是算法,以便在第二个类中使用它。第二个类设置原始类,配置它,并管理它的生命周期。它允许您访问API而无需知道如何正确使用它,因为封装类负责这一点。这有时称为Facade模式。

你的引述还说“对于捍卫反腐败的抽象至关重要。”这意味着当你将一些进程抽象为一个类时,该进程的不同实现不应该要求以不同的方式处理抽象。

例如,您可能有两个报表编写器类的实现。您应该能够完全相同地处理它们中的每一个,而不知道它们是如何实现的(抽象的含义)。但是,如果无法在多线程单元状态(MTA)中运行,则在使用它之前必须“知道”,是时候转换到STA线程了。这个神奇的“知识”是课堂实施所必需的。这是一个“漏洞抽象”。

通过封装,您可以在封装类中防止这种“泄漏”,从而在封装中转换到STA线程,防止抽象泄露其实现的细节。

答案 1 :(得分:0)

这意味着该对象仅授予它需要公开的某些内容,并拒绝您使用它不希望您使用的数据。

最经典的例子是属性: Yout字段将是私有的(或受保护的)。 如果您希望将它们公开以进行读取或写入,则相应地添加一个getter \ setter。