【原创】面向对象思想入门(示范语言:Java)

来源:互联网 发布:flame软件前景 编辑:程序博客网 时间:2024/05/17 22:00

一:概述


随着电脑的问世,编程语言也随之诞生。编程语言也有着从不成熟变得成熟的发展历程。语法,或格式上的发展也好;性能,效率的发展也好;编程思想的改变是最革命性的改变。从最初的面向过程到现在优秀的面向对象,编程语言已经经历很久的坎坷。现在,我们来开始学习使用最广的,最方便的编程思想:面向对象思想。


二:从谓语到主语


早期的编程语言是以面向过程(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);              //我.离开(家)

再来看现在的程序。我把“我”提取出来,通过“我”来调用“我”的行为。难道这样不更符合我们的思考方式?我们平时说话,难道不都是“主语 谓语 宾语”吗?像这样注重于名词、事物,而非动词、功能的程序设计思想,就叫做面向对象思想(ObjectOrientedProgramming)。在实际程序设计当中,这些动词,对应的是方法。


三:我们的属性:字段


世界万物都可以被分成两个部分:属性以及动作。关于动作,我们已经通过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当中,我们也能有一个类似于模子或者图纸的东西,把所有的行为和属性定义在这里面。这样大家就自然有这些行为和属性了,不需要逐个去定义。在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”是产品不是图纸。“我”只是人类的一份子罢了。可见,类仅仅是一个较为抽象的描述;对象是这个抽象的描述实实在在的事物。


六:总结


通过前面的描述,读者应该对面向对象以及面向过程有一个较为清晰的了解了。那么为什么要使用面向对象呢?有什么好处呢?


  • 面向对象思想把主语放在前面,符合我们的思考方式;
  • 复用性强。我可以直接使用之前定义过的类,new出来一个新的对象;
  • 易维护、更新。只需要在原本的类上稍作改动;


最后再把我们学习的概念整理一下:


  • 方法:用于描述对象的行为,例如吃饭、穿衣服等;
  • 字段:用于描述对象的属性,例如姓名、年龄等;
  • 类:一个抽象的图纸,封装方法和字段;
  • 对象/实例:通过抽象的图纸造出来的实实在在的事物。这个事物具备类中的字段、方法。



4 0