Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 什么是封装,它如何保护抽象不受损坏?_Oop_Encapsulation - Fatal编程技术网

Oop 什么是封装,它如何保护抽象不受损坏?

Oop 什么是封装,它如何保护抽象不受损坏?,oop,encapsulation,Oop,Encapsulation,引用比亚恩的一篇报道: 封装–提供 保证使用抽象 仅根据其规范—— 是捍卫抽象的关键 反腐败 有人能解释一下吗 谢谢假设您有一个带有公共方法的类,您必须使用它来执行某些操作。类的规范说明,为了执行此操作,必须以特定的方式配置类(调用此方法、设置此属性等) 这种情况下的问题是,可能不清楚需要发生什么或以什么顺序发生。因此,该类的API很难使用,并且会让大多数开发人员感到困惑 通过封装,您不仅可以“封装”类,还可以“封装”在第二个类中使用它的算法。第二个类设置原始类,对其进行配置,并管理其生存期。它

引用比亚恩的一篇报道:

封装–提供 保证使用抽象 仅根据其规范—— 是捍卫抽象的关键 反腐败

有人能解释一下吗


谢谢

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

这种情况下的问题是,可能不清楚需要发生什么或以什么顺序发生。因此,该类的API很难使用,并且会让大多数开发人员感到困惑

通过封装,您不仅可以“封装”类,还可以“封装”在第二个类中使用它的算法。第二个类设置原始类,对其进行配置,并管理其生存期。它允许您访问API,而无需知道如何正确使用它,因为封装类负责这一点。这有时被称为门面模式

您的引用还说“对于保护抽象不受损坏至关重要”。这意味着,当您将某个流程抽象到一个类中时,该流程的不同实现不应要求对抽象进行不同的处理

例如,您可能有两个报表编写器类的实现。您应该能够完全相同地对待它们,而不知道它们是如何实现的(抽象的含义)。但是,如果一个线程不能在多线程单元状态(MTA)下运行,那么在使用它之前,您必须“知道”是时候转换到STA线程了。这种神奇的“知道”是类实现所必需的。这是一个“漏洞百出的抽象概念”


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

这意味着对象只向其需要公开的某些内容授予预授权,拒绝你使用它不希望你使用的数据

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