第四单元作业
整个第四单元总的来说就像是设计一个UML的相关查询系统,对于这类的查询需求,在最开始的想法就是先将UML中的所有Element都先分类好,进行存储,以空间换时间,在这次作业的设计中也是基于这种方式实现的。
第一次作业
第一次作业也是我认为在这一单元中最难的一步,首先需要理解很多关于UML的概念,理解相关属性之间的联系,对于需要实现的查询指令得先自己摸清楚怎么去查询,进一步去实现代码。由于以上原因在第一天完成作业的时候并不顺利,效率也比较低。其中设计到的比较多的一个操作就是找父类以及找到顶级父类,这也是本次作业中算法设计的一个关键点。
UML结构图如下:
对于第二和第三次作业没有完成,因为同期有毕设论文以及答辩的工作,没有时间去完成这两次作业。
四个单元中架构设计及OO方法理解的演进
第一单元
这一单元的作业针对多项式求导,主要是训练面向对象思想,对Java面向对象设计有一个总体性的认识。这一单元面临的最大问题就是重构,三次作业三次的代码架构都不相同,最终选择的是将项、求导法则等分别用类来管理。这一单元可能是最难的一单元了,特别是第三次作业,应该是12次代码作业以来最难的一次。
第二单元
第二单元电梯系列作业主要训练多线程编程以及线程安全相关。在这一单元的架构设计上就好了很多,输入队列一个线程,电梯一个线程,两个线程之间的通信用调度器来管理。这是一个总体的架构,在第二、第三次作业中有多电梯的情况也是以这种方式来管理,不同的是在输入线程中检测到电梯相关的指令,用一个电梯工厂来实现相关的操作。
第三单元
第三单元是jml规格相关,这一单元给我的最大的一个教训就是要细心一点。第一个作业中少了一个'!='中的'!'导致强测崩盘。例外就是不能仅仅局限与jml所给的代码逻辑,完全照搬jml的代码实现步骤,即使没有安全问题也会有性能等各方面的问题。
第四单元
在这一单元中我只完成了一次作业,但就设计来看,从最初就明白了要用什么样的架构以及能较全面的把握住代码执行过程中要用到的信息,应该算是多次作业训练以来的一个不错的提升。
四个单元中测试理解与实践的演进
在全部的面向对象作业的完成过程中,测试一直是一个非常重要的问题,只有通过充分的测试才能证明自己的程序没有问题。然而,在自己测试程序的过程中,往往只关注到了比较简单的功能正确性方面的检查以及边界数据,在测试数据构造上还不够好,数据测试效率不高。测试本身就是一门学问,如何做好测试也是在今后的生涯中都要学习的。
课程收获
第一点,可能也是大多数同学的收获,比较熟练的掌握了一门语言Java。在这之前其实并没有Java相关的教学的,其实用多了Java之后,写C语言就觉得非常繁琐,任何东西都得自己去实现。当然了,能够掌握Java首先还是得要C语言基础的。在Java的这一特点下,往往能关注到怎么去更好的实现需求,而不是去构造结构体、链表等结构。
第二点,面向对象思想形成。主要来说我们要重点关注的是对象之间的联系,而不是之间的过程。将联系弄清楚,对象之间的通信关系等弄明白,实现代码就并不是一件非常难的事情了。
课程建议
- 实验课的改进。不知道为什么每次实验课结束之后要把题目隐藏掉,而且也不公布答案,好像历年来都是这样的,到最后也不知道自己的答案正确与否。
- 是不是需要最开始的时候安排一到两周的时间给学生安排一下Java的学习。作为本课程所使用的语言,提前让学生有一定的掌握我觉得还是非常重要的。
- 对于JML和UML单元来说,没有针对一个具体的系统,学起来确实有些枯燥。
线上学习体会
可能线上学习对我们专业来说不是一个大问题,反正也都是基本靠自学。但是可能存在的就是一个氛围问题,学习氛围以及讨论氛围,虽然说都是成年人了,在家里学习总会有管不住自己想要偷懒的时候。