初尝面向对象

  今年暑假,我第一次接触了面向对象(Object Oriented),让我对程序设计有了更加深刻的理解和看法。

  在接触面向对象之前,我只学习了面向过程编程,但是随着软件复杂度的提高以及Internet的迅猛发展,原先面向过程的软件开发方式已经很难满足软件开发的需要,因此发展出了面向对象的软件开发模式。经过简单的学习,我对于OO有了自己的一些认识。

  OO是一种方法,一种思想,同时又是一种技术。我个人感觉面向对象技术是一种从组织结构上模拟客观世界的方法,通过抽象,将对象映射到计算机系统中,又通过模拟对象之间的相互作用,相互联系来模拟实现客观世界,描述客观世界的运动规律。

    

  而我们之前所学的面向过程编程,在解决问题之前,我们首先得考虑解决此问题的算法以及我们应该采用什么样的数据结构。也就是说,我们首先得清楚解决问题的各个步骤,然后编写函数进行解决。而对于面向对象编程,用户需要定义一个对象集合以及它们之间的相互作用来构建程序。

  面向对象的主要特点就是抽象化,继承性,封装性和多态性。这里,我主要通过java来对于这些特点做一些解释。当我们在创建一个java程序的时候,我们首先需要去定义一个类,在类中我们就构造了一个具有某种特性的集合。类变量代表了这个类所具有的一些特征,比如:

  在这个类中,我们构建了鸟这个类以及和鸟有关的特征变量。我们可以将class birds抽象成鸟这个类别,通过定义变量和方法,它封装了与鸟有关的特征(颜色,名字,大小),以及鸟的行为动作(比如飞)。

  那么在构建了一个类之后,我们就建立了一个抽象,在实际中,我们就必须要将它实例化。实例化后的类也就是对象。比如对于上面的birds类,我们可以通过以下代码来实现类的实例化。

  这样a和b两个对象就具有了birds的特征。

  面向对象的一个重要的概念是继承。利用继承,开发人员可以基于已存在的类去构造出新的类。继承已存在的类就是复用这些类的成员,在此基础上,还可以在新类中添加一些新的成员或者去修改继承了的成员,以满足新的需求。

 

  比如,通过上面的代码我们构建了一个Animal类,它有move和eat两种方法。在使用了extends关键字后,我们实现了继承,构建了子类Dog,那么它就获得父类的全部方法。也就是说,我们新编写的Dog类中自带move和eat两个方法,这样也就大大减少了代码量。实际上,在Java中,所有的类都直接或间接地继承了java.lang.Object类,即Object类是Java中的总根类。

  那么,在子类自身的方法中,如果与继承过来的方法有相同的名称,便构成了方法的重写。

  当我们运行子类中的方法时,将打印出的是“car starts up”。也就是说,子类方法对父类方法实现了覆盖和重写。

  接下来,我学习了java中的另一个重要概念:接口。Java中的接口主要用来描述类可以充当什么样的角色,也就是描述类可以具有什么样的功能,但并不给出每个功能的具体实现。当我们在定义一个接口时,实际上就是在编写一个契约,用来描述实现它的类可以做什么,能够充当什么样的角色。而接口中并没有功能的具体实现,具体实现由签了契约的类自己来进行。例如,我们编写一个接口stringset:

  

  在这个接口中,我们定义了三种方法,但却没有给出他们的具体实现。具体的功能要通过他们说实现的类来决定。当一个类实现了一个接口,在这个类中就必须实现接口方法中的具体功能:

 

  那么什么是多态呢?多态是指在父类中定义的属性和方法被子类继承之后,可以表现出具有不同的数据类型或者表现出不同的行为即为同一个属性或方法在父类和具有不同的意义。

  例如去动物园看老虎,有一只小的老虎,小明问妈妈,这是什么,小明的妈妈会说这是一只老虎啊,而饲养员就会说这是一只小虎啊。这就是多态。同样是一只老虎,不同的表示方法会表示出不同的意义,但是主要的还是没有变。

  另外,在java中,有许许多多的方法和类被封装起来,便于我们去使用:Java.util, Java.lang, Java.math等等。对于这些内库的巧妙使用,都使得我们的代码变得更加简洁高效。诸多的内置类也是java让我感到和C语言的一个重大不同。除过这些,我还学习了一个重要的数据结构:容器。

  容器有许多,例如:HashSet ,LinkedHashSet,Linkedlist,Vector, ArrayList, HashMap, TreeMap等等。通过对集合的使用,我们对数据的管理和存储更加高效。我们之前所学的C语言中有一种重要的数据结构数组,与数组相比,容器的优势不言而喻。容器的容量是巨大的,它可以储存许许多多的数据元素,并且还可以对它们就行高效的管理。 

  

  在平时做作业的时候,我经常遇到的困难就是将面向对象编程又搞成了面向过程编程。将多个功能一股脑地放进一个函数中,使得代码十分复杂。面向对象需要我们去构造一个个恰到好处的类,并对这些类去构造合适的方法,还要能够将不同的类联系起来。这高度化的抽象也是每一个面向对象初学者所经常不能够理解的。希望老师在授课的过程中能够多加强调面向对象的编程特点,用具体的实例来让我们理解更加抽象的事物。一定要向我们解释清楚面向对象和面向过程的区别,不要将两者混为一谈。

  相信通过不断的努力练习,我会对面向对象这种新型的编程方法更加熟悉。

转载于:https://www.cnblogs.com/jy0205/p/jy0205.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值