目录
二、面向对象分析(Object-Oriented Analysis, OOA)
三、面向对象设计(Obiected-Oriented Design, OOD)
1. Chain of Responsibility (责任链)
面向对象基础
一、基本概念
1. 对象 :包括数据(属性)、操作(行为)、对象名。对象是类的实例。
2. 消息 :对象之间进行通信的构造
3. 类
1) 实体类 :现实世界中真实的实体,如人、物等。
2) 接口类(边界类):为用户提供与系统交互合作的方式,分为人和系统两大类,人的接口有显示屏、窗口、Web窗体、对话框、菜单、列表框、条形码、二维码等。系统接口涉及到吧数据发送到其他系统
3) 控制类 :控制活动流,充当协调者
4. 继承
1) 子类继承父类的属性和方法
2) 子类只继承一个父类 ------ 单重继承
子类继承多个父类 ------- 多重继承
3) 子类没有出现父类的方法 ----- 继承
子类出现了父类的方法(以更具体的方式) ------- 覆盖
5. 多态
1) 不同对象收到同一消息可以产生不同结果,这一现象叫多态
2) 多态的实现受到继承的支持
3) 多态分类
6. 绑定
1) 动态绑定 ---- 执行(运行)期 静态绑定 ---- 编译期
2) 支持多态的是动态绑定
二、面向对象分析(Object-Oriented Analysis, OOA)
(该阶段关注系统的行为,明确系统提供什么服务)
1.认定对象(确定问题域)
2.组织对象
3.对象间的相互作用
4.基于对象的操作
三、面向对象设计(Obiected-Oriented Design, OOD)
1. 面向对象设计的活动(五个)
(1)识别类及对象
(2)定义属性
(3)定义服务
(4)识别关系
(5)识别包
2. 面向对象设计的原则
(1)单一变量原则 :对一个类而言,应该只有一个引起它变化的原因
(2)开放封闭原则 :对扩展开发对修改封闭
(3)里氏替换原则 :子类型能否替换掉他们的基类型(父类)
(4)依赖倒置原则 :抽象不依赖于细节,细节依赖抽象。
高层模块不依赖低层模块,二者都应该依赖于抽象。
(5)接口分离原则 :依赖于抽象,不依赖于具体,有利于应对变化
UML
一、关系
1) 依赖 :一个事务的变化会影响另个事务
2) 关联 :整体和部分的结构关系(两个特例:组合和聚合,部分离开整体无意义即组合反之聚合,如汽车和音乐系统,音乐系统离开汽车还能在其他地方使用,所以两者为聚合关系)
两个类之间可以有多个由不同角色标识的关联。
关联的多重度指的是一个类的实例与另一个类的多少个实例相关联。
聚集是一种特殊的关联
组合即把聚集中的菱形涂黑
3) 泛化 :特殊和一般的关系
4) 实现 :一个类元指定了由另一个类元保证执行的契约,在两种情况下会使用实现关系:一种是接口于实现类或构建之间,另一种是用例与实现他们的协作之间。
二、UML中的图
1. 类图
( 包括类,接口,协作,关系)
1.1三种方式使用类图
(1)对系统的词汇建模
(2)对简单的协作建模
(3)对逻辑数据库模式建模
2. 对象图
(展示某一时刻一组对象以及它们之间的关系,静态快照,一般包括对象和链)
3. 用例图
(展示一组用例、参与者(人、硬件或其他系统)以及它们之间的关系,用于对系统发静态用例建模,支持系统行为,即该系统提供外部可见服务)
两种方式使用:
(1)对系统的语境建模
(2)对系统的需求建模
4. 交互图
(由一组对象和它们之间的关系组成,用于对系统动态方面建模,表现为序列图、通信图、交互概览图和计时图)
4.1 序列图
1)两个特征:1.有对象生命线 2.有控制焦点(瘦高矩形)
2)箭头指向即为该类需实现的方法
3)异步消息无返回消息,同步消息有返回消息。
4.2通信图
1)两个特征:1.有路径(箭头) 2.有顺序号
2)用于展示对象间的消息流及其顺序
4.3 交互概览图
4.4 计时图
5. 状态图
(动态视图)
1)活动可以在转换时执行也可以在状态内执行
2)状态转换至少有两个状态
3)用于描述一个对象在多个用例中的行为
4)可用于控制界面或控制对象
5)用于某些具有多个状态的对象
6. 活动图
1)适用于对用例图中的复杂用例进一步建模
2)动态视图,两种使用方式:1.对工作流建模; 2.对操作建模
7. 构建图(组件图)
1)用于展示组件之间的依赖关系
2)静态实现图,通常把一个构建映射为一个或多个类、接口或协作
8. 组织结构图
8.1 内部结构图
8.2 协作使用图
9. 部署图
1)物理方面建模,展示软件组件和硬件之间爱的物理关系
2)静态实施视图,用于展现运行处理节点以及其中组件配置、描述代码的物理模块、描述系统在不同计算机系统的物理分布,其依赖关系类似于包图。
10. 包图
设计模式
一、四个基本要素
(模式名称、问题、解决方案、效果)
二、分类
三、创建型设计模式
1. Abstract Factory(抽象工厂)
1)意图:提供一个接口,无需指定具体的类
2. Builder(生成器)
1) 意图:将一个复杂对象的构造于表示分离,使得同样的构建过程可以创建不同的表示
3. Facotry Method (工厂方法)
1)意图 :定义一个用于创建对象的接口,让子类决定实例化哪一个类
4. Prototype (原型)
1)意图 :用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象
5. Singleton (单例)
1)意图 :保证一个类仅有一个实例,并提供一个访问它的全局访问点
四、结构型设计模式
(结构型设计模式存在部分与整体关系)
1. Adapter(适配器)
1)意图:将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容的类可以一起工作
2. Bridge (桥接)
1)意图 : 将抽象部分于其实现部分分离,使它们都可以独立地变化,存在部分与整体的联系
3. Composite (组合)
1)意图 : 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
4. Decorator (装饰)
1)意图 :动态地给一个对象添加一些额外的功能职责(行为)
5. Facade (外观)
1)意图
为子系统的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
6. Flyweight(享元)
1)意图 :运用共享技术有效地支持大量细粒度的对象,可以减少对象所占内存以提高性能。
7. Proxy (代理)
1)意图 :为其他对象提供一种代理(接口)以控制这个对象的访问
五、行为设计模式
1. Chain of Responsibility (责任链)
1)意图 : 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
2. Command (命令)
1)意图 : 将一个请求封装为一个对象,从而使得可以使用不同的请求对客户进行参数化;对请求排队会记录请求日志,以及支持可撤销的操作。
3. Interpreter (解释器)
1)意图 :给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
4. Iterator (迭代器)
1)意图 : 提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示。
5. Mediator (中介者)
1)意图 : 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
2)适用于一对多情况
6. Memento (备忘录)
1)意图 : 在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。
7. Observer (观察者)
(与Mediator相互竞争)
1)意图 :定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。
2)一个Subject类可以有多个ConcreteSubject类,一个Observer也可以有多个ConcreteObserver类,一个Subject对象可以对应多个Observer对象。
8. State (状态)
1)意图 :允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
2)涉及到对象内部存在多个状态使用该模式
9. Strategy (策略)
1) 意图 :定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。此模式使得算法可以独立于它们的客户而变化。
10. Template Method (模板方法)
1) 意图 :定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
11. Visitor (访问者)
1)意图 : 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。
小结
模式 | 关键字 |
Abstract Factory(抽象工厂) | 抽象接口 |
Builder(生成器) | 类和构造分离 |
Facotry Method (工厂方法) | 子类决定实例化 |
Prototype (原型) | 原型复制 |
Singleton (单例) | 单一实例 |
Adapter(适配器) | 转换兼容接口 |
Bridge (桥接) | 抽象和实现分离 |
Composite (组合) | 整体部分,树形结构 |
Decorator (装饰) | 附加职责 |
Facade (外观) | 对外统一接口 |
Flyweight(享元) | 细粒度,共享 |
Proxy (代理) | 代理控制 |
Chain of Responsibility (责任链) | 传递请求,职责,链接 |
Command (命令) | 参数化,日志记录 |
Interpreter (解释器) | 文法,解释 |
Iterator (迭代器) | 顺序访问 |
Mediator (中介者) | 不直接引用 |
Memento (备忘录) | 保存恢复 |
Observer (观察者) | 通知,自动更新 |
State (状态) | 内部状态改变 |
Strategy (策略) | 策略,替换 |
Template Method (模板方法) | |
Visitor (访问者) | 不改变情况下新操作 |