作为一个底子不深的C语言学者,我刚转来学习java的时候,对java学者口中的面向对象很感兴趣。
一开始,基于自己浅显的认识,众多编程语言在我看来是区别不大,都是分析需求,用计算机语言去解决某些问题。至少在使用C语言去解决某些小问题,实现某种小功能的时候,我都是按部就班,一步一步实现功能的。就跟我们平时办事一样,讲究个逻辑、讲究个先后顺序。在实现的过程中,需要些什么数据,就设置写什么数据。不过,这样也会带来一些麻烦:如果忘记了设置某些数据,需要回头去设置的时候,一大段一大段的代码,要回头找到相应位置,去添加一些东西总是会让人眼花缭乱,容易出错。简单的东西实现起来容易,而如果过几天再回来修改,那就真的是让人头大了。
最近学习的java语言,却不是这样的一门编程语言。java是面向对象的一种编程语言,所谓面向对象,恰好区别与我上文所说的以C语言为代表的面向过程的架构化编程语言。这里说有区别并不是指java语言不按照步骤来进行运算,而是它是用了面向对象的思想,即把现实是生活中的事物抽象成为一种具有属性,行为的封装体。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
编程中的问题分析首先要求我们找对象,行业中有一句老话:“万物皆对象。”在这里,需要补充一句:“对象因关注而产生。”’所以找对象即找问题域中我们所关注的的人、物或实体。找到对象之后,找出对象的属性和行为。判断属性的依据是对象与属性之间,要有has a 关系,即对象has a 属性,属性需要能够用值来描述,当他们不满足对象与属性的判断关系时,考虑是不是use a关系,即对象仅仅是调用别的对象或者别的变量,如果满足,就将被调用的东西设置为局部变量。此外还需要找到对象的行为,行为用方法来实现,所涉及的方法要涵盖对象的动作和功能。
java中通过将对象抽取成为类的办法,极大地方便了我们将所需解决的问题中的客体以及他们的属性行为用编程语言描述,也方便我们队他们进行分类,对他们的行为进行编辑。类,是对象的抽象;对象,是类的实例。此外,java中继承的功能更是及其方便的将具有相同属性或者行为的对象抽象出能够描述他们的一个类,称为这些对象的父类,而每个对象必须都是一个父类的类型,满足is a 关系,对应的,这些对象的抽象概念称为子类。之后,在解决问题的步骤中,若需要使用,只需要从已经建立好的类中调用他们的属性或者为行为写好的方法即可。这样,就完成了一次编写,多次调用的功能,体现了代码的复用思想;同时,这种面向对象的编程思想也将建立对象与解决问题的过程相对分离开了,若需要修改,也只需要找到该对象即可,体现了一种代码的分离思想。代码的复用与分离正是代码向更好的方向发展时遵循的原则。
总而言之,面向对象的编程思想和结构化编程的面向过程思想一样,也是体现着自然思维。当然他们各有各的优劣,实际使用中的区别,只待日后在实践中深究了。