【问题标题】:When to declare methods as private何时将方法声明为私有
【发布时间】:2011-10-26 16:49:02
【问题描述】:

我正在寻找具体而准确的规则来确定如何声明方法的可见性。这与语言无关,它适用于标准 OOP 语言。

【问题讨论】:

  • 您的意思是 与语言无关,但不是特定于语言。

标签: oop design-patterns coding-style


【解决方案1】:

一个好的规则是:

成员的可访问性不应超出他们的需要。

private 开始,并在需要时使它们更易于访问。

【讨论】:

  • +1,但是你从哪里引用这个?我很想看看上下文和文章的其余部分。
  • 我只是编造的,但我确定以前有人说过
  • 是的,但成员可能已经在 OOP 方面定义不正确(例如:一个巨大的类处理多个关注点)。
  • @hunter 我应该关注如何首先创建 API/设计而不是如何将私有/公共应用于现有方法的问题。
【解决方案2】:

基本上:

  • Public 用于方法必须可由外部类访问的情况。像getState() 这样的东西适合这里。
  • Private 用于当方法不应该被任何其他类访问时,例如changeState(...)。通常,这与对象内容的实际更改有关-也许您将拥有一个仅调用私有setXInternal(int x)的公共setX(int x),这样您就可以进行额外的类型检查/安全性/等。为安全起见,您不妨将所有内容设为私有,直到必须不公开为止。
  • Protected 基本上是“对子类公开,否则为私有”。无论哪种方式都可以。

【讨论】:

    【解决方案3】:

    对于任何类/对象,都有:
    1. 它所做的事情(行为)
    2.它们是怎么做的(实现)

    世界关心你的对象的行为。它不应该(经常)关心它是如何在后台实现这种行为的。将实现细节保密,并公开行为。

    【讨论】:

      【解决方案4】:

      任何不直接定义特定对象的行为但在实现对象行为期间有用的操作都是私有成员函数的候选者。

      【讨论】:

        【解决方案5】:

        我认为 public、protected 和 private 关键字的帮助只是为了让代码更清晰。

        因此,您可以将 public 用于类的 API,将 private 用于明确如何不扩展类并在其他情况下受到保护。

        一种常见的务实方法是永远不要使用私有,而只使用公共或受保护。

        【讨论】:

          【解决方案6】:

          对于属于公共 API 一部分的事物是公共的。
          保护您希望子类能够调用的非公共函数。
          如果您不希望子类与所述方法混在一起(或者甚至不知道它的存在),则为私有。

          在 C、C++ 和 C# 中,如果您希望子类能够覆盖方法,请不要忘记将方法标记为虚拟。

          【讨论】:

            猜你喜欢
            • 2011-02-21
            • 1970-01-01
            • 1970-01-01
            • 2012-01-13
            • 2010-10-13
            • 2017-04-17
            • 1970-01-01
            • 2018-12-20
            相关资源
            最近更新 更多