1.面向对象与面向过程
面向对象(OOP)编程的思想主要是以功能来划分问题,而不是步骤。面向对象就是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。比如说汽车可以看作一个对象,然后可以根据这个对象来进行分解;
汽车对象按组成可以分解为:
发动机对象
变速器对象
制动对象
轮胎对象
...
然后还可以继续对子对象进行拆解,比如发动机对象由燃机对象、外燃机对象等等。
每个对象还具有属性和性为,比如汽车对象有体积、容量、排量、颜色等属性。
另外,汽车对象还具有特定的行为,比如启动、制动等。
面向对象是一种设计思想,并不是说使用了面向对象就不会使用面向过程。举个例子来说明,比如说汽车对象的启动方法内部定义了如何启动汽车,这里面的逻辑是分解为一步一步实现的,是面向过程思想的实现。
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。比如说,你早上想吃的"杂粮煎饼"为例,以面向过程的思想可以拆解为以下几步:
1、准备食材(鸡蛋 面 油 盐 酱 生菜)
2、清洗食材(生菜)
3、制作杂粮面糊
4、摊面
6、在面饼上打入鸡蛋
7、鸡蛋熟后,刷酱放入生菜等食材
8、可以开吃了,流口水了吗...
2.面向对象(OOP)的基本特征
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 方法:类中定义的函数。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
- 封装:本质是将事物相关的属性和方法封装在一个类里面,我们调用类创建实例的时候,不用关心类内部的代码细节。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
- 多态:同一个方法不同对象调用同一个方法功能的表现形式不一样。例如: 不同的两个对象,字符串的加法和整数的加法,同样是加法,实现的功能是不一样的;
- 实例化:创建一个类的实例,类的具体对象。
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
Python面向对象
在Python中完全采用了面向对象的设计思想,完全支持面向对象的基本功能与基本特性,如封装、继承(Python类的继承机制允许实现多继承)与多态等。在Python中,一切皆为对象,之前学习的数据类型、函数等都是Python中的对象。而Python本身也是集面向过程、面向对象与函数式编程的多种编程范式。
接下来,我将分多篇文章详细讲述Python中最重要的OOP。