OO第二单元(5-8周)作业总结要求
前言
这三次作业每一次都会有题目让我感到头疼,而且第二次作业的一元多项式求导截止时间到了依然没有完成,一是开始时间有点晚,之前进度有点慢,二是没有记牢题目,到最后才发现理解错误,且时间已经不允许更改大段代码。总体来说感觉难度并不是很大,尤其是大都给了UML图。有些题目看着复杂,其实开始写了之后就发现并没有那么难以下手,抓住了关键点和面向对象的思想就可以按部就班地解决,虽然会花些时间。
1.作业过程总结
①知识迭代关系:
homework04:水文数据校验主要就是来熟悉正则的,蒙特卡洛考察指定范围随机数生成和继承,图形继承考察继承
⬇
homework05:图形继承与多态就是从01的继承进一步到了继承与多态并且开始接触抽象类,求导题就从01的熟悉正则到熟练运用正则,也考察了复杂情况下类与类的相互协作
⬇
homework06:排序和分组排序主要就是进一步运用之前的继承与多态,熟练使用抽象类,直接复制之前的代码感受之前继承与多态的强复用性,然后学习了Comparable<>接口的使用
②如何通过作业逐步理解面向对象的封装性、继承性与多态性:
如①所说,本阶段第一次作业开始学习使用继承,那时对继承的理解就是可以少写一些代码,然后之后开始接触抽象类和接口,而且代码逐渐变的复杂之后,我发现不只是少写代码这么简单,抽象类的继承可以把一些通用的属性进行封装,便于修改和复用,同时兼顾了密封性,而继承之后的多态可以根据不同的对象对属性进行个性化的重写,大大提高了父类的抽象性,可以封装更多的东西,也使子类更加灵活多变。
③作业过程中遇到的问题及解决方法:
1.水文数据校验那题一开始死活看不懂题目,还以为题目有问题,后来才发现 \t 敲出来的空格长度不一,下次题目给的输入输出格式有疑问呢一定要复制下来看,可以看到具体细节。
2.蒙特卡洛的题目主要问题在制定范围随机数生成不熟练,百度之后理解了一些java自带的类就解决了。
3.一元多项式的题目我想不出来应该怎么把各个项分开来,后来百度到了Pattern类的各种用法,仿佛发现新大陆,兴奋地用正则把幂函数项和常数项分开存储,准备输出,结果最后发现输出时不能改变项的顺序,这时候已经来不及修改了,而且到现在我还没想出来怎么在我那个代码上加上顺序标识,所以这个问题只算解决了一半。
其他的题目并没有遇到一些特别印象深刻的问题,按部就班还比较顺利。
④每次作业花费的时间比例
约为:第一次作业:第二次作业:第三次作业= 3:5:1.5
⑤对编程过程的严谨性的认识及教训
说实话和上一次的总结相比没有多少更进一步的认识:
1.一开始写的时候就要考虑到很多特殊场景,针对这些情况写特定的代码,并且写好备注,不然大概率运行出错,如果不告诉测试内容那几乎很难找到,因为一开始忽视了后面也很难想到。
2.表达式该写括号就写上,不要尝试让计算机运用数学优先级去自己运算,不然后面错在哪都不知道。
3.有些备注一定要写,尤其是针对特殊情况的代码和有许多大括号的地方。写备注是为了增加代码可读性并且使代码看起来分区明确,方便查找和修改,不然会看的眼花缭乱不明所以,有可能越改越错。
4.要遵守命名规则,这样一看就知道是什么东西,大小写不同也也方便一个单词重复命名。否则可能会看错用错,看起来很乱。
5.时不时看一下阿里的Java开发手册,会看到很多规范的方法。
2.oo设计心得
①对面向对象三大技术特性之间关系的理解
封装可以减少代码冗余,同时兼顾密封性和便利性,为之后的继承多态提供基础;
继承同样可以减少代码冗余,也可以方便对通用属性的统一修改,使代码更有条理,为多态打下基础;
多态可以使子类更加丰富,功能多样,同时利用继承和封装使其更加简洁易修改。
②面向对象设计的基本原则理解
1.单一职责原则:每个类做好自己的事情,尽量不与其他类功能重复,
2.开闭原则:要对扩展开放,对修改关闭。就像上次那个雨刷的随堂作业,利用控制类来集成很多类,利用抽象类来使扩展性增强。但这个其实是一个矛盾的点,当追求过多的可扩展性就会导致代码臃肿,而追求代码代码简洁又会对扩展性造成影响,所以这里需要根据实际情况来平衡选择。那次的代码我就觉得有些不合实际,有些臃肿了,我认为既然雨刷的工作模式几乎使固定的,就没有必要在一开始设计的时候就绞尽脑汁去想一些极特殊情况,但是其他的扩展还是有必要的。
③OO编程思维的理解
和第一次总结差不多:利用一个又一个对象去完成任务,主要的精力放在需要什么对象、怎么创建对象、怎么运用对象上。比如我需要造房子,我就需要考虑需要什么工人,这些工人需要什么水平和技能,怎么运用这些工人,而不需要我亲自去造。当我需要临时加建一个游泳池(增加需求),我就重复上面的三个步骤,再招募几个工人就好了,其他工人继续干他们的活,突然不想造游泳池了就把他们解雇就好了(易修改)。当我造完房子想再造个桥的时候,发现之前造房子的一些工人可以用的上,我就可以再招募他们来给我造桥(可复用性)。
3.测试的理解与实践
①测试对于编码质量的重要性
1.编码过程中即使提前考虑了多种情况,但是也不可能面面俱到,这个时候就需要测试来体现出问题。
2.当代码变的复杂了起来,就需要及时针对每个类进行测试,这样测试过的类之后就不需要重复测试,易于排查、锁定问题,同时节省之后的测试和找错误的时间。
②假如使用Junit进行程序测试是否可行
当然可行,平时的那些测试输入就够我受的了,junit可以很好的帮助我,而且之后要测试多个main方法时也很方便,以后也会用到很多,所以肯定要学会。只是我现在还不是很熟练,有很多情况不会使用,以后熟练了就很有帮助。
4.课程收获
1.比较上一个阶段,对OO基本思想已经大致了解,开始学习各种原则落实这些思想,优化代码。
2.课上认真听讲,及时提问,因为课上一般讲的都是基础的东西,如果没有搞懂,课后会寸步难行。而且上个阶段一般不怎么看慕课的,这个阶段发现慕课很好地补充了老师讲的东西,有很多实用的知识在里面,不是之前想的和老师讲的重复。
3.一些常用的算法一般都有官方的方法,要善于搜索发现,用的时候也要理解,最好过段时间再用一次,加深记忆,这样就不会每次都去搜,也能更熟练地使用。
5.对课程的建议
1.作业难度和题量保持现在的程度就好了,有点挑战性又不至于太难,可以把UML图去掉.强烈建议将各种情况的输出说明白,比如输入空怎么输出之类的,要么就不要有这样的测试点,因为只能靠蔡或者问同学,严重的时候甚至会要改很多代码,真的很恼火,一开始说清楚就好了。
2.还是希望将一些语法的时候可以多将一些稍微更底层的原理,这样便于理解也便于记住用法,不会生搬硬套从而导致一些不知名的错误。
浙公网安备 33010602011771号