OO第四单元总结
第四单元总结
1.本单元三次作业的架构设计
(1)第一次作业
本次作业仅实现了 ClassInteraction接口,我运用了大量的哈希表来进行对姓名、id等信息的检索,如下图所示。在层次结构上,本次作业我都结构较为简单,在MyUmlIntreaction中继承了UmlInteraction接口,此外我单独创建了MyClass、MyOperation、MyAssociation对象,并在MyClass中囊括MyOperation和MyAssociation。UmlInteraction所要求的方法我先在MyUmlInteraction中的哈希表中匹配到相应的MyClass对象,再在对象内部来获得需要的信息,传递出来。
(2)第二次作业
在第一次作业的基础上并列的加入了顺序图和状态图的查询,我分别为顺序图和状态图的接口建立了相应的MyUmlStateChart和MyCollaborationInteraction实现。在MyUmlGeneralInteraction中,我分别创建了类图、顺序图和状态图三个对象,查询时在各自的对象中查询。
(3)第三次作业
我的整体架构与第二次作业差别不多,只是在类图中由于增加了许多检查错误的方法,导致我原有的类图代码加上新的代码超过了500行的限制,因此我将查询错误的方法以及类图的建立分别放在了两个类,其余的整体架构没有改变。
2.四个单元中架构设计及OO方法理解的演进
在第一单元中我对面向对象的理解还不是很深刻,可能也是任务要求的特点,我在代码的编写中,运用了更多的面向过程的思想,以第三次作业为例,我在main中首先将表达式初始化把括号、sin(cos)变换方便后续的读取处理,接着再递归的对每一个单项式进行求导。在第二单元的作业中,以第六次作业为例,我在input中创建了总的控制器,再在总的控制器中创建了每部电梯分别的控制器,最后每部电梯的控制器再创建各自的电梯对象。在这一章中我认为我使用了更多的面向对象的思想,主要是由于需要在不同的层次(控制器)中获得信息,因此各类的方法较多。但由于本单元的作业重点是多线程的运用,而对于一个线程而言,其与面向过程的思想还是有较强的关联的。第三单元我认为是OO思想体现的最深入的一个章节,在本单元,我认识到了OO思想中的一个特点:碎片化的代码。不像前两个单元(尤其是第一单元)的可以用一条主干的思路将程序在脑海中每一步处理的步骤分析清楚,第三单元的作业要求实现的每一个方法都是几乎独立于其他方法的,因此在实际程序运行时,很难构建出一个程序执行的先后顺序。而“对象”则是包装方法的工具,而不是之前理解的MainClass外,一条顺序执行的流水线。不过很遗憾,这个单元中由于对JAVA本身容器的不熟悉,反而让我在这个单元的前两次作业中翻了车。第四单元从思想上将是对第三单元的一种继承,不同的是,其没有了JML的约束,让我们自己设计对象。
3.四个单元中测试理解与实践的演进
在这四个单元中,我认为我的测试方法还是有一些相似性的,第一单元由于对Linux脚本不太熟悉,基本上是采用了手测的办法,然而这种方法效率低,出错率高。到第二单元以后就相对比较稳定了。第二和第四单元主要是依靠着Python生成测试数据,然后再用Linux脚本进行自动测试。第三单元主要是通过和同学的代码对拍再用Linux脚本进行自动测试。辅助以一些JML的单元测试。但是实际上单元测试对正确性的判断较好,而对代码的效率的判断比较模糊,导致了我第三单元前两次作业都是因为效率的缘故没有进入互测阶段。并且,单元测试很难测到自己想不到的数据,这就导致了bug无法及时发现。而这在自动测试后是可以完全避免的。
4.课程收获
仅从这16次作业上来说,首先这门课给我带来了代码的大规模书写的训练,特别是这种短时间高强度的代码写作。(本人重度拖延症,加上课程的安排经常周四晚开始看这周的作业 周五开始写,周六测试,这也导致了在几次作业中尽管测试出bug但找了一下午+晚上还是找不出来使得强测扣了不少分的悲剧)其次是面向对象思想的培养(这门课就叫面向对象 不写这一点那和上JAVA程序设计还有什么区别...)还有就是培养了我写一些linux和python代码用于自动测试的能力。(尽管很多代码都是大佬写的,但是还有不少需要自己改)
5.三个具体改进建议
强烈建议把JML作业从第三单元提前到第一单元,并适当降低一些难度,现有的JML学习时,已经对面向对象有了一定的理解,导致在这一单元强测卡性能卡的很死,我感觉这有点偏离了JML这一单元设计的初衷了。JML这一单元若适当降低难度,放到第一单元,是一个很好的给新手培养面向对象思想的机会。
第二个建议是将作业每周发布的时间提前一些。因为有的周末同时也是操作系统课程作业的ddl,有时候周日既要互测别的同学的数据,还要肝os的ddl感觉两边都顾不上。(虽然大佬可能周三就写完了 但是我相信他们对于提前发布作业也是没有意见的)可以提前到周一开放,周五强测,周末互测,这样周末不会太过紧张。
第三就是对于课程的一些辅助的插件的指导应该出一份指导书,比如在前两单元的博客作业时,在还没有学习UML图时就让我们绘制自己程序的UML图,我当时是百度上搜到了去年学长oo的一篇文章才了解了如何用JAVA绘制UML图,为此我还因为我的Idea是社区版而重新下了一个专业版,浪费了很多的时间。还有就是第三单元的博客作业中要是用的两个插件。在百度上都百度不到教程,搜索到的都是往年学长的博客作业。加上插件也没有给指导书,当时我安真的是一脸懵逼,还得多亏群里大佬的经验才侥幸逃过一劫。
6.线上学习oo课程的体会
感觉自己变懒了....(请各自代入自己)课还是去现场上好。

浙公网安备 33010602011771号