第二次blog'总结
第二次blog作业总结
1、前言:开始第二个月java课程的学习,首先和第一个月相比,显而易见的是作业的难度上去了,需要自己思考的东西变得更多了起来,同时对java学习的越多,越发现有更多的东西需要去学习,在这个月的作业中,大多数时候是需要去寻找一些可以更方便去实现代码运行的函数,而不是一味的值用之前学到的东西进行复述,这样不仅效率很慢,同时会发现学习到的东西真的不多。
2、设计与分析:
1)题目集四7-2 日期问题面向对象设计(聚合一)题目要求通过主方法调用dateutil调用day方法,再通过day方法调用month方法,最后用month方法调用year方法,通过方法之间的调用,使得代码得以运行,其中方法的写法不难,都有相应的提示,通过提示可以比较简单的完成代码,但是方法之间的调用成了最开始难以进行的原因,再了解完方法之间的调用时,完成代码。因为代码按照老师的类图要求写的,就直接使用老师的类图了,从类图可以看出来,这是使用了聚合关系,一个个传过去的。虽然说圈复杂度不是很高,因为许多代码不会太使用到if语句和for循环等语句,但是代码任然让我觉得冗长。


2)题目集五7-5 日期问题面向对象设计(聚合二)题目要求主方法调用dateutil,再由dateutil调用day,year,month,三种方法,这题题目和日期问题聚合一中的方法思路相同,但是总体方向不同,即调用方法方式不同,这个代码由dateutil直接调用三个方法,在最直观上,没有上个代码那么复杂,想要调用一个类,要经过好几个类的调用才能实现,但是代码中各个小方法的使用大体相同,有了前面的代码思想作为铺垫,只要了解这些调用就可以比较顺利的完成代码,同样这题也是老师给出类图,我就直接使用老师的类图了,圈复杂度和上题相同,应该是其中代码的计算都比较相似的原因,知识调用不同而已。


两者区别:聚合一中调用耦合度过大,牵一发而动全身,如果代码需要修改,则全部代码都需要修改,维修起来很麻烦,复用性也很低,只能单一的顺序调用代码;而作为聚合一的迭代--聚合而,明显耦合度比一低,将各部分抽出作为类,复用性高,且扩展性好。
3)题目集4中7-3 图形继承题目中使用到了封装,继承,多态,在了解完这些原理之后,就可以通过老师的要求较为完善的完成代码,因为给出要求比较具体,所以只用简单的按要求就可以完成代码,主要还是需要思维的改变,面对对象思维改变后,这种题目就比较容易写出来类图如下,可以较为直白的发现几者之间的关系。


4)题目集6中7-5图形继承题目中老师给出了解题报告,供我们参考,更加了解了继承和多态的运用,对三个求面积中的重载进行运用,让我们看到了多态的好处,虽然一遍一遍的写对比c语言来说有些复杂,但有些优点却是c语言难以实现出来的,或者说和第一个图形继承相比,虽然两者都使用到了多态和继承,但第二次的耦合性更低,更好点,各个部分之间的联系较少,只有各类和主类有点关系,其他各类之间就没有了联系,但全复杂度方面,因为题目之间的差异,导致第二次的圈复杂度比第一次要略高一点,但类图更为简洁。


5)题目集6中7-6图形继承题目在保持原来继承和多态的基础上,实现了接口的使用,让整体代码性能更加友好,跑的更快,且圈复杂度很低,类图也很明了,而且是由于老师提供了类图的原因,让整体思路变得十分明确,只要找到接口的使用方法,难度甚至比第二个图形继承问题更加的简单,短短几十行代码就可以完成,且使用方便


