1.设计的概念<br>
1.1 对象机器
如何制造软件机器?
用对象模拟现实世界中的信息、过程、互动、关系甚至错误
1.2 角色
隐喻
对象不会独立存在,它是机器的一部分
为了生存,对象将具有特定的使命——在给定环境中扮演一种角色
1.3 角色模式(role stereotypes)
eg.
构造者:
维护对象之间的关系以及与这些关系相关的信息
接口:
连接系统的各个部分,并在它们之间进行信息和请求的转换
1.4 角色、责任和协作
软件实现了一个责任系统。不同的角色通过协作履行不同的责任
对象通过相互调用或协作,一起共同履行更大的责任
对象通过责任来体现角色
1.5 对象契约
对象与系统中的哪些实体互动
在何种条件下可以保证工作的正常进行
以及它将对系统中其他成员产生什么影响
1.6 领域对象
领域对象为开发者与用户一起讨论系统提供一个公共背景。它代表的是用户和特定领域专家所熟悉的概念。
eg.
航空票务预订系统
预定、航班、座位、目的地、时刻表等
1.7 app 特定对象
定义
接口、协调者、特定的服务提供者,弥补领域对象的不足,将系统粘合起来
关注点
用户和领域专家
关心更抽象、更逻辑的观点
领域内的信息、服务以及规则等
开发者
关注系统
外部系统及设备连接、处理之间的协调关系、连接关系等
1.9 类
软件类
简单抽象
<br>可以被卡片来描述、可以被设计符号化,还可以被编码实现
对象关系
1.10 复合
复合关系是动态的,发生在参与其中的对象生命期,并且可以改变
一个对象通过协作来调用另外一个对象的责任
1.11 继承
继承是静态的,父类的责任和子类对其的扩展都是在编译期完成
一个对象通过继承拥有另外一个对象的责任
Peter 原则
一个类所处的继承体系位置越高,实际能完成的职责就越少
1.12 对象的组织
子系统 or 对象领域
对象联盟由大量的潜在对象构成,并具有一些复杂的集体行为。
联盟成员之间倾力合作形成一个新的高层次的概念实体
1.13 组件
还有另一种组织设计,组件可以用于不同应用的设计元素。
组件的内容是隐藏的,它通过定义精确的接口对外提供服务
1.14 模式
将Double Dispatch 模式应用于特定问题
运用模式的现实利益
1.15 应用框架
PK 模式
模式是解决特定问题的方案,是一种思想
框架提供了一个类库,开发人员可以裁剪或扩展它以适应特定的环境
eg.
GUI
Java Swing 框架提供建立互动性用户接口的一系列功能
编程环境
Eclipse 集成开发环境的插件体系让工具开发人员可以在它之上开发不同的编译器、重构工具以及调试器
1.16 体系结构
框图是体系结构?
框图描述的只是结构,完全忽略了行为
定义
一个体系结构包含了一系列行为,以及对行为之间相互影响的描述
不同抽象层次的视图
概念视图、控制流程视图、组件和子系统视图、对象和互操作视图等
1.17 体系结构的风格
总概
以板块结构图来描述组件的交互,这些图所表示的是系统的组件层级,并描述它们之间的互动关系
常见体系风格
层次式(layered)
管道-过滤器式(pipes-and-filters)
黑板式(blackboard)
集中式控制
过程化编程
将大量的算法集中于一个“聪明对象”中,而在它周围环绕一群POJO
分散式控制
委托式控制
两个极端控制风格的中间
每个对象封装了履行其责任所需要的信息,不过偶尔,它们也需要请求其他对象的帮助
测试互动:一个层次体系的例子
定位层次中的对象
1.20 更进一步阅读
6.控制风格<br>
6.1 what 控制风格<br>
6.2 可选的控制风格
6.3 衡量各方案利弊
集中式控制
委派书控制
控制决策的局限性
6.4 设计控制中心
6.5 eg.外部用户事件的控制风格
MessageBuilder 对象的集中式控制
将决策重构入MessageBuilder对象的状态方法中
抽取决策权
委派更多责任
为相邻对象设计控制风格
设计类似的控制中心:具有一致性
10.关于设计
10.1 软件设计的本质
10.2 解决核心设计问题
10.3 确定问题框架(Frame the Problem)
10.4 处理启示性设计问题
一个管理共享信息的例子
一个连接问题的复杂性例子
难度永远不会降低的设计问题
启示性问题是否可以“另类”
10.5 解决启示性问题的策略
重新定义问题
合成一个解决方案
10.6 处理剩余问题
10.7 设计职责