封装要求

Requirement of encapsulation

提问人:naruto_022 提问时间:2/2/2020 最后编辑:jaco0646naruto_022 更新时间:2/16/2020 访问量:125

问:

“封装是 OOP 最重要的特性之一,用于数据保护”,根据许多书籍和网站的说法。维基百科同样指出,

封装用于将结构化数据对象的值或状态隐藏在类中,防止未经授权的各方直接访问它们。

但是保护什么?是来自我们自己无知的自我,确保我们以后不会在程序太长或其他因素时搞砸?

OOP 与语言无关 的封装 信息隐藏

评论

1赞 Kayaman 2/2/2020
几乎是肯定的。
0赞 Hovercraft Full Of Eels 2/2/2020
你同时标记了 Java 和 C++ 的问题,这不是一件好事。要么这个问题应该与语言无关(我已经做了这个更改),要么如果你想让它特定于一种编程语言,你应该只标记这种语言。
0赞 cameron1024 2/2/2020
如果你看不到一个类的所有内部工作,你可以放心地假设(如果创建该类的程序员知道他们在做什么),你不需要知道内部工作
0赞 naruto_022 2/2/2020
@cameron1024 但是,在不了解内部运作的情况下,难道在写东西时就没有可能自己犯一些错误吗??

答:

0赞 epap 2/2/2020 #1

基本上,您可以封装数据以保护它免受不应修改它的所有内容的影响。例如,考虑一下 Java 中的私有类,其中包含 getter 和 setter。这是基本的封装,因为您只允许以给定的方式读取和修改数据,同时保护数据免受任何不需要或意外的修改。

0赞 Hovercraft Full Of Eels 2/2/2020 #2

封装和“信息隐藏”背后的动机之一是减少耦合,从而降低复杂性,准确地说是圈复杂度,在较大的程序中,它可以呈指数级增长,而更高的复杂性意味着更大的错误风险。通过防止暴露字段的副作用,可以降低创建错误的可能性。

0赞 Matt Timmermans 2/16/2020 #3

如果你提供一些东西,那么有人就会使用它,如果有人使用它,那么你就不能改变它。或者至少你不能在不找到、彻底理解和测试所有使用它的东西的情况下改变它。

如果某些东西是私有封装的,你只需要担心封装范围内的东西,它应该足够小,更容易理解。

评论

0赞 jaco0646 2/16/2020
问题及其(当前)答案都假定封装和信息隐藏始终是结合在一起的。没有信息隐藏的封装就没有好处吗?
0赞 Matt Timmermans 2/16/2020
@jaco0646信息隐藏强制封装所暗示的内容
0赞 jaco0646 2/16/2020
根据您对 OP 的回答,如果不强制执行,建议就没有价值。因此,封装本身似乎没有价值。信息隐藏才是最重要的。
0赞 Matt Timmermans 2/16/2020
其他开发人员(包括你未来的自己)可能不同意你的观点,他们可能会犯错误,但他们不会与你作对。你的软件的结构很大程度上取决于它如何传达你的意图。
0赞 jaco0646 2/16/2020
谢谢你,我很欣赏你的见解。我想研究这个迂腐的观点,因为大多数情况下,封装和信息隐藏是粗心地混为一谈的。我个人的观点是,封装的好处是内聚力,无论封装的工件是隐藏的还是暴露的,都会发生内聚力。相反,工件可以单独隐藏(未封装),从而失去内聚力。