内容提要本书通过大量例子,描述了一幅对象驱动的和谐设计场景。在这个设计场景中,对象是基本设计元素,而定义角色、设计责任和协调合作就构成了设计中的基本活动。角色描述了对象的功能,责任定义了对象必须完成的工作,协作则代表了对象之间的一种契约和互动方式。同时,书中也充满了各种关于设计的真知灼见,针对接口编程及封装变化等设计要旨无一不被细致入微到许多小例子中。严格地说,本书的主要读者是职业软件设计与开发人员,但只要您乐于学习且爱好编程,那么从本书中都能够得到帮助。就犹如本书前言所说,软件设计可以被看成是艺术与数学、天斌与训练的结合。如果您对自己的天赋充满自信,那么请拿起这本书,跟随作者来一次高强度的对象设计训练。 第1章 设计概念 11.1 对象机器 11.2 角色 31.3 对象角色构造型(role stereotypes) 41.4 角色、责任和协作 51.5 对象契约 71.6 领域对象 81.7 与应用相关的特定对象 91.8 接口 101.9 类 111.10 复合 141.11 继承 151.12 对象的组织 151.13 组件 161.14 模式 171.14.1 将Double Dispatch模式应用于特定问题 181.14.2 运用模式的现实利益 221.15 应用框架 221.16 体系结构 241.17 体系结构的风格 251.17.1 集中式控制 261.17.2 分散式控制:没有控制中心 271.17.3 委托式控制 271.17.4 测试互动:一个层次体系的例子 291.17.5 定位层次中的对象 301.18 设计描述 311.19 小结 311.20 进一步阅读 32第2章 责任驱动设计 332.1 观察、描述和设计的过程 342.1.1 启动生产过程:项目的定义和计划 372.1.2 搭建舞台:初期的描述 382.1.3 实施开发:设计 392.1.4 从多视角"观察" 412.2 撰写草稿:分析描述 412.2.1 用法描述 422.2.2 其他规范 482.2.3 术语表 482.2.4 概念上的对象 492.3 铸造特性:挖掘设计 502.3.1 CRC卡 512.3.2 创造:运用模式 542.3.3 寻求解决方案 572.3.4 在思想与细节之间跳跃 582.4 调整产品:精练设计 592.4.1 弹性和可扩展性设计 602.4.2 可靠性设计 612.4.3 使设计具有可预见性、一致性,并易于理解 622.5 小结 622.6 进一步阅读 63第3章 发现对象 653.1 发现策略 663.2 找寻对象、角色和类 673.3 为什么需要一个设计提纲 683.4 寻找的策略 713.5 名字到底有何内涵 733.6 描述候选对象 783.7 特征化候选对象 823.8 连接候选对象 833.9 寻找共同背景 853.10 审核已有对象,寻找其他的对象 883.11 小结 893.12 进一步阅读 90第4章 责任 914.1 责任是什么 914.2 责任来自哪里 934.3 责任分配策略 1044.3.1 记录责任 1054.3.2 进行初始分配 1074.3.3 解除困扰 1164.4 实现对象和责任 1184.5 检测对象的质量 1224.6 小结 1234.7 进一步阅读 123第5章 协作 1255.1 什么是对象协作 1255.1.1 为协作做准备 1265.1.2 记录候选协作 1265.2 "Speak for Me"软件的设计故事 1285.3 协作的选择 1285.3.1 谁有控制权 1305.3.2 对象之间的互信度应为多少 1305.4 确定协作的策略 1325.4.1 审视个体对象的角色:构造型隐含协作 1335.4.2 审视个体责任:它们隐含着协作 1395.4.3 为复杂责任设计细节 1405.4.4 为特定的任务设计协作 1415.4.5 确认可用的模式 1425.4.6 确认体系结构怎样影响协作 1435.4.7 解决协作中存在的问题 1445.5 模拟协作 1485.5.1 计划编制一个模拟 1485.5.2 执行一个模拟 1505.6 设计优良的协作 1535.7 让协作成为可能 1565.7.1 建立连接的指导方针 1575.7.2 设计可靠的协作 1595.8 何时结束 1605.9 小结 1615.10 进一步阅读 161第6章 控制风格 1636.1 什么是控制风格 1636.2 可选的控制风格 1646.3 衡量各方案利弊 1656.3.1 集中式控制 1656.3.2 委派式控制 1666.3.3 控制决策的局限性 1676.4 设计控制中心 1706.5 案例分析:外部用户事件的控制风格 1716.5.1 MessageBuilder对象的集中式控制 1746.5.2 将决策重构入MessageBuilder对象的状态方法中 1836.5.3 抽取决策权 1836.5.4 委派更多责任 1866.5.5 为邻居对象设计控制风格 1886.5.6 设计类似的控制中心:具有一致性 1916.6 小结 197第7章 描述协作 1997.1 讲述协作的提纲 1997.2 讲述协作的策略 2007.3 确立作用范围、深度和基调 2017.4 列出所要包含的内容 2027.5 决定细节层次 2027.5.1 显示一个鸟瞰视图 2037.5.2 只显示协作者 2057.5.3 显示协作者之间的互动顺序 2077.5.4 显示深度视图 2097.5.5 显示焦点互动 2117.5.6 显示实现视图 2127.5.7 显示如何改编协作 2127.5.8 UML图的不足之处 2157.6 选择适当的形式 2187.7 讲述、绘制以及描述:指导方针 2197.8 组织你的工作 2247.8.1 加强重视 2247.8.2 展开提纲 2257.8.3 了解基础内容 2267.8.4 进行总结 2277.9 保留提纲 2277.10 小结 2287.11 进一步阅读 228第8章 可靠的协作 2318.1 理解失败的后果 2318.2 增加系统的可靠性 2338.3 确定协作在何处可被信任 2348.3.1 可信任与不可信协作之间的比较 2348.3.2 信任的内涵 2368.4 确认哪些协作需要可靠性 2378.4.1 用例说明了什么 2388.4.2 区分异常和错误 2388.4.3 对象异常与用例异常 2398.4.4 对象异常基础 2408.4.5 异常和错误处理策略 2448.4.6 确定由谁负责 2468.5 设计一种解决方案 2488.5.1 积极探索异常条件 2488.5.2 限制目标范围 2498.5.3 记录异常处理策略 2518.6 建立异常处理设计文档 2528.7 回顾你的设计 2578.8 小结 2598.9 进一步阅读 259第9章 弹性 2619.1 弹性意味着什么 2619.2 弹性的程度 2639.3 弹性解决方案的效果 2659.4 明确弹性需求 2669.5 记录变化 2699.6 变化及其实现 2729.6.1 确定一个变化的影响力 2729.6.2 探讨实现弹性的策略 2739.6.3 使用模板和HOOK机制来支持变化 2739.7 模式在弹性设计中的角色 2819.7.1 以策略模式改变对象的行为 2819.7.2 使用中介者隐藏交互对象 2829.7.3 使用适配器安装一个预定义对象或系统 2829.7.4 模式是如何增加弹性的 2849.8 怎样建立弹性设计的文档 2849.8.1 为读者考虑 2899.8.2 描述如何做出一个变化 2909.9 修改遗留系统的设计 2929.10 小结 2949.11 进一步阅读 294第10章 关于设计 29710.1 软件设计的本质 29710.2 解决核心设计问题 29810.3 确定问题框架(Frame the Problem) 29910.4 处理启示性设计问题 30210.4.1 一个管理共享信息的例子 30210.4.2 一个连接问题的复杂性例子 30310.4.3 难度永远不会降低的设计问题 30410.4.4 启示性问题是否可以"另类" 30510.5 解决启示性问题的策略 30610.5.1 重新定义问题 30710.5.2 合成一个解决方案 30810.6 处理剩余问题 30910.7 设计职责 31010.8 进一步阅读 313