Oop 最佳实践:在类定义中对公共/受保护/私有进行排序?
我正在从头开始一个新项目,希望它干净/有良好的编码标准。这里经验丰富的开发人员喜欢按什么顺序在类中布局 答:1)公共方法2)私有方法3)公共变量4)私有变量 B:1)公共变量2)私有变量3)公共方法4)私有方法 C:1)公共变量2)公共方法3)私有方法4)私有变量 我通常喜欢将公共静态变量放在顶部,但是,公共静态方法是在构造函数之前列出的,还是应该始终首先列出构造函数?诸如此类的事情 我知道这是芬尼基,但我只是想知道:这方面的最佳实践是什么Oop 最佳实践:在类定义中对公共/受保护/私有进行排序?,oop,coding-style,class-design,Oop,Coding Style,Class Design,我正在从头开始一个新项目,希望它干净/有良好的编码标准。这里经验丰富的开发人员喜欢按什么顺序在类中布局 答:1)公共方法2)私有方法3)公共变量4)私有变量 B:1)公共变量2)私有变量3)公共方法4)私有方法 C:1)公共变量2)公共方法3)私有方法4)私有变量 我通常喜欢将公共静态变量放在顶部,但是,公共静态方法是在构造函数之前列出的,还是应该始终首先列出构造函数?诸如此类的事情 我知道这是芬尼基,但我只是想知道:这方面的最佳实践是什么 PS:不,我不使用Cc。我知道。我是一个勒德分子。就我
PS:不,我不使用Cc。我知道。我是一个勒德分子。就我个人而言,我喜欢把公共放在最上面,受保护,然后是私人。原因是当有人打开标题时,他/她首先看到他/她可以访问的内容,然后在向下滚动时看到更多细节
使用类不必查看类的实现细节,那么类的设计就做得不好。最佳实践是保持一致性 就我个人而言,我更喜欢先使用
public
方法,然后是protected
方法,然后是private
方法。成员数据通常应该是私有的或受保护的,除非您有充分的理由不这样做
我之所以将public
方法放在顶部,是因为它为类定义了接口,所以任何阅读头文件的人都应该能够立即看到这些信息
一般来说,
private
和protected
成员对于大多数查看头文件的人来说不太重要,除非他们考虑修改类的内部结构。让它们“远离”可确保仅在需要知道的基础上维护此信息,这是封装的一个更重要方面。这将是我的订购
- 先静后静
- 先公后私
其思想是在行为(方法)之前定义对象(数据)。静态需要分开,因为它们实际上不是对象的一部分,也不是对象的行为。在中,Robert C.Martin建议程序员始终将成员变量放在类的顶部(先是常量,然后是私有成员)方法的顺序应该是这样的,这样它们读起来就像一个故事,而不会导致读者需要过多地跳转代码。这是一种更合理的组织代码的方法,而不是通过访问修饰符。我认为我在这方面的理念与大多数人不同。我更喜欢把相关的项目组合在一起。我不能忍受和同学们一起跳来跳去。代码应该是流动的,基于可访问性(公共、私有、受保护等)或实例与静态、成员与属性与函数的人为排序无助于保持良好的流动。因此,如果我创建了一个公共方法
method
,它是由私人助手方法HelperMethodA
、HelperMethodB
等实现的。那么,我将使它们彼此靠近,而不是让这些方法在文件中彼此远离。类似地,如果我有一个由静态方法实现的实例方法,我也会将它们组合在一起
所以我的课程通常是这样的:
class MyClass {
public string Method(int a) {
return HelperMethodA(a) + HelperMethodB(this.SomeStringMember);
}
string HelperMethodA(int a) { // returns some string }
string HelperMethodB(string s) { // returns some string }
public bool Equals(MyClass other) { return MyClass.Equals(this, other); }
public static bool Equals(MyClass left, MyClass right) { // return some bool }
public double SomeCalculation(double x, double y) {
if(x < 0) throw new ArgumentOutOfRangeException("x");
return DoSomeCalculation(x, y);
}
const double aConstant;
const double anotherConstant;
double DoSomeCalculation(double x, double y) {
return Math.Pow(aConstant, x) * Math.Sin(y)
+ this.SomeDoubleMember * anotherConstant;
}
}
class-MyClass{
公共字符串方法(int a){
返回HelperMethodA(a)+HelperMethodB(this.SomeStringMember);
}
string HelperMethodA(int a){//返回一些字符串}
字符串HelperMethodB(字符串s){//返回一些字符串}
public bool Equals(MyClass other){return MyClass.Equals(this,other);}
公共静态bool等于(MyClass左,MyClass右){//返回一些bool}
公共双精度计算(双x,双y){
如果(x<0)抛出新ArgumentOutOfRangeException(“x”);
返回剂量计算(x,y);
}
常数双常数;
常数双另一常数;
双剂量计算(双x,双y){
返回Math.Pow(常数x)*Math.Sin(y)
+this.SomeDoubleMember*另一个常量;
}
}
我过去很在乎。在过去的几年里,使用现代IDE几乎所有的东西都只需敲击一两下键盘,我的标准已经大大放宽了。现在,我从静态开始,成员变量,然后是构造函数,之后我就不太担心它了
在C#中,我确实让Resharper自动组织事情。我通常同意公共、受保护、私有顺序以及静态数据、成员数据、成员函数顺序 虽然我有时会像组成员(getter和setter)一样分组,但我通常更喜欢按字母顺序列出组中的成员,以便更容易找到它们
我也喜欢垂直排列数据/函数。我将制表符/空格移到右边,以便所有名称在同一列中对齐。一些编辑器,如Eclipse及其子版本,允许您在大纲视图中按字母顺序或在页面中重新排序变量和方法 每个人都有自己的,正如Elzo所说,现代IDE通过在下拉菜单中添加彩色图标等,使查找成员及其修改器变得更加容易 我的看法是,它对程序更重要
#ifndef TEMPLATE_H
#define TEMPLATE_H
class ClassName
{
Q_OBJECT
Q_PROPERTY(qreal startValue READ startValue WRITE setStartValue)
Q_ENUMS(MyEnum)
public:
enum MyEnum {
Hello = 0x0,
World = 0x1
};
// constructors
explicit ClassName(QObject *parent = Q_NULLPTR);
~ClassName();
// getter and setters of member variables
// public functions (normal & virtual) -> orderby logic
public slots:
signals:
protected:
// protected functions it's rule followed like public functions
private slots:
private:
// methods
// members
};
#endif // TEMPLATE_H