Closed 。这个问题是基于意见的 /help/closed-questions 。目前不接受答案。
我遇到过不同的采访,其中有人问我为什么使用封装?封装实际上是谁的需求?是针对程序用户的吗?还是为了同事?或者是为了保护代码免受黑客攻击?
封装有助于将实现细节与暴露给类的客户端(使用此类的其他类/函数)的行为隔离开来,并让您能够更好地控制coupling http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29 在你的代码中。考虑这个例子,类似于罗伯特·马丁书中的例子干净的代码 https://rads.stackoverflow.com/amzn/click/com/0132350882 :
public class Car
{
//...
public float GetFuelPercentage() { /* ... */ };
//...
private float gasoline;
//...
}
请注意,使用为您提供汽车燃油量的函数的客户端并不关心汽车使用什么类型的燃油。这种抽象将关注点(燃料量)与不重要的(在这种情况下)细节分开:无论是天然气、石油还是其他任何东西。
第二件事是,该类的作者可以自由地对类的内部进行任何他们想做的事情,例如将汽油改为石油,以及其他事情,只要他们不改变其行为。这要归功于这样一个事实:他们可以确定没有人依赖这些细节,因为它们是私有的。代码中的依赖项越少,代码就越灵活且易于维护。
另一件事,正确地注明在被低估的答案 https://stackoverflow.com/a/18301027/2642204 by 乌特纳皮什丁 https://stackoverflow.com/users/186997/utnapistim :低耦合还有助于测试代码并维护这些测试。类的接口越简单,测试就越容易。如果没有封装,所有内容都暴露出来,就很难理解要测试什么以及如何测试。
重申评论中的一些讨论:
不,封装不是最重要的 OOP 中的事情。我什至敢说这不是很重要。重要的事情是封装所鼓励的——比如松散耦合。但这不是必需的 - 细心的开发人员可以在不封装变量等的情况下保持松散耦合。正如所指出的弗拉斯塔丘 https://stackoverflow.com/users/1796835/vlastachu Python 是一种没有强制封装机制的语言的一个很好的例子,但它对于 OOP 仍然是可行的。
不,将您的字段隐藏在访问器后面不是封装 。如果您所做的唯一一件事就是在变量前面写“private”,然后无意识地为每个变量提供 get/set 对,那么实际上它们没有被封装。代码中远处的某个人仍然可以干预你的类的内部,并且仍然可以depend 在他们身上(当然,这是a bit 最好它们依赖于方法,而不是字段)。
不,封装的主要目标不是避免错误。主要目标至少与上面列出的目标相似,并且认为封装可以防止您犯错误是天真的。除了更改私有变量之外,还有很多其他方法会导致错误。更改私有变量并不难查找和修复。再说一遍 - Python 是这个论点的一个很好的例子,因为它可以在不强制执行的情况下进行封装。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)