2.4 应用对象模型
我们已经看到,对象模型从本质上与传统的结构化分析、结构化设计和结构化编程方法所使用的模型是很不一样的。这并不是说对象模型放弃了这些较老方法中好的原则和经验。相反,它引入了一些创新的元素,建立在这些更早的模型之上。因此,对象模型提供了一些其他模型没有提供的重要好处。最重要的是,使用对象模型能让我们构建的系统包含良好构造的复杂系统的5个属性。第1章中介绍了这5个属性:层次结构、相对的基础(如多个抽象层次)、关注点分离、模式、稳定的中间状态。根据我们的经验,应用对象模型还可以得到另外5个实际的好处。
2.4.1 对象模型的好处
首先,使用对象模型帮助我们探索基于对象和面向对象编程语言的表达能力。Stroustrup指出,“如何最好地利用C++这样的语言提供的好处,人们并不总是很清楚。将C++作为一种带有一点数据抽象的、更好的C来使用,也能够在开发效率和代码质量方面得到很大改进。但是,在设计过程中利用类层次结构的好处,能够得到更进一步、更显著的改进。这常常被称为面向对象设计,这也是人们发现的使用C++的最大好处”[82]。经验表明,如果不应用对象模型的这些要素,那么像Smalltalk、C++、Java这样的语言的更多强大的功能要么完全被忽略,要么被误用了。
其次,利用对象模型不仅鼓励软件的复用,而且鼓励整个设计的复用,这导致了可复用应用框架的产生[83]。我们发现,面向对象系统通常比等价的非面向对象实现更小。这不仅意味着编写更少的代码,而且软件复用度的提高也会反映到成本和开发进度上。但是,复用不会自动发生。如果复用不是项目的主要目标,那么它就不太可能实现。另外,复用设计可能在初次实现可复用的组件时花费更多。好消息是,初次的成本将在组件的后续使用中得到补偿。
第三,使用对象模型将得到构建在稳定的中间状态之上的系统,这样的系统更适合变化。这也意味着,这样的系统可以随时间而进化,而不是在对需求进行第一次主要修改时就抛弃原来的系统或者完全重新设计。
第7章将进一步探讨对象模型如何减少开发复杂系统所固有的风险。这第4项好处主要是因为集成散布在生命周期的各个时刻,而不是作为一个大事件发生。对象模型设计明智的关注点分离的原则也减少了开发的风险,增加了我们对设计正确性的信心。
最后,对象模型引起了对人类认知工作的兴趣。Robson说:“许多不知道计算机如何工作的人会发现,面向对象系统的思想非常自然”[84]。
2.4.2 开放式问题
为了有效应用对象模型的诸要素,接下来必须关注如下一些开放式问题。
■ 究竟什么是类和对象?
■ 如何正确地确定与特定应用有关的类和对象?
■ 怎样的表示法适合表示面向对象系统的设计?
■ 怎样的过程可以导致结构良好的面向对象系统?
■ 使用面向对象设计对管理层意味着什么?
这些问题是后面5章的主题。