OO课程第四单元总结

本单元的三次作业,围绕UML的主题展开。平心而论,我本单元的作业从代码风格到架构上都有很大的缺陷与问题。一方面,我个人对于UML语言的理解较为粗浅,对其中各元素之间的关系、作用等都没有深入学习过,对于后续迭代开发的方向也不太清楚;另一方面,本单元作业贯穿了期末的考期,时间与精力上都有些不足,且本单元作业又没有互测,CPU时间的要求也相对宽松,因此态度上懈怠了一些,没有追求更好的性能。此外,本地自测数据构造的困难、对题目要求的错误理解等都对该单元作业的完成产生了影响。在我看来,本单元不仅工作量上较大,难度也不低,很容易出错,是有一个有定挑战性的单元。

架构设计分析

  • 第三次作业

    由于本单元为迭代开发,因此只给出第三次作业的架构,且略去了方法(方法太多,太占空间,会显得图架构十分畸形):
    image
    在第一次作业中,我以为MyUmlGeneralInteraction类只会负责处理类图相关的查询指令,后续作业将不会在这一个类中大量增加函数。因此我将所有方法具体内容都写在了该类中,稍加整合将代码行数压缩到了420行左右。然而事实并非如此。第二次的作业中,我被迫在该类中新建了MyMethod类,将大量代码转移至其中,以规避代码行数超500行所带来的风格惩罚。第三次作业中,我才吸取教训,将新增的内容置入MyCheck类,并根据需要建立了MyMap以及MyPoint两类。因此我的程序的架构显得相当混乱,以至于丑陋。

架构设计及OO方法理解的演进

  • 第一单元

    第一单元对于刚刚接触Java语言的我们真的十分不友好。如果说Pre模块的学习是一条平滑上升的直线,帮助我们初步认识并逐渐掌握了Java语言的简单函数、正则表达式与迭代开发模式,那么第一单元的学习就是陡峭上升的指数函数。在这一单元中,我们不得不学习Java语言中的数据结构的使用(而这实际上却是第三单元的内容)、递归下降的解析算法,如果追求性能分,则还需要对函数的化简深入地钻研。在第二次作业中,我虽然意识到了架构设计的重要性,但我当时的代码水平却不足以将这一架构正确地实现出来。
  • 第二单元

    第二单元的主题是多线程电梯。也许是因为经历了第一单元的洗礼,我在本单元的第一次作业中就注意了保持良好的架构设计,因此我认为本单元的难度反而较上一单元简单一些。可惜我在第二次作业中粗心大意了,犯了一个细节上的愚蠢的错误,否则本单元应该对我而言是一个较完美的单元。
  • 第三单元

    第三单元是JML规格。然而由于本单元中最核心的架构已经由JML规格所定死了,我们只需要做一些微小的细枝末节上的补充,因此本单元对于同学们架构设计上几乎没有考察。不如说本单元给出的规格设计本身就是良好架构的一个范本,可以供同学们学习借鉴。
  • 第四单元

    第四单元中,因为上述的各种各样的原因,我没有很好地贯彻良好架构的思想。如果不清楚后续迭代开发的方向,我觉得也很难设计出良好的架构。

测试理解与实践的演进

测试的确是程序编写的很重要的部分。然而,如果真的要深入对程序测试进行开发,那这所需要的精力与时间也绝对比花在原程序上的少。四个单元oo作业的练习中,我只对最简单的第三单元进行了较为充分的测试数据的构造,在结果的检验上也依赖于程序对拍。而在第一单元与第二单元中,自己能够写完程序就已经有些吃力了,而我也没有学习过python语言,因此之后就只能做一些粗糙简单的测试。第四单元贯穿考期,我也没有投入精力在本地测试上。总体来说是比较遗憾的。

课程收获

1.对Java语言的掌握有了很大的进步,能够大致正确地使用各种数据结构,在避免死锁的基础上实现简单的多线程等等;
2.自学能力有了较大提升,能够主动与同学交流,自行寻找相关资料,并借助这些信息学习掌握新的知识;
3.赶ddl能力获得了提升。之前有老师总结说oo课程可以治疗拖延症,我觉得这是不正确的。我有好几次作业都是在最后一天完成并通过弱测与中测,最晚的一次提交作业距离ddl只有三分钟。不过赶ddl写出的作业质量确实会有一定的下降,好孩子不要学我。

三个具体改进建议

1.单元作业难度分布上不合理,应当适当调整。学这门课的学生很多没有接触过Java语言,仅仅经过Pre单元的学习是远远不够的。事实上,第一、二单元的学习相当痛苦,而第三单元的学习反而轻松许多。而实际上如果能将更为基础的第三单元提前,能极大地上缓解第一单元学习的压力。
2.希望可以给出更为详细的学习资料供参考。第一单元中,受到Pre单元正则表达式的影响,包括我在内的很多同学都是直接使用正则来做的。然而,这一方法无法应对第二、第三次作业。我也是通过讨论区和微信群才了解到递归下降与表达式树的概念,而这在指导书中却完全没有提及(作业中甚至还有“关于输入字符串的处理,推荐使用正则表达式”的表述,造成一定误导,而这句话在正则无法处理的第二次作业指导书中也有出现)。UML语言仅仅依靠教学的PPT也很不很足够,而网络上所给资料错综复杂,很多都只关注对UML图的分析,对我们作业的输入的形式却少有提及。当然,鼓励同学自己查找资料进行自学的思想是好的,我只是更希望我们的学习能够更有效率。推荐一些查找资料的网站或者方法也是好的。
3.第四单元指导书内容可以更为详细些。第四单元中有些内容的表述理解上会有些困难,希望可以给出一些简单的举例(比如R001中“关联对端所连接的UMLAssociationEnd”不是很好理解)。

posted @ 2021-06-26 19:52  Synotp  阅读(58)  评论(0)    收藏  举报