本书系统讲解了面向对象方法的基本概念,统一建模语言的概念、结构和建模方法,对象约束语言(OCL)基础知识和使用方法,还详细介绍了业务建模方面的基础知识,包括业务、业务规则、业务模型及其构成要素的概念以及业务建模的方法。
本书详细介绍了各种标准UML模型的概念、构成元素、使用规则和建模方法,这些标准模型包括:用例模型、类图模型、顺序图、通信图、状态图、活动图、构件图和部署图等。同时,还概要介绍了UML 2.0中新增加的一些模型及其建模方法,如复合结构图、交互概览图和时序图等模型。
本书还介绍了设计模式的基础知识和基本理论,概要介绍了每种设计模式的定义、结构、适用情形和主要特点。
*后,本书还提供了若干带有全部实现的软件设计案例,能够更加直观、有效地帮助读者理解面向对象方法中的各种抽象概念、设计原则、建模方法和建模过程。
本书适合作为高等院校软件工程及相关专业的本科生或研究生教材,也可以作为从事软件开发工作和学习面向对象方法的读者的参考资料。
目 录
前言
第1章 面向对象开发方法1
1.1 对象及对象模型1
1.1.1 对象的基本概念1
1.1.2 对象模型的构成要素5
1.1.3 对象模型的主要优点11
1.2 面向对象的软件开发12
1.2.1 典型的结构化开发方法12
1.2.2 面向对象方法的发展过程13
1.2.3 面向对象方法与程序设计语言15
1.2.4 典型的面向对象的开发方法17
1.3 面向对象软件开发过程22
1.3.1 面向对象分析(OOA)22
1.3.2 面向对象设计(OOD)24
1.3.3 OOA与OOD之间的关系25
1.4 面向对象分析与设计的应用举例25
1.4.1 问题定义25
1.4.2 需求分析26
1.4.3 软件结构设计28
1.4.4 软件行为建模29
1.5 小结31
习题31
第2章 统一建模语言(UML)概述33
2.1 UML的基本概念33
2.1.1 UML的定义33
2.1.2 UML的主要特点34
2.1.3 如何使用UML36
2.2 UML的概念模型及视图结构37
2.2.1 UML的概念模型37
2.2.2 UML中的视图39
2.3 模型元素41
2.3.1 实体元素41
2.3.2 交互元素43
2.3.3 组织元素43
2.3.4 注释元素44
2.4 关系44
2.4.1 依赖关系(Dependent)44
2.4.2 关联关系(Association)45
2.4.3 组合与聚合(Composition and Aggregation)45
2.4.4 继承(Inherit)45
2.5 图46
2.5.1 用例图(Use Case Diagram)47
2.5.2 类图(Class Diagram)48
2.5.3 对象图(Object Diagram)48
2.5.4 顺序图(Sequence Diagram)49
2.5.5 通信图(Communication Diagram)50
2.5.6 状态图(Statechart Diagram)50
2.5.7 活动图(Activity Diagram)51
2.5.8 构件图(Component Diagram)52
2.5.9 部署图(Deployment Diagram)53
2.5.10 其他类型的图53
2.6 通用机制53
2.6.1 规约(Specification)53
2.6.2 修饰符(Decorator)54
2.6.3 扩展机制(Extend Mechanism)54
2.6.4 约束(Constraint)54
2.7 对象约束语言简介55
2.7.1 对象约束语言的特点55
2.7.2 OCL的主要用途55
2.7.3 OCL类型与操作56
2.7.4 OCL表达式58
2.7.5 集合操作(Collection Operation)61
2.8 小结65
习题65
第3章 业务模型的建模68
3.1 业务模型68
3.1.1 业务的概念69
3.1.2 良好的业务模型的特点69
3.1.3 业务模型的基本结构70
3.1.4 业务建模的主要动机71
3.2 业务模型的建模方法72
3.2.1 UML与业务建模72
3.2.2 UML的业务扩展73
3.2.3 业务过程模型74
3.2.4 软件模型与业务模型之间的关系77
3.3 业务规则78
3.3.1 派生规则(Derivation)79
3.3.2 约束规则(Constraint)80
3.3.3 存在性规则(Existence)82
3.4 业务过程的建模案例82
3.4.1 定义业务系统的目标83
3.4.2 业务过程模型84
3.4.3 交付业务流程图85
3.4.4 网络销售系统的结构86
3.4.5 系统需求87
3.5 小结89
习题89
第4章 用例建模91
4.1 用例图的基本概念91
4.2 参与者92
4.2.1 参与者的定义92
4.2.2 识别参与者92
4.2.3 参与者之间的泛化关系94
4.3 用例95
4.3.1 用例的定义和表示95
4.3.2 参与者和用例的关联95
4.3.3 用例之间的关系96
4.3.4 用例描述98
4.3.5 用例模板98
4.3.6 用例的识别102
4.4 用例建模应注意的问题103
4.5 小结105
习题105
第5章 类图建模108
5.1 类图的构成元素108
5.1.1 类和对象108
5.1.2 类(或对象)之间的关系109
5.1.3 关联类(Association Class)113
5.1.4 关联限定符(Qualifier)114
5.1.5 多继承(Multi Inheritance)114
5.1.6 混入技术(Mixin Technique)115
5.1.7 模板类(Template Class)117
5.1.8 接口(Interface)118
5.2 从用例到类119
5.2.1 业务逻辑类、实体类和边界类的基本概念119
5.2.2 用例模型到结构模型的映射120
5.3 问题域子系统设计中的要点123
5.3.1 复用已存在的类123
5.3.2 为相似的类增加基类124
5.3.3 多继承的调整125
5.3.4 关联的转换与实现126
5.3.5 调整与完善属性129
5.3.6 提高软件性能129
5.3.7 算法的构造与优化131
5.3.8 对象的可访问性131
5.3.9 类作用域132
5.3.10 例外处理机制132
5.3.11 考虑使用设计模式133
5.4 小结133
习题134
第6章 顺序图与通信图建模138
6.1 顺序图的构成元素138
6.1.1 对象(Object)139
6.1.2 生命线(Lifeline)139
6.1.3 控制焦点(Focus of Control)139
6.1.4 消息(Message)140
6.1.5 撤销(Destroy)141
6.1.6 组合片段(Combined Fragment)142
6.1.7 条件分支和从属流143
6.2 顺序图建模方法144
6.3 通信图的构成元素146
6.3.1 对象(Object)146
6.3.2 链接(Link)147
6.3.3 消息(Message)147
6.3.4 通信图中的主动对象(Active Object)147
6.4 通信图建模方法149
6.5 通信图与顺序图的比较149
6.6 小结150
习题150
第7章 状态图与活动图建模153
7.1 状态图的构成元素154
7.1.1 状态154
7.1.2 转换与事件158
7.2 状态图建模方法和原则159
7.2.1 状态图的建模方法159
7.2.2 状态图的建模原则161
7.3 状态图与人机界面162
7.3.1 人机交互界面的表示模型162
7.3.2 人机交互界面的基本结构163
7.3.3 从用例描述到人机界面168
7.3.4 从状态图到人机交互界面169
7.4 活动图及其构成元素170
7.4.1 活动(Activity)171
7.4.2 控制流(Control Flow)171
7.4.3 决策(Decision)171
7.4.4 泳道(Swim Line)172
7.4.5 并入(Fork In)和并出(Fork Out)172
7.4.6 信号(Signal)173
7.4.7 对象(Object)和对象流(Object Flow)173
7.5 活动图的用途及建模策略174
7.5.1 活动图的主要用途174
7.5.2 活动图的建模策略176
7.6 其他UML图的建模方法177
7.6.1 复合结构图177
7.6.2 交互概览图179
7.6.3 时序图180
7.7 小结181
习题181
第8章 包图、组件图和部署图建模185
8.1 包图185
8.1.1 包图的构成元素185
8.1.2 包的设计原则188
8.1.3 包图的建模方法189
8.2 构件图190
8.2.1 构件及其特点190
8.2.2 构件图的主要元素191
8.2.3 构件图的应用举例192
8.3 部署图196
8.3.1 部署图的基本元素196
8.3.2 部署图的建模方法197
8.3.3 部署图的应用举例198
8.4 小结199
习题200
第9章 UML模型与程序设计201
9.1 类的映射201
9.1.1 C++类的基本结构201
9.1.2 UML类到C++类的映射202
9.1.3 属性和方法的映射202
9.2 泛化关系的映射206
9.3 关联关系的映射208
9.3.1 关联的方向性208
9.3.2 多重性与关联映射209
9.3.3 组合和聚合关系的映射211
9.4 依赖关系的映射212
9.5 接口和包的映射213
9.5.1 接口的映射213
9.5.2 包的映射214
9.6 UML中其他各种图的映射215
9.6.1 顺序图的映射215
9.6.2 状态图的映射219
9.7 小结221
习题221
第10章 面向对象的软件设计原则223
10.1 软件质量属性223
10.1.1 用户视图下的软件质量属性225
10.1.2 开发人员视图下的软件质量属性226
10.1.3 软件质量属性的权衡227
10.2 七个面向对象的软件设计原则228
10.2.1 开闭原则(Open-Closed Principle,OCP)229
10.2.2 里氏代换原则(Liskov Substitution Principle,LSP)230
10.2.3 依赖倒置原则(Dependence Inversion Principle,DIP)233
10.2.4 单一职责原则(Single Responsibility Principle,SRP)237
10.2.5 接口隔离原则(Interface Segregation Principle,ISP)240
10.2.6 合成复用原则(Composition/ Aggregate Reuse Principle,CRP)242
10.2.7 迪米特法则(Law of Demeter,LoD)244
10.2.8 七项设计原则的总结247
10.3 软件设计案例—制作一个幻灯片播放软件247
10.3.1 软件的主要功能247
10.3.2 软件的非功能需求250
10.3.3 软件的结构设计251
10.3.4 软件的动态行为建模257
10.3.5 软件结构的重构和调整258
10.3.6 案例总结268
10.4 小结268
习题269
第11章 设计模式及其应用270
11.1 设计模式的概念270
11.1.1 设计模式的定义270
11.1.2 设计模式的分类271
11.1.3 设计模式的主要特点272
11.2 设计模式的应用272
11.2.1 如何应用设计模式273
11.2.2 应用设计模式应注意的几个问题274
11.3 创建型模式及其应用275
11.3.1 创建型模式简介276
11.3.2 创建型模式应用279
11.4 结构型模式及其应用284
11.4.1 结构型模式简介285
11.4.2 结构型模式的应用289
11.5 行为型模式及其应用293
11.5.1 典型的行为型模式简介293
11.5.2 职责链模式的应用实例299
11.5.3 解释器模式的应用实例300
11.6 遗传算法设计实例303
11.6.1 遗传算法概述303
11.6.2 遗传算法的基本实现策略304
11.6.3 遗传算法的基本过程305
11.6.4 遗传算法的结构模型305
11.6.5 遗传算法的应用实例307
11.7 小结310
习题310
第12章 对象的持久化311
12.1 持久对象和持久化方法311
12.2 基于数据文件的持久化技术312
12.2.1 MFC框架提供的序列化技术312
12.2.2 Java语言提供的序列化技术313
12.3 基于关系数据库的对象持久化315
12.3.1 将实体模型转换成关系数据库的逻辑模型315
12.3.2 数据库对象的持久化过程322
12.4 小结325
习题325
第13章 面向对象分析设计案例328
13.1 软件概述328
13.2 软件功能结构328
13.2.1 用例建模328
13.2.2 用例描述330
13.2.3 概念模型333
13.3 软件结构设计333
13.3.1 MFC文档视图结构简介334
13.3.2 软件的基本结构334
13.3.3 图形文档类的设计335
13.3.4 视图类设计342
13.3.5 交互操作的结构343
13.4 动态建模348
13.4.1 顺序图建模348
13.4.2 通信图建模349
13.4.3 状态图建模350
13.5 建模的抽象层次352
13.6 交互式编辑软件的实现353
13.6.1 系统的主界面353
13.6.2 图素操作353
13.7 小结355
习题355
参考文献356