软考自查:面向对象设计
需求开发— 需求分析—相关概念
对象
【对象建模的目的就是描述对象】
类
【通过将对象抽象成类,我们可以使问题抽象化,抽象增强了模型的归纳能力】((数据类)实体类,(边界和外界相连交互)边界类,(做衔接作用)控制类)
抽象
【抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关】
封装
【封装性是保证软件部件具有优良的模块性的基础】
继承与泛化
【继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容】(继承:子类继承父类)(泛化:把共性抽出成一个上层的类)
多态
【多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性】
接口
【描述对操作规范的说明,其只说明操作应该做什么,并没有定义操作如何做。可以将接口理解成为类的一个特例,它规定了实现此接口的类的操作方法,把真正的实现细节交由实现该接口的类去完成】(是一种特殊的类 只有方法的定义没有方法的实现)
消息
【体现对象间的交互,通过它向目标对象发送操作请求】
组件
【表示软件系统可替换的、物理的组成部分,封装了模块功能的实现。组件应当是内聚的,并具有相对稳定的公开接口】
模式和复用
【复用:指将已有的软件及其有效成分用于构造新的软件或系统。组件技术是软件复用实现的关键。
模式:描述了一个不断重复发生的问题,以及该问题的解决方案。其包括特定环境、问题和解决方案3个组成部分。应用设计模式可以更加简单和方便地去复用成功的软件设计和架构,从而帮助设计者更快更好地完成系统设计。】
面向对象设计-设计原则
单一职责原则:设计目的单一的类
开发-封闭原则:对扩展开放,对修改封闭
李氏(Liskov)替换原则:子类可以替换父类
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对接口编程,不要针对实现编程
接口隔离原则:使用多个专门的接口比使用单一的总接口要好
组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解
面向对象设计-设计模式的概念
架构模式:软件设计中的高层决策,例如C/S架构就属于架构模式,架构模式反映了开发软件系统过程中所有的基本设计决策
设计模式:主要关注软件系统的设计,与具体的实现语言无关
惯用法:是最底层的模式,关注软件系统的设计与实现,实现时通过某种特定的程序设计语言来描述构建与构件之间的关系。每种编程语言都有它自己特定的模式,即语言的惯用法。例如引用-计数就是C++语言中的一种惯用法
面向对象设计-设计模式的分类
创建型模式
结构型模式
行为型模式
结构型模式
适配器(_adapter)模式
桥接(bridge)模式
组合(composite)模式
装饰(decorator)模式
外观(facade)模式
享元(flyweight)模式
代理(proxy)模式
创建型模式
工厂方法(_factory method)模式
抽象工厂(abstract factory)模式
原型(prototype)模式
单例(singleton)模式
构建器(builder)模式
行为型模式
职责链(chain of responsibility)模式
命令(command)模式
解释器(_interpreter)模式
迭代器(iterator)模式
中介者(mediator)模式
备忘录(memento)模存储
观察者(observer)模式
状态(state)模式
策略(strategy)模式
模板方法(_template method)模式
访问者(visitor)模式
有下划线的表示既可以是类模式,也可以是对象模式;无下划线的表示只是对象模式
面向对象设计-创建型模式
- 设计模式名称
- 简要说明
Abstract Factory 抽象工厂模式
提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类
Builder 构建器模式
将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示
Factory Method 工厂方法模式
定义一个创建对象的接口,但由于类决定需要实例化哪一个类。工厂方法使得子类实例化的过程推迟
Prototype 原型模式
用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象
Singleton 单例模式
保证一个类只有一个实例,并提供一个访问它的全局访问点
面向对象设计-结构型模式
- 设计模式名称
- 简要说明
- 速记关键字
Adapter 适配器模式
将一个类的接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同工作
转换接口
Bridge 桥接模式
将类的抽象部分和它的实现部分分离开来,使它们可以独立的变化
继承树拆分
Composite 组合模式
将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性
树形目录结构
Decorator 装饰模式
动态地给一个对象添加一些额外的指责。它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活
附加职能
Facade 外观模式
定义一个高层次接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用
对外统一接口
Flyweight 享元模式
提供支持大量细粒度对象的有效方法
Proxy 代理模式】
为其它对象提供一种代理以控制这个对象的访问
面向对象设计-行为型模式
- 设计模式名称
- 简要说明
- 速记关键字
Chain of responsibility 职责链模式
通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接受对象链接起来,在链中传递请求,直到有一个对象处理这个请求
传递职责
Command 命令模式
将一个请求封装为一个对象,从而可以用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作
日志记录,可撤销
Interpreter 解释器模式
给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子
Iterator 迭代器模式
提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示
Mediator 中介者模式
用一个中介对象来封装一系列的对象交互。它使各对象不需要显示的相互调用,从而达到低耦合,还可以独立的改变对象间的交互
Memento 备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态
Observer 观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新
State 状态模式
允许一个对象在其内部状态改变时改变它的行为
状态变成类
Strategy 策略模式
定义一系列算法,把它们一个个封装起来,并且使他们之间可互相替换,从而让算法可以独立于使用它们的用户而变化
多方案切换
Template method 模板方法模式
定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构既可以重新定义算法的某些特定的步骤
Visitor 访问者模式
表示一个作用于某对象结构中的各个元素的操作,使得在不改变各个元素的类的前提下定义作用于这些元素的新操作