【发布时间】:2011-10-26 16:49:02
【问题描述】:
我正在寻找具体而准确的规则来确定如何声明方法的可见性。这与语言无关,它适用于标准 OOP 语言。
【问题讨论】:
-
您的意思是 与语言无关,但不是特定于语言。
标签: oop design-patterns coding-style
我正在寻找具体而准确的规则来确定如何声明方法的可见性。这与语言无关,它适用于标准 OOP 语言。
【问题讨论】:
标签: oop design-patterns coding-style
一个好的规则是:
成员的可访问性不应超出他们的需要。
从private 开始,并在需要时使它们更易于访问。
【讨论】:
基本上:
getState() 这样的东西适合这里。changeState(...)。通常,这与对象内容的实际更改有关-也许您将拥有一个仅调用私有setXInternal(int x)的公共setX(int x),这样您就可以进行额外的类型检查/安全性/等。为安全起见,您不妨将所有内容设为私有,直到必须不公开为止。【讨论】:
对于任何类/对象,都有:
1. 它所做的事情(行为)
2.它们是怎么做的(实现)
世界关心你的对象的行为。它不应该(经常)关心它是如何在后台实现这种行为的。将实现细节保密,并公开行为。
【讨论】:
任何不直接定义特定对象的行为但在实现对象行为期间有用的操作都是私有成员函数的候选者。
【讨论】:
我认为 public、protected 和 private 关键字的帮助只是为了让代码更清晰。
因此,您可以将 public 用于类的 API,将 private 用于明确如何不扩展类并在其他情况下受到保护。
一种常见的务实方法是永远不要使用私有,而只使用公共或受保护。
【讨论】:
对于属于公共 API 一部分的事物是公共的。
保护您希望子类能够调用的非公共函数。
如果您不希望子类与所述方法混在一起(或者甚至不知道它的存在),则为私有。
在 C、C++ 和 C# 中,如果您希望子类能够覆盖方法,请不要忘记将方法标记为虚拟。
【讨论】: