【问题标题】:Why put private fields and methods at the top of class?为什么将私有字段和方法放在类的顶部?
【发布时间】:2009-04-22 17:12:06
【问题描述】:

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

这背后的原因是什么?

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

【问题讨论】:

  • 有史以来最糟糕的评论。
  • 既然问题是关于“编码文本的问题”,@Syed Tayyab Ali,你的评论真的很莫名其妙。当他们想了解编码文本的问题时,为什么要结束这个问题?
  • 好的,我收回我的话。

标签: class-design


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 为什么不首先使用struct 关键字?
    【解决方案3】:

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

    【讨论】:

    • 这是一个很好的观点,但我认为公共方法比变量更接近目录。
    【解决方案4】:

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

    在所有你想学习的东西中,按照需要这些知识的顺序来学习,例如在学习如何乘法之前学习如何加法。

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

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

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

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

    【讨论】:

    • 在引发此问题的辩论之后,我和一位同事得出了相同的结论。这是我们能想到的唯一合乎逻辑的理由。
    【解决方案5】:

    两个原因。

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

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

    【讨论】:

      【解决方案6】:

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

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

      您只能根据行为所代表的数据来思考行为 所以 - 这就是为什么我想把我的数据元素放在顶部。

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

            我猜这是习惯。您必须先声明函数和变量,然后才能使用它们,所以这是一致的。

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

            【讨论】:

            • 根据您使用的编程语言,类级函数和变量不必在使用前声明。 Java 和 C# 都以这种方式工作。
            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

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

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

              【讨论】:

              • 这不是完全隐藏私有变量,而是让读者首先看到更重要的行为。
              猜你喜欢
              • 2013-09-01
              • 2015-04-16
              • 2022-01-04
              • 1970-01-01
              • 2020-08-03
              • 1970-01-01
              • 2013-05-07
              • 1970-01-01
              • 2011-08-05
              相关资源
              最近更新 更多