面向对象编程


# 面向对象编程

面向对象编程:Object Oriented Programming,简称 OOP,是一种程序设计方法。与它相对的,是面向过程编程。

下面分别用简单的例子描述两者的区别。

# 面向过程编程

面向过程编程的大体流程如下:

1. 导入各种外部库
2. 设计各种全局变量
3. 写一个函数完成某个功能
4. 写一个函数完成某个功能
5. 写一个函数完成某个功能
6. 写一个函数完成某个功能
7. 写一个函数完成某个功能
8. ......
9. 写一个main函数作为程序入口
1
2
3
4
5
6
7
8
9

这种结构中函数是核心,函数调用是关键,一切围绕函数展开。

假如现在要实现一个需求,根据对象的生物种类,发出不同的叫声,比如有狗、猫和牛。

用函数进行面向过程编程,一般是下面的样子:

def speak(animal):
    if animal == "狗":
        print("汪!汪!")
    elif animal == "猫":
        print("喵!喵!")
    elif animal == "牛":
        print("哞!哞!")
    else:
        print("说人话!")

a, b, c, d = "猫", "狗", "牛", "辛巴"

speak(a)
speak(b)
speak(c)
speak(d)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 面向对象编程

面向对象编程的大体流程如下:

1. 导入各种外部库
2. 设计各种全局变量
3. 决定你要的类
4. 给每个类提供完整的一组操作
5. 明确地使用继承来表现不同类之间的共同点
6. 根据需要,决定是否写一个main函数作为程序入口
1
2
3
4
5
6

在面向对象编程中,将函数和变量进一步封装成类,类才是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。类和和类的实例(也称对象)是面向对象的核心概念,是和面向过程编程、函数式编程的根本区别。

还是为了实现上面那个需求,使用面向对象编程,会是下面的样子:

# 先定义一个动物的类
class Animal:
    # 动物实例的初始化方法,需要提供动物类别和该类动物的叫声
    def __init__(self, kind, voice):
        self.kind = kind
        self.voice = voice
    # 让动物发出叫声的方法
    def speak(self):
        print(self.voice)

# 实例化四种动物对象
a = Animal("狗", "汪!汪!")
b = Animal("猫", "喵!喵!")
c = Animal("牛", "哞!哞!")
d = Animal("辛巴", "说人话!")

# 调用动物类的发声方法
a.speak()
b.speak()
c.speak()
d.speak()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

(完)