面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计方法。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的方法。Python就是一种面向对象的语言,支持面向对象编程,在其内部,一切都被视作对象。
面向对象编程出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程编程。在面向过程编程中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。
在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问。每个函数都可以具有它们自己的局部数据,将某些功能代码封装到函数中,日后便无需重复编写,仅调用函数即可。从代码的组织形式来看就是根据业务逻辑从上到下垒代码 。
面向过程编程通常具有如下的表现形式:
1. 导入各种外部库 2. 设计各种全局变量 3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5. 写一个函数完成某个功能 6. 写一个函数完成某个功能 7. 写一个函数完成某个功能 8. ...... 9. 写一个main函数作为程序入口
这种结构中函数是核心,函数调用是关键,一切围绕函数展开。
而面向对象编程中,将函数和变量进一步封装成类,类才是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。类和和类的实例(也称对象)是面向对象的核心概念,是和面向过程编程、函数式编程的根本区别。
面向对象编程通常具有如下的表现形式:
1. 导入各种外部库 2. 设计各种全局变量 3. 决定你要的类 4. 给每个类提供完整的一组操作 5. 明确地使用继承来表现不同类之间的共同点 6. 根据需要,决定是否写一个main函数作为程序入口
类本身通常是下面的形态:
class Student(object): def __init__(self, name, age): self.name = name self. age = age def print_ age(self): print('%s: %s' % (self.name, self. age))
类不同于函数,具有封装、继承和多态三大特点。一个类定义了具有相似性质的一组对象。而继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
比较面向对象编程和面向过程编程,还可以得到面向对象编程的其他优点:
前面一堆,比较晦涩难懂,不够接地气。下面举个例子,不一定恰当、全面或者准确,但可能能够帮助你理解什么是类,什么是对象,什么是面向对象编程。
假如我现在要实现一个需求,根据对象的生物种类,发出不同的叫声,比如狗“旺旺”,猫“喵喵”,牛“哞哞”,二哈.....
用函数进行面向过程编程,一般是下面的样子:
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)
而使用面向对象编程呢?
# 先定义一个动物的类 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()
仔细揣摩两者的不同之处,感受两者在思考问题、分析问题和解决问题上的模式区别,如果你能接受和明白面向对象的思维模式,那么你就基本入门了。
PS:不要纠结在感觉代码更多了的问题上,那是因为问题太小,体现不出面向对象的威力来。
妙啊
没词了