OO第一作业周期(前四周)总结
前言
这三次作业自认为都完成的不错,自主完成真的学到了很多,在查找问题的过程中既培养了自学能力也培养了和同学交流的能力,找到了很多自己完全没有注意到的点。前两次的作业感觉还比较简单,第三次作业就比较难。
1.作业过程总结
①知识迭代关系:
第一次作业:复习一下算法和熟悉一下Java的基本语法
第二次作业:开始学习使用“方法”,算法难度提升,需要思考才能写出高效简洁的算法
第三次作业:开始学习使用“类”,并结合了前面作业的“方法”。还用到了UML图,练习了读图能力和实现的能力,接触到了算法前期的设计层面。
②如何通过作业逐步从面向过程过渡到面向对象:
一开始的题目还比较简单,用面向过程的思想就可以很好解决,然后学习使用了类的概念,面向过程的思想才慢慢显现出来。后面的题目变的复杂起来,并且和之前已经写过的题目有联系,这时候为了用上之前的代码,并且使代码条理清晰便于修改,就必须运用类,这时候就开始理解面向对象思想中的易复用性和易扩展性。而且用面向对象思想中的单一职责原则写题目的时候,发现代码更加条理清晰,互不干扰,耦合度更低。最后一次作业用到的UML图从设计层面宏观的理解了面向对象的思想,看到了对象与对象之间的关系。
③作业过程中遇到的问题及解决方法:
1.这三次作业主要遇到的问题主要使一些基本语法的问题,比如如何输入输出、使用数组对象的时候总是报错、怎么提取字符串中的字符、还有创建类时 的一些问题等等,这些语法问题一般都是百度解决,老师在课上也会讲到一大部分,如果忘了就会看回放。
2.还有就是一些测试点的总是过不去,对我来说这个问题主要集中在第三次作业的第二题。一开始是运行前后N天运行超时,我重新写了一个新算法,用年月直接跳后再算日,比之前一天一天加上去简化了很多运算。运行不超时了,但是答案错误,我先尝试了很多特殊测试点,改掉了发现所有可能有问题的地方后普通值可以通过了,但是最大值还是报错,这个时候我就和同学交流,他告诉我他是如何改正的,但是那种方法我之前尝试过是无效的,他又给了我一个极限测试点,我测试后猜测是因为int类型不够用,改成long果然通过了。
3.eclipse的使用问题:一开始全英文使用不熟练,后来经过多次百度熟练基本操作之后就开始建立工程和包来分类,并学习一些快捷键,比如在改代码的时候发现修改了变量名之后就要一个一个改,太麻烦,就百度了批量修改的方法。
④每次作业花费的时间比例
约为:第一次作业:第二次作业:第三次作业= 1:1.5:5
⑤对编程过程的严谨性的认识及教训
1.一开始写的时候就要考虑到很多特殊场景,针对这些情况写特定的代码,并且写好备注,不然大概率运行出错,如果不告诉测试内容那几乎很难找到,因为一开始忽视了后面也很难想到。
2.表达式该写括号就写上,不要尝试让计算机运用数学优先级去自己运算,不然后面错在哪都不知道。
3.有些备注一定要写,尤其是针对特殊情况的代码和有许多大括号的地方。写备注是为了增加代码可读性并且使代码看起来分区明确,方便查找和修改,不然会看的眼花缭乱不明所以,有可能越改越错。
4.要遵守命名规则,这样一看就知道是什么东西,大小写不同也也方便一个单词重复命名。否则可能会看错用错,看起来很乱。
5.时不时看一下阿里的Java开发手册,会看到很多规范的方法。
2.oo设计心得
①面向过程与面向对象的比较
面向过程:给你一个任务,然后你考虑一个完美的过程去完成这个任务,不考虑可能的变化,一切事情都需要你亲自做,每一步都可能影响下一步,因为专注于这个任务所以考虑少,写起来快,但是难以找到错误、修改、扩展和复用。
面向对象:给你一个任务,先考虑这个任务包含什么对象,然后抛开任务创建这些对象和它所应该包含的方法,再让这些对象去完成这个任务,而你只是一个管理者,不需要一切都亲历亲为。这样对象与对象之间互不干扰(低耦合),因为创建对象时抛开了任务所以以后有别的任务需要这个对象的时候就还可以拉过来用(复用性),任务有了新的需求就再创建一个对象让它帮忙做事(扩展性),任务出错了很容易找到出错的对象,只要修改它就可以了,其他的对象不用再测试了(易维护)
②面向对象设计的基本原则理解
1.每个类做好自己的事情,尽量不与其他类功能重复。
2.创建类的时候要方便以后的复用
3.尽量不要有重复的代码,重复的代码可以用之前的类表示
③OO编程思维的理解
和①里说的差不多,利用一个又一个对象去完成任务,主要的精力放在需要什么对象、怎么创建对象、怎么运用对象上。比如我需要造房子,我就需要考虑需要什么工人,这些工人需要什么水平和技能,怎么运用这些工人,而不需要我亲自去造。当我需要临时加建一个游泳池(增加需求),我就重复上面的三个步骤,再招募几个工人就好了,其他工人继续干他们的活,突然不想造游泳池了就把他们解雇就好了(易修改)。当我造完房子想再造个桥的时候,发现之前造房子的一些工人可以用的上,我就可以再招募他们来给我造桥(可复用性)。
3.测试的理解与实践
①测试对于编码质量的重要性
1.编码过程中即使提前考虑了多种情况,但是也不可能面面俱到,这个时候就需要测试来体现出问题。
2.当代码变的复杂了起来,就需要及时针对每个类进行测试,这样测试过的类之后就不需要重复测试,易于排查、锁定问题,同时节省之后的测试和找错误的时间。
②假如让你设计测试用例,你会如何做
我会对每个功能分别出:少量随机普通用例、各种情况特殊点用例、两端极值用例、错误用例
4.课程收获
1.越了解面向对象编程越觉得适合目前大部分的市场需求,也越喜欢这种思想,因为思路清晰,不会因为任务变的复杂就像C语言一样感觉变成了一团乱麻。
2.写的时候一定要注意规范,经常看看阿里Java开发手册。
3.理解了面向对象的思想才能写好面向对象的编程,编写的时候要多从面向对象的角度去思考,这样才能逐渐深刻理解这个思想。
4.时间允许的情况下,尽量多看不同的解决方案,能学到很多好方法和简便的语法,遇到问题也会多一个解决方向,就算不知道怎么做,也会更知道怎么搜索。
5.课上认真听讲,及时提问,因为课上一般讲的都是基础的东西,如果没有搞懂,课后会寸步难行。
5.对课程的建议
1.将一些语法的时候可以多将一些稍微更底层的原理,这样便于理解也便于记住用法,不会生搬硬套从而导致一些不知名的错误。
2.可能的话,定期收集一些网上找不到解决办法或者莫名其妙解决了但是难以理解的问题,可以挑一些问的多的问题进行解答。
浙公网安备 33010602011771号