前言:
针对第一阶段作业做出的总结,主要说明本次博客针对的作业情况.第一阶段的作业大致是让我们了解C语言与Java的不同,同时让我们从面向过程编程过渡到面向对象编程.
作业过程总结:
1.总结三次作业之间的之间迭代关系
第一次作业给我的感觉就是很像C语言.再次熟悉了一遍for,while,switch以及if等语句的使用,认识到了Java输入与输出的不同为之后的学习和作业做下铺垫.
第二次作业是在第一次作业的基础上加大难度,除了需要对选择循环语句熟练外,还增加了Java中方法的使用,这便开始涉及到面向对象的皮毛,但在作业过程中还是面向过程的编程.
第三次作业主要让我们认识到了类的运用,了解到对象的声明与创建.作业中类的两种聚合类型的实现让我们正真开始了解面向对象的编程思维.
2.如何通过作业从面向过程过渡到面向对象
第一次作业以Java形式写C的程序,题目都是以前做过的,第二第三次作业,根据提示所给方法和类图所给的类的聚合关系完成代码,实践并巩固了面向对象的知识, 对面向对象有了一定的认识.三次作业下来,作业内容大同小异,使三次作业的关系十分紧密,并且知识的迭代与每次作业难度的提升,使同样功能的实现正逐渐摆脱面向过程编程,代码也逐渐走向面向对象程序设计.就比如第三次作业中对"年""月""日"三个对象的描述,使整个解决问题的步骤更加清晰,而不是仅用函数将这些步骤一步一步实现,由此慢慢地从面向过程过渡到面向对象.
3.作业过程中遇到的问题及解决方法
第一次作业中的税收问题虽然不是第一次做,但繁琐的输出总是让我不经意间输错某个数据,之后又花大量的时间将整个代码检查一遍,但改了之后下一个样例又不等价,这次我自行测试,在决定哪些地方没有问题之后,我再有目的的进行修改.但是在我改完之后提交还是部分正确,我又花了很多时间去修改,最后发现题目没有强制保留一位小数,只是样例给的输出都是一位小数.还有一个就是特殊情况考虑不充分的问题,三角形判定那题有个测试点一直过不去,我花大把的时间去测试,把每个情况都输出了一遍,之后我便发现等腰直角三角形的情况输入不了,我才注意到题目要求输入的是实数,而勾股定理得到的斜边可能是个无理数,于是我将两直角边的平方和与斜边的平方运用math.ceil函数向上取整后再做比较,最终还是没有通过测试,因为那时作业1过期了,但我在询问大佬之后确定我这么想没错.
第二次作业中第二题误以为每四年一个闰年导致错误,还有就是swicth语句不能对String类型的数据赋值后传出switch语句,于是我换成了if语句解决了这个问题.还有第三小题的格式问题,我在输出next date is : 冒号两边多加了空格,这么低级错误让我在这题卡了好久.然后就是第四题,我在一个switch语句中嵌套了多个if,else导致最里层的else一直会被跳过,于是我把else改成了带具体条件的if语句才得以解决.
第三次作业的话,第一题第二题给我的落差太大了,以至于我第二题懵了好久,最后还是被我磨了出来.我怕可能会运行超时,便先把年份的天数先算出来了,在算月份的,最以400多行的代码完成了,不过在我看完第三题的要求后,我发现我的顾虑是多余的,完全可以一天天的算,第三题运用到了类与类之间的关系,对这部分知识还不是很清楚在百度查询后才知道这个聚合就是一个类以其他类为属性,题目中DateUtil包含Day,Day中有包含Month,最后Month又将Year包含在最里面,清楚了这样的层层包含关系后,我大致知道了怎么做.期间困扰我最久的问题是未能及时跳出循环,刚完成代码,接下来的测试都是没有输出,我怀疑是我循环条件有问题,于是我在循环体只增加了一条输出语句,果然是没有跳出循环,我便开始更改循环条件,问题没有得到解决,稍加思索后,我发现是在达到跳出循环的条件后没有即使跳出循环,发而在里面执行语句,以致无法跳出循环,于是我在每次条件改变后增加了一个if判定语句,问题才得以解决.
4.每次作业花费的时间比例
第一次作业用时7小时,第二次作业前后花费5个小时,第三次作业用时十多个小时.
5.对编程过程的严谨性的认识及教训
编程之前要有清晰的思路,最好画出类图,这才能尽可能的吧每种情况都考虑下来,不然的话中间一乱套没人帮得了,除了自己,让花费个把小时去找bug改bug,代码要尽可能简洁,使用多次简单循环,而不要使用我们算术的简便思想,这样就算有逻辑错误也很容易解决,从而保证编程过程的严谨性,我第三次作业就是用平常思维完成的,期间犯了很多逻辑错误,最后的代码还很臃肿,有400多行.
OO设计心得:
1.面向过程与面向对象的比较
面向过程是对问题分析出每个步骤,每个步骤的功能实现对需要我们自己去做.强调步骤.
而面向对象分析问题后,需要实现一个功能可以直接找到具备该功能的东西来帮我们解决问题.强调具备功能的东西即对象.
2.面向对象设计的基本原则理解
模块化设计,对象就是模块,把数据和方法紧密结合在一起构成模块,每个对象各司其职,只做好自己的本分工作,使其更具有通用性.
3.OO编程思维的理解
我觉得关键得先找出对象,分析对象之间的关系后,再把类给抽象出来,分析完类与类之间的关联后在进行设计.
测试的理解和实践:
1.测试对于编码质量的重要性
测试是检测代码质量标准,没有测试最为保证的话,一篇代码可能永远只能返回错误值,永远不能为人所用,这时代码只能算是一堆无用的字符,就算只有个别错误,没有测试的话,这个错误就无法被程序员及时发现并修改,有bug的代码只能称为bug,而bug满足不了用户的需求.总之没有测试,代码的质量就得不啊到保证.
2.假如让你设计测试用例,你会如何做
如果让我设计测试用例,我会尽可能设计多的用例并将特殊测试值全部安排上,就像闰年的二月,平年的二月,最大测试值,最小测试值,正常测试值.
课程收获:
经过这几周的课程学习与三次作业,也算是完成了面向过程向面向对象的过度,学到了之前课程完全没有提到过的对象的概念,对象是具体的,而类是抽象的,在Java中现有对象后有类,我了解到了面向对象设计的优势,一次编写,多处引用,功能的实现不在依赖于过程的编写,而取决于对象的选择和类的创建.
对课程的建议:
我觉得老师讲的很细致,举得例子也很照顾我这样脑子不灵光的学生,但课后知识巩固我觉得需要加强,比如布置一些小练,希望老师可以制定课前预习内容,课后再分享一些学习查资料.