类设计指导原则
本章为如何设计健壮的类提供一些建议。
真实世界系统建模
面向对象(OO)程序设计的主要目标之一就是以类似于人们真正的思维方式对真实世界的系统建模。设计类就是创建这些模型的面向对象方式。
第一次转向OO开发时,许多人倾向于采用一种结构化的方式思考。由此导致主要的错误之一就是创建的类只包含行为而没有数据。实际上,他们创建的只是结构化模型的一组函数或子例程。
明确公共接口
设计类时,最重要的问题可能就是保证公共接口的最小。构建类的根本目的就是提供一些有用而且简洁的功能。
最小接口
提供最小接口可以使类尽可能简洁。
扩展接口
对于一个特定应用,及时一个类的公共接口还不够,使用对象技术也能很容易的利用继承扩展并调整这个接口。简单来讲,如何设计时考虑到继承,新类可以继承一个原有的类,从而创建一个有扩展接口的新类。
隐藏实现
设计健壮的构造函数(和析构函数)
首先,也是最重要的,构造函数应当将对象置于一种安全的初始状态。这包括属性初始化和内存管理等问题。
析构函数要包含适当的清理功能。
内存泄露
如果一个对象未能适当地释放它在对象生存周期中获得的内存,那么只要创建这个对象这个对象的应用还在执行,对于整个操作系统来说这部分内容就丢失了。在极端情况,消耗掉系统所有可用的内存。
在类中设计的错误处理
对类建立文档以及使用注释
过多的文档
要注意,如果注释过多也会有问题,看起来很杂乱,有可能影响建立文档的初衷
构建类要以合作为出发点
设计时充分考虑重用
设计时充分考虑到可扩展性
为一个类增加新特性可能很简单,只需扩展一个现有的类,增加一些新方法,并修改其他方法的行为。不必重写代码。这里使用继承。
名字要有描述性
好的命名
确保坚持一种命名约定很有意义。使名字具有描述性是一个很好的开发实践,这在各种开发泛型中都使用。
抽出不可移植的代码
将这些不可移植的代码单独放在一个类中,或者至少放在一个方法中。
提供一种复制和比较对象的方法
让作用域尽可能小
这种思想是尽可能将属性和行为置于局部。采用这种方式,维护、测试和扩展类就会容易很多。
类应当对自己负责
类的设计原则是:所有对象都应当尽可能自行负责自己的行为。
设计时充分考虑可维护性
一个类中的修改不会对其他类产生影响,或者影响尽可能小。
高度耦合的类
彼此相当依赖的类被认为是高度耦合(highly coupled)。因此对一个类的修改还要求对另一个类进行修改,这两个类就是高度耦合的。没有这种依赖关系的耦合度很低。
采用迭代
类设计推荐一种迭代过程,这与提供最小接口的概念恰好一致。
测试接口
使对象持久性
保存对象状态以备以后使用的三种方法:
- 平面文件系统:可以通过串行化对象将对象保存在一个平面文件中
- 关系数据库:必须使用某种中间件将对象转换成关系模型
- OO数据库:这是保证对象持久化的最合理的做法
对象串行化和封送
通过网络发送一个对象,然后在另一端重新合成。这个过程成为串行化(serializing)一个对象。通过网络发送对象的行为称为封送(marshaling)一个对象。
主要的问题是,串行化和反串行化都必须使用相同的规范。这有些类似于加密算法。
小结
这一章提供了许多指导原则。一类不会独立存在,类必须设计与其他类交互。彼此交互的一组类会作为系统的一部分。最后,再由这些系统为最终用户提供服务。