程序
程序 = 指令 + 数据
代码可以选择以指令为核心或以数据为核心进行编写
两种范式
- 以指令为核心:围绕‘正在发生什么’进行编写
* 即**面对过程编程**:程序具有一系列线性步骤:主题思想是代码作用域数据;
* 面向过程:程序 = 算法 + 数据结构
- 以数据为核心:围绕‘将影响谁’进行编写
- 即面对对象编程(OOP):围绕数据以及为数据严格定义的接口来组织程序,用数据控制对代码的访问
- 面向对象:将问题空间中的元素以及他们在解空间中的表示无抽象为对象,并允许通过问题来描述问题而不是方案;
面对对象核心概念
类型由状态集合(数据)和转换这些状态的操作集合组成
- 类抽象
- 类:定义了被多个同一类型对象共享的结构和行为(数据和代码)
- 类的成员即 数据 和 代码
- 数据:成员变量或实例变量
- 成员方法:简称为方法,是操作数据的代码,用于定义如何使用成员变量,因此一个类的行为和接口是通过方法来定义的
- 方法和变量:
- 私有:内部使用
- 公共:外部可见
面对对象的程序设计方法
- Everything is object
- 程序是一大堆对象的组合
- 通过消息传递,各对象知道自己该做什么
- 消息:即调用请求
- 每个对象都有自己的存储空间,并可以容纳其他对象(例如列表内部可以容纳其他对象)
- 通过封装现有对象,可以制作为新型对象
- 每个对象都属于某一类型
- 对象是类的实例
- 类的一个重要特性为“能发什么样的消息给它”(即类的某个方法的调用)
- 同一个类的所有实例都能接受相同的消息
对象的接口
- 定义一个类后,可以根据需要实例化出多个对象;
- 利用对象完成工作
- 必须有一种办法对对象发出请求,令其做一些事(即 类的方法)
- 每个对象仅能接受特定的请求
类间关系
- 依赖:一个类的方法去操纵另一个类的实例
- 聚合(has-a):类A的实例包含类B的对象
- 继承(is-a):描述特殊与一般的关系
面对对象编程原则
面对对象程序设计有3个原则:封装、继承及多态
封装(Encapsulation)
- 隐藏实现方案细节
- 将代码及处理的数据绑定在一起的编程机制,用于保证程序和数据不受外部干扰且不被误用
继承(Inheritance)
- 一个对象获得另一个对象属性的过程:用于实现按层分类的概念
- 一个深度继承的子类继承了类层次中它的每个祖先的所有属性
多态(Polymorphism)
- 允许一个接口被多个通用的类动作使用的特性,具体使用哪个动作与应用的场合相关
-
‘一个接口,多个方法’:用于为一组相关的动作设计一个通用的接口,以降低程序复杂性
+的使用,具体由传入对象来决定
def plus(x, y):
print x + y
plus(1, 3)4
plus('a', 'b')
ab
plus([1, 2], [3, 4])
[1, 2, 3, 4]
网友评论