OO:第四单元总结博客 & 课程总结
1、总结本单元作业的架构设计
- 第一次作业类图如下:
![]()
- 第二次作业类图如下:
![]()
- 第三次作业类图如下:
![]()
- 总的来说,对架构的设计不是很满意,并没有想到太好的设计方法,后两次作业的最大的类均超过了500行,非常庞大与臃肿,尽管可以把比较大的类拆分为较小的类,但并没有什么想法,本设计并不值得借鉴,只是可以作为反面例子来说明不合理架构的臃肿性。
- 官方包中有许多UmlElement可以直接用,因此理论上每一个My开头的Myxxx类都可以直接从官方包中的类中取用,典型的例子是MyTransition类,因此如果按照这一思路进行优化,还有很大的改善空间,
2、总结自己在四个单元中架构设计及OO方法理解的演进
- 第一单元架构设计我认为是最优的,但前提是大量研读了往届学长学姐的博客,权衡利弊后严谨地考量采用了我认为最美妙的方案。至于设计模式,好像是用到了工厂模式,在处理输入的部分,但也不知道用的对不对,感觉也没简化太多步骤。我还观察到许多博客都声称第一单元引领了其从面向过程到面向对象思维模式的转变,但我并无类似体会。
- 第二单元采用的是“生产者-消费者”模式,主要是处理多线程的问题,架构上似乎也不是自己设计的,就是照着课上实验的架构改出来的。因此理论上也没有对OO的理解有某种程度的加深,尽管也有尝试采用状态模式与策略模式,但最后都因为觉得实现起来太过复杂而放弃了,主要的代码或是逻辑都是堆在一个类或者一个方法中,不是很优雅。
- 第三单元更是基本不需要自己架构,只需要会照着JML框架翻译即可,可自由发挥的地方大概就是选择什么样的容器,用哪些辅助函数与降低复杂度的小技巧等,感觉这一单元因为限制的过于深入反而没有起到练习自主架构设计的面向对象作用。
- 第四单元也参考了往届博客,但主体部分是按照自己最自然的想法做的,可能因为没有深入地理解官方包中各个已有的UmlElement相关的类,因此设计的极其粗劣,感觉相比于第一单元的设计还不如,对OO的理解也许更深入了一些吧。
3、总结自己在四个单元中测试理解与实践的演进
- 第一单元主要是手动测试,编一些边界性数据来进行调试与比对,效率与可靠性、准确性一般;
- 第二单元仍是类似,主要的测试方向是在性能上,对一些极端数据测试是否有TLE的情况,不过由于判断是否有重复进出、重复乘坐等情况较麻烦,因此大多测出的问题集中在电梯运行机制上的问题,例如在楼层间往复波动等;
- 第三单元仍沿用之前的边界数据的思想,由于数据量较大,且大多数的边界数据往往与性能有关,条数极多,因此初步尝试了用Python来生成随机数据,不过远远达不到自动评测机的水准;
- 第四单元由于理解题意非常困难,认为即使构造出数据也难以判断究竟哪一种理解才是正确结果,是否满足题目要求,因此仅简单尝试了样例中给出的mdj数据,到这一单元完成也;
4、总结自己的课程收获
- 总的来说,学习了许多架构设计的思想,深入了解并体验了Java的各种语法与小工具的使用,增强了代码规范性与code&debug的能力,包括随着几个单元主要内容的展开而对一些如正则表达式、多线程、JML规格、UML图的了解。
5、立足于自己的体会给课程提三个具体改进建议
- 第三单元与第四单元或许是并不成熟的原因,许多地方亟需改进。第三单元看似为JML的单元,但仅有第一次作业算是对JML内容的学习,后续的几次作业中事实上并未学习到任何新的JML内容,而是极为费解地阅读助教们更为费解地写出的JML语言格式;另外JML手册作为一个非常重要的理解JML语言含义的指导性材料,应当放在更为醒目的位置以便查阅,包括本单元强调与推荐使用的JUnit,因其重要性也希望能够给予一些简单的使用上的指导,甚至推广为一次课上实验的内容;此外,本单元实际上还大篇幅地考察了图论相关算法,并对性能做出非常高的要求,如果可行的话,希望在以后的课程中能够重点标注或者强调性能的高要求,在设计阶段就规避一些高复杂度的设计;最后则是指导书与官方包源代码中存在太多的bug,甚至于在作业开始时还不断地修改、更新、发布通知,如果能够在作业开始前就仔细地审阅与检查会更好。
- 第四单元是体验极差的一个单元。作为本单元核心的UML语法,并没有给出任何类似第三单元JML手册一样可供参考的说明,诸如UmlClass、UmlAttribute、UmlGeneralization等基本的UML元素,我理想中的表达清晰的描述是,列一个表格清晰地展示说明这些内容分别对应的是类图中的哪一个部分,其id、name、parent id、source、target等分别对应什么内容,有什么含义,而事实上课程组完全略过了这一部分内容,只描述了需要完成函数的功能与原始数据,中间的部分则完全需要以来自己推断与臆测?极易产生理解上的歧义(例如许多元素的parent id并不是其“所在父类”的含义),这无疑是令人费解的。另一处更令人摸不着头脑的是很多函数对其功能描述上的含混,由于本次涉及实现的函数功能的复杂性与诸多限制的差异,恰恰需要最严谨的语言、详细的描述、鲜明的例证来避免功能实现上产生歧义。第四单元第一次作业中的描述还较为严谨,这一点从讨论区的异议反馈数量中可以看出来,但之后两次的描述实在是不可直视,许多极为重要的函数缺少详细阐述,感觉是一种是潦草急就的痕迹,包括官方包的校订同样是重灾区,希望有所先验的校对与审订。
- 最后一点则是第四单元最后一次博客作业的设置不够合理,是否可以考虑缩减一次作业,或是延长最后一次作业的提交时间,尽量避免冒天下之大不韪在考期布置作业。




浙公网安备 33010602011771号