对象设计
2021-09-01 20:41:21 0 举报
AI智能生成
对象设计角色、责任和协作
作者其他创作
大纲/内容
1.设计的概念
1.1 对象机器
部分到整体
软件的部分——对象
如何制造软件机器?
误区
需要对完整的真实世界进行建模?
用对象模拟现实世界中的信息、过程、互动、关系甚至错误
衡量
是否满足应用需求
1.2 角色
定义
一组可以相互替换使用的责任
隐喻
对象不会独立存在,它是机器的一部分
为了生存,对象将具有特定的使命——在给定环境中扮演一种角色
1.3 角色模式(role stereotypes)
定义
描述对象的责任
eg.
信息持有者:
掌握并提供信息
构造者:
维护对象之间的关系以及与这些关系相关的信息
服务提供者:
执行工作,通常为其他对象提供服务
协调者:
通过向其他对象委托任务来响应事件
控制者:
进行决策并指导其他对象的行为
接口:
连接系统的各个部分,并在它们之间进行信息和请求的转换
1.4 角色、责任和协作
软件实现了一个责任系统。不同的角色通过协作履行不同的责任
对象通过相互调用或协作,一起共同履行更大的责任
对象通过责任来体现角色
1.5 对象契约
对象与系统中的哪些实体互动
在何种条件下可以保证工作的正常进行
以及它将对系统中其他成员产生什么影响
核心
使用条件
使用效果
1.6 领域对象
领域对象为开发者与用户一起讨论系统提供一个公共背景。它代表的是用户和特定领域专家所熟悉的概念。
eg.
银行系统
账户、存款、提取额、利率等
航空票务预订系统
预定、航班、座位、目的地、时刻表等
1.7 app 特定对象
定义
接口、协调者、特定的服务提供者,弥补领域对象的不足,将系统粘合起来
关注点
用户和领域专家
关心更抽象、更逻辑的观点
领域内的信息、服务以及规则等
开发者
关注系统
外部系统及设备连接、处理之间的协调关系、连接关系等
1.8 接口
定义
接口公布服务,并说明如何请求
对象设计3部分
公开的接口
使用条件
实现的细节
1.9 类
数学意义
类用来描述相同事物的集合
软件类
简单抽象
可以被卡片来描述、可以被设计符号化,还可以被编码实现
可以被卡片来描述、可以被设计符号化,还可以被编码实现
类定义
类实体的“知”、“行”or“决策”
两类角色
工厂
负责初始化程序运行所必须的实体
一个独立的服务提供者
为与其有关联的客户提供服务
对象关系
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.18 设计描述
CRC 卡
1.20 更进一步阅读
2.责任驱动设计
2.1 观察、描述和设计的过程
启动生产过程:项目的定义和计划
搭建舞台:初期的描述
实施开发:设计
从多视角“观察”
2.2 撰写草稿:分析描述
用法描述
其他规范
术语表
概念上的对象
2.3 铸造特性:挖掘设计
CRC 卡
创造:运用模式
寻求解决方案
在思想与细节之间跳跃
2.4 调整产品:精练设计
弹性和可扩展设计
可靠性设计
使设计具有可预见性、一致性并易于理解
3.发现对象
3.1 发现策略
3.2 寻找对象、角色和类
3.3 why need 设计纲领
3.4 寻找的策略
3.5 名字到底有何内涵
3.6 描述候选对象
3.7 特征化候选对象
3.8 连接候选对象
3.9 寻找共同背景
3.10 审核已有对象,寻找其他对象
4.责任
4.1 what 责任
4.2 where 责任
4.3 责任分配策略
记录责任
进行初始分配
解除困扰
4.4 实现对象和责任
4.5 检测对象的质量
5.协作
5.1 what 对象协作
为协作做准备
记录候选协作
5.2 Speak for Me 软件的设计故事
5.3 协作的选择
5.4 确定协作的策略
审视个体对象的角色:构造型隐含协作
审视个体责任:他们隐含着协作
为复杂责任设计细节
为特定的任务设计协作
确认可用的模式
确认体系结构怎样影响协作
解决协作中的问题
5.5 模拟协作
计划编制一个模拟
执行一个模拟
5.6 设计优良的协作
5.7 让协作成为可能
5.8 何时结束
6.控制风格
6.1 what 控制风格
6.2 可选的控制风格
6.3 衡量各方案利弊
集中式控制
委派书控制
控制决策的局限性
6.4 设计控制中心
6.5 eg.外部用户事件的控制风格
MessageBuilder 对象的集中式控制
将决策重构入MessageBuilder对象的状态方法中
抽取决策权
委派更多责任
为相邻对象设计控制风格
设计类似的控制中心:具有一致性
7.描述协作
7.1 协作的提纲
7.2 协作的策略
7.3 确立作用范围、深度和基调
7.4 列出所要包含的内容
7.5 决定细节层次
显示一个鸟瞰视图
只显示协作者
显示协作者之间的互动顺序
显示深度视图
显示焦点互动
显示现实视图
显示如何改编协作
UML 的不足之处
7.6 选择适当的形式
7.7 讲述、绘制以及描述:指导方针
7.8 组织你的工作
加强重视
展开提纲
了解基础内容
进行总结
7.9 保留提纲
8.可靠的协作
8.1 理解失败的后果
8.2 增加系统的可靠性
8.3 确定协作在何处可被信任
可信任 PK 不可信任
信任的内涵
8.4 确认哪些协作需要可靠性
8.5 设计一种解决方案
8.6 建立异常处理设计文档
8.7 回顾你的设计
9.弹性
9.1 弹性意味着什么
9.2 弹性的程度
9.3 弹性解决方案的效果
9.4 明确弹性需求
9.5 记录变化
9.6 变化及其实现
明确一个变化的影响力
探讨实现弹性的策略
使用模板和Hook 机制来支持变化
9.7 模式在弹性设计中的角色
以策略模式改变对象的行为
使用中介者隐藏交互对象
使用适配器安装一个预定义对象或系统
模式是如何增加弹性的
9.8 怎样建立弹性设计的文档
9.9 修改遗留系统的设计
10.关于设计
10.1 软件设计的本质
10.2 解决核心设计问题
10.3 确定问题框架(Frame the Problem)
10.4 处理启示性设计问题
一个管理共享信息的例子
一个连接问题的复杂性例子
难度永远不会降低的设计问题
启示性问题是否可以“另类”
10.5 解决启示性问题的策略
重新定义问题
合成一个解决方案
10.6 处理剩余问题
10.7 设计职责
0 条评论
下一页