面向对象课程的感想

jameszgw 2020-06-03

       经过几个月的系统性学习面向对象这门课程,我对于面向对象编程思想有了一定的认识,并具备了一定的面向对象编程能力,能够编写一些简单的面向对象编程设计题,以下是我对于学习面向对象后对于面向对象基本概念的一些感想。

面向对象编程不同于面向过程编程,在需求分析、算法设计上都有很大的不同。面向过程着重于解题步骤,将解决问题的方法拆分成许多小步骤,并设计相应的算法去解决问题。这样的编程思想很大的问题就在于复用性、维护性不是很好,比如,对于面向过程来说,一个程序中的函数几乎无法在另一个程序中使用。再比如,解决一个具体问题时,问题需求发生一个小小的改变,解题步骤往往也会发生改变,这就需要重新设计算法编程,代码量小还好,如果需求多、代码量多,那将是一件很令人头疼的事了。而实际工作中,程序员需要面对的大都是代码繁杂的项目工程,如果采用面向过程的思想进行编程,每一次维护都要将以前的代码推翻重新编写,那工作量可想而知。而此时,面向对象的优点就显现出来了。面向对象不再像面向过程那样是对解决问题步骤的描述,而采用类-对象的形式,将问题抽象出具体的对象,整个面向对象编程的过程就是对对象在问题中行为的描述。之前看到过一个非常生动形象的例子:假如你要吃饭,自己做饭吃就是面向过程,点外卖就是面向对象。同样是吃饭,而这两者有什么区别呢?当你要自己做饭吃时,你首先会想今天要吃什么,是吃红烧肉呢,还是西红柿炒鸡蛋呢,然后要去买菜、洗菜,还得切,再放锅里炒等等一系列步骤。而点外卖呢,你只需要一部装有外卖软件的智能手机,然后想好想吃什么就ok了。如果你要吃其他的菜,自己做的话又需要重复上面的步骤,而点外卖则要简单很多,这就是面向过程和面向对象的区别所在。面向对象的设计也更符合客观世界的规律和人的思维方式,因此,面向对象编程思想也运用更加广泛。

面向对象有三个基本特征:封装、继承和多态。封装是指将数据和方法组合成起来,每个类的对象都拥有这些数据和方法,对象的属性和行为都是私有的,外界无法直接访问,只能通过外部接口实现。这样的信息隐藏保护了程序的内部数据不会轻易地被外界更改,程序的各个部分也相互独立,不会因为一块的改变影响其他部分的执行,提高了程序的可维护性。我们一般将数据信息设为private来对其进行隐藏,并且为每一个属性设置setter和getter方法来用于数据的读写操作。面向对象的继承是对于客观世界规则很好的沿用,这也是面向过程设计语言与其他语言一个很大的不同。继承是指子类拥有父类的所有属性和方法,并且子类除了继承自父类的属性和方法也能够进行增加和修改。子类一般比父类拥有更多的属性和方法,子类可以重写父类的方法,但是无法访问父类的private属性,并且子类只能继承一个父类。继承提高了代码的复用性和维护性,使得代码的利用率更高,大大减少了程序员的工作量。多态也是面向对象的一个重要特征,指的是子类继承父类方法所表现出的不同行为。多态的实现必须满足三个条件,子类继承自父类,并且重写父类方法,还要将子类的引用赋给父类的对象。多态可以说是面向对象编程最核心的特征之一,多态增强了代码的复用性,使得程序代码编写更加灵活。

面向对象有五个基本原则:单一职责原则、开闭原则、接口隔离原则、里氏替换原则和依赖倒置原则。单一职责原则简单来说就是一个类只能有一个引起它变化的原因,即只有一个职责。如果一个类有很多职责,这些职责就会被耦合,一个职责发生变化就有可能影响这个类完成其他职责的能力。所以为了避免这种情况发生,我们在设计类时一定要遵循单一职责原则。开闭原则指程序中的类对于扩展时开放的,但是对于修改是关闭的。一个类只应该由于错误而进行修改,当一段代码编写完成并能成功运行后,我们只能对其功能进行扩展,而不能对里面的内容进行修改。接口隔离原则是指类之间应该依赖于最小的接口,不应该依赖于它不需要的接口。一个接口不应该实现很多的方法,应该细化成相应模块的具体方法。里氏替换原则是指父类出现的地方子类也一定可以出现,在程序中,将父类用子类代替,程序的功能也不会出现变化。依赖倒置原则指依赖于接口而不是实现,即应当面向抽象编程而不是面向实体。

本次面向对象课堂主要通过老师线上讲课,学生完成课堂作业和课下PTA大作业为主。首先通过老师课程的讲课,我们能够初步了解到面向对象的基本概念,课堂作业能够加深这些概念的理解与掌握,一周左右的大作业能够巩固所学知识,为下一次的学习内容打下基础。经过系统性地学习和编程,以下是我对面向对象编程的一些感想。

在进行面向对象编程时,类的设计十分重要。在前面几次大作业中,老师都会将参考的类设计发给我们,这无异于给我们降低了一些难度,我们可以先进行类设计,再与老师的进行比较,结合两者的优点,形成最终的一个类设计方案,如果都照搬老师的类设计方案,到后面需要自己设计的时候就会比较吃力。编写代码还有很重要的一点是要边写边调试,不能等到全部编写完代码以后再来进行调试,这样一个问题可能要找很久,哪怕找到了解决起来也很棘手,最后能够完成一部分功能就可以运行看看是否可以实现,这样发现错误也很好更改。还有一点是要学会利用网络资源,编程时出现一些以前没有遇到过的错误或者不理解某段代码的含义都可以进行网络搜索,网上Java的资源还是比较丰富的,多上IT论坛,也可以在课余丰富我们的知识储备。最后一个就是一定要多进行编程练习,所谓熟能生巧,对学习过的知识反复练习,运用起来才能得心应手。

相关推荐