面向对象程序设计课程前四周PTA作业总结
JAVA面向对象程序设计第一作业周期(前四周)总结
1、作业过程总结
1)第一次作业:初步了解熟悉JAVA的语法规则(标识符的命名规范、常量与变量的定义与使用、运用各种数据类型解决问题,利用各种语句实现问题的解决。
2)第二次作业:开始在Main类中使用public static XXX XXX()方法实现模块化问题的解决,其中用到查找,排序,判断的算法与C语言基本一致,但题目优先到后由难到易,使用的方法逐渐复杂,彼此联系。
3)第三次作业:与第二次作业解决问题类似,
题目一:要求包含两个类,Main和QuadraticEquation,Main中主要包含解决问题的过程,而QuadrationEquation中包含Main中所需的参数和方法。
题目二:和题目一一样给出了Main类以及public static void main (String[] args)方法,需要设计一个关于日期的DateUtil类包含题目给出的八个方法以及各种属性,实现题目要求的各个功能,
题目三:与题目二一样但需要对类有新的设计,将需要用到的各个对象进行封装,分为Day,Month, Year, DateUtil, Main类各个类包含各自的属性,以及方法。
题目四:与题目三的封装大体相同,都是分为Day,Month, Year, DateUtil, Main类,但彼此的关系并不相同如下图:
题目三:

题目四:

经历上述四周的作业过程可以发现解决问题的方式从原来的比较接近于面向过程,到现在的学会用面向对象的封装特性解决问题,这是如何实现的呢?
开始时为了熟悉JAVA的基本语法题目比较简单,对象较为单。之后题目逐渐变得复杂,处理起来单一的方法并不能满足,开始多方法解决问题,由于方法的逐渐增多,对象的属性也逐渐变得复杂也开始对给个方法进行分类处理。最后一次作业题目通过示意图给予了我们两种解决问题的方案通过对于五个不同对象进行封装,对于每个类中的对象属性与功能进行适当的调整,进行重新组合,对问题进行不同的方案解决。在这个过程中解决问题从开始专注于过程到现在对于较为复杂的问题使用面向对象的方法解决。
在这个过程中也遇到了不少的问题,开始时由于对于JAVA的语法不太了解,在编译时中时出现错误,总结出来由如下几点:
这是一个正确的实例应用

但刚开始大多都没有这种习惯,在引用时直接写成了如下代码:

除了这种低级错误还有一种,在输入输出是当成C语言中的输出直接写printf();

正确的应该如下

定义数组时JAVA也和C有不同也是常犯错误
C中通常如下定义一个含有12个储存空间的数组

而在Java中是这样定义

在进入到大量使用面向对象类中方法与参数的调用,更改,又碰到了如下问题

这时需要构造方法对b进行赋值(如下图)

除这些编译错误的问题还有例如在需要调用返回值的方法中未在方法后return XX等一系列错误。
还有运行超时以及答案错误的问题,解决运行超时的问题时需要对与循环判断进行精简优化,比如在计算日期时对于闰年二月可以使用数组将闰年和平年的个月天数储存,在使用时直接调用,而不是在方法中逐一判断,既减少了时间复杂度,也使代码变得更加易于阅读。再就是答案错误的问题,第一可以仔细思考题目测试点的用意以及在题目右边的解题报告,当面对最大值测试,最小值测试,边界等临界问题时可以在一些特定的位置添输出显示出查看问题,有时可以测试一些临界值,还有时可以转换数据类型实现对于超出数据类型的特大或特小数的运算。虽然并不是所有的问题都可以解决,但可以不断提升对于代码的熟悉成度,以及代码出现的一些不严谨的问题。最后还可以询问同学,每个人思考问题以及解决问题的方法都不尽相同,别人的实现方法,往往会使你跳出自己原本的思维惯性。
随着学习的深入开始时,时间主要花在修改编译错误上,之后随着熟练度增加编译错误逐渐减少,但题目的难度也有所上升为了解决一个答案错误或者运行超时往往要耗时一周。总体来说做题时间相差不大。
最后代码的规范以及严谨非常重要,有时往往就是一个大阔号的问题,需要检查很久。再就是尽量将一个问题的实现方法细分成更简单的方法,一、可以避免代码过于复杂难以阅读,二、可以便于查找错误,方便维护。
2.面向对象设计心得
面向对象设计与之前的面向过程最大的区别在与思考问题的方式,以前拿到问题的第一反映是我该怎么先怎么再怎么,这个过程怎么实现,而现在面向对象第一反应是看这个问题可以分为什么什么几个对象,之后再对各个对象进行逐一考虑,他有那些属性,这些属性需要有怎么样的功能。总的来说就是用属性来描述对象,使用方法来处理对象行为。最后再在一个主类中将他们彼此联系实现问题的解决。
对于面向对象的理解个人认为就是解决问题时不再第一个考虑你需要什么功能函数,而是关注问题所涉及的对象(也可以说先根据自己的思考将问题中的各个量进行分类),面向对象的编程更符合人的思维模式(个人感觉不明显,解决问题还是绞尽脑汁还是搞不定,可能我不是人把),编写的程序更加健壮和强大(这一点个人还是感觉不明显,),面对对象编程更有利于系统开发时责任的分工,能有效组织和管理一些比较复杂的应用程序的开发(这一点体会深刻,PTA练习给予的提示利用面向对象的封装性将复杂的问题确实进行了简化)
3.测试的理解与实践的重要性
对于代码质量测试必不可少,合理的测试可以发现初始代码中许多不易发现的错误,对于代码解决问题的严谨度提升很有帮助。
对于测试用例如何选择
1、明确各个模块的需求(就是这个模块是干什么的)
2、明确题目所给出的范围
3、根据程序所出现的为题反向思考,寻找测试实例。(主要是边界值,特殊情况,)
4、可以根据自己的直觉选取,平时对会在那些地方出现问题。
5、也可以参考通过测试点同学的代码,将其改造为测试代码,对自己代码的运行情况进行比对,从中发现问题。
4.关于课堂的收获
开始时将JAVA当成C语言,不就是改了一个语法,其他问题解决不都一样,但随着学习的深入发现有时面向过程到解决方法发并不那么好用了,面向对象可以更好的对问题的解决进行分工简化,出现错误时,对于错误的寻找更为方便,但面向对象的灵活性好像不想面向过程那么变化多端。总体来说学习一个新的编程语言让我在解决问题时有了更为广阔的创造空间。

浙公网安备 33010602011771号