公共与私人?

Joh*_*ith 3 oop encapsulation class

我真的不明白为什么将成员变量和成员函数设为私有是一种很好的做法.

这是为了防止人们使用某些组织工具来解决问题吗?

pax*_*blo 16

基本上,是的,这是为了防止人们搞砸东西.

封装(信息隐藏)是您正在寻找的术语.

通过仅向外界发布最少的信息,您可以随意更改内部信息.

例如,假设您将电话簿实现为一系列条目,而不是隐藏这一事实.

然后有人出现并编写代码来搜索或操作您的数组,而无需通过"正常"界面.这意味着,当您想要开始使用链表或其他更高效的数据结构时,它们的代码将会中断,因为它使用了该信息.

这是发布这些信息的错,而不是他们使用它的信息:-)

经典的例子是制定者和吸气剂.您可能认为您可以在类中公开温度变量本身,以便用户可以执行以下操作:

Location here = new Location();
int currTemp = here.temp;
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望以后在要求温度时实际上从气象局获取网络信息,该怎么办?如果你首先封装了信息,那么调用者就会这样做:

int currTemp = here.getTemp();
Run Code Online (Sandbox Code Playgroud)

并且您可以根据需要更改该方法的实现.您唯一需要保留的是API(函数名,参数,返回类型等).


有趣的是,它不只是在代码中.某些大公司会用以下短语来记录他们的文档:

此技术信息仅供参考,在将来的版本中可能会更改.

这允许他们提供客户想要的东西(额外的信息),但不会锁定他们永远支持它.


Ker*_* SB 6

主要原因是您(图书馆开发人员)有保险,没有人会使用您不希望维护的部分代码.

您的代码的每一个公共部分都可以,并且不可避免地被您的客户使用.如果您后来发现您的设计实际上非常糟糕,并且版本2.0应该写得更好,那么您会意识到您的付费客户实际上希望您保留所有现有功能,并且您已经锁定以保持向后兼容性的价格制作更好的软件.

通过将尽可能多的代码编写为私有代码,您毫无保留地声明此代码不是任何人的业务,并且您可以并且将能够随时重写它.