前言
人类渴望得到精神上的宁静、美学上的成就、家庭的安全、正义和自由。这一切都不能通过工业化的生产效率来直接满足。但是,生产效率让人们得到充足的物质享受,而不至于与匮乏苦苦斗争。这为精神、美学和家庭事务赢得了时间,也使得社会能够将一些特殊的技能赋予司法机构以及维护权利的机构。
Harlan Mills
DPMA and Human Productivity
作为计算机专业人员,我们努力地去构建能工作而且有用的系统;作为软件工程师,我们面临着在计算资源和人力资源有限的条件下创建复杂系统的任务。面向对象(OO)技术已经发展为管理许多不同种类的系统中内在复杂性的手段。对象模型已被证明是非常有力和统一的概念。
对第2版的改动
在本书第2版出版以后,我们看到了一些重要的技术进步,其中一些突出的进步如下。
■ 与因特网的高带宽、无线连接已经非常普遍;
■ 纳米技术已经出现,并开始提供有价值的产品;
■ 机器人在火星表面漫步;
■ 计算机生成的特效使得在电影中能够完全逼真地再现任何想象中的世界;
■ 出现了个人气垫船;
■ 手机已无处不在,使用非常方便;
■ 获得了人类基因图谱;
■ 面向对象技术已经在工业软件开发中成为主流技术。
在世界各地都能见到面向对象技术被使用。但是,我们仍然遇到许多人,他们还没有采用面向对象的开发方式。对于这两类人,本书的新版本都很有价值。
对于面向对象分析与设计(OOAD)的新手,本书提供了下列信息。
■ 面向对象的概念支持和演进式的观点;
■ 如何在系统开发生命周期中应用OOAD的例子;
■ 对系统和软件开发中使用的标准表示法统一建模语言(UML 2.0)的介绍。
对于有经验的OOAD实践者,本书从不同的角度提供了价值。
■ 即使对于有经验的实践者,UML 2.0也是新的。这是可以看到的表示法方面的重要区别。
■ 根据前一版本所收到的反馈,更加关注建模。
■ 通过本书的概念部分的学习,可以了解在面向对象的世界中,“为什么事情总是像它们现在的样子”。许多人可能从没研究过面向对象(OO)概念本身的发展,即使有所了解,在初次学习OO方法时,也许未能理解其重要性。
本书这一版和以前的版本相比有四项主要区别,如下所示。
1.UML 2.0已经正式得到了通过,第5章将介绍UML 2.0。为了加强读者对这种表示法的理解,特别区分了它的基本元素和高级元素。
2.这一版在应用程序的章节中引入了一些新的领域和背景。例如,应用程序的领域范围很广,包括从高级系统架构到基于Web的系统的设计细节等各种不同层次的抽象。
3.在前一版出版时,作为OO编程的概念来说,C++相对还是比较新的。读者告诉我们,这种强调不再是主要的考虑。现在有大量的OO编程和技术书籍及培训,还有许多为OO开发而设计的编程语言。因此,大部分关于编码的讨论被删除了。
4.最后,响应读者的要求,这一版更关注OOAD建模方面。应用程序章节将展示如何利用UML,其中每一章强调了整个开发生命周期中的一个阶段。
本书的目标
本书在面向对象系统构建方面提供了实用指导。它的具体目标如下。
■ 提供对对象模型的基础概念及其发展变化的正确理解;
■ 帮助读者掌握面向对象分析和设计的表示法和过程;
■ 介绍在不同的问题域中面向对象分析和设计的实际应用。
本书介绍的概念都基于牢固的理论基础,但本书首先是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的实际需要。
读者对象
本书既是为计算机专业人员也是为学生编写的。
■ 对于实际系统和软件的开发者,本书将展示如何高效地利用面向对象技术来解决实际问题。
■ 对于系统分析师或架构师,本书将利用面向对象的分析与设计,提供一条从需求到实现的途径。我们帮助分析人员或架构师提高识别能力,以区分不好的面向对象的结构与好的面向对象的结构,并在现实情况反常时权衡可选的设计方案。也许最重要的就是,我们提供了一些让复杂系统变得有条理的新方法。
■ 对于项目经理,本书可以帮助他们更好地理解开发团队的资源分配、软件品质、测量指标以及管理与复杂软件系统相关的风险。
■ 对于学生,本书提供了一些必要的指导,使得学生能够开始掌握复杂系统开发的科学与艺术中的一些重要技巧。
本书不仅适合专业研讨班和个人学习使用,也适合作为高等院校本科生和研究生课程的教材。因为它主要阐述了软件开发的方法,所以非常适合软件工程和高级编程等课程,也可以作为涉及具体面向对象编程语言的课程的补充阅读材料。
本书的组织结构
本书分成3篇:概念、方法和应用,其中穿插了大量的补充材料。
概念
第1篇研究软件的内在复杂性及其表现方式。本书将对象模型作为一种手段来帮助我们管理这种复杂性,详细地研究了对象模型的基本元素——抽象、封装、模块化、层次结构,讨论了“什么是类?”以及“什么是对象?”等基本问题。由于确定有意义的类和对象是面向对象开发中的关键任务,因此我们花了相当多的时间来研究分类的本质。具体来说,我们研究了生物学、语言学和心理学等其他学科中的分类方法,然后将这些经验应用到发现软件系统中类和对象的问题上。
方法
第2篇基于对象模型提出了复杂系统开发的一种方法。针对面向对象的分析与设计,首先提出了一套图形表示法(即UML),然后是一个通用的过程框架。还研究了面向对象开发的实践,具体来说,就是它在软件开发生命周期中的位置以及它对于项目管理意味着什么。
应用程序
第3篇提供了一组(5个)不简单的例子,涉及不同问题域:系统架构、控制系统、密码分析、数据获取和Web开发。之所以选择这些问题域,是因为它们是软件工程师实践过程中遇到的复杂问题的代表。展示某些原则如何应用于简单的问题是很容易的,但是因为我们关注的是为现实世界构建有用的系统,所以我们对如何将对象模型应用于复杂应用程序更加感兴趣。软件系统的开发不同于按菜谱做菜,因此我们强调应用程序的增量式开发,这种开发以一些正确的原则和良好的模型作为指导。
补充材料
本书中穿插了大量的补充材料。多数章节中都有补充材料,这些材料对重要的主题提供了相关的信息。本书包括了一个关于面向对象编程语言的附录,其中总结了一些常见语言的特征,还提供了常用术语的词汇表,以及一个扩展的分类参考书目,列出了关于对象模型的参考资料。
工具说明
读者总是会问创建本书中的图使用了什么工具。我们主要使用两个很好的工具来画图:IBM Rational Software Architect和Sparx Systems Enterprise Architect。为什么不只用一个?市场的实际情况是,没有哪一种工具可以做所有的事情。实践OOAD的时间越长,最后就会发现有些特别的情况是所有工具都不支持的。(在这种情况下,可能需要寻求基本的绘图工具来展示你的想法。)但是,不要让这些很少的情况阻止你使用健壮的OOAD工具,如我们提到的这两种工具。
本书的阅读方法
对于本书可以一页一页地读,也可以不按现有的组织形式阅读。如果想对对象模型中的基本概念或面向对象开发的动机有较深的理解,那么就应该从第1章开始依次读下去。如果只对面向对象开发分析与设计中的表示法和过程感兴趣,就从第5章和第6章开始阅读。第7章对使用这种方法管理项目的管理者来说特别有用。如果对针对特定问题域的面向对象技术的应用程序更感兴趣,则可以在第8~12章中任选一章或者全部阅读。