第三次blog作业总结
第三次blog作业总结
1、前言:开始了第三个月的作业总结,首先就是开始了对java代码中使用较为常见,并且比较专门属于java的继承,多态等方法的多种使用的学习。因为比较重要,而且使用几乎每个代码都会有这些方法的使用,所以为了这个阶段的学习,老师也算是煞费苦心,题量虽说一次只有一两个题目,但是题目的难度还是需要我们比较钻研的去考虑各个方面的因素,遇到的问题后面的采坑会提到,也算是吐吐苦水,但知识就是这样,你没学会之前觉得很难,但写完之后又会觉得就这?正式开始吧
2、设计与分析
1)从7-1开始图形继承游戏问题,由于之前有图形继承的基础,在完成这题的时候,又熟悉了下图形继承,毕竟使用方法离不开那些东西,由于老师给了类图和要求,所以代码的完成速度不算太慢,花了点时间用在接口上,发现用完也就那样,相当一个又函数的类,直接继承使用就好了,并且老师给出了主类的代码,相当把框架先定好,让我们在类中写上方法,按照老师给出类图,将各个类中方法写完后,还有一个就是排序问题,也只是用到了选择排序的算法完成了代码,但开闭原则感觉没有写的很好,虽然一部分类也完成了开闭原则,但同样有些类的开闭原则没有实现,这题题目比较简单,倒是在输出方面和多态方面花了点功夫,但这个东西又不影响圈复杂度,所以圈复杂度保持在一个比较低的水平。

2)7-2的图形继承游戏问题,在7-1的方面上进行了一点改进,但由于问题大同小异,所使用到的方法和类都基本吻合,所以在完成了7-1之后,7-2的代码在输出方面进行一些修改,就可以比较轻松的完成代码,但由于新增每个图形和自己相同图形的比较大小,还有和不同的图形进行比较,得出最大值,我就让他们每个图形之间的最大值比较出来之后,再让每个最大值进行比较,得出最最大的那个值,所以其中使用到的比较比较繁多,导致了圈复杂度也比7-1代码中的圈复杂度高出许多。


3)题目集8 ATM机问题开始了,和这个代码打了个持久战,这个题目开始,老师就开始讲解代码所需要注意的事项了,而且由于作业发的早,讲解又在周三,所以老师在课堂上讲的注意事项一开始就犯了点错误,但由于自己代码开始时间比较晚,所以代码完成度也不高,无伤大雅,这个ATM的设计问题,一个是账户中的钱,并不可放在卡类中,还有一个账户多个卡的情况,同时举了个例子让我们了解从卡号查询账户,银行,等内容讲解,主要运用到了ArrayList,迭代器等方法,在理解了老师给出的例子之后,主要问题就是初始化了,初始化完成后,代码就差不多了。



4)题目集9在题目集8的前提下,加了一个借贷卡的使用,同时加了借贷账户和借记账户的区别使用,这就运用到了多态的使用,而且从上一次的作业的教训来看,这次的代码虽然老师给出了部分代码,但一些核心代码还是需要自己来完成的,这次的问题主要是解决两种卡的区别,如何将两种卡分辨出来,或者如何让两张卡进行不同的取钱程序,而且这次代码需要增加跨行取款的内容,这也是需要考虑到的一方面,但是有些代码,例如如何从卡号知道所属银行,知晓账户,这些老师已经给出的代码,无疑让代码的难度降低了一点。从类图也可以看出来,除了两个账户的多态,其他的类图就比较简单,而且这个代码的圈复杂度也不是很高,可能有一部分是老师的代码原因。


