面向对象技术
1. 面向对象基础
1.1 面向对象的基础概念
面向对象=对象+分类+继承+通过消息的通信
- 对象:属性+行为封装而成的整体
- 消息:对象之间进行通信的一种构造
- 类:一个类定义了一组大体上相似的对象。类是对象的抽象,对象是类的具体。分为(实体类,接口类(边界类),控制类)。
- 继承:子类和父类之间共享数据和方法的机制。
- 多态:不同对象收到同一消息产生的不同行为。
- 通用多态:不同类型值执行相同的代码
- 参数多态:用C++中的template来理解
- 包含多态:可以理解为接口
- 特定多态:不同的类型值执行不同的代码
- 过载多态:用C++中函数重载来理解
- 强制多态:用类型转换来理解
- 通用多态:不同类型值执行相同的代码
- 动态绑定:一个把过程调用和响应调用所需要执行的代码加以结合的过程。发生在运行时。静态绑定发生在编译时。
1.2 面向对象分析
- 认定对象
- 组织对象
- 对象间的相互作用
- 基于对象的操作
1.3 面向对象设计
- 面向对象设计的活动
- 识别类及对象
- 定义属性
- 定义服务
- 识别关系
- 识别包
- 面向对象设计原则
- 单一职责原则:一个类应该只有一个引起他变化的原因
- 开闭原则:软件实体(类,模块等)是可扩展,但是不可修改的
- 里氏替换原则:子类型必须能够替换他的父类型(is-a关系)
- 依赖倒置原则:抽象不依赖于细节,细节依赖于抽象。高层模块不应该依赖于底层模块,二者都应该依赖于抽象
- 接口分离原则:不应该强迫用户依赖于他们不用的方法
1.4 面向对象程序设计
- 类
- 继承和层次结构:理解构造函数与析构函数的执行顺序,继承方式的理解
- 对象,消息传递和方法
- 对象自身引用:this的理解
- 重置(覆盖):虚函数的理解
- 类属:template的理解
- 无实例的类:抽象类,纯虚函数的理解
1.5 面向对象测试
- 算法层
- 类层
- 模板层
- 系统层
2. UML(这里讲概念,怎么画会放在专门的文章)
UML=事物(对模型的抽象)+关系(事物间联系)+图(聚集相关的事物)
2.1 事物
- 结构事物:通常是模型的静态部分(名词),描述概念或物理元素
- 行为事物:通常是模型的动态部分(动词),,描述跨越时间和空间的行为
- 分组事物:模型中的组织部分。纯粹是概念上的东西(只在开发时存在)
- 注释事物:模型的解释部分,用来描述,说明和标注模型的任何元素
2.2 关系
- 依赖:两个事物间的语义关系,一个事物发生变化可能会影响另一个
- 关联:一种结构关系,描述了一组链,链是对象之间的连接。聚集是一种特殊类型的关联,描述了整体和部分之间的结构关系。
- 泛化:一种一般与特殊的关系。特殊元素可以替代一般元素。
- 实现:类元之间的语义关系,其中一个类指定了由另一个类保证执行的契约。
2.3 图
UML有很多图,会放在专门文章具体介绍。
3. 设计模式
设计模式的核心在于提供一类问题的解决方案,避免重复劳动
3.1 设计模式的要素
- 模式名称:一个助记名,就是模式的名字啦。
- 问题(动机):描述了应该在何时使用模式
- 解决方案:描述设计的组成成分,他们之间的关系,职责和协作方式
- 效果:描述模式应用的效果以及模式应该权衡的问题
3.2 父类
大体上设计模式可以分为
- 创建型:与对象的创建有关
- 结构型:处理类或对象的组合
- 行为型:对类或对象怎样交互和分配职责进行描述
设计模式有很多(一般认为Gof23个设计模式是主流),会放在专门的文章介绍。