本书英文版面世以来,便广受业界专家和读者的好评。全书叙述清晰、用词精炼、构思巧妙,将面向对象分析设计的概念、过程、方法、原则和个人的实践建议一一道来,博引多家观点,以实例为证,将软件的分析和设计的过程叙述得如逻辑推理一般,于细节处见真知。
本书是一本经典的面向对象分析设计技术的入门书,适用范围非常广,从刚刚入门的初学者,到已经有一定对象技术知识但希望进一步提高开发水平的中级读者,甚至是资深的专业人员,都可以从本书获益匪浅。同时,本书也很适合作为高等院校计算机专业及软件学院相关课程的教材和各类培训班的辅导教材。
本书是经典的OOA/D、迭代式开发和UML方面的入门书,已被翻译成多种语言并在业界和高等院校中广泛使用。它可以帮助开发者和学生掌握OOA/D的重要原则和最佳实践--不仅仅是绘制UML,而是在软件设计过程中应用它们。作者通过精炼的研究案例,逐步介绍了有关OOA/D的关键技能,同时强调了软件分析和设计过程中最重要的活动、原则和模式。
内容包括:
需求和用例:识别和记录需求
领域对象建模:理解领域中的相关对象,它们的属性及其关系
架构:创建灵活、健壮和可维护的分层架构
基本的对象设计技术:掌握重要的技能,包括:为对象分配职责,用信息专家模式、中介模式和受保护变化模式等原则设计对象的协作
设计模式:用广泛应用的模式(如策略模式、工厂模式、适配器模式、观察者模式、模板模式和命令模式等)创建健壮的对象和框架。
迭代开发和敏捷"UP":应用简洁、基本的统一过程的活动和最佳实践组织建模和开发
本书在第1版的基础上进行了彻底改写,新增了案例研究问题,并更新了有关模式、用例、统一过程、架构分析等方面的讨论。
本书提供了如何应用对象宋进行思考和设计的透彻和实用的指南。
第一部分 绪论
第1章 面向对象分析和设计
1.1 在OOA/D中应用UML和模式
1.2 分配职责
1.3 什么是分析和设计
1.4 什么是面向对象分析和设计
1.5 示例
1.6 UML
1.7 进一步学习的参考资料
第2章 迭代开发和统一过程
2.1 最重要的UP思想:迭代开发
2.2 其他的UP最佳实践和概念
2.3 UP阶段和面向进度表的术语
2.4 UP流程(工作流)
2.5 流程定制和开发案例
2.6 敏捷UP
2.7 顺序“瀑布”生命周期
2.8 何时你会知道自己并不了解UP
2.9 进一步学习的参考资料
第3章 案例研究:NextGen POS系统
3.1 NextGen POS系统
3.2 架构层和案例研究重点
3.3 本书的策略:迭代学习和开发
第二部分 初始
第4章 初始
4.1 初始:一个类比
4.2 初始阶段可能会非常短暂
4.3 初始阶段会创建哪些工件
4.4 何时你会知道自己并不了解初始阶段
第5章 理解需求
5.1 需求的类型
5.2 进一步学习的参考资料
第6章 用例模型:写出实际语境中的需求
6.1 目标和情节
6.2 背景
6.3 用例和附加价值
6.4 用例和功能性需求
6.5 用例类型和格式
6.6 详述用例的示例:处理销售
6.7 各部分的解释
6.8 用例的目标和范围
6.9 找出主要参与者、目标和用例
6.10 恭喜:用例已经被写出,但并不完美无缺
6.11 以一种简朴的不考虑用户界面的风格来写出用例
6.12 参与者
6.13 用例图
6.14 语境中的需求和低级别特性列表
6.15 用例不是面向对象的
6.16 统一过程中的用例
6.17 案例研究:NextGen的初始阶段中的用例
6.18 进一步学习的参考资料
6.19 统一过程的工件和处理语境
第7章 识别其他需求
7.1 NextGen POS系统的示例
7.2 NextGen系统示例:补充规范(部分)
7.3 注解:补充规范
7.4 NextGen示例:构想(部分)
7.5 注解:构想
7.6 NextGen示例:术语表(部分)
7.7 注解:术语表(数据字典)
7.8 可靠的规范:一个矛盾
7.9 项目网站上的联机工件
7.10 在初始阶段不需要太多的UML图示
7.11 统一过程中的其他需求工件
7.12 进一步学习的参考资料
7.13 统一过程的工件和处理语境
第8章 从初始到细化
8.1 检验点:初始阶段发生了什么
8.2 细化
8.3 计划下一次迭代
8.4 迭代1的需求和重点:基本的OOA/D技巧
8.5 哪些工件在细化阶段中开始
8.6 何时你会知道自己并不了解细化阶段
第三部分 细化迭代1
第9章 用例模型:绘制系统顺序图
9.1 系统行为
9.2 系统顺序图
9.3 一个SSD的示例
9.4 系统之间的SSD
9.5 SSD和用例
9.6 系统事件和系统边界
9.7 命名系统时间及操作
9.8 显示用例文本
9.9 SSD和术语表
9.10 UP内的SSD
9.11 进一步学习的参考资料
9.12 UP工件
第10章 领域模型:可视化概念
10.1 领域模型
10.2 概念类识别
10.3 销售领域的候选概念类
10.4 领域建模的指导原则
10.5 分析相似的概念类—Register与“POST”的比较
10.6 为非现实世界建模
10.7 规格说明或描述概念类
10.8 UML表示法、模型以及方法:多重观点
10.9 缩小表示差距
10.10 示例:NextGen POS领域模型
10.11 UP中的领域模型
10.12 进一步学习的参考资料
10.13 UP工件
第11章 领域模型:添加关联
11.1 关联
11.2 UML关联表示法
11.3 找出关联—通用关联列表
11.4 关联的指导原则
11.5 角色
11.6 关联应该详细到何种程度
11.7 关联的命名
11.8 两种类型间的多重关联
11.9 关联以及实现
11.10 NextGen POS的领域模型中的关联
11.11 NextGen POS的领域模型
第12章 领域模型:添加属性
12.1 属性
12.2 UML的属性表示法
12.3 有效的属性类型
12.4 非原始的数据类型类
12.5 设计潜行:没有属性是外键
12.6 为属性的数量和单位建模
12.7 NextGen的领域模型中的属性
12.8 从SalesLineItem到Item的多重性
12.9 领域模型小结
第13章 用例模型:用操作契约增加细节
13.1 契约
13.2 示例契约:enterItem
13.3 契约条目的描述
13.4 后置条件
13.5 讨论—enterItem的后置条件
13.6 书写契约将导致领域模型更新
13.7 什么时候契约是有用的?契约与用例的比较
13.8 指导原则:契约
13.9 NextGen POS示例:契约
13.10 领域模型的变化
13.11 契约、操作以及UML
13.12 UP内的操作契约
13.13 进一步学习的参考资料
第14章 迭代中的从需求到设计
14.1 反复地做正确的事、正确地做事
14.2 难道这样做不需要花费数周吗?是的,完全不需要
14.3 开始对象设计
第15章 交互图表示法
15.1 顺序图和协作图
15.2 协作图示例:makePayment
15.3 顺序图示例:makePayment
15.4 交互图价值不菲
15.5 迭代图的通用表示法
15.6 协作图的基本表示法
15.7 顺序图的基本表示法
第16章 GRASP:根据职责设计对象
16.1 职责和方法
16.2 职责和交互图
16.3 模式
16.4 GRASP:在职责分配中的通用原则模式
16.5 UML类图表示法
16.6 信息专家模式(专家模式)
16.7 创建者模式
16.8 低耦合模式
16.9 高内聚模式
16.10 控制器模式
16.11 对象设计和CRC卡片
16.12 进一步学习的参考资料
第17章 设计模型:GRASP模式与用例实现
17.1 用例实现
17.2 工件注释
17.3 NextGen迭代的用例实现
17.4 对象设计:makeNewSale
17.5 对象设计:enterItem
17.6 对象设计:endSale
17.7 对象设计:makePayment
17.8 对象设计:startUp
17.9 将UI层连接到领域层
17.10 UP中的用例实现
17.11 小结
第18章 设计模型:决定可见性
18.1 对象之间的可见性
18.2 可见性
18.3 在UML中表示可见性
第19章 设计模型:创建设计类图
19.1 何时创建DCD
19.2 DCD示例
19.3 DCD和UP术语
19.4 领域模型中的类与设计模型中的类的比较
19.5 创建NextGen POS的DCD
19.6 成员细节的表示法
19.7 DCD、绘图和CASE工具
19.8 UP中的DCD
19.9 UP工件
第20章 实现模型:将设计映射成代码
20.1 编程和开发过程
20.2 将设计映射成代码
20.3 从DCD创建类的定义
20.4 从交互图创建方法
20.5 代码中的容器/集合类
20.6 异常和错误处理
20.7 定义Sale--makeLineItem方法
20.8 实现的顺序
20.9 测试为先的编程
20.10 映射设计到代码的小结
20.11 编码方案的介绍
第四部分 细化迭代2
第21章 迭代2和其需求
21.1 迭代2的重点:对象设计和模式
21.2 从迭代1到迭代2
21.3 迭代2的需求
21.4 迭代2中面向分析的工件的改进
第22章 GRASP:更多的职责分配模式
22.1 多态模式
22.2 纯虚构模式
22.3 中介模式
22.4 受保护变化模式
第23章 用GoF设计模式设计用例实现
23.1 适配器模式(GoF)
23.2 设计中的“分析”发现:领域模型
23.3 工厂模式(GoF)
23.4 单子模式(GoF)
23.5 接口变化的外部服务问题的结论
23.6 策略模式(GoF)
23.7 组合模式(GoF)和其他设计原则
23.8 外观模式(GoF)
23.9 观察者/发布-订阅/委托事件模型(GoF)
23.10 结论
23.11 进一步学习的参考资料
第五部分 细化迭代3
第24章 迭代3和其需求
24.1 迭代3的需求
24.2 迭代3的重点
第25章 建立用例的关系
25.1 包含关系
25.2 术语:具体用例、抽象用例、基用例和附加用例
25.3 扩展关系
25.4 泛化关系
25.5 用例图
第26章 泛化建模
26.1 领域模型的新概念
26.2 泛化
26.3 定义概念性超类和子类
26.4 何时定义一个概念性子类
26.5 何时定义一个概念性超类
26.6 NextGen POS概念类的层次
26.7 抽象概念类
26.8 为变化的状态建模
26.9 软件中的类的层次和继承
第27章 精化领域模型
27.1 关联类
27.2 聚集与组合
27.3 时间间隔和产品价格—改正迭代1中的“错误”
27.4 关联角色名称
27.5 作为概念的角色与关联角色的比较
27.6 导出元素
27.7 受限关联
27.8 自反关联
27.9 有序元素
27.10 使用包来组织领域模型
第28章 增加新的SSD和契约
28.1 新的系统顺序图
28.2 新的系统操作
28.3 新的系统操作契约
第29章 在状态图中为行为建模
29.1 事件、状态和转移
29.2 状态图
29.3 UP中的状态图在哪里
29.4 用例的状态图
29.5 POS应用的用例状态图
29.6 从状态图受益的类
29.7 外部事件和内部事件的说明
29.8 状态图的另外表示法
29.9 进一步学习的参考资料
第30章 应用模式设计逻辑架构
30.1 软件架构
30.2 架构模式:层
30.3 模型-视图分离原则
30.4 进一步学习的参考资料
第31章 组织模型包的设计和实现
31.1 包组织的指导原则
31.2 更多的UML包表示法
31.3 进一步学习的参考资料
第32章 架构分析和SAD的介绍
32.1 架构分析
32.2 架构的类型和视图
32.3 技巧:识别和分析架构因素
32.4 示例:部分NextGen POS架构因素表
32.5 技巧:架构因素的解析
32.6 架构分析中各主题的小结
32.7 UP中的架构分析
32.8 进一步学习的参考资料
第33章 使用对象和模式设计更多用例的实现
33.1 在本地服务上实现故障恢复;使用本地高速缓存提高性能
33.2 故障处理
33.3 通过代理(GoF)在本地服务上实现故障恢复
33.4 对非功能性或质量需求进行设计
33.5 通过适配器访问外部物理设备;购买与开发的比较
33.6 对一族互相关联的对象使用抽象工厂(GoF)
33.7 通过多态性和Do It Myself处理支付
33.8 结论
第34章 使用模式设计持久化框架
34.1 问题:持久化对象
34.2 解决方案:来自持久化框架的持久化服务
34.3 框架
34.4 持久化服务和框架的需求
34.5 关键思想
34.6 模式:将对象表示为表
34.7 UML的数据建模Profile
34.8 模式:对象标识
34.9 使用外观访问持久化服务
34.10 映射对象:数据库映射器或数据库代理模式
34.11 使用模板方法模式设计框架
34.12 使用模板方法模式实现物化
34.13 使用映射器工厂配置映射器
34.14 模式:缓存管理
34.15 在一个类里合并和隐藏SQL语句
34.16 事务状态和状态模式
34.17 使用命令模式设计事务
34.18 使用虚拟代理延迟物化
34.19 如何表示表中的关系
34.20 持久化对象超类和分离问题不同方面的设计原则
34.21 遗留问题
第六部分 特 殊 专 题
第35章 绘图及其工具
35.1 冥思苦想的设计和形象思考
35.2 在开发过程中画UML图的建议
35.3 工具和特性样例
35.4 样例二
第36章 迭代计划和项目有关问题的介绍
36.1 区分需求的等级
36.2 划分项目风险的等级
36.3 适应性计划与预测性计划
36.4 阶段和迭代计划
36.5 迭代计划:下一迭代做什么
36.6 在迭代之间跟踪需求
36.7 早期估计的有效性(和无效性)
36.8 组织项目工件
36.9 一些小组迭代进度安排问题
36.10 何时你会知道自己并不了解UP中的计划安排
36.11 进一步学习的参考资料
第37章 关于迭代开发和UP的注释
37.1 其他UP的最佳实践和观点
37.2 构造阶段和移交阶段
37.3 其他有意义的实践
37.4 限定每次迭代时间的动机
37.5 顺序“瀑布型”生命周期
37.6 可用性工程和用户界面设计
37.7 UP分析模型
37.8 RUP产品
37.9 重用的挑战和神话
第38章 更多的UML表示法
38.1 一般符号
38.2 实现图
38.3 模板(参数化的、通用的)类
38.4 活动图
术语表
参考文献