3

我只是不知道为什么这是规则。这条规则有什么好处?
你能给我一个例子,让我们更好地遵循这个规则。

4

4 回答 4

4

它也称为数据隐藏,有助于维护对象的完整性。它可以防止数据被误用和外部干扰。无法直接访问数据,但可以指定访问控制以获取信息。数据或对象可以根据需要公开或私有。私有数据在对象范围之外是不可访问的。当数据公开时,程序的其他部分可以访问它。

于 2012-05-01T07:37:46.547 回答
2

“防止你的类的用户滥用它”经常被吹捧为封装如此重要的原因。

我认为这意味着您正在编写类供其他不受信任的开发人员使用,我认为这种情况很少见。不受信任的客户论点混淆了这个问题。

大多数时候,您班级的用户是“您”和您团队的成员。

类的公共方法和属性构成了类和其余代码之间的接口点。界面越小越容易使用和理解。

封装的原因是使您的类的接口尽可能小而简洁。

如果你的类是高度内聚的并且有小的接口,你可以很容易地“忘记”它们是如何工作的,而专注于你程序的另一部分。

以发出 Web 请求的类为例。它可能会公开一个公共方法 DownloadFile(url)。这个类可能非常复杂,但它的简单界面意味着你可以忘记它是如何工作的内部结构,让你有更多的空间来专注于你试图解决的问题。

反例是公开公开其所有方法的 Web 请求类。它有 20 个方法,DownloadBegin、DownloadEnd、ChooseProtocol 等。所有这些都可以在内部使用,但从不打算在外部调用。为了使用该类,您必须先知道它在内部是如何工作的,然后才能知道要调用哪些方法。

于 2012-05-01T08:01:50.637 回答
1

被吹捧的数据隐藏的优点之一是它有助于保护您的课程免受滥用。你不能相信你班级的用户会用它做正确的事,所以你不可能用它做错事。大多数情况下,让您的类的用户直接访问它的任何成员都会使该成员有可能被设置为一些无效或无意义的值,或者在错误的时间设置。

更实际的原因之一是,您无法更改数据成员的实现。例如,如果您有一个size可以公开访问的成员,那么稍后您需要让该类实际执行某些操作以响应大小的变化,那么您就被卡住了。如果您有访问器方法,那么这些方法可以像它们需要的那样神奇。

于 2012-05-01T07:49:09.240 回答
0

它也与关注点分离有关。如果您有公共接口并且数据不是公共的,您可以随时更改数据的表示方式,只更改保存数据的类。如果数据没有隐藏并且您更改了它,则必须更改所有使用该数据的代码。

于 2012-05-01T08:38:40.373 回答