1.3 认识程序设计
1.3.3 面向对象程序设计
1. 什么是“面向对象程序设计”
“面向对象程序设计”(Object-Oriented Programming)的主要设计思想:将存在于日常生活中随处可见的对象(object)概念应用在软件开发模式中。OOP让我们以一种更生活化、可读性更高的设计思路来进行程序的开发和设计,并且开发出来的程序也更容易扩充、修改及维护。
2. 面向对象语言特性
- 封装性(Encapsulation)
- 继承性(Inheritance)
- 多态性(Polymorphism)
1)封装
封装:用“类”来实现“抽象数据类型”(ADT)。
类:一种具体描述对象状态与行为的数据类型。
对象:按照“类”这个模型或蓝图产生的实例。
举例来说,
汽车类 -》 汽车实体对象
2)继承
继承:允许代码重复使用,同时可以表达树形结构中,父代与子代的遗传现象。
举例来说,
“汽车类”就是“交通工具类”的子类,“汽车类”可以继承“交通工具类”。
3)多态
多态:让具有继承关系的不同类别对象可以调用相同名称的成员函数。
1.4 算法性能
这一小节主要谈两个概念
- “时间复杂度”(Time Complexity)
- “空间复杂度”(Space Complexity)
1)空间复杂度
空间复杂度:估算一个算法在运行过程中临时占用内存空间的大小,是一种渐进表示法。
2)时间复杂度
时间复杂度:用某一个算法执行步骤技术来衡量运行时间的标准,也是一种渐进表示法。
由于涉及变量存储类型与表达式的复杂度,因此没有必要精确计算时间的长短。使用“估算”的办法衡量时间更为恰当,详细定义如下:
- 在一个完全理想状态下,定义T(n)来表示程序执行所要花费的时间,其中n代表数据输入量。最大运行时间用Big-Oh表示。
- 分析算法的时间复杂度必须考虑它的成长比率,往往是一个函数。
1.4.1 Big-Oh
O(f(n))O(f(n))O(f(n)):某算法在计算机中所需运行时间不会超过某一常数倍数的f(n)f(n)f(n)。
这一部分的重点是:学会计算时间复杂度。
例1.4.1 计算T(n)=3n3+2n2+5nT(n)=3n^3+2n^2+5nT(n)=3n3+2n2+5n的时间复杂度
答:因为多项式T(n)T(n)T(n)的最高项次数是3,所以时间复杂度为O(n3)O(n^3)O(n3)
1.4.2 Ω\OmegaΩ
Ω\OmegaΩ也是一种时间复杂度的渐进表示法。如果说Big-Oh表示运行时间估算的最坏情况,则Ω\OmegaΩ就是运行时间估算的最好情况。
1.4.3 Θ\ThetaΘ
Θ\ThetaΘ是一种比Big-Oh与Ω\OmegaΩ更精确的时间复杂度的渐进表示法。