Effective C++: Designs & Implements
让接口容易被正确使用,不易被误用
一个好的接口设计方式应该满足要求:“容易被正确使用,不易被误用”。所以设计主要分为两个方面,促进正确使用,阻止误用。
促进正确使用的方法主要有:
- 保持接口的一致性
- 与内置类型行为兼容
STL 勘称保持接口一致性的典范,这样降低了用户的记忆负担。而与内置行为兼容同时也保证不会出现违反用户直觉的问题。
阻止误用主要有:
- 建立新的类型
- 限制类型上的操作
- 束缚对象取值范围
- 消除客户对资源的管理
增加封装性
如果某些东西被封装,它就不再可见;越多的东西被封装,那么看到它的人也就越少。而看到它的人越少,我们就有越大的弹性去变化它。所以我们推崇封装:它使我们能够改变事物而只影响有限的客户。
类的设计中,坚持以下两条准则有利于促进封装性:
- 成员变量 private
- 使用 non-member 和 non-friend 替换 member 函数
- 避免返回指向对象内部成分的 handles
将成员变量声明为 private 可以赋予客户访问数据的一致性、可细微划分访问控制、允诺约束条件获得保证,并提供 class 作者以充分实现弹性。
而尽可能的 member 函数,则减少其暴露数据,也能提高其封装性。
避免返回内部分成引用,可以保证对象状态不会被外部破坏,自然也能提高封装性。