文章目录
前言
本文是在备考软考-软件设计师时编写的,为了记忆重点内容,内容较为简略,只是粗浅的提及
一、面向对象基础
1.1基本概念
对象
属性(数据)+方法(操作)+对象ID
类(实体类/控制类/边界类):
对象的模板或蓝图,定义了对象的属性和方法
接口
它只有方法定义没有实现
封装
隐藏对象的属性和实现细节,仅对外公开接口(信息隐藏技术)
继承
允许子类继承父类的属性和方法
多态
允许不同类的对象对同一消息做出响应可以有不同的解释和执行结果
重载
一个类可以有多个同名而参数类型不同的方法
重置
在子类中重新定义父类中已经定义的方法
动态绑定
根据接收对象的具体情况将请求的操作与实现的方法进行连接(运动是绑定)
1.2面向对象开发流程
面向对象分析
- 认定对象(名词)
- 组织对象(抽象成类)
- 对象间的相互作用
- 基于对象的操作
面向对象设计
- 设计类及对象
- 定义属性
- 定义服务
- 识别关系
- 识别包
面向对象开发
- 程序设计范式
- 选择一种OOPL
面向对象测试
- 算法层
- 类层
- 模板层
- 系统层
二、UML
2.1UML图的概念及分类
概念
UML图是一种模型化语言,模型大多以图表的方式表现出来。一份典型的建模图表通常包含几个块或框、连接线和作为模型附加信息之用的文本。这些元素在UML规则中相互联系和扩展,共同构成了对系统的全面描述。
结构图
类型 | 关键词 |
---|---|
类图 | 一组对象、接口、协作和它们之间的关系 |
对象图 | 一组对象一以及它们之间的关系 |
包图 | 描述系统各个包之间的关系和依赖 |
组合结构图 | 分解类、组件或用例的内部结构 |
构件图 | 一组构件之间的组织和依赖 |
部署图 | 描述系统的硬件结构 |
行为图
类型 | 关键词 |
---|---|
用例图 | 用例、参与者以及它们之间的关系 |
顺序图 | 强调按时间顺序 |
通信图 | 强调收发消息的对象之间的组织结构 |
定时图 | 关注对象在改变状态时的时间约束条件 |
状态图 | 由状态、转换、事件和活动组成 |
活动图 | 一个活动到另一个活动的流程 |
2.2UML中的关系
用例图关系
- 包含关系:表示一个用例(基础用例)的行为包含了另一个用例(包含用例)的行为
- 扩展关系:表示在特定条件下,一个用例(扩展用例)会对另一个用例(基础用例)进行扩展
- 泛化关系:也称为继承关系,表示一个用例可以被特别列举为一个或多个子用例
类图关系
- 依赖关系:表示一个类依赖于另一个类的定义
- 泛化关系:表示一个类是另一个类的一般化,即子类继承父类的所有属性和方法
- 组合关系:也表示整体与部分的关系,但整体与部分具有相同的生命周期
- 聚合关系:表示整体与部分的关系,但整体与部分可以具有不同的生命周期
- 实现关系:接口与类之间的关系
三、设计模式
3.1设计模式分类汇总
创建型
- 工厂方法模式(factory method)
- 抽象工厂模式(abstract factory)
- 原型模式(prototype)
- 单例模式(singleton)
- 构建器模式(builder)
结构型
- 适配器模式(adapter)
- 桥接模式(bridge)
- 组合模式(composite)
- 装饰模式(decorator)
- 外观模式(facade)
- 享元模式(flyweight)
- 代理模式(proxy)
行为型
- 模板方法模式(template method)
- 职责链模式(chain of responsibility)
- 命令模式(command)
- 迭代器模式(iterator)
- 中介者模式(mediator)
- 解释器模式(interpreter)
- 备忘录模式(memento)
- 观察者模式(oserver)
- 状态模式(state)
- 策略模式(straegy)
- 访问者模式(visitor)
3.2创建型模式
设计模式 | 说明 | 关键词 |
---|---|---|
工厂方法模式 | 定义一个创建对象的接口,但由子类决定需要实例化哪一个类。工厂方法使得子类实例化的过程推迟 | 动态生产对象 |
抽象工厂模式 | 提供一个接口,可以创建一系列相关或互相依赖的对象,而无需指定它们具体的类 | 生产成系列对象 |
构建器模式 | 将一个复杂类的表示与其改造相分离,使得相同的构建过程能够得出不同的表示 | 复杂对象构造 |
原型模式 | 用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象 | 克隆对象 |
单例模式 | 保证一个类只有一个实例,并提供一个访问它的全局访问点 | 单实例 |
3.3结构型模式
设计模式 | 说明 | 关键词 |
---|---|---|
适配器模式 | 将一个类的接口转换成用户希望得到的另一个接口。它使原本不相容的接口得以协同工作 | 转换接口 |
桥接模式 | 将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化 | 继承数拆分 |
组合模式 | 将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性 | 树形目录结构 |
装饰模式 | 动态地给一个对象添加一些额外的职责 | 动态附加职责 |
外观模式 | 为子系统中的一组接口提供一个一致的界面,使得子系统更容易使用 | 对外统一接口 |
享元模式 | 运用共享技术来有效地支持大量细粒度对象的复用 | 共享 |
代理模式 | 为其他对象提供一种代理以控制对这个对象的访问 | 快捷中介 |
3.4行为型模式
设计模式 | 说明 | 关键词 |
---|---|---|
职责链模式 | 解耦发送者和接收者,通过构建一条责任链来逐一处理请求。请求沿着链传递,直到有一个处理者能够处理它为止 | 职责传递 |
命令模式 | 将请求封装成对象,从而使得可以参数化客户端对象、队列或记录请求日志,并支持可撤销的操作 | 日志记录 |
解释器模式 | 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子 | |
迭代器模式 | 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示 | 数据集合 |
中介者模式 | 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 | 不直接引用 |
备忘录模式 | 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态 | 存档 |
观察者模式 | 定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态时,其所有依赖者都会得到通知并被自动更新 | 联动 |
状态模式 | 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类 | 状态变类 |
策略模式 | 定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户 | 方案切换 |
模板方法模式 | 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中 | 框架 |
访问者模式 | 表示一个作用于某对象结构中的各元素的操作 | 数据和操作分离 |