面向对象编程Object Oriented Programming,也就是OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个完整的程序是由一个或者多个对象有机地组合在一起的,一个对象包含了数据和操作数据的函数。
与面向对象相对的是面向过程, 面向过程的程序设计把程序当做是一系列的命令有序集合,也就是一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
面向对象把对象作为程序的基本执行单元,程序的执行就是一系列消息在各个对象之间传递。
在Python中,所有数据类型都是对象,我们也可以自定义对象,依旧是定义Python中的一个类(class)。
面向过程和面向对象在程序流程上的有何不同, 举例说明一下:
假设我们要处理员工的信息表,为了表示一个员工的信息,面向过程的程序可以用一个dict表示:
staff1 = { ‘name’: ‘小李’, ‘age’: 25,}
staff2 ={ ‘name’: ‘小张’, ‘age’: 30}
而处理员工信息可以通过函数实现,比如打印员工的信息:
def print_info(staff):
print(’%s: %s’ % (staff[‘name’], staff[‘age’]))
如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是staff 这种数据类型应该被视为一个对象,这个对象拥有name和age这两个属性(Property)。如果要打印一个员工的信息,首先必须创建出这个员工对应的对象,然后,给对象发一个print_info消息,让对象自己把自己的数据打印出来。
class Staff(object):
def __init__(self, name, age):
self.name = name
self.age= age
def print_info(self):
print('%s: %s' % (self.name, self.age))
给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。面向对象的程序写出来就像这样:
laowang= Staff(‘老王’, 33)
laowu= Staff(‘老吴’, 40)
laowang.print_info()
laowu.print_info()
面向对象的设计思想是从自然界中来的,更准确说是生物学来的, 来自于生物学中细胞的概念。因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。Class是一种抽象概念,比如我们例子中的员工是一个概念,而实例(Instance)则是一个个具体的Staff,比如,xiaoli 和xiaozhang是两个具体的Staff。
所以,面向对象的设计思想是抽象出类(class),根据Class创建实例(instance))。
面向对象的抽象程度又比函数要高,因为一个Class既包含数据,又包含操作数据的方法。
补充:
数据封装、继承和多态是面向对象的三大特点
欢迎交流学习:ljhz_by