6)正则表达式的技术分析总结,作为一个很方便的查找方式,正则表达式有他很明显的优点,只要正则用的好,查找起来非常迅速,且实用性很高,对字符串的处理很好用,尤其是校验方面,可以很轻松的校验你所输入或者输出的内容,进行分析,在完成作业的过程中,发现了许多正则表达式的运用,其中最为关键的应该就是匹配,查找,筛选,通过匹配和查找,很快将总结所需要的字符串给提取出来,再进行进一步处理。这还只是我现阶段对正则表达式的运用,等之后的学习应该会探索到更多运用。
7)题目集五7-5 日期问题面向对象设计(聚合二)题目框架总结:用一个大类来调动其他小类的各种功能,这个框架明显的实现了这一点,以对象为中心,通过类和对象,分解和模块化不同组件,设定不同的功能,把一个问题分解成多个小的独立、互相作用的组件。这正是面对对象所要求我们所要掌握的,且这样的使用可维护性更好,同时更需要我们对这类问题进行思考,而不是单纯的模仿或者死板练习
3、采坑心得:
比起第一个月的代码,第二次的代码存在更多的问题可能是会不会,而不是什么粗心大意,当然,有些方面还是犯了些不该犯的小失误。在最开始,不清楚set和get之间的区别,有时候会把set和get弄混淆,导致我的代码会不出数,或者别的报错啥的,但是在这种面对对象思想采坑踩多了后,这情况就好了,由于是在做题过程中出现的问题,所以及时处理以后就没有什么数据。比如第一个日期问题中,就是因为不了解get和set区别,所以老是取不到年啊,月啊的值,除此之外,有些犯错更多是逻辑上的错误,而不是代码本身的问题,比如漏了某些特殊情况,在日期问题里面尤其是这样,例如闰年的二月二十九号,到下个闰年的二月二十九,如果处理不好,就有可能有问题,有次我的代码就是这样,输出结果一直比答案结果差一天,查找起来更是一行行代码看,最后发现是一个设置初始值问题设置错了。有时候发现,有些测试点,你不是一个个去试,很难发现自己的错误,这更多是自己对问题的不了解,特殊情况考虑不当。
图形继承:老师上课举例子就是用图形继承进行的,继承的采坑,其中令我印象最深的是第二题中的用toString方法输出结果,但是我想了好久不没有进行实现,所以那个代码中的方法直接用空来输出,也就是,现在的我只能实现简单的调用,复杂一点的调用就难以实现了。还有一个就是输出问题,由于老师要求中要我们保留两位小数进行输出,也就导致了有些时候,我会用保留后的小数进行计算,最后导致结果和本来的答案出现一定的误差,。同时最之前,我先定义了Π为3.14也同样导致了这样的错误,算是数学知识不过关,逻辑不严密造成的。
4、改进建议:
日期问题:日期问题里面,虽然将各个部分的类进行分开,但其中是否可以使用一些抽象类来对各个计算部分进行划分,让耦合度再次降低,比如如果要加入小时啊,分钟之类的话,就可能要对代码进行修改,而不是在不动源代码的情况下进行增添,或者将计算天数的方法变得更加简单,这同样是可以进行改进的地方。
图形继承:是否可以衍生到三维方面,比如体积,表面积啥的,这样的情况,是直接修改源代码,还是在源代码之外新增一些类的方法进行实现,可以有个选择,或者判断。还有在原基础上可以新增一些求周长,这些应该都是可以实现的。
5、总结:
第二次月的Java学习就这样结束了,在这做个总结,比起第一次的保留c语言习惯的我,在第二个月开始了对面对对象的思维的认识和学习,总的来说,这是从0到1之间的区别,这种区别还是蛮大的,从最开始的set和get都分不清,到现在能完成一些比较基础的课程,这个月的作业功不可没,我一直认为,学习语言这种东西,实践永远比理论来的快,和c一样,大部分的知识来源于在解决题目的过程中,对资料的查询,认识并且学到更多的以前没有使用过的知识,比如在解决保留小数点后几位数问题的时候,就学到了一个新函数,而不是使用以前的老方法,这可能也就是语言学习的快乐了,一直可以学习到新的知识。
需要进步的:虽然进行了一些正则表达式的练习,但是对于正则表达式还是感觉掌握的很少,这样在之后遇到问题中,很可能就难以使用到正则表达式,从而更复杂的解决问题,多学学正则表达式。

浙公网安备 33010602011771号