面向对象分析
- ⾯向对象分析技术关注应⽤领域中的实体,并将其建模为对象
- ⾯向对象分析技术主要基于分类、泛化、聚合关系在对象集合之间建⽴结构
- 对象的⾏为是执⾏预定的动作(服务/活动)
- 对象通过执⾏动作来完成状态变迁
面向对象分析的五个核心概念:对象、属性、结构、服务和主题
软件系统建模原则
支持修改和重用
-
模型组件重用
-
模型结构重用
-
建立可重用的模型组件
-
建立易于修改的模型结构
-
抽象:关注重点,暂忘细节
-
分解:将问题切分,分而治之
-
多视角映射:切换关注点,分别讨论
-
模块化:建立稳定结构、缩小变化影响范围
-
模式:多次成功应用的模型结构
抽象
在对象间找出共性,忽略不相关细节
关注对象间的一般/特殊关系
- 将具有相同属性或角色的对象放入同一个类集合中
- 再通过父子关系,将由共性的类定义为同一个父类的子类
继承/⼀般-特殊结构
分解
表达整体部分关系,细分为聚合和组合
整体-部分结构
整体部分结构描述对象间的组合关系. 例如,⼀个交通灯对象由0-3个灯组,⽀撑杆和位置对象组合⽽成。
服务建模(虚线)
对象为其周遭的其他对象提供服务,例如,医⽣对象对外提供的服务包括:体检,出体检报告等。 (从面向对象到面向服务)
- 瞬时服务:对象的创建、结束,修改等等
- 计算服务:对象为其他对象完成计算任务等
- 监控服务:对象持续监控流程,检查预设条件是否满⾜
多视角映射
从多个视角分别建模问题的不同方面
CRC分析法
CRC是类(Class)、责任(Responsibility)和协作(Collaboration)的简称,CRC分析法根据类所要扮演的职责来确定类
类筛选
在候选类中排除以下类:
- 超出问题关注的范围的类;
- 指代整个系统的类;
- 功能重复的类;
- 过于含糊或过于具体的类
- 可观察到的现象是,实例对象过多过少
Coad & Yourdon’s 的筛选原则:
- 保存对象信息: 系统需要保存对象信息吗?
- 提供所需服务: 类对象是否对外提供修改属性值的操作?
- 具有多个属性: 只有一个属性的类,应该建模为属性
- 具有公共属性: 类属性是否为所有实例对象共享?
- 具有公共操作: 类操作是否为所有实例对象共享?
- 外部实体:如果生产或使用对象的信息,也应考虑建模为系统类
类识别
从原始资料中识别类:
- 找出干系人提交的问题描述中名词及短语
如果他描述应用领域中的信息结构或本质,则加入模型
从其他来源识别类:
- 背景信息调查
- 用户及干系人提供
- 分析模式
识别类的功能职责
功能职责关乎行为动作,因此是问题描述中的动词…
注意
- 并非所有动词均将成为类职责
- 有时多个动作合并为一个职责
- 随着分析过程深入会发现新的职责
- 不断修正类定义和职责定义
- 当两个类分享职责时,为二者同时添加该职责
面向对象设计
面向对象设计过程
- 进行适当的领域分析
- 撰写问题描述,确定系统的开发任务
- 基于问题描述抽取需求
- 开发用户界面原型
- 识别对象类
- 定义每个类的职责
- 确定类之间的交互关系
- 建立系统的设计模型
面向对象思维方式的核心理念
- 区分接口与实现
- 从具体到抽象
- 最小接口原则
抽象的接口与不太抽象的接口
向用户暴露尽可能少的实现细节(最小用户负担原则)
让⽤户知道的关于类的内部实现细节越少越好:
- 只给看必须的
- 只看公开的
- 只为⽤户的业务需求考虑