如何设计类, 关键点:
- 类的接口应该提供一贯的抽象。很多问题都是因为违背了这个简单的原则。
- 类的接口应该隐藏某些东西,比如系统接口,设计决定,或者实现细节。
- 应该优先采用聚合,除非你的两个类的关系很明确 " is a " 的关系。比如花是植物,那么类花应该从类植物继承。
- 继承很强大,但是也添加了复杂性。和前面提到的管理软件复杂度是有冲突的。
- 类是控制/管理复杂度的基本工具。应该尽可能的设计好每一个 类来简化系统的复杂度。
好的类接口
设计类的关键在于设计类的接口。
一个不好的类接口例子,每个接口函数都不是很直观地表达其目的。
class Program {public: ... // public routines void InitializeCommandStack(); void PushCommand( Command command ); Command PopCommand(); void ShutdownCommandStack(); void InitializeReportFormatting(); void FormatReport( Report report ); void PrintReport( Report report ); void InitializeGlobalData(); void ShutdownGlobalData(); ... private: ...};改进后的类设计
class Program {public: ... // public routines void InitializeUserInterface(); void ShutDownUserInterface(); void InitializeReports(); void ShutDownReports(); ...private: ...};
为什么要创建类:
- 为世界上真实的事物建模
- 为抽象对象建模
- 减低复杂度
- 隔离复杂度
- 隐藏实现细节
- 限制修改代码的范围
- 隐藏全局数据
- 集中控制点
- 代码重用
- 打包类似的代码族
- 完成特殊的代码重构
链接: