为什么方法和属性的可见性很重要?

2022-08-30 11:22:57

为什么不能让所有方法和属性都可以从任何地方访问(即)?public

你能给我一个例子,如果我将一个属性声明为?我可以遇到一个问题吗?public


答案 1

把麦当劳想象成一个对象。有一种众所周知的公共方法来订购BigMac。

在内部,将会有无数其他调用来实际获取制作Bigmac的材料。他们不想让你知道他们的供应链是如何运作的,所以你得到的只是公开的电话,永远不会允许你访问或方法。Gimme_a_BigMac()Slaughter_a_cow()Buy_potatoes_for_fries()

对于你自己的代码,没有人会看到,继续把一切都公开。但是,如果您正在为其他人提供一个可供重用的库,那么您可以保护内部详细信息。这使得麦当劳可以自由地切换到让斯科蒂在肉饼上横梁,而不必打电话给卡车运输公司通过陆路运送肉类。最终用户永远不会知道其中的区别 - 他们只是得到他们的BigMac。但在内部,一切都可能从根本上改变。


答案 2

为什么不能让所有的方法和属性都可以从任何地方(即公共)访问?

因为这太贵了

我制作的每个公共方法都必须经过精心设计,然后一组架构师批准,它必须在面对任意敌对或有缺陷的调用者时实现健壮,它必须经过全面测试,测试期间发现的所有问题都必须添加回归套件,方法必须被记录下来 文档必须翻译成至少十二种不同的语言。

然而,最大的代价是:方法必须保持,不变,永远永远,阿们。如果我在下一个版本中决定我不喜欢该方法,我无法更改它,因为客户现在依赖它。破坏公共方法的向后兼容性会给用户带来成本,我不愿意这样做。面对公共方法的糟糕设计或实现,会给下一个版本的设计者、测试人员和实现者带来高昂的成本。

一个公共方法很容易花费数千甚至数万美元。在一个班级里做一百个,那就是一百万美元的班级。

私有方法没有这些成本。明智地花股东的钱;尽可能地把一切都私有化。


推荐