3、采坑心得
现在我已经快是一个初出茅庐的小菜鸟了,对于那些太基本的错误一般不会出错了,现在题目做的费劲,一般就是有些代码没有学过,或者是思维上的误差,所以这次的采坑心得可能更多的是在题目中没有想到的问题,最后导致出现问题,这也是最主要的问题。开始吧
1)从7-1开始图形继承游戏问题,这道题目遇到的问题就是接口的运用了,别的东西由于之前训练过,所以除了接口以外其他代码的完成比较简单,而接口方面,通过上网找寻资料以后,发现接口的运用可以看成一个特殊的抽象类接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。但运用起来大同小异,注意两者区别就行了,最后在了解了接口的作用后,也是比较轻松的完成代码
2)7-2的题目也就是第一次的补充,同时增加一个新增每个图形和自己相同图形的比较大小,还有和不同的图形进行比较,得出最大值,我就让他们每个图形之间的最大值比较出来之后,再让每个最大值进行比较,得出最最大的那个值,这算是设计中需要提到的,同时也是我在完成这道题目遇到的一种困难吧,虽然只是一个比较方法,但怎么运用也是一个比较困难的东西,最后由于是总共就四种图形,索性就用了一种最为简单的方法,当一个比其他的所有最大值都大时,那么他就是最大的,如下。


3)ATM机问题遇到的问题就比较多了,而且第一次的代码老师也没有给出一些源码之类的,所以全部代码都自己完成,根据老师之前的例子,一直使用迭代器,每一个都需要从头找到尾,简直了,如图,还有每个类之间的联系和绑定,我也是在老师把他代码给出来的时候知道两者可以双向绑定,而自己的代码就是一个个绑定,光是最开始的初始化,就把人累的不轻,我又是一个银行一个银行开始的,最后每个卡绑定完后我都觉得可能绑错了,还检查了好久,生怕因为初始化没有完成,最后导致最后结果错误,那直接泡汤,而且检查起来也会很麻烦,而且最开始的输入字符串处理就遇到了问题,这个字符串该从那些地方对它进行分割,该怎么样分割,这个问题也困扰了我很久,最后把他们放在不同的组里面才完成这个代码,而且输出方面,每次需要对输入的东西进行检测,最后那个输出的也变得很繁琐,n个if叠在一起,让代码看着就累人。但别的不说,迭代器倒是用的熟悉了起来。
4)第二次ATM机问题比上次要好点,毕竟老师给出了一部分代码,先照葫芦画瓢初始化完成后,代码就已经快完成了一半了,而剩下的一半主要是如何从输入中提取到我们所需要的东西,或者说怎么样从输入调用到里面的类,从而使用到里面的各种方法,这都是我需要考虑的,而且跨行取款,是用到的在哪个银行所取到的钱,而不是你原本账户所在的银行的税率,但巧的是老师给出的代码中,是根据你输入的卡号得到的银行和名字,导致我写了一部分的代码后,发现输出根本和在哪个银行取钱一点关系没有,后来多测试了几次,发现得到的银行是卡所在的银行,后面根据代码,从ATM出手,因为一个ATM机子是绑定了一个银行的,而且输入需要输入在哪个ATM机子取的钱,这不就刚好吗,直接从ATM机子得到银行,从而调用到里面那些税率等等东西。第二个遇到的问题就是,老师有个测试点,是要把银行所有钱跨行取款取出来,但是取钱他又是要手续费的,你要是卡里只有50000,那么这五万不可能全部取出来,后来我就发现,有个是你取得钱加上税率比你余额多,那样你才能把钱全部取出来,知道这这个问题之后,在取钱那里加了些代码就完成了这次作业。


4、改进建议
卡片游戏问题:这个题目主要可以改进的应该就是我前面所说到的几个最大值之间的关系比较了,这个比较的代码应该可以得到优化,或者说,这个比较的方法可能写个类,最后一个个比较,而不用我之前用到的那么笨的方法。
ATM机问题:ATM机问题可以改进的地方没有什么了,该有的程序都已经大部分可以实现,倒是圈复杂度问题应该要得到更好的解决方案,同时,类图方面,最好让每个类之间的关系变得耦合度更低,更好的实现开闭原则,这方面都是可以考虑的
5、总结
这个月的学习,首当其冲的是对面对对象思想变得更加清晰,已经初步理解了面对对象是什么东西,同时对继承和多态的理解也更高了一个层面,同时老师给出了代码,让我也体会到了重构别人或者自己代码的感觉了。满新奇的。

浙公网安备 33010602011771号