第九章 面对对象的软件设计
面对对象分析
- 分析的过程就是提取系统需求的过程
- 主要包括理解、表达、验证三项内容
分析过程
面对对象分析,就是抽取和整理用户需求,并建立问题域精确模型的过程。
面向对象分析原则
面向对象建模得到的模型包含对象的三个要素:静态结构(对象模型),交互次序(动态模型),数据变换(功能模型)
**OOA模型 **
复杂问题(大型系统)的对象模型由五个层次组成:主题层(范畴层),类–&--对象层,结构层,属性层和服务层。
面对对象分析大体顺序如下:寻找类-&-对象,识别结构,识别主题,定义属性,建立动态模型,建立功能模型,定义服务。
建立对象模型
对象模型描述了现实世界中的类–&--对象以及他们之间的关系,表示了目标系统的静态数据结构
确定类与对象
构造对象的第一步时标出来自问题域的相关对象类
候选的类和对象
- 可感知的物理实体,如飞机,汽车
- 人或组织的角色,如医生,计算机系
- 应该记忆的事件,如交通事故
- 两个或多个对象的相互作用,如购买,结婚
- 需要说明的概念,如政策,保险政策
非正式分析 用自然语言书写的需求陈述为依据,将名词作为类与对象的候选者,形容词作为属性的线索,动词作为服务的候选者。
筛选出正确的类与对象
- 冗余类:若两个类表述了同一个信息 ,保留最富有描述能力的类。
- 不相干的类:除掉与问题没有关系或根本无关的类。
- 模糊类:类必须是确定的,有些暂定类边界定义模糊或范围太广则应除掉。
- 属性:某些名词描述的是其他对象的属性,则从暂定类中删除。如果某一性质的独立性很重要,就应该把他归属到类,而不把它作为属性。
- 操作:如果问题陈述中的名词有动作含义,则描述的操作就不是类。但是具有自身性质而且需要独立存在的操作应该描述成类。
定义属性和方法
问题域中事物的特征具有静态和动态特征,分别对应属性和方法(服务)
定义属性:
- 按一般常识, 该对象应具有哪些属性;
- 在当前问题域中, 该对象应具有哪些属性;
- 根据系统责任的要求, 该对象应具有哪些属性;
- 建立该对象是为了保存和管理哪些信息;
- 对象为了在服务中实现其功能, 需要增设哪些属性;
- 是否需要增设属性来区别对象的不同状态;
- 用什么属性来表示对象的整体 部分联系和实例连接。
定义服务:
服务有名字、参数、可见性和返回类型 - “做”型
- “知道”型
定义结构: - 一般-特殊关系(继承关系): 即对象之间的分类关系,用一般特殊结构表示;
- 整体-部分关系: 即对象之间的组成关系,用整体 部分结构表示;
- 静态连接关系: 即通过对象属性所反映出来的联系,用实例连接表示;
- 动态连接关系 即对象行为之间的依赖关系,用消息连接表示。
确定关联
两个或多个对象之间的相互依赖、相互作用的关系就是关联
划分主题
在开发大型、复杂系统的过程中,为了降低复杂程度,习惯把系统再进一步划分为几个不同的主题。
确定属性
属性是对象的性质,确定属性的过程包括分析和选择两个步骤
识别继承关系
自底向上,自顶向下
反复修改
建立功能模型
行为分类
- 系统行为
- 对象自身的简单行为
- 对象自身的复杂行为
发现服务的方法
- 识别服务
- 对象的审查和调整
- 认识对象的主动行为
- 服务的命名与定位
- 服务描述
编写脚本
脚本是指系统在某一执行期间内出现的一系列事件,描述用户和目标系统之间的一个或多个典型的交互过程。
水平方向表示对象,垂直方向表示发生的顺序
画事件跟踪图
ATM例子
画状态图
从事件导出服务
面对对象设计
设计是把分析阶段得到的需求转变成符合成本和质量要求的抽象的系统实现方案的过程。
准则
- 模块化
- 抽象
- 信息隐蔽
- 弱耦合
- 强内聚
- 可重用
设计模式
- 创建型模式:用于解耦对象的实例化过程
- 结构型模式:把类和对象结合在一起形成的更大的结构
- 行为型模式:类和对象如何交互,记忆划分责任和算法
简单工厂模式