面向对象设计:原则、模式与实践
1. 面向对象设计的目标与挑战
在软件开发中,设计的核心目标是降低应用程序的成本,确保当下和未来都具有成本效益。由于设计原则相互交织,且每个问题的时间框架都在不断变化,设计挑战往往有众多可能的解决方案。这就要求开发者综合考虑应用程序的需求、设计方案的成本和收益,从而设计出合适的代码结构。
设计时考虑未来并非需要超能力。真正的设计并非预测未知需求并提前实现,而是接受未来会有变化,保留应对变化的选择。设计的目的是为了后期更好地设计,主要目标是降低变更成本。
2. 设计的工具
设计并非遵循固定规则,而是在分支路径上探索,早期的选择会关闭一些选项,同时开启其他选项。面向对象设计的工具主要包括原则和模式。
2.1 设计原则
知名的SOLID原则包括单一职责、开闭原则、里氏替换、接口隔离和依赖倒置。此外,还有DRY(不要重复自己)和迪米特法则等。这些原则源于早期面向对象程序员的编码经验,他们发现某些代码结构使工作更轻松,而另一些则相反。
后来,学者们尝试量化代码的“优劣”。20世纪90年代,Chidamber和Kemerer以及Basili对面向对象应用程序进行量化研究,发现使用这些技术与高质量代码有明确关联。不过,早期研究的应用程序规模较小,代码可能不代表真实世界的面向对象应用。但2001年,Laing和Coleman对NASA戈达德太空飞行中心的应用程序进行研究,进一步证实了设计原则的重要性。
以下是部分常见设计原则的简单介绍:
| 原则名称 | 描述 |
| — | — |
| 单一职责原则 | 一个类应该只有一个引起