拥有所有私人成员,然后是所有受保护的成员,然后是所有公共成员?或者相反?或者是否应该有多个私有,受保护和公共标签,以便操作可以与构造函数分开等等?做出此决定时,我应该考虑哪些问题?
我把公共接口放在首位,但我并不总是这样做.我常常向后做这件事,私有,然后保护,然后公开.回想起来,它没有多大意义.
作为一个班级的开发者,你可能很熟悉它的"内脏",但是班级的用户并不在乎,或者至少他们不应该这么做.他们最感兴趣的是班级可以为他们做些什么,对吧?
所以我把公众放在第一位,并通常通过功能/实用程序来组织它.我不希望他们不得不通过我的界面来找到与X相关的所有方法,我希望他们能够以有条理的方式看到所有这些东西.
我从不使用多个公共/受保护/私人部分 - 在我看来太混乱了.
Google赞成此订单:"Typedef和Enums,常量,构造函数,析构函数,方法,包括静态方法,数据成员,包括静态数据成员."
Matthew Wilson(需要Safari订阅)推荐以下顺序:"构造,操作,属性,迭代,状态,实现,成员和我最喜欢的,不实现."
它们提供了很好的理由,这种方法似乎是相当标准的,但无论你做什么,都要保持一致.
这是我的观点,我猜赌大多数人会同意,公共方法应该先行.OO的核心原则之一是您不必关心实施.只要查看公共方法,就应该告诉您使用该类需要知道的一切.
与往常一样,请首先为人类编写代码。考虑将要使用您的班级的人,并将最重要的成员/枚举/ typedefs /任何对他们来说放在顶部。
通常,这意味着公众成员是最重要的,因为这是您班上大多数消费者最感兴趣的部分。其次是私有,然后是受保护的。通常。
有一些例外。
有时,初始化顺序很重要,有时需要在公众面前声明私有。有时,继承和扩展一个类更为重要,在这种情况下,受保护的成员可能会放在更高的位置。而且,当黑客对遗留代码进行单元测试时,有时公开公共方法会更容易-如果我不得不犯下这句话,我会将其放在类定义的底部。
但是它们是相对罕见的情况。
我发现大多数时候,“公共的,受保护的,私人的”对您所在类别的消费者最有用。这是一个不错的基本规则。
但这与按访问顺序排序无关,而更多地是根据消费者的兴趣进行排序。