在 OOP 编程风格中,我们为什么要隐藏对象的数据成员不被其他人直接访问



我只是不知道为什么这是规则。 这个规则有什么好处?
你能给我举个例子,我们最好遵循这个规则吗?

它也被称为数据隐藏,有助于保持对象的完整性。它可以避免滥用和外部干扰。不能直接访问数据,但可以指定访问控制以获取信息。根据需要,数据或对象可以设为公共或私有。私有数据不能在对象范围之外访问。当数据公开时,程序的其他部分可以访问它。

">

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

我认为

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

大多数情况下,您类的用户是"您"和您的团队成员。

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

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

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

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

计数器示例是一个 Web 请求类,它公开了它的所有方法。它使有20种方法,下载开始,下载结束,选择协议等。所有这些都可以在内部使用,但从未打算在外部调用。为了使用该类,您必须知道它在内部是如何工作的,然后才能知道要调用哪些方法。

经常被吹捧的数据隐藏的优点之一是它有助于保护您的类免受滥用。 你不能相信你的类的用户会用它做正确的事情,所以你不可能用它做错误的事情。 大多数情况下,向类的用户提供对其任何成员的直接访问权限,可能会将该成员设置为某个无效或无意义的值,或者在错误的时间设置。

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

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

最新更新