面向对象分析
- 关注技术领域中的实体,并将其建模为对象
- 面向对象分析技术主要基于分类,泛化,聚合关系在对象集合之间建立结构
- 对象的行为是执行预定的动作(服务/活动)
- 对象通过执行动作来完成状态变迁
Peter Code的面向对象方法
- "对象"是问题领域中真实存在的实体,有定义清晰的边界
- 对象中封装有属性和行为
- 面向对象分析的五个核心概念:对象,属性,结构,服务和主题
- 一般-特殊结构
- 整体-部分结构
面向对象的分析方法学
- 识别对象和类(类是对象的抽象定义)
- 识别类之间的关系,建立由继承和组合关系组成的类层次结构
- 定义主题,通过主题将对象模型组织成多个抽象的层次结构或视角,一般来说通过继承关系或整体部分关系联系起来的类属于同一个主题
- 识别各个对象内部的属性信息,并将其赋予相应的抽象层次类
- 为每个类定义服务
CRC卡片分拣法(用于寻找类)
识别类的方法
- 根据用例描述中的名词确定类的候选者
- 使用CRC分析法寻找类
由名词寻找实体类 由动词寻找职责也要从字面去发现职责- 根据边界类,控制类,实体类的划分来帮助发现系统中的类
- 对领域进行分析,或利用已有的领域分析结果得到类
- 参考分析,设计模式来确定类
面向对象设计
区分接口与实现,从具体到抽象,最小接口原则
开闭原则: 软件实体在扩展性方面应该是开放的,而在更改性方面应该封闭的。即应该可以扩展功能,但不能对原代码进行修改
Liskov替换原则 Liskov替换原则要求子类 宽入严出
- 子类中方法的前置条件不能强于父类中相应方法的前置条件
- 子类中方法的后置条件不能弱于父类中相应方法的后置条件
依赖倒置原则 依赖倒置原则值的是依赖关系应该是尽量依赖接口(或抽象类)而不是依赖于具体类
接口分离原则 在设计时用采用比较小的接口,采用多个和特定客户类有关的接口比采用一个通用的接口要好。
UML类图
自反关联,二元关联,N元关联
关联关系:
- 聚合关系: 用于表达一个整体对象与其成员对象之间的关系
- 组合关系: 用于表达一个整体对象与其组成部分之间的关系
组合关系所表达的整体类与部分类之间的所属关系更强
整体类的对象不存在是,部分类的对象也不存在
整体类对象撤销之前要负责将部分类对象撤销
而在聚合关系中,删除整体对象,成员对象依然存在 是一个独立的类对象
**继承关系:**子类继承父类的属性,关联和操作 子类可以覆盖继承来的内容 分类可以声明为抽象类 可以自顶向下也可以自底向上
测试题:
-
下列哪项关于面向对象分析来源的说法不正确: C
A 面向对象分析的思路部分源于面向对象的程序设计
B 面向对象分析的思路部分源于数据库领域的实体关系图
C 面向对象分析的思路部分来源于面向对象设计
D 面向对象分析的思路部分来源于人工智能领域的知识表示方法 -
下列哪项关于对象服务的说法是不正确的? D
A 创建新对象,撤销旧对象,修改对象属性等瞬时完成的服务
B 为其他对象完成各种计算服务
C 持续检查预设条件是否满足的监控服务
D 对象只有属性和行为,不对外提供服务 -
采用CRC卡片分拣发的分析过程包含哪些步骤
定义每个类的职责, 确定类之间的交互关系, 识别对象类 -
面向对象技术中,封装的含义是:
保证对象内部的数据只能通过操作来访问 -
面向对象设计中, ”设计抽象的接口“的含义是:
向用户暴露尽可能少的实现细节 -
面向对象设计方法中,开闭原则的含义是:
要尽可能多的使用接口进行封装,利用多态技术,扩展时不需要修改源代码 -
面向对象设计方法中,LSP替换原则要求“子类可以替换父类出现在父类能出现的任何地方”,采用了:
契约式设计 -
类定义不会要求其对象实例具有什么特征? 会要求其实例对象具有什么特征
不会要求: 相同状态
要 求: 相同属性, 相同行为, 相同的对象关系 -
UML类图中对以下几种类型的关系的使用频度从高到第应为:
关联>泛化>聚合>组合>依赖>实现 -
关于UML类图中泛化关系建模,不正确的说法是? D
A 定义泛化关系的好处是当环境发生变化是,便于添加新的子类
B 当某个类中,存在的属性和操作略有不同的子类时,应定义泛化关系
C 当现有的多个类具有公共属性和方法时,可以定义一个父类让它们共同继承
D 关联关系也可以用于定义分类关系,可以替代泛化关系