面向对象基础
基本概念
面向对象 = 对象(Object) + 类(Class) + 继承(Inheritance) + 消息通信(communication with message)
- 对象:在面向对象系统中,对象是基本运行时的实体,既包括数据(属性),也包括作用于数据的操作(行为),一个对象把属性和行为封装为一个整体。一个对象一般由对象名(标识)、属性、方法三个部分组成
- 消息:对象之间进行消息的一种构造称为消息。对象间的通信靠消息传递
- 类:类是创建对象模版,是对象的抽象;对象是类的具体化,是类的实例。
- 继承: 继承是父类与子类之间共享数据和方法的机制,这是类之间的一种关系。
- 多态:收到消息时对象予以相应,不同的对象收到同一消息可以产生不同的行为结果。多态是通过类的继承和方法重写来实现的
- 包含多态:一个类型是另一个类型的子类型
- 过载多态:指同一个名(操作符、函数名)在不同的上下文中有不同的含义
- 强制多态:指通过类型转换将一个对象类型视为另一个对象类型
- 动态绑定:绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在编译时进行的绑定称为静态绑定。在运行时进行的绑定称为动态绑定
面向对象分析
面向对象分析(OOA)的目的是获得对应用问题的理解,以确定系统的功能和性能要求。面向对象分析包含5个活动
- 认定对象
- 组织对象
- 对象间的相互作用
- 定义对象的操作
- 定义对象的内部消息
面向对象设计
面向对象设计(OOD)是将 OOA 所创建的分析模型转化为设计模型,其目标是定义系统构造蓝图
面向对象设计原则:
- 单一职责原则:修改某个类的原因有且只有一个,让类只做一种职责
- 开放封闭原则:对扩展是开放的,对修改是封闭的
- 里氏替换原则:子类型必须能够替换父类型
- 依赖倒置原则:抽象不应该依赖于细节,细节应该依赖于抽象。即高层模块不应该依赖于低层模块,二者都应该依赖于抽象
- 接口分离原则:客户不应该依赖于它不需要的接口,类间的依赖关系应该建立在最小的接口上
- 迪米特法原则:一个软件实体应当尽可能少的与其他实体发生相互作用
- 组合重用原则:要尽量使用组合,而不是继承关系达到重用的目的
- 重用发布等价原则:重用的颗粒度就是发布的颗粒度
- 共同封闭原则:包中的所有类对于同一类性质的变化应该是共同封闭的
- 共同重用原则:一个包中的所有类应该是共同重用的
- 无环依赖原则:在包的依赖关系图中不允许存在环
面向对象程序设计
面向对象程序设计(OOP)的实质是选用一种面向对象语言,采用面向对象技术所进行的程序设计
- 继承是父类与子类之间共享数据和方法的机制
- 无实例的类:类是创建对象的模版,而对象是类的实例,抽象类不用来进行实例化,而是用来被继承所使用
抽象类与接口的区别
№ | 区别 | 抽象类 | 接口 |
---|---|---|---|
0 | 结构组成 | 普通方法+抽象方法 | 抽象方法+全局变量 |
1 | 权限 | 各种权限 | public |
2 | 子类使用 | 使用extend继承抽象类 | 使用implements实现接口 |
3 | 关系 | 一个抽象类可以实现若干接口 | 接口不能继承抽象类,但接口用extends继承多个父接口 |
4 | 子类限制 | 一个子类只能继承一个抽象类 | 一个子类可以实现多个接口 |
5 | 应用场景 | 抽象不同事物的共有特性、本质 | 抽象不同事物的共有行为、操作 |
面向对象测试
- 算法层:用于测试类中定义的每个方法,基本上相当于传统测试中的单元测试
- 类层:用于测试封装在同一个类中的所有方法与属性之间的相互作用。这是面向对象测试中所特有的模块测试
- 模版层:用于测试一组协同工作的类之间的相互作用。大体上相当于传统软件的集成测试
- 系统层:把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试