BUAA-OO第四单元总结

一、第四单元架构分析

HW13

本次作业为对类图进行解析,固将层级分为顶层的UmlInteraction,下一级的MyInterface以及MyClass,最底层的MyOperation
image

HW14

本次作业增加了对状态图、顺序图的解析,对类图的解析与上次作业相同,对状态图分析的部分的架构为顶层为MyUmlChartInteraction,第二级为MyStateMachine,第三级为MyRegion,第四级为MyTransition以及MyState。对顺序图的解析的架构顶层为MyUmlCollbarationInteraction,第二层为MyInteraction,第三层为MyLifeline
image

HW15

本次作业增加了检查部分,因此主要增加了检查类MyUmlStandardPreCheck
image

二、在四个单元中架构设计以及OO方法理解的演进

Pre部分

提到Pre部分是因为我对面向对象方法的理解主要发生在完成Pre部分的第二单元,在这一单元中书、书架等类的使用以及工厂方法的使用确实让我感受到了面向对象与面向过程的不同。但在之后四个单元的学习中我并没有感受到面向对象与面向过程的区别或是对面向对象有了更新的理解。特别是后面单元作业每次完成作业后与同学交流起来大家都是大同小异。不过后四个单元在架构设计上确实给了我很大的提高。

第一单元

第一单元主要完成表达式求导的工作。本单元第一次作业形式单一的格式以及指导书有较强的使用一个规模复杂正则表达式解析的诱导性,但就我个人体验而来不使用递归下降是很难第一单元后两次作业的,因此不得不在后面作业中重构。第一单元作业主要是让我意识到了重构的主要原因在于一个复杂的正则表达式可扩展性极差,一旦输入形式更加多样就不能实现,让我意识到了架构设计的重要性。

第二单元

第二单元电梯作业主要考察多线程。本单元是我第一次在OO课程中使用迭代开发,吸取了第一单元的教训在但电梯作业时便按照多部电梯进行设计,尽量满足高内聚、低耦合的原则,因此在本单元中并没有进行重构,多为对调度算法的改动。

第三单元

第三单元考察JML规格实现,作业为实现一社交关系模拟系统。本单元让我设计架构时更加注重效率的考虑,包括实现并查集、设计合理的存储结构等。

第四单元

第四单元考察UML图的解析,本单元设计逻辑相对清晰,基本时根据UML图结构进行设计,且最底层类官方包均已实现,主要是提高了我将几个底层类封装成一个方便使用的类的能力。

三、在四个单元中测试理解与实践的演进

第一单元

第一单元使用的方法为手动构造一些边界数据和功能测试数据,之后使用Python中求导功能与Sympy库中的函数对输出结果进行化简并输出不同之处。

第二单元

第二单元测试主要借助了评论区的定时输入数据代码进行测试,本单元主要让我意识到测试前要提前准备好较为详尽的调试信息输出,不然部分多线程中存在的bug很难复现。

第三单元

第三单元主要测试自动评测机生成的数据并与同学对拍进行覆盖测试,收获是修改代码后要记得重新进行覆盖性测试,本人在本单元第二次作业中因为修改代码后忘记重新测试,导致出现的NullPointerException没有被检测出而翻车。

第四单元

第四单元主要与第三单元评测方式相同,即跑自动生成的数据并与同学对拍。

四、总结自己的课程收获

1.架构设计与面向对象编程能力有所提升。经过四个单元的学习确实在架构设计能力上有了明显的提升,同时也习惯了使用面向对象的方法进行编程。
2.学会了简单的使用Java、Python,能够阅读JML规格以及UML图。
3.魄力得到了提升。与其小心翼翼修改着一份架构上有着致命缺陷的代(shi)码(shan),不如大刀阔斧甚至推倒重来。
4.熬夜连续学习能力有了提升:迄今为止唯一一次通宵献给OO第一单元第三次作业

五、建议

1.建议适当提供一些课程组认为可取的架构设计、方法实现的代码等,本人只大体知道一份好的代码有什么样的特质,却不曾阅读过一份官方承认的可取的代码进行学习。
2.建议多push一下寒假预习,就本人体验来看无java基础或是无较强编程能力且寒假没有进行预习的同学来说直接进行第一单元作业的书写有些过于痛苦了(不排除本人基础实在太差,超出课程组预估),或者调整单元顺序,就学习体验来看三四单元明显更加简单,或者是专门给一部分时间学习Pre部分。
3.改进F121投影设备[doge]

posted @ 2021-06-26 18:00  Gyy+  阅读(62)  评论(0编辑  收藏  举报