本单元作业的架构设计
上图为本单元第三次作业的UML类图(鉴于每一次作业是在上一次基础上扩充,在此不再赘述,直接描述最后一次作业的架构)。
我在MyUmlGeneralInteraction构造方法里分别调用new MyUmlCollaborationInteraction(elements)
、new MyUmlStateChartInteraction(elements)
、new MyUmlClassModelInteraction(elements)
。在自己的类图、时序图、状态图类中又分别对elements分层扫描,各自建图。最初接到需求的时候走入了一个误区,觉得应该在建图时预处理出比较多的信息,但后来发现实无必要(比较难写容易出错)。我觉得正确保存基本信息再在处理询问时即时查询是一个在实现容易度和时间复杂度上比较折中的方法。第三次作业中出现的UmlStandardPreCheck中的方法,我将它们分散在了类图、时序图、状态图类中,这样比较方便在建图时得到一些信息。MyUmlGeneralInteraction继承UmlGeneralInteraction接口,其中的方法我是直接调用我的类图、时序图、状态图类中同名方法来实现的。值得一提的是在接口dfs的时候一度忘记记忆化了,这个样子不太行…
类图这边,我用Node代表接口或类,Operation代表方法。
状态图中,State表示状态,Machine表示状态机。
与时序图有关联的是Interaction类,其中存储了与lifeline和message相关的信息。
总结自己在四个单元中架构设计及OO方法理解、测试理解与实践的演进
-
人生若只如初见,那个时候好单纯:表达式求导,这是从面向过程向面向对象转变的过程。第一次的作业写得很面向过程,可扩展性也比较差,于是迎来了后面的重构。第三次作业因为
sin(x**2)
翻车了,于是快乐地写了测评机投身互测。 -
电梯单元是我做得比较认真完成得比较可以的一个单元,这个我每次都有写测评机(而且还硬是用Linux下的expect、spawn完成的,没想到后来与spawn又在os中相遇了),强制在线非常有趣。我觉得多线程是我在四个单元里面学到的最具吸引力和革命性的知识,就意义而言比较鲜明,是那种“如果世界上只能保留一个OO课程单元”我会选择的单元。
-
到了JML单元人已有些疲惫T . T,JML单元比较可怕的是容易折腰在读规格上。本单元的架构基本上是官方给出的样子,不再赘述。关于测试,很多同学可能是从本单元开始使用JUnit的(我也)。不过JUnit的缺点是如果阅读理解错了那测试也是错的,特定效果不如黑箱对拍来得好。
-
UML单元比较困难的时刻是最初拿到需求的时候,有点一筹莫展(主要是因为之前对UML本身的理解不怎么样((不太深入)。但随着每一次作业的完成理解都有在增进。架构设计如前文所示,而测试是我利用starUML手造一些样例通过官方包导出完成的(官方包很贴心了)。
课程收获
-
最大的收获应该是课程名【面向对象】。此前接触的都是一些面向过程的语言,自通过假期作业上手JAVA之后又走过了很长很长(一学期)的小路,感觉“都已经是陈年往事了”。
-
此外我感觉IDEA写JAVA代码的体验很好,CheckStyle维持出的良好代码风格和我以前写过的代码是很不一样的(尤其是在算法题代码风格的毒害下)。这样的代码会给其他的合作伙伴等带来良好的可读性和维护性。
-
除编程思想的变革之外,本学期OO也有给我们传授新的知识点,比如多线程、多种经典设计模式、UML、JML、JUnit等等。
立足于自己的体会提具体改进建议
比较众望所归的一点:
- 实验如果可以看到测评结果会比较合理。
以下体验比较私人,可能不反应共性问题,可以反对,仅供参考:
-
后两次作业我发现比较好的测试方法好像的确是和同学对拍,比所有更形式化的测试手段都有效,
那社恐的、缺少学习伙伴的、习惯自闭x独自完成作业的同学怎么办1551(可能其实不太有这种同学x)。后来发现其实还可以下载往年代码和自己对拍…但对拍这个测试方式本身有一点点无聊(小声)。于是引出下一条。 -
虽然不知道最终的算分规则,但我理想中的情境应该是计算过程中bug修复可以稍微大一些程度上地填补强测分数。个人认知里这样可能可以降低一部分内卷的压力,作业完成会变得更以知识学习为导向而减少在某些方向上锱铢必较(虽然也是一种精益求精)的必要。这条虽然看起来是利益相关但是是发自内心的
-
last也是least(不是什么重要的意见的意思),有一次作业我因为忘记ddl彻底没有提交(捂脸对不起听起来很离谱)。然后我发现没有过公测也是不可以在bug修复处提交的。
我想:啊?为什么?我觉得那什么就算是没有过公测的同学也应该有春天啊?之后还有好几次在此基础上扩展的作业呢,给没过的孩子一个提交的地方吧(流泪)
线上学习oo课程的体会
由于疫情限制,本学期的课程大多是以线上授课完成的,失去了面对面的机会容易有一些缺憾但也是一种独特体验。不过我觉得就OO这个课程本身的特质来说…它是一门非常适合线上授课的课程。我认为OO线上学习的效果基本上是不输线下的…录播视频创造了重点回顾的可能,还有雨露均沾的课堂提问,不在线测评网站活波可爱、用户友好,每年都在改进的游戏规则也能从中看出课程组提供高质量课程的心愿。
嗯嗯总之感谢有在努力为大家创造良好学习体验的OO课程组!!!完结撒花