四单元总结&OO总结
本单元架构总结
第一次作业
第一次作业按照UML正常的结构来组织,把某些UML中非底层类提取出来构建方法,采用逐层关联的方式实现内部的层次关系,同时考虑将来的需求,把一些没有用到的类也提取出来。
第二次作业
和第一次作业差别不大,任然是逐层关联的方式,每两层间不可见。区别是这次加了一个ElementData的分发器,把不同属性分发到类图 ,状态图,顺序图中。
第三次作业
和前两次大同小异,加入了异常处理模块。
架构设计总结
第一单元
第一单元可以说OO实验中最难的一个单元,难点主要在于WF的判断和字符串的解析上,在本单元中
我前两次作业都是直接采用map的方式,第三次作业为了减少重构,把第二次作业的表达式类直接重用
再加入了加减嵌套等类,结果由于表达式类覆盖范围太广给解析字符串造成了很大的麻烦。
第二单元
第二单元我认为是写得比较轻松的一个单元,本单元我一开始就提取到了调度器,电梯,还有输入的三个类,后面按照这个顺序写下去,不过第三单元由于分派策略出现问题,我采用的是最短距离的固定策略划分任务,没有考虑到多次换乘可能会带来的巨大开销,导致丢失了很多性能分。
第三单元
第三单元也是比较轻松的一个单元,这个单元基本架构jml都提供了,除了最后封装了一个算法类之外架构没有什么特别值得说的,但是这个单元给我最大的教训就是要做好充分的测试,不能依赖评测及。这单元由于测试不充分拿了一次零分一次四十五分血亏啊
对测试演进
对于测试的演进可以说是OO最大收获之一了。本学期中有三次作业促进了我对于测试的理解,第一次是OO的第一单元的第三次作业,这次作业由于我没有自动对拍&样例生产导致自己一直在手动构造样例,效率非常低下,想在想起来当初要是能写个自动生产样例的也不至于这么狼狈。第二次是第二单元的电梯,在研讨课上看到同学们的测试代码我的充分测试给惊到了,看了看自己的垃圾数据生成器,我暗下决心下一单元一定好好测试。第三次就是第三单元的作业了,第一次没有测试手动瞎测了一下,结果强测只有45分,有一个函数写错了。第二次作业自己用Junit进行了充分的测试,结果强测0分发现自己Junit写错了,,看到零分的时候整个人都没了于是从第三次作业我写了自动化的测试+Junit最后再找同学进行了对拍。对于测试也有了更深的认识,对于如何构造边界数据,如何对拍等方式有了更加深刻的理解,同时对于TDD如何驱动开发高质量软件有了进一步认识,比如预先设置WF等方式。
课程收获
OO课程中我收获了非常。主要来自于对于代码架构设计和对于代码认识的深入理解。
通过一二单元教会了我根据根据数据流和职责来构造相应类的架构设计方式,同时开始对于软件未来需求拓展
增加了更多注意了,在设计的模式方面,明白关注点集中,封装,SOLID等设计原则。
通过三四单元的学习我对于软件的设计有了一个更加宏大的脉络,特别是第四单元的学习,给我提供了一个
全新的认识代码的视角,譬如把代码构造成一个状态转移图的方式。我以前接触的状态机,都是对于外部的响应,而状态图中的状态变化是依据代码的逻辑来构造出来的,反映的是代码的结构。这也让我对于状态机的描述能力有了更加清晰地认识。
改进建议
1.我认为第一单元可以去掉性能分的条件,因为是刚开始第一单元的时候如果强调性能分会让有些同学把关注点放到性能上,而忽视架构。
2.我认为可以再课程早期强调一下同学间合作的重要性,鼓励同学们互相交流合作搭建自动化评测的方式,不然像某些呆呆社恐同学没错,就是我可能到学期末追悔莫及。
3.关于第三单元JML建议给自己搭建形式化评测机的方式,我看到有一位助教哥哥的blog里面好像有提及,因为感觉第三单元如果只是完成任务的化照葫芦画瓢一下就行了,最多封装几个算法。
线上学习体验
-
理论课
线上学习体验不错,可以倍速,可以选择时间,很nice
-
实验课&研讨课
线上学习体验一般,没有什么氛围。
-
作业
线上学习体验一般,没有面对面交流机会,加上自己比较捞,不怎么和人交流,感觉失去很多提高的机会。