一:概述
随着电脑的问世,编程语言也随之诞生。编程语言也有着从不成熟变得成熟的发展历程。语法,或格式上的发展也好;性能,效率的发展也好;编程思想的改变是最革命性的改变。从最初的面向过程到现在优秀的面向对象,编程语言已经经历很久的坎坷。现在,我们来开始学习使用最广的,最方便的编程思想:面向对象思想。
二:从谓语到主语
早期的编程语言是以面向过程(Procedure Oriented Programming)的思想作为程序的设计模式的。顾名思义,面向过程思想是以过程为中心,将一件事情分解成多个小的动作/功能实现的,程序员思考的问题是“做什么”。比方说:①起床;②穿衣服;③刷牙、洗脸;④吃早餐;⑤离开家。“去上班”这件事情,被分解成多个过程。在程序当中,一个这样的过程对应的是一个函数。通过函数的互相调用,来达到我们的目的:
wakeUp(me); //起床(我)
wearClothes(me, suit); //穿衣服(我,西装)
brushTeeth(me, egg); //刷牙(我,煎鸡蛋)
eatBreakfast(me, food); //吃早餐(我,食物)
leave(me,home); //离开家(我,家)
me.wakeUp(); //我.起床
me.wearClothes(suit); //我.穿(西服)
me.brushTeeth(teethbrush); //我.刷牙(牙刷)
me.eatBreakfast(egg); //我.吃(煎鸡蛋)
me.leave(home); //我.离开(家)
再来看现在的程序。我把“我”提取出来,通过“我”来调用“我”的行为。难道这样不更符合我们的思考方式?我们平时说话,难道不都是“主语 谓语 宾语”吗?像这样注重于名词、事物,而非动词、功能的程序设计思想,就叫做面向对象思想(ObjectOriented Programming)。在实际程序设计当中,这些动词,对应的是方法。
三:我们的属性:字段
世界万物都可以被分成两个部分:属性以及动作。关于动作,我们已经通过OOP的方法实现了。属性,可以理解为一个人的身高、体重、年龄、名称等。既然“我”可以拥有行为,“我”也可以拥有这些属性。
String firstName; //字符串 名
String lastName; //字符串 姓
int age; //整数 年龄
int height; //整数 身高
int weight; //整数 体重
me.firstName = "明";
me.lastName = "李";
me.age = 18;
me.height = 178;
me.weight = 60;
好的,现在我有了我的行为,也有了我的属性。紧接着又有了一个新的问题:我的邻居也有这些行为、属性;我的家人也有这些行为、属性。难道我还需要给每一个人定义行为、属性吗?这里,我们介绍一个新概念:类。
四:类
既然发现我有这些行为和属性;你也有这些行为和属性。看上去上帝使用同一个模子把我们刻出来的啊!在OOP当中,我们也能有一个类似于模子或者图纸的东西,把所有的行为和属性定义在这里面。这样大家就自然有这些行为和属性了,不需要逐个去定义。在OOP语言当中,这个类似于模子或图纸的东西,就是类。
本人使用Java作为示范语言,写一个人类:
class Human {
// 定义字段
String firstName; // 字符串 名
String lastName; // 字符串 姓
int age; // 整数 年龄
int height; // 整数 身高
int weight; // 整数 体重
// 定义方法
void wakeUp() {
// some codes
}
void wearClothes() {
// some codes
}
void brushTeeth() {
// some codes
}
void eatBreakfast() {
// some codes
}
void leave() {
// some codes
}
}
五:类与对象
既然咱们的图纸已经定义好了,我们来通过这个图纸造一个人吧:
Human me = new Human();
在上述代码中,通过实例化的语法,使用Human这个图纸生产出了“我”。此时,“我”就具有了人的特点。我有姓名年龄,有起床吃饭。我就可以使用“me”来调用字段、方法。
切记:不能说一个人就代表全人类。“me”是产品不是图纸。“我”只是人类的一份子罢了。可见,类仅仅是一个较为抽象的描述;对象是这个抽象的描述实实在在的事物。
六:总结
通过前面的描述,读者应该对面向对象以及面向过程有一个较为清晰的了解了。那么为什么要使用面向对象呢?有什么好处呢?
最后再把我们学习的概念整理一下: