35

我已经在许多地方以多种语言看到过这个事实上的标准,但我从来没有理解它——为什么将你的私有字段和方法放在类声明的顶部?隐喻看来,私有的东西应该位于底部(隐藏),而所有公共的东西都应该位于顶部,因此当您从上到下阅读类时,您首先会看到公共接口,然后是内部工作原理。

这背后的原因是什么?

编辑:澄清一下,我并不是说将所有成员声明在类的顶部,而是将私有成员/方法放在类声明的顶部,在任何公开之前。

4

11 回答 11

27

它源于您必须在使用它们之前声明所有内容(包括函数和变量)的日子。

内部(私有)变量和函数位于文件顶部,外部(公共)函数位于文件底部。这意味着公共函数可以引用内部函数。如果您有递归,则必须通过声明它的配置文件来转发引用该函数。

当语言允许代码跨越多个文件时,您必须将公共函数和变量声明放入头文件中,以便它们可以包含在项目的其他文件中 - 或者实际上是其他项目。

于 2009-04-22T21:13:34.710 回答
12

它可能来自 C 的时代,当时所有变量都必须在顶部定义,作为初始化的一部分。此外,默认的访问说明符是,因此它可以在以后的类定义中为您private省去多余的东西。private:

于 2009-04-22T17:15:21.663 回答
11

就个人而言,当我试图阅读别人的代码并理解它时,我喜欢拥有私有字段提供的上下文。它让我快速了解了他们正在做的事情的类型以及我可以期待看到的内容。如果操作正确,它可以提供一个很好的预览,几乎就像是其余代码的目录。

于 2009-04-22T17:16:31.940 回答
5

我同意它可能来自 C,但它也具有实用功能。

在所有你想学习的东西中,这些知识是需要的,比如在学习如何乘法之前学习如何加法。

在代码的情况下,您的公共函数通常会引用内部私有函数,而您的私有函数不太可能引用公共函数(尽管肯定存在重叠。)因此,了解您拥有哪些私有变量以及它们的用途在尝试了解公共方法对这些变量的作用时会很有用。

以这种方式,在阅读调用它们的公共方法之前了解私有方法的作用也很有用。

总的来说,我相信它是一种来自 C 和更早语言的风格,但是因为它在功能上更有用,所以我认为切换风格没有任何好处。

而且,与往常一样,除非有令人难以置信的令人信服的理由,否则打破一致性绝不是一个好主意。

于 2009-04-22T18:24:47.970 回答
3

两个原因。

如果它们都在顶部,则它们很容易找到,并且在创建新事物时易于检查,以查看哪些命名约定在起作用以及哪些名称可用和不可用。

在 C 语言和 javascript 中,代码中的所有引用都必须在引用它们的地方声明和/或定义,因为引用的所有内容都必须是已知的。(是的,我知道,只有 JavaScript。)

于 2009-04-22T17:16:08.087 回答
3

在 OOP 中——有两件事——数据和行为

私有成员代表数据,公共方法代表行为。

你只能根据它所代表的数据来考虑行为所以——这就是为什么我想把我的数据元素放在最前面的原因。

于 2009-04-22T20:45:41.780 回答
2

关于fields,将所有字段设为私有(封装等)是很常见的。而且它们很小。因为它们很小,所以把它们放在一起很好,也有可能,而且班级的顶部是一个很好、稳定的地方。我不知道这是否是它的历史理由——我认为 C 语言的根源可能更好地解释了这一点——但这可能是我们将它们保留在那里的一个原因。

就我自己而言,出于您建议的原因,我倾向于将私有方法放在底部。

于 2009-04-22T18:23:09.940 回答
1

我认为事实上的标准首先是公共方法!至少这是我写课程的方式。它帮助我为我的方法选择数据结构。

于 2009-04-22T18:13:29.247 回答
0

估计是习惯了 您必须先声明函数和变量,然后才能使用它们,因此这是一致的。

另一方面,它是你不想让其他人阅读的东西,所以它属于底部。

于 2009-04-22T17:17:43.497 回答
0

因为像@ChrisF 所说的那样的语言>> 例如解释性语言,Python 是一个突出的语言

于 2013-06-28T15:56:01.397 回答
-2

他们在那里并不是什么秘密。您是否害怕有人会了解内部运作?如果他们有资源,他们可以了解他们需要了解的有关您的课程的所有信息。

将它们与其他人放在一起可以更容易地开发该类。您的所有类变量都在一个地方,您的方法也是如此。

于 2009-04-22T17:17:08.053 回答