本书利用对象建模技术(oMT),通过一个完整的例子(包括电子归档系统的分析、设计,以及编码和测试等方面)说明开发人员是怎样开发一个应用程序的。本书附录提供了分析文档、系统设计文档、对象设计文档、基于子系统应用的c++代码、用于类操作的伪码以及对使用给定数据集的过程和产品度量标准的讨论等。本书适用于短训班学员、工程专业或计算机专业的本科生或研究生以及其他自学人员。
第1章 引言
1.1 面向对象的开发过程
1.1.1 对象建模技术的规格说明
1.1.2 面向对象开发过程的各个阶段
1.1.3 开发应用程序所使用的工具
1.2 改进面向对象开发过程或者产品所使用的度量
第2章 创建电子归档的对象模型
2.1 电子文档的处理
2.1.1 电子归档的问题领域
2.1.2 什么是电子归档
2.1.3 电子归档问题的交互场景
2.2 使用对象建模技术
2.3 问题描述
2.4 标识对象类
2.4.1 用语法检查来发现问题领域中的对象
2.4.2 用综合知识来发现问题领域中的对象
2.5 丢弃不必要和不正确的类
2.6 准备数据字典
2.7 在类之间加入关联
2.8 丢弃不必要和不正确的关联
2.9 加入对象的属性和链接
2.10 丢弃不必要和不正确的属性
2.11 使用继承来共享公共结构
2.12 遍历访问路径以确定差异
2.13 过程总结和可交付的文档
第3章 开发电子归档的动态模型
3.1 确定用例及预备典型的交互序列的场景
3.1.1 归档文档
3.1.2 搜索文档
3.1.3 查看文档
3.1.4 删除文档
3.1.5 打印文档
3.1.6 改变归档字符集
3.1.7 改变垃圾字
3.2 确定各对象间的事件并为各场景准备事件跟踪
3.3 建立系统事件流程图
3.4 为具有重要动态行为的类开发状态图
3.5 检查状态图中事件的完整性和一致性
3.6 更新对象模型
3.7 过程总结和可交付的文档
第4章 构建电子归档的功能模型
4.1 确定输入值和输出值
4.2 建立数据流图
4.2.1 电子归档程序的顶层数据流图
4.2.2 归档文档力口工
4.2.3 查找文档力n工
4.2.4 数据字典中的数据流图定义
4.3 构造功官旨模型的剩余步骤
4.4 过程总结和可交付的文档
第5章 概括关键操作与迭代分析
5.1 细化对象模型、动态模型和功能模型
5.1.1 概括对象模型的关键操作
5.1.2 检查完整性和致性
5.1.3 开发和测试更具体的场景
5.2 过程总结和可交付的文档
第6章 设计和说明应用程序界面
6.1 详细的用户界面动态模型
6.1.1 面向图形的用户界面设计工具
6.1.2 主用户界面
6.2 详细的用户界面对象模型
6.3 综合三个模型获取类的操作
6.3.1 从功能模型获取操作
6.3.2 从动态模型获取操作
6.3.3 详细的对象模型
6.4 用户界面的实现
6.5 分析文档
6.6 过程总结和可交付的文档
第7章 系统设计
7.1 将系统组织成子系统
7.1.1 确定对象模型子系统
7.1.2 层次和划分
7.2 标识并发性
7.3 将子系统分配给处理机和任务
7.4 选择实现数据存储的策略
7.5 高层决策
7.6 过程总结和可交付的文档
第8章 对象设计
8.1 详细的对象模型
8.2 给出实现操作的算法
8.2.1 归档操作
8.2.2 搜索操作
8.2.3 删除操作
8.2.4 归档字符操作
8.2.5 垃圾字操作
8.3 描述对象
8.4 实现控制
8.5 调整设计以增加继承性
8.6 设计关联
8.7 优化设计
8.8 详细的对象设计模型
8.9 物理封装程序
8.9.1 构建实际模块
8.9.2 检查子系统和类的实体的相关性
8.9.3 保证只有类的外部接口是公共的
8.10 设计文档
8.11 过程总结和可交付的文档
第9章 确定对象的实现
9.1 面向对象的编程风格指南
9.1.1 复用性
9.1.2 继承性的使用
9.1.3 扩展性
9.1.4 健壮性
9.2 实现模型
9.3 C++实现
9.3.1 用户界面子系统
9.3.2 杂类
9.4 测试电子归档应用系统
9.5 过程总结和可交付的文档
第10章 总结和经验教训
附录A 数据流图加工描述
A.1 描述每一功能
A.2 归档文档的功能原语
A.3 查找文档的功能原语
A.4 说明限制和优化准则
附录B 窗口概念和GUI-I-具
B.1 用ProtoGen设计GUI
B.1.1 用Borland Resource Workshop开发所有的对话框
B.1.2 用ProtoGen将对话框与GUI连接
B.1.3 生成并编译代码用ProtoGen汲0试GUI
附录C 事件和方法
C.1 将文档归档的用例
C.2 删除文档的用例
C.3 搜索文档的用例
C.4 归档字符的用例
C.5 更改垃圾字的用例
附录D 分析文档
D.1 问题陈述
D.2 对象模型
D.3 动态模型
D.3.1 主应用程序用户界面
D.3.2 归档文档操作
D.3.3 删除操作
D.3.4 搜索操作
D.3.5 修改归档字符操作
D.3.6 修改垃圾字集合操作
D.3.7 应用又才象和领域对象
D.4 功能模型
D.4.1. 电子归档程序的顶层数据流图
D.4.2 归档文档加工
D.4.3 创建文本文档索引加工
D.4.4 散列文档{己录力厦工
D.4.5 查找文档加工
D.4.6 建立搜索向量加工
D.4.7 检查文档匹配力Ⅱ工
D.4.8 检查文档引用信息匹配加工
D.4.9 事件流图
D.4.10 加工描述
附录E 系统设计文档
E.1 子系统
E.2 分层与分块
E.3 并发
E.4 将子系统分配给处理器和任务
E.5 实现数据存储
E.6 高层策略决策总结
附录F 电子归档方法:领域对象的方法
附录G 子系统和实体的内聚性
G.1 用户界面子系统
G.2 文档子系统
G.3 搜索结果子系统
G4 查询子系统
G.5 搜索子系统
G.6 数据存储子系统G.7 散列子系统
附录H 设计文档
H.1 数据字典
H.2 对象模型
H.3 用例
附录I C++电子归档应用系统的代码
J.1 产品相关的度量
J.2 过程相关的度量
J.3 过程度量收集的结果
J.4 产品度量收集的结果
附录K 用户界面
K.I 详细的用户界面对象模型
K.2 使用Borland Object Windows的对象模型
附录L C千千实现模型
1.1 用户界面子系统
1.2 文档子系统
1.3 搜索结果子系统
L.4 查询子系统
L.5 散列子系统
L.6 搜索子系统
L.7 其他类
附录MOMT模型表示法
M.1 对象模型表示法(高级概念
M.2 对象模型表示法(基本概念
M.3 功能模型表示法
M.4 动态模型表示法
几年以前,在Idaho大学讲授面向对象的分析和设计课程时,查阅了大量的文献和课本,发现那些书籍中很明显的问题就是缺少一个完整的例子来讲述开发人员如何从问题描述开始,使用面向对象方法进行分析和设计并最终建立一个实际的应用程序。同时,也没有完整的例子使用Rumbaugh、Booeh、Wirfs-Broek、Meyer、Coad and Yourdon、Shlaer等公认的面向对象方法以及常见的类库和开发工具(例如Borland C++和ApplicationFrameworks等)来指导软件工程师开发应用系统。
本书的意图是通过一个完整的例子来填补这个空白,该例子将一种流行的、典型的面向对象分析和设计方法(即对象建模技术,OMT)用于应用程序的开发,其中包括分析、设计电子归档系统以及编码和测试等方面。另外,本书中的例子将说明如何使用流行的类库和工具开发一个应用程序。Borland工具是在Windows环境中用ProtoGen来生成用户界面代码的。
本书力求帮助软件开发人员从面向对象理论到实现的跨跃,及如何在实际应用中使用流行的、全面的面向对象的分析和设计技术,即阐明如何应用对象建模。同时,本书将帮助读者实现从传统的开发技术到面向对象开发的“观念性转变”。.本书最后说明了在建立应用过程中典型的类库和开发工具的使用。
本书是为学生、软件工程专家或者任何想学习如何应用面向对象技术(OOT)的读者编写的。目前,还没有任何书给出一个完整的例子来详细地分析对象建模技术(OMT)并实现一个应用。事实上,即便有的话也只有极少的几本书中给出了使用面向对象分析和设计方法的如此完整、详细的例子①。
本书适用于短训班学员、工程专业或计算机专业的本科生或研究生,也可用于自学。本书不是理论书,而是一本讲述怎样使用()MT分析、设计并实现一个应用系统的书。另外,如何把一个特定的应用程序用()MT实现的思维过程是本书另一个重点。因为本书包括分析、设计以及C+十实现,从而许多内容可以作为练习使用。这些练习包括探词不同的分析和设计模型以及评价这些模型的适用性;扩展已经存在的分析、设计和代码以便在应用中增加其他功能;修改C++代码,从而更注重于已有的类库中代码的复用;对已有的分析、设计和实现结果,根据自己的度量标准进行分析,探讨如何才能提高质量,完善在本书中描述的过程。
本书的内容循序渐进,每一章都建立在前面章节内容的基础上。但是,如果对应用的设计感兴趣,可以阅读附录中的分析模型,然后直接跳到本书的第2部分。如果只关心实际的实现和测试,可以阅读附录中的设计模型,然后跳到本书的第3部分。
本书各章内容既有交叉又有区别。用对象技术的术语来说,每一章可以看作是一个“章”类的实例。“章”类有它的属性,这些属性就是章的主要内容。每一章的主要内容可以不同,也可以相同。每个“章”类的操作或者方法就是对属性值或者章的主要内容进行的处理。在每一章的开始有该章的主要内容列表以及主要的问题/解释(操作/方法)。
本书除了第1章以外可大致分为4个部分。第1部分(第2章一第6章)以分析为中心,讲述了如何对一个问题用OMT方法建立真实世界模型。它包括构建OMT最初的对象模型、动态模型和功能模型。OMT不但在这里,而且整本书中都被使用。分析文档跟踪记录了分析过程的结果。分析文档由问题描述、对象模型(数据字典、对象模型图、访问路径遍历)、动态模型(用户界面格式、场景、事件跟踪、用于电子归档系统的事件流图,状态图)和功能模型(上下文图、数据字典、数据流图、约束条件、原子过程的描述)组成。
第2部分(第7章一第8章)讨论了系统、子系统和单个对象的设计。复用性是对象技术(OT)提供的重要的益处之一。在本书中建立的应用程序展示了怎样使用商用的类库来最大限度地复用代码。
软件度量是软件工程中的一个新领域,它发展得还不完善。软件的度量将使开发过程或者产品的某个方面变得能够度量,潜移默化地使开发者拥有一个更好的软件开发过程和产品。虽然对于什么是真正有用的软件度量还没有达成一致的看法,但是一些人建议先整理出度量方法,然后在软件工业对其有更多的了解后再进行细化。鉴于上述要求,在此整理出用于特定过程的数据和引起他人注意的与产品有关的度量。
在书中的这一部分包括了整本书中使用的基本窗口概念的讨论,在附录中也给出了这些讨论。例如,将一个系统分成几个子系统,根据动态模型构造一个详细的用户界面,由主要应用功能将3个模型结合起来得到对象的操作,并给出实现操作过程的算法等。另外,使用非形式自然语言描述或者语法检查,作为标识对象的最初技术。
在把对象和行为逐步加入到应用程序的过程中,可使用在第2部分中所实现的用户界面作为测试场景的驱动。用户界面和应用的其他部分是松散耦合的,这有利于将应用程序移植到不同环境的过程中,当为了满足用户需要而增加或改变界面时,对应用程序的变更最小。
每一个类都将根据如何使用C++类库而进行讨论。类与类之间的每个关联按照它们之间如何实现表示来讨论。为了获得类的操作,应仔细地检查对象模型、动态模型和功能模型。
本书的第3部分(第9章)讲述了如何使用常用的商用面向对象开发工具和类库来完成应用程序。例如,使用Borland的C++with Application Frameworks和Protogen来完成C++应用程序。在电子归档应用程序中,用于每个类的协议都根据C+十(数据成员、成员函数、程序访问层次)实现来讨论。对于每个C++应用类,书中也讨论了其编程风格以及在设计和实现中的差异。
本书的第4部分(第10章)讨论了在使用面向对象技术进行电子归档应用程序的开发过程中所总结的一些经验。除了使用商用类库的经验以外,这些经验可加深开发人员了解图形用户界面开发工具的功能。了解如何保持文档和应用程序开发的同步性、继承性,以及分析、设计和代码走查(code walk through)的重要性;掌握良好的编程风格的指 本书增加了从"Object-Oriented Modeling and Design"(Rumbaugh et a1.,1991)一书出版以来作者对对象建模技术的充实和修改。JamesRumbaugh和MichaelBlaha在“JournalofObject-OrientedProgramming"(JOOP)中的关于建模和设计的多篇文章中对对象建模技术的这些内容进行了介绍。其中包括设计中使用的对象交互的框图,在设计和实现中使用的逻辑设计模型和实现模型,在一个关联的端点使用实心圆圈和用“l+”来代表一重或多重性,在应用对象建模技术用例(usecase)来获得需求的前期过程中表示系统中的各个类的短语类图。(短语对象图指的是对象实例图。对象模型指的是两种类型的图的结合。)
本书并不包罗万象。它不是一本教程或者权威指南,而是仅包含使用OMT方法来建立电子归档应用程序时所涉及的一些概念。另外,本书中的例子仅仅代表了对怎样将OMT用于实践的解释。对于OMT方法的教程,请参见James Rumbaugh、MichaelBlaha、WilliamPremerlani、Frederick Eddy和William Lorensen合著的"Object-OrientedModeling and Design"一书。
本书没有提供关于C++或Borland’sApplicationFrameworks的教程,不过在本书中包括了对ApplicationFrameworks的基本组织结构的讨论,这些讨论的目的是让读者熟悉那些用来构造应用程序的C++类库。为了理解电子归档应用程序的实现,读者需要具备一些C++的基本知识。其次本书不是一本用于面向对象开发的GUI生成器或者框图工具的教程,虽然本书也包括了几种用于构造应用的工具,它们可视作面向对象生命周期的一部分。
本书表明了作者对使用对象建模技术来开发一个应用程序的认识。书中介绍的一些重要的对象建模技术概念包括:对如何构造对象模型、动态模型和功能模型的解释与详细描述;为了操作对象的操作而对3个模型进行详细地分析;数据字典的使用;用于求精和完善应用的分析、设计和实现使用迭代的方法。
关于对象模型,作者给出了如何丢弃不必要和不正确的类、关联和属性的方法,还介绍了语法方法或非形式自然语言描述的使用,这个方法用于确定对象的最基本的技术。对于功能模型,则讲解了在实现算法时伪码的使用和在描述各种方法的算法时,面向对象伪码的使用。在描述动态模型时,研究了使用用例来获得需求,说明了在面向对象应用的开发和测试中场景所扮演的重要参与者以及在应用的开发和测试中事件跟踪的重要性。
在进行设计和实现时,讲述了在设计和实现中子系统的使用。相对实现继承性而言,作者更多地介绍了授权的使用,以及讨论了编程风格和设计实现之间的差异。
另外,为了更好地使用对象建模技术来构建电子归档应用程序,书中定义了一些建立面向对象应用的方法,同时也从别人那里借鉴了一些方法。这些概念和方法包括类库、用户界面和建模。在定义类库时,讨论了如何使用商用类库中已有的类来选择或表示新的应用类,并对C++实现的应用类进行了详细的讨论。用户界面则按照使用商用的GUI工具生成C++代码来进行讨论。同时对那些基本的窗口概念和根据动态模型建立详细的用户界面的过程进行了讨论。书中还介绍了通过实例结合3个模型标识每个对象的操作过程。
非常高兴能收到关于本书的各种批评,电子邮件地址如下:k—derr@acm.org。
希望本书有助于软件开发中处理复杂问题并且提高效率。同时,希望本书有助于在实际工作中,正确应用面向对象方法。
十分感谢Scott Matthews和KurtWelker对本书的风格、表述和技术内容的贡献。就个人而言,也十分感谢我的妻子Jill对工作的支持和理解,同时还要感谢Shannon、Justin和Corey,对他们的父亲总是忙于工作所表现出的宽容。