文件名称:UML和模式应用 面向对象分析与设计导论
文件大小:11.91MB
文件格式:PDF
更新时间:2013-02-27 08:51:29
UML UML和模式应用 面向对象分析 设计 面向对象分析与设计导论
本书论述运用UML(统一建模语言)和模式进行对象建模的方法和技巧,重点讨论了如何使用面向对象的分析和设计技术来建造一个健壮的和易于维护的系统。 全书叙述清晰、图文并茂、实例丰富,是一部来自于大量经验的总结性论著,适合在学习和工作中需要运用面向对象技术的高校师生或工程技术人员使用,特别适用于对面向对象技术有一定了解但希望进一步提高开发水平的应用开发人员。 目录 第一部分结论 第1章 面向对象的分析与设计 1.1 运用UML、模式和面向对象的分析与设计技术 1.2 分配职责 1.3 什么是分析和设计 1.4 什么是面向对象的分析和设计 1.5 类比--组织MicroChaos公司的业务 1.5.1 MicroChaos公司正迅速发展壮大 1.5.2 什么是业务过程 1.5.3 组织中的角色是什么 1.5.4 谁该干什么?他们之间如何协作 1.6 面向对象的分析与设计的例子 1.6.l 定义用况 1.6.2 定义概念模型 1.6.3 定义协作图 1.6.4 定义设计类图 1.6.5 掷骰子游戏例子的总结 1.7 面向对象的与面向功能的分析与设计 1.8 警告:"分析"和"设计"可能引起术语上的"冲突" 1.9 统一建模语言 .第2章 开发过程导论 2.l 导言 2. 1.l 推荐的过程和模型--RPM 2.1.2 讨论范围 2.2 UML和开发过程 2.3 高层步骤 2.4 迭代开发 2.4.1 确定开发周期的时间企 2.4.2 用况和迭代开发周期 2.4.3 划分用况的层次 2.5 计划和细化阶段 2.6 构造阶段--开发周期 2.7 选择制品创建的时机 2.7.1 何时创建概念模型 2.7.2 何时创建扩展用况 第3章 定义模型和制品 3.l 导言 3.2 建模系统 3.3 样例模型 3. 4 制品之间的关系 第二部分 计划和细化阶段 第4章 学习案例:销售点终端 4.1 销售点终端系统 4.2 系统体系结构的层次和学习案例的重点 4. 3 我们的策略:反复学习和反复开发 第5章 理解需求 5.1 导言 5.2 需求 5.3 总体问题陈述 5.4 顾客 5.5 目标 5.6 系统功能 5.6.1 功能的分类 5.6.2 基本功能 5.6.3 处理支付的功能 5.7 系统属性 5.8 需求阶段的其他制品 第6章 用况:对过程的描述 6.1 导言 6.2 活动及其相互间的依赖关系 6.3 用况 6.3.1 高层用况举例:购买商品 6.3.2 扩展用况举例:用现金购买商品 6.3.3 扩展格式的说明 6.4 参与者 6.5 使用用况时的常见错误 6.6 用况的识别 6.7 用况和领域过程 6.8 用况、系统功能和可跟踪性 6.9 用况图 6.10 用况的格式 6.10.1 高层格式 6.10.2 扩展格式 6.11 系统及其边界 6.12 主要、次要和可任选的用况 6.13 基本用况和真实用况 6.13.1 基本用况 6.13.2 真实用况 6.13.3 购买商品的基本用况 6.13.4 购买商品的真实用况 6.14 表示法要点 6.14.l 用况的命名 6.14.2 扩展用况的开始部分 6.14.3 判定点和分支的表示法 6.15 一个开发过程中的用况 6.15. l 计划和细化阶段的步骤 6.15.2 迭代开发周期阶段中的步骤 6.16 销售点终端系统的处理步骤 6.16.l 识别参与者和用况 6.16.2 用高层格式书写用况 6.16.3 绘制系统的用况图 6.16.4 为用况增加关联 6.16.5 书写一部分扩展的基本用况 6.16.6 在必要情况下书写一些真实用况 6.16.7 划分用况的层次 6.17 样例模型 第7章 用况的分类和时间调度 7.1 导言 7.2 将用况调度分配到开发周期中实现 7.2.1 用况和开发周期 7.2.2 用况的分类 7.3 销售点终端应用系统中的用况分类 7.4 "系统启动"用况 7.5 销售点终端应用系统中用况的时间调度 7.5.1 创建复杂用况的多个版本 7.5.2 用况分配 7.6 "购买商品"用况的版本 7.6.1 购买商品一版本1 7.6.2 购买商品一版本2 7.7 小结 第8章 开始进入一个开发周期 第三部分 分析阶段(1) 第9章 建立一个概念模型 9.1 导言 9.2 活动及其相互之间的依赖关系 9.3 概念模型 9.3.1 理解领域词汇 9.3.2 概念模型不是软件设计模型 9.3.3 概念 9.3.4 概念模型和问题分解 9.3.5 销售点终端系统问题域中的概念 9.4 识别概念的策略 9.4.l 使用概念目录列表来找出概念 9.4.2 根据名词性短语找出概念 9.5 销售点终端问题域中的候选概念 9.5.1 报告类对象--模型中包括收据吗 9.5.2 销售点终端系统的概念模型(只包括概念) 9.6 建立概念模型的指导原则 9.6.l 怎样建立一个概念模型 9.6.2 事物的命名和建模:制图者的方法 9.6.3 在识别概念时常犯的错误 9.7 类似概念的解析--POST和Register 9.8 非现实世界中的概念建模 9.9 规格说明或描述型概念 9.9.1 对规格说明的需求 9.9.2 什么时候需要规格说明型概念 9.9.3 另一个规格说明的例子 9.10 UML中有关术语的定义 9.11 样例模型 第10章 概念摸型--添加关联 10.l 导言 10.2 关联 10.3 关联的UML表示法 10.4 找出关联--通用关联列表 10.5 关联应该精细到什么程度 10.6 关联原则 10.7 角色 10.8 关税的命名 10.9 两个类型间的多重关联 10.10 关联和它的实现 10.11 销售点问题域中的关联 10.11.1 在商店中不能被遗忘的一些关系 10.11.2 使用关联核对列表的分类 10.12 销售点系统的概念模型 10.12.1 只保存"需要知道"型关联吗 10.12. 2 "需要知道"型关联和"理解"型关联 第11章 概念模型--添加属性 11.l 导言 11.2 属性 11.3 属性的UML表示法 11.4 有效的属性类型 11.4.l 保持属性的简单性 11.4.2 分析和设计相比:属性如何用代码来实现 11.4.3 纳数据值 11.4.4 设计问题蔓延:避免使用外部键属性 11.5 非简单属性类型 11. 6 对属性的数量和单位建模 11.7 销售点系统中的属性 11.8 销售点模型中的属性 11.9 从SalesLineItem到Item的多重性 11.10 销售点系统的概念模型 11.11 小结 第12章 在术语表中记录术语 12.1 导言 12.2 术语表 12.3 活动及其相互之间的依赖关系 12.4 销售点系统的术语表的示例 第13章 系统行为--系统顺序图 13.1 导言 13.2 活动及其相互之间的依赖关系 13.3 系统行为 13.4 系统顺序图 13.5 系统顺序图的例子 13.6 系统事件和系统操作 13.7 如何建立一个系统顺序图 13.8 系统顺序图和其他制品 13.9 系统事件和系统边界 13.10 系统事件和操作的命名 13.11 显示出用况的文本描述 13.12 样例模型 第14章 系统行为--契约 14.l 导言 14.2 活动及其相互之间的依赖关系 14.3 系统行为 14.4 契约 14.5 契约举例--enterItem 14.6 契约段 14.7 如何建立一个契约 14.8 后置条件 14.8.l 后置条件与概念模型相关 14.8.2 使用后置条件的优点 14.9 后置条件的核心:舞台和帷幕 14.10 讨论--enterItem的后置条件 14.10.1 实例的创建和销毁 14 10.2 属性的修改 14.10.3 关联的形成和破裂 14.11 后置条件应该详细到什么程度 14.12 描述设计细节和算法--注释 14.13 前置条件 14.14 对书写契约的一些建议 14.15 用况enterItem的契约 14.15.l enterItem的契约 14.15.2 endSale的契约 14.15.3 makePayment的契约 14.16 用况 StartUp的契约 14.17 概念模型的修改 14.18 样例模型 第四部分 设计阶段(1) 第15章 从分析到设计 15.l 分析阶段的总结 15.2 设计阶段的开始 第16章 描述真实用况 16.l 导言 16.2 活动及其相互之间的依赖关系 16.3 真实用况 16.4 举例--购买商品一版本1 16.5 样例模型 第17章 协作图 17. 1 导言 17.2 活动及其相互之间的依赖关系 17.3 交互图 17.4 协作图举例:makePayment 17.5 交互图是一个很有价值的制品 17.6 本章只介绍表示法 17.7 阅读后面的章节来学习设计原则 17.8 如何建立协作图 17.9 协作图的基本表示法 17.9. 1 类和实例的表示法 17.9.2 链的表示法 17.9. 3 消息的表示法 17.9.4 参数的表示法 17.9.5 返回值的表示法 17.9.6 消息的语法 17.9.7 传送到"self"或"this"的消息表示法 17.9.8 迭代的表示法 17.9.9 实例创建的表示法 17.9.10 消息序号的表示法 17.9.11 条件消息的表示法 17.9.12 互斥条件路径的表示法 17.9.13 实例集的表示法 17.9.14 传递给多对象的消息表示法 17.9.15 发送给类对象的消息表示法 17.10 样例模型 第18章 GRASP:职责分配模式 18.1 导言 18.2 活动及其相互之间的依赖关系 18.3 设计优良的交互围很有价值 18.4 职责和方法 18.5 职责和交互团 18.6 模式 18.6.1 模式通常不包含新的设计思想 18.6.2 模式带有名称 18.6.3 模式被命名后有利于增进交流 18.7 GRAS:职责分配中通用原则的模式 18.8 UML类图表示法 18.9 专家 18.10 创建者 18.11 低耦合度 18.12 高聚合度 18.13 控制者 18.14 职责、角色扮演和CRC卡 第19章 运用对象和模式设计一个解决方案 19.1 导言 19.2 交工图和其他制品 19.2.1 交五圈和系统事件 19.2.2 交互图和契约 19.2.3 后置条件只是一个估计 19.2.4 协作图和概念模型 19.3 销售点系统的概念模型 19.4 销售点系统的协作图 19.5 协作图:enterItem 19.5.1 选择控制者类 19.5. 2 显示商品描述信息和价格 19.5.3 创建一个新的Sale实例 19.5.4 创建一个新的SalesLineItem实例 19.5.5 查找一个ProductSpecification 19.5.6 ProductCatalog实例的可见性 19.5.7 从一个数据库中检索ProductSpecification对象 19. 5.8 enterItem的协作图 19.5.9 发送给多对象的消息 19.6 协作图:endSale 19.6.1 选择控制者类 19.6.2 设置Sale.isComplete属性值 19.6.3 显示信息 19.6.4 计算销售项总额 19.6.5 计算销售项总额的协作图 19.7 协作图:makePayment 19.7.1 选择控制者类 19.7.2 创建支付项 19.7.3 记录销售项 19.7.4 计算余额 19.8 协作图:StartUp 19.8.1 何时建立startUp的协作图 19.8.2 应用程序如何启动 19. 8.3 startUp系统操作的解释 19.8.4 销售点应用系统的 StartUP操作 19.8.5 选择初始化领域对象 19.8.6 持久化对象:ProductSpecification 19.8.7 Store-crecte()的协作图 19.9 从表示层到领域层的连接 19.10 小结 第20章 判定可见性 20.1 导言 20.2 对象之间的可见性 20.3 可见性 20.3.l 属性可见性 20.3.2 参数可见性 20.3.3 局部声明可见性 20. 3. 4 全局可见性 20.4 可见性的UML表示法 第21章 设计类图 21.1 导言 21.2 活动及其相互之间的依赖关系 21.3 何时创建设计类图 21.4 设计类图示例 21.5 设计类图 21. 6 如何建立设计类图 21.7 概念模型和设计类图的对比 21.8 建立销售点系统的设计类图 21.8.1 识别出软件类并画出它们 21.8.2 添加方法名 21.8.3 方法名:所要考虑的问题 21. 8.4 方法名--crecte 21.8.5 方法名--访问方法 21.8.6 方法名--多对象 21.8.7 方法名--独立于程序设计语言的语法 21.8.8 方法名--添加更多的 类型信息 21.8.9 添加关联和导航 21.8.10 添加依赖关系 21.9 成员细节的表示法 21.10 样例模型 21.11 小结 第22章 系统设计要点 22.1 导言 22.2 经典的三层体系结构 22.3 面向对象的多层体系结构 22.3.1 应用逻辑层的分解 22.3.2 超过三层--多层体系结构 22.3. 3 部署 22.3.4 多层体系结构的动机 22.4 用UML包描述体系结构 22.4.1 包的UML表示法 22.4. 2 体系结构包图 22.4.3 包和依赖关系举例 22.5 包的识别 22.6 层和划分 22.7 两个包中类之间的可见性 22.8 服务包接口--虚包模式 22.9 窗口不直接对外可见--模型一视图分离模式 22.9.1 模型一视图分离的意义 22.9.2 模型一视图分离和间接通信 22.10 一个系统中的间接通信 22.10.1 出版一订阅模式 22.10.2 回调 22.10.3 事件通知系统 22.11 应用协调者 22.11.1 应用协调者和窗口对象 22.11.2 自产的应用协调者 22.12 存储和持久化 22.13 样倒模型 第五部分 构造阶段(1) 第23章 设计到代码的映射 23.1 导言 23.2 程序设计与开发过程 23.2.1 构造阶段的创造性和改变 23.2.2 代码的改变和迭代的过程 23.2.3 代码的改变、CASE工具和逆向工程 23.3 将设计映射到代码 23.4 从设计类图创建类的定义 23.4.1 用方法和简单属性定义一个类 23.4.2 加入引用属性 23.4.3 引用民性与角色名 23.5 根据协作图创建方法 23.5.1 POST类的enterItem方法 23.5.2 POST类的isNewSale方法 23.6 更新类的定义 23.7 代码中的包容器/集合类 23.8 异常和错误处理 23.9 定义Sale类的makeLineItem方法 23.10 实现的顺序 23.11 从设计映射到代码的小结 第24章 用Java实现的程序方案 第六部分 分析阶段(2) 第25章 选择第二个开发周期的需求 25.1 第二个开发周期的需求 25.2 假定和简化 第26章 关联多个用况 26.1 导言 26.2 何时创建单独的用况 26.3 使用includes关系的用况图 26. 4 使用includes关系的用况文档 26.4.1 例子 26.4.2 Buy Items用况 26.4.3 Pay by Cash用况 26.4.4 Pay by Credit用况 26.4.5 Pay by Check用况 第27章 扩展概念模型 27.1 销售点终端系统中的新概念 27.1.1 概念目录列表 27.1.2 针对用况采用名词短语策略来 直找概念 27.1.3 授权服务事务处理 27.1.4 POST概念模型--草案1 第28章 泛化 28.1 泛化 28.2 定义超类型和子类型 28. 2.l 泛化和类型定义 28.2.2 泛化和类型集合 28.2.3 于类型定义的符合 28.2.4 子类型集合的符合 28.2.5 什么是正确的子类型 28.3 何时定义一个子类型 28.4 何时定义一个超类型 28.5 销售点终端系统的类型层次 28.5.1 支付类型 28.5.2 授权服务类型 28.5. 3 授权事务类型 28.6 抽象类型 28.6.1 抽象类型的UML表示法 28.6.2 抽象类和抽象方法 28.7 对变化的状态建模 28.8 类层次和继承 第29章 包:组织模型元素的单位 29.1 导言 29.2 包的UML表示法 29.2.1 所有权和引用 29.2.2 包依赖 29.2.3 没有包图的包说明 29.3 如何划分概念模型 29.4 销售点终端系统的概念模型中的包 第30章 润饰概念模型 30.1 导言 30.2 关联类型 30.3 聚合与组成 30.3.1 UML中的聚合 30.3.2 组成聚合--实心菱形 30.3.3 共享聚合--空心菱形 30.3.4 如何确定聚合 30.3.5 显示出聚会的好处 30.3.6 销售点终端模型中的聚合 30.4 关联角色的名称 30.5 作为概念的角色与关联中的角色的对比 30.6 派生元素 30.7 限定关联 30.8 递归关联或自反关联 第31章 概念模型--总结 31.1 导言 31.2 领域概念包 31.3 核心服杂包 31.4 支付 31.5 产品 31.6 销售 31.7 授权事务 第32章 系统行为 32.1 系统顺序图 32.1.1 Buying Items用况的公共起点 32.1.2 信用卡支付 32.1.3 支票支付 32.2 新的系统事件 32. 3 契约 第33章 状态图中的行为建模 33.1 导言 33.2 事件、状态和转移 33.3 状态图 33.4 用况状态图 33.5 系统状态图 33.6 销售点应用系统的用况状态图 33.6.1 Buy Items用况 33.6.2 Start Up用况 33.7 需要状态图的类型 33. 7.1 状态无关和状态相关类型 33. 7.2 常见的状态相关类型和类 33.8 销售点应用系统中的其他状态图 33.9 说明外部和内部事件 33.9.1 事件类型 33.9.2 内部事件的状态图 33.10 其他的状态图表示法 33.10.1 转移动作和监护条件 33.10.2 嵌套状态 第七部分 设计阶段(2) 第34章 GRASP:用于职责分配的更多模式 34.1 GRAS:通用职责分配软件模式 34.2 多态 34.3 纯虚构 34.4 中介者 34.5 "不要和陌生人讲话" 第35章 用更多的模式进行设计 35.1 导言 35.2 状态(GoF) 35.3 多态(GRAS) 35.4 独身(GoF) 35.4.1 代码示例 35.4.2 独身的UML速记法 35.4.3 实现 35.5 远程代理和代理(GoF) 35. 6 虚包和设备代理(GoF) 35.6.1 包装 35.6.2 虚包 35 6.3 设备代理 35. 6.4 中介者 35. 6.5 封装和序列化 35.6.6 使用远程代理和设备代理 35.7 命令(GcF) 35.7.1 CreditPaymentApprovalReply--execute消息 35.7.2 CreditPaymentDenialReply--execute消息 35.8 结论 第八部分专题 第36章 其他的UML表示法 36.1 导言 36.2 通用的表示法 36.2.1 注解与约束 36.2.2 依赖关系 36.2.3 构造型与特性的规格说明 36. 3 接口 36.4 实现图 36.4.1 构件图 36.4.2 实施图 36.5 协作图中的异步消息 36.6 包接口 第37章 开发过程问题 37.1 导言 37.2 起因 37.3 一个成功过程的指导原则 37.4 迭代和增量开发 37.4.1 瀑布模型的生命周期的缺点 37.4.2 迭代开发的生命周期 37.5 用况驱动的开发 37.6 系统结构上的早期重点 37.7 开发中的各个阶段 37.7.1 产品版本发布 37.7.2 主要开发步骤 37.7.3 产品版本发布与开发周期 37. 7.4 计划和细化阶段 37.7.5 以调查研究为重点的构造阶段 37.7.6 主构造阶段 37.7.7 实施阶段 37.7.8 开发周期中的分析阶段 37.7.9 开发周期中的设计阶段 37.7.10 开发周期中的构造阶段 37.7.11 开发周期中的测试阶段 37.8 开发周期的长度 37.9 开发周期问题 37.9.1 并行的开发小组和开发周期 37.9.2 不明显的需求和技术体系结构 37.9.3 系统开发用况 37.9.4 并行开发过程中的依赖关系 37.10 体系结构层开发的时间调度 第38章 框架、模式和持久化 38.1 导言 38.2 问题:持久化对象 38.3 解决方案:持久化框架 38.4 什么是框架 38.5 框架的功能 38.6 PeristentObject超类 38.7 关键思想 38.8 映射--用关系表来表示对象模式 38.9 对象身份--对象标识符模式 38.10 代理--数据库代理模式 38.11 框架设计--模板方法模式 38.12 具体化一一一一M板方法模式 38.13 缓存对象--缓存管理模式 38.14 智能引用--虚拟代理、桥模式 38.14.1 泛化的虚拟代理 38.14.2 不需要公用的PersistentObject超类 38.14.3 虚拟代理的实现 38.15 虚拟代理和数据库代理 38.15.1 虚拟代理和数据库代理的连续--工厂方法模式 38.15.2 为每件事物都设置一个代理 38.16 如何用关系表来表示关系 38.17 复杂对象实例化模式 38.17.1 问题:具体化一个组合关系层次 38.17.2 解决方案:请求式具体化 38.17.3 实例:chlesLinelem的具体化 38.18 事务操作 38.18.1 对象的事务状态 38.18.2 变"脏" 38.18.3 被删除 38.18.4 提交操作 38.18.5 回滚操作 38.19 在持久化存储器中寻找对象 38.20 其他设计方案 38.20.1 元数据和参数化的代理 38.20.2 查询对象 38.20.3 改变代理程序和内存中的数据库代理 38.20.4 事务处理状态与多缓存 38.21 尚待解决的问题 附录A 推荐读物 附录B 样例开发活动和样例模型 参考文献 术语表 索引