提问人:naruto_022 提问时间:2/2/2020 最后编辑:jaco0646naruto_022 更新时间:2/16/2020 访问量:125
封装要求
Requirement of encapsulation
问:
“封装是 OOP 最重要的特性之一,用于数据保护”,根据许多书籍和网站的说法。维基百科同样指出,
封装用于将结构化数据对象的值或状态隐藏在类中,防止未经授权的各方直接访问它们。
但是保护什么?是来自我们自己无知的自我,确保我们以后不会在程序太长或其他因素时搞砸?
答:
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
谢谢你,我很欣赏你的见解。我想研究这个迂腐的观点,因为大多数情况下,封装和信息隐藏是粗心地混为一谈的。我个人的观点是,封装的好处是内聚力,无论封装的工件是隐藏的还是暴露的,都会发生内聚力。相反,工件可以单独隐藏(未封装),从而失去内聚力。
评论