多角度阐述Java面向对象

    很多人在学习Java的过程中不断地听说对象这个字眼,尤其是从学习例如C语言这样面向过程的语言转而学习Java的时候更是从心里无法接受这一崭新的、抽象的、不明所以的概念,使得初学者对Java的学习产生厌倦的心理,甚至很多已经学习Java很久的人,依然对面向对象这一概念有些模糊。本文将从多个维度来阐释Java面向对象的含义。

一、对象是一种思考方式

    首先先对“对象”这一抽象又晦涩的名词进行一下解释:对象就是思考时作为目标的事物。从这个概念中我们能够提炼出来这样两点:

1、对象是思考时的产物。例如你想要策划一场舞台剧,那么你的脑海里会出现舞台、灯光、人员、时间安排、出场顺序... ...这些脑海里出现的东西都可以叫做对象。这里要注意一件事情,那就是对象只是一种思考的产物,它并不代表一个真实的舞台或者真是的人员,它只是一个思路、一个模板,这点在后面讲到的具体实现里大家可以再次体会。

2、对象是组成一件复杂问题的最小逻辑单位。在生活中经常会看到这样一种失败的策划者,在考虑一个问题地时候经常会扯到其他的问题上,让人感觉思路混乱,抓不住重点,这就是他不具备面向对象的思考方式,舞台就是舞台,灯光就是灯光,至于两者之间的交互,要设计好单独的业务逻辑。好能够让各个模块的负责人各司其职。

    面向对象就是为了打造这样一个编程的思考方式,因为随着计算机的发展,单打独斗的软件开发已经不复存在了,一个大型软件不可能脱离开团队,而面向对象将问题中的关键点抽象出来,形成一个个单独的模块,这就是面向对象的思考模式,也就是软件工程中全书都在贯彻的一个思想------松耦合。

二、对象是数据和函数的集合

    说了这么多对象的意义,也应该说一下面向对象在Java中的具体实现了。前文也说到了对象是由“事”和“物”组成的,这样的名词在计算机里对应着我们的数据和对这些数据需要进行的操作。如针对学生这样的对象,我们要考虑他的名字、年龄、性别等等的一系列信息,而对于一个学生的处理,当然也少不了获得他的信息和存储他的信息这样的操作,而这一系列的数据信息以及操作便构成了一个对象。

    因此对于一个学生表示为对象应该是这样的(简易版,仅作示例用):

public class Student {
    String name;
    int age;
    char sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
}

三、对象是指针

    C语言作为一门基础语言相信大多数人都学习过(没学过请忽略此部分)。

    首先,再次明确一个问题,对象是一个抽象概念,它并不存在真正的数据,而只是一个蓝图、一个模板。上文所展示的那个Student对象,仅仅是对一个学生需要有什么信息以及操作做了一个规划。单纯的这么说我知道是很晦涩的,但是我们去挖掘对象的实质的时候我们就可以很轻松的理解了。

    我们回想C语言指针的使用方式,一个struct STUDENT *类型的指针变量在定义的时候真的会有一个STUDENT结构体类型的数据随之产生么,答案必然是否定的,此时在内存中仅仅存在一个struct STUDENT *类型的,四字节的指针空间,Java中对象也是如此,它仅仅是一个------指针。只有在C语言中malloc()函数申请空间、Java中调用了new()函数之后才会使C语言中的指针、Java中的对象指向一个占用内存的一段真正的数据信息。这也是我们Java中常说的“实例化”。

    因此,虽说Java封装了指针,使我们看不见指针,但是,Java对于指针的使用丝毫不差于C语言。再次强调,Java中的对象不是一段真实的数据,只是一个指针,只有实例化后的对象实例才是真正的数据信息。

四、对象是开发模式

    面向对象的思想被设计出来是为了适应大型工程,其一个最基本逻辑就是“松耦合”,这种思想已经慢慢地演化成一种开发模式,如今的企业级开发量级是越来越大,仅仅对一个“Student”这样的小问题进行对象的抽象已经不足以解决更大型的工程了,因此涌现了大量的框架和方法。但这些框架的思想无一不是为了降低模块之间的耦合性,使得开发更加简便。尽管各种框架层出不穷,各种企业开发工具也越来越多,但是思想仍然与面向对象的思想如出一辙,归根结底都是区分不同模块所要负责的任务进行提取和抽象,从而达到分而治之的目的,使得程序员之间能够轻松协作,从而缩短开发时间,为公司带来更大的经济收益。

你可能感兴趣的:(Java,面向对象)