一切软件系统都是遗留系统。新开发的软件系统以后也要成为遗留系统,所以操持软件的可维护性非常重要。
要产生可维护性的软件,除了良好的编码规范、完备的测试和文档,还要有良好的面向对象设计。
面象对象设计的精华就是接口或抽象类。
设计可重用的框架和组件的时候,这种接口的设计尤为重要。要注意区分接口和实现之间的差别。
设计类型系统的时候,可以采取以下几步:
1.首先和用户交谈,都到一份关于软件要完成的工作的具体流程描述。这份报告一个要具备完整性和纯粹性,应该是用户最需要实现的功能,而一些非功能性的需求,可能要靠分析人员来挖掘。
2.找出这个报告中所有的名词。然后逐个讨论,看其是否能作为一个类。注意有些名词可能是类的一个属性。
3.用CRC(类名-职责-协作)卡来管理这些名词。
4.找出所以的动词或动词短语,同样的办法把这些动词划分到不同的类中去。
PS:以上方法不可能一次就得到一个完美的设计,像开发过程一样,设计也是一个迭代的过程。设计接口的时候要遵循“最小接口原则”,根据实际使用类的用户来选择接口。根据开发的进行,不断设计和调整接口。
再寻求需求的时候可以使用“用例图”,描述类型系统的结构的时候使用“类图”。这种图能非常直观,易懂。
任何复杂的系统都可以通过分层设计来解决。任何稳定的复杂系统,其各个层或子模块也是非常简单和稳定的。
一些专家常说“多用组合,少用继承”,这个问题不能太绝对,继承也有其好处。接口继承是实现代码重用的重要方法。这句话或许可以改成“多用组合和接口继承,少用实现继承”。
采用对象的方式来思考系统的设计。
设计模式不能过度使用,简单就是美。复杂系统都是由简单的子系统组成的。