早期计算机编程语言都是面向过程的,程序既由数据和算法构成,数据可以构成复杂的数据结构,算法也是由上到下的复杂逻辑控制,这是一种将数据与操作算法分离开的编程思想。这种程序设计思想的重点都是在代码中各个方法的执行上。C语言中提供了结构体来解决数据复杂度问题,可将一部分数据或属性包装起来,定义出一个复杂的数据结构,如Rerson结构体(包括姓名,年龄,身高,体重等一些系列数据)。
#include <stdio.h>
int main() {
// 定义结构体 Person
struct Person{
// 结构体包含的变量
char *name;
int age;
float height;
float weight;
};
// 通过结构体来定义变量
struct Person person;
// 操作结构体的成员
person.name = "小逢";
person.age = 20;
person.height = 180;
person.weight = 58;
return 0;
}
上面的代码是C语言设计中的结构体,但是这种结构只能支持复杂的数据结构,对于每个数据的处理都要单独提供方法,而且这些方法与整体的结构体并没有关系。后来在PHP、C++、Java、Python等语言中,人们对C语言中的结构体进行了升级,引入了一种新的编程思想——面向对象编程,即程序操作都是在操作对象。对象不仅可以定义复杂的数据结构,也可以定义复杂的算法方法。对象将数据和方法封装起来,开发者只需要复杂对象内部的数据和算法,同时对外暴露接口供调用方使用。而调用方也不需要关心实际对象内部的复杂逻辑,只需要调用接口。下面给出了和PHP相同的Person结构的示例,与C语言结构体不同的是加入了算法方法。
class Person:
def __init__(self,name,age,height,weight):
self.name = name
self.age = age
self.height = height
self.weight = weight
def print_person(self):
print("姓名", self.name)
print("年龄",self.age)
print("身高", self.height)
print("体重",self.weight)
person = Person('小逢', 1, 1.8, 70)
person.print_person()
开发人员发现,这种编程思想更能解决实际问题,程序是对象的集合,并且能够描述具有高度复杂性的各类模型和算法。在现实生活中,人的思考是抽象的,我们会将遇到的事情抽象化,相同或类似的对象可以进一步进行抽象,这时就出现了对象的类型——类。先定义类,然后由类去产检你对象,最后由对象去管理整个程序,就像人思考一样,先抽象,后实际化,最后去执行,面向对象编程的应用逐渐变得广泛起来。
值得注意的是,类的产生是抽象的结果,人们在认识复杂世界时,会将实物或者可以说是对象的一些近似特征抽出来,并且不考虑其中每个个体的细节。面向对象编程就是一种不断抽象数据和不断抽象方法的过程。
面向对象编程在软件执行效率上并没有绝对的优势,主要是一种方便开发者组织管理代码、快速梳理熟悉各个业务领域逻辑的思想方法,它是一种更贴近现实生活的编程设计方法。