zoukankan      html  css  js  c++  java
  • 面向对象程序设计课程感想

      不知不觉,本学期的面向对象程序设计课程就到了尾声。临近结束,感慨良多,尤其是在这样的一个春天里,写下这篇随笔时,甚至连授课老师的面都没见到过。

      首先,对最后一阶段的学习做一个回顾。最后的三次大作业题目量小,每次都只有一道题,但每道题都需要考虑很多,更加注重编码的规范,无论是在实现完整的功能,还是在处理各类异常,或者是最终输出格式,编码时都应该认真谨慎,也免不了反复的尝试和改错。通过这三次作业的综合练习,对这门语言有了更深的认识,对三大特性也有了更进一步的理解,同时在不断的“”编码——运行——改错——运行“”过程中,每当能够得到预期的结果并通过测试,都让我这样的一个菜鸟渐渐感受到编程的一点点乐趣。

      回望这个学期,这门课程以一种特殊的方式开始,在将结束的时候也依然如此。知识从电脑里传来,也应用到电脑里,所有的交互都在人和电脑之间。

      有了大一的C语言和大二的数据结构基础,在学习Java之前,对编程还是有一个基本的概念,并且能够对一些问题进行处理,实现起来有大量练习实践形成的一些编程思想。但Java又在根本的编程思想上有很大的不同,一个是面向过程,一个是面向对象。即使有一定的C语言编程基础,要从面向过程过渡到面向对象依然还是需要花费一点时间,可能甚至比没有任何编程经验的学生更难转换过来。

      第一阶段的前两次作业,由于问题较为简单,我解决问题的主要思路还是直接按照C语言来,面向过程一步一步地得到预期的输入输出结果。因为最初对面向对象编程思想没有太多概念,解题的过程中其实仍然是利用之前的C语言基础,试图将使用C语言语法的语句一句一句地翻译成使用Java语法的语句。比如输出结果的时候将C语言的printf()换成Java的System.out.println()。等到处理关于输入的问题,才开始意识到C语言和Java之间的有了执行上的不同,C语言可以直接使用scanf(),但是Java中没有直接输入的函数,后来经过查阅相关资料,才第一次真正地开始了解类和使用类,将Scanner类引入用于输入数据。

      经过第一阶段的前两次作业和课程的同步,在编码解决相关问题的过程中,确实感受到了C和Java两种语言很大的不同,对类和属性,以及对象调用方法,有了基本的了解,但还没有将其灵活地运用在作业里面。直到第三次作业在题目中要求分各个类实现相应功能,才算入了面向对象思想的门。多个类和他们的各个属性在处理上和C语言完全不同,但又更符合人的行为逻辑,每个行为都有执行人和接受人,相对应的就是某个对象调用某个方法并实现相关功能。至于使用不同的分类方案解决同一个问题,更印证了Java类设计的丰富性和对象的丰富性,相比C语言有不一样的魅力。

      第一阶段结束,第二阶段开始。第一阶段的最后一次作业,不同的分类设计方案,其实也体现了Java类的封装,不同的类都被封装,每个类拥有独特的属性和方法,且拥有一定的隐私性。第二阶段阶段则开始介绍Java的其余两个特性:继承和多态。有了继承,就有了父类和子类,就有了多态。有了多态,就像打开了一个新的大世界,很多的事物都可以加入进来,慢慢地可以去创造任何你想要的。抽象类的引入则开放了更多的接口,世界被进一步扩大。父类可以拥有多个子类,多个子类也可以有拥有各自的子类,每个类都拥有自己的属性和方法,像树一样的类,可以实现丰富且意想不到的功能,可以搭建一个虚拟的数字世界。

      第二阶段结束,第三阶段开始。谈完了Java的三大特性之后,再来谈谈Java的一些设计原则。其实Java的三大特性和五大设计原则,这可能是第一阶段或者更早就应该知道和理解的概念,但对他们有自己的一些见解却是在经过大量练习的很久之后,在一次次的编码和优化中才渐渐地感受到规范的正确。第二阶段的最后一次作业,比较明显地需要在前一题的基础上扩展和修改功能,这就应该考虑Java的设计原则之一,也就是开-闭原则,意思是类、模块、方法是可以扩展的,但不可以修改,面向扩展开放,面向修改关闭。第三阶段的第一次作业中,更显然是要考虑开-闭原则,题目中要求前后两种系统的共存,就必须扩展功能,而不是修改现有功能。Java讲究代码的复用性,每个特性和设计原则都为他服务,包括之前所说的封装、继承和多态,如果修改了现有功能,复用性会受到一定的破坏,这不是Java希望看到的。Java设计的另一原则——单一职责原则,也体现了代码的复用性的影响。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。如果一个类或者模块有多于一个的职责,职责就会耦合,一个职责的变化可能会引起其他职责的改变,会导致设计结构变得脆弱,也会影响代码的复用性。于我而言,单一职责原则从概念上是非常容易去理解的,一个类或者模块只干一件事,但要彻底的规范起来也需要长时间的练习,对代码整体结构进行不断地优化。很多次作业其实用一个类或者一个main方法就能得到预期结果并通过测试点测试,有时候为了过某一两个测试点,可能忽略单一职责原则而将一些功能耦合也会更快地通过测试点。但随着时间流逝,课程跟进,练习锻炼,对自己的要求会越来越高,通过了测试点也会想着有空去优化一下结构,开始尽量去遵循一些特性和设计原则,就像最初分不同的类可能会 比直接面向过程更慢一样,但其实这样的慢是有价值的。

      除了Java的三大特性和五大设计原则之外,通过这一门课程的学习,还学到了很多Java语言的工具,字符串类的处理、正则表达式、抽象类与接口、文件管理和JavaFX图形界面等等,因篇幅有限不一一叙述了。Java各式各样的工具以及各类本身带有的方法相比C语言实在丰富,课堂上因时间有限不能全部学习到,但在课后或者之后的学习生活中却可以继续学习Java,Java还是有趣的,编程也是有趣的,有各种不同的语言可以选择去学习。所以学习才是最有趣的。

      

      

  • 相关阅读:
    设计模式与23种设计模式的简单介绍
    一文读懂C++ Vector在算法竞赛中的常见用法
    一文读懂C++ String类在算法竞赛中的常见用法
    GO语言的单元测试与性能测试
    变量提升和函数提升及二者优先级
    闭包
    读《你不知道的JavaScript 中》-异步【3】Promise
    js数组方法-改变原数组和不改变原数组
    读《你不知道的JavaScript 中》-异步【2】回调
    组合类算法问题
  • 原文地址:https://www.cnblogs.com/senforest663/p/12984593.html
Copyright © 2011-2022 走看看