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 ) = 3 n 3 + 2 n 2 + 5 n T(n)=3n^3+2n^2+5n T(n)=3n3+2n2+5n的时间复杂度
答:因为多项式 T ( n ) T(n) T(n)的最高项次数是3,所以时间复杂度为 O ( n 3 ) O(n^3) O(n3)
1.4.2 Ω \Omega Ω
Ω \Omega Ω也是一种时间复杂度的渐进表示法。如果说Big-Oh表示运行时间估算的最坏情况,则 Ω \Omega Ω就是运行时间估算的最好情况。
1.4.3 Θ \Theta Θ
Θ \Theta Θ是一种比Big-Oh与 Ω \Omega Ω更精确的时间复杂度的渐进表示法。