**
前言
**
软件开发是一项极其复杂的智力活动,它是一门朝气蓬勃并且仍在迅速发展的学科。软件开发还不够完善,因此迄今人们仍然在试图找出开发软件的好方法。
尽管如此,多年来软件开发方法仍然获得了大幅提升。许多设计方法学不断发展以促进软件设计的各个方面。其中之一是结构化设计方法,该方法提供了一种非常直观的方式,用以很好地匹配图灵和冯·诺依曼的硬件计算模型。
尽管结构化设计明显优于它之前的特定方法,但它存在着一个致命的弱点:当用户需求随着时间的推移改变时,软件往往很难随之修改,大型的应用尤其如此。与此同时,应用的规模和复杂性迅速膨胀。另外,新的语言、技术、操作系统、数据存储范式、用户界面范式、硬件等以惊人的速度出现在计算领域中。然而,商业条件一直在要求软件产品更快、成本更低地投入市场。
因此,一些新的设计方法出现了,这些方法从实践中吸取了来之不易的经验和教训。同时,计算领域提出了一些革命性的新观点。其中之一就是面向对象的范式,其主要目标为:在软件产品的生命周期中,随着需求出现不可避免的变更,保证大型应用的可维护性。
本书介绍一种特定软件设计方法的实践,该方法称为基于模型的开发方法,其主要基础是Shlaer-Mellor方法。通常情况下应用OO范式,特定情况下应用MBD方法能够使大型应用获得更强的健壮性和可维护性。
本书主要内容
尽管本书使用UML(Unified Modeling Language,统一建模语言)作为表示法,但其应用是很浅显的。有很多非常优秀的书籍描述了如何使用UML进行软件设计,因此本书没有过多地描述UML的语法。同样,本书遵循了MBD的设计方法,但是该设计方法主要为下列真正目的提供背景支持:
本书的主要目标在于描述,为什么在一般情况下使用OO方法和在特殊情况下使用MBD方法是在宣传一种做事情的特殊方法。
不存在一种唯一正确的方法可以设计和开发所有软件。设计更多地依赖于特定的开发环境,包括从业务目标到工具再到团队文化等所有内容。最终,企业将决定在它的环境中哪一组工具是最高效的。为了做到这一点,决策者应当了解为什么MBD的方法工具集得以应用在许多常见的环境中。更重要的是,相关人员需要充分理解基本原理,从而能够根据特定的环境加以调整进而应用。
实现面向对象的设计需要一种独特的思维,该思维在硬件计算模型中很不直观。本书真正关心的是设计软件时如何思考,特定的表示法和方法学不是本书的侧重点。因此,本书以大量的篇幅探索好的软件设计的思考过程,甚至故意提供了一些不好的初步设计,用以证明该方法的自我纠正能力。
为了获得这样的理解,有必要描述软件开发的传统方法(面向对象方法之前)在某些方面如何失败,以及面向对象范式如何改正这些缺点。尽管结构化方法为1970年之前软件开发的混乱带来了切实的秩序,但它不是万能的。到20世纪80年代,软件明确显示,严重的可维护性问题仍然存在,这些问题正是面向对象范式要解决的。
同样,如果不讨论一种方法学的某些基础理论,那么就没有办法描述该方法学是否能够很好地工作。然而,这是一本软件开发人员写给软件开发人员的书,因此本书有意识地使用了不具有数学严谨性的实践术语来描述理论问题。
因为本书的主要内容是抽象OOA(Object Oriented Analysis,面向对象分析)模型的建立,因此书中没有很多OOPL(Object Oriented Programming Language,面向对象编程语言)代码。从方法学的名称顾名思义,其重点在于抽象建模而不是编写传统的源语言代码。实际上,当一个具有“转化质量”的OOA模型开发完成后,模型就是代码。换句话说,OOA建模使用的表示法是一种扩展的UML符号,其中增加了符合MDA的抽象动作语言(Abstract Action Language,AAL)的内容。表示法是4GL(Fourth Generation Language,第四代语言)而不是3GL(Third Generation Language,第三代语言),但是模型像任何一个3GL程序一样可执行。模型是独立实现的,它是一个针对功能需求解决方案的完整、准确而清晰的规格说明。
我们需要指出的最后一点是,作者的实践开发经验是以几十年而不是几年来衡量的。尽管本书的重点在于解释为什么这样做事情,但它绝对不是一本理论书。本书的基础是在现实世界中行之有效的方法。
目录
第1部分 面向对象开发的根本
第1章 历史的视角
1.1 历史
1.2 结构化开发
1.3 宝贵教训
1.4 技术革新
第2章 对象技术
2.1 基本理念
2.2 广度优先处理(又称对等协作)
第3章 泛化、继承、泛型和多态
3.1 泛化
3.2 继承
3.3 多态
3.4 泛型