使用公共,受保护的和私有的最佳做法?


12

可以公平地说,private编码某些东西时最好将所有内容默认为默认值吗?

然后仅protected在子类需要它或public其他类需要它时才将其升级到?


2
如果要创建一些API,则需要预期调用者可能需要的功能。因此,您需要在访问修饰符中多加思考。这取决于谁在使用您正在编写的代码。
user2023861 2016年

Answers:


10

简短答案:

更长的答案:

是的,但这不应该被解释为建议以编写私有的类开始。在确定接口之前,该方法通过关注实现细节来隐含类设计。

设计类时要考虑的最重要方面之一是如何使用它。在开始考虑私有/实现细节之前,需要先考虑您的公共方法。

此外,这种方法通常会错过机会问自己“我将如何为该课程编写单元测试?” -即使您实际上没有编写单元测试,这也是一个重要的问题。(相关:“促进可测试代码的设计原则是什么?”

因此,一旦定义了公共接口,则将其余部分默认为私有是一个好主意,因为其中大多数通常是具体的实现细节,而该类之外的任何内容都不关心。


因此,如果我试图总结您对您说的话(以了解我是否理解),则最好先考虑面向公众的界面(即,该类实际上是如何被该类使用的)的一个好主意。外部开始?),然后将其他所有内容设为私有?
AJJ

1
@ArukaJ一个好的方法是在构建实现​​之前编写将使用您的类的代码。在您首先开始编写单元测试之前,这可能是一个小问题。
JimmyJames

1
@ArukaJ大致上是;乍一看似乎很难做到,尽管正如JimmyJames提到的那样,在编写单元测试时感觉更加直观。它可能包含稍微不同的思维方式,但是目标是更仔细地考虑您的班级代表什么以及您的输入/输出是什么样子-总体而言,这只是一种更“ OO”的设计思维方式;更可能导致具有高内聚力的整齐封装的类。
Ben Cottrell

我乐于使用单元测试来设计您的类,因为单元测试并不是真正使用它的人。但是,在考虑如何使用该类时,绝对比没有要好。
user949300 '16

8

“然后仅在子类需要它时才将其升级到受保护,而在其他类需要它时才将其升级到受保护的吗?”

那是错误的方法。在设计时,您应该知道授予哪些公共访问权限。通常,您授予公众访问权限,因为这是您课堂的全部目的。并且您授予受保护的访问权限,因为您希望子类访问事物。而您将private用于其他人的事。

现在,如果某人需要访问他们无法访问的内容,那么您应该认真考虑这一需求。他们不需要访问权限,否则您的设计是错误的。也许您的设计错误的,并且某些不公开的应该公开,因此您可以更改它。但是,如果你的设计是正确的,那么有什么不对的需要,所以你解决不是破坏你的设计。


比方说,你有一个类,你不要在这个时候打算子类(和可能永远都不需要)和方法,如果你要继承你的类,将是有益的/由子类需要/。您会采用这种方法private还是protected
lfk

应该是公认的答案,首先将所有内容都设为私有,听起来像我不想思考/设计。

1

理解面向对象编程这一方面的关键是数据封装的概念。这个想法是通过隐藏类的实现细节来使类更易于理解。这称为数据隐藏。因此,我们只想公开(公开)使用该类所需的那些函数。这些函数是类的接口

可以将接口想像成汽车的车轮。您可以通过旋转车轮来决定汽车的行驶方向,但是在盖的下方有旋转阀,液压系统,滑轮来改变车轮的旋转,但是您无需机械工程师即可驾驶汽车。

因此,您的问题的答案是肯定的。您想从其他类中隐藏尽可能多的关于一个类的详细信息。了解什么时候应该公开,私有或受保护是容易学习但很难掌握的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.