架构分析
第十三次作业
UML类图
第十三次作业是实现一个UML类图解析器,分析UML类图中的元素然后查询。
在学习了适配器模式后,我自己实现了MyClass、MyInterface、MyOperation类,它们中存储着各自的数据便于查询。
在myUmlInteraction中,我使用两组HashMap来存储这些MyClass、MyInterface等,一组HashMap使用Name来作为键值,便于通过名字查询,一组HashMap使用id作为键值,便于通过id来进行查询。
第十四次作业
UML类图
第十四次作业在第十三次作业的基础上增加了对状态图和顺序图的查询。
这次作业总体实现起来不是很难,我使用了继承的方法来实现,MyUMLGeneralInteraction类继承了上次作业的MyUmlInteraction类,同时实现了UMLGeneralInteraction接口。这样,对类图的解析就在父类MyUmlInteraction全部完成了,子类MyUMLGeneralInteraction只需要解析关于状态图和顺序图的部分。
这次同样是自己实现了MyStateMachine类和MyInteraction类来存储关于状态图和顺序图的数据。
第十五次作业
UML类图
第十五次作业增加了对数据的有效性检查。
这次作业相比于上次作业架构基本没变,没有增加新的类或减少类,只在类中增改一些数据或方法。
大部分的有效性检查都是比较简单直接的,关于循环继承或实现相同接口这种要求,都只需要遍历一遍即可。
四个单元架构设计和方法演进
第一单元-面向对象基础与多项式求导
第一单元算是面向对象的基础了,当时我对于java还是什么都不懂的状态,包括一些基本的继承和实现接口、正则表达式等,都是现学的。当时我面向对象的思想还不够深刻,遇到问题总想着用面向过程的思想解决,当时可能我并没有意识到。最后第一单元算是平稳度过。
第二单元-多线程与电梯
第二单元又开启了新的篇章-多线程,这是我第一次接触这个概念。在阅读了若干个总结和教程后,我开始实现我自己的电梯了,虽然很烂,基本没有做任何优化,但还是平稳地度过了这个单元。当时最让我头疼的是多线程的若干个“神头鬼脸”的bug,有时候能出,有时候不能出。从此我的多线程思想和线程安全思想就很深刻了。
第三单元-JML与社交系统
第三单元就是关于规格的单元,于我而言,这单元的作业是真的想对来说比较友好了,当然这并不是重点。这个单元的三次作业基本都是在阅读JML然后实现相关图论的算法,这可能是我真正掌握并自己实现了数据结构课上的一系列图论算法。JML让我接触了规格这样一个概念,后面我在写代码的时候就在想,这些写法到底需不需要一个标准,虽然不同的写法结果一样,但是如果不同的地方有着不同的写法,就很有可能会引发问题。
第四单元-UML与UML图解析
第四单元就是解析UML图了,我第一次接触UML图就是在写单元总结时,学长们的架构部分都有UML类图。和前两个单元一样,我们一样使用了课程组提供的包,从已有代码中获取信息非常重要。这个单元的作业不是很难,照猫画虎就写完了,我还获得了有生以来第一次强测满分。
测试理解与实践演进
说来惭愧,这么多次互测,我只有一次互测成功hack到了别人。
关于测试,一开始我是自己手动构造一些简单数据来测试的,后来发现这样不能覆盖很多情况。然后我开始使用自动构造的大数据,甚至是使用评测机来测试。
后来开始接触JUnit,这是课程组推荐的评测方法,我觉得这应该是一个非常好的自动测试工具,但是我没有特别多地使用它来自动测试。
课程收获
经过这么一学期的面向对象课程,我可以说已经算是学会了一门新的语言java,它相比于之前学的c语言可以说是非常方便了。
我还真正地学到了面向对象思想,在以前我可能只会用一个过程化的思想解决问题,可是现在不同了,我有了一个新的思路。
我的编程能力可以说是得到了质的提高,在之前,一下子就写上千行代码我是想都不敢想的,而现在我觉得我可能有这个能力了。
课程的四个单元都有它们的重点,在这里面我学习到了多线程思想,学习到了规格,学习到了同一建模语言。
建议
-
指导书关于样例更详尽一点,信息给的多一点,不要给人一种看完了还是一头雾水的感觉,而还要去讨论区,比如第十五次作业的AssociationEnd和Attribute同名的检查。
-
实验课能否给出每一次的成绩,不然自己每次干了啥都不知道,这对于在乎成绩的人就很重要。
-
建立一个微信通知群仅仅发布通知,不可能每个人每时每刻都守着OO课程网站的。
线上学习体会
其实说实话,开始我对于OO是很抵触的,尤其是有些人怎么怎么说OO多么难,要熬多久的夜,我就越抵触。
寒假那段时间,我开始是一无所知的,为了提交作业我开始学习git,为了写上代码我开始下载idea,为了正式上课不为太难受我开始写pre作业,我开始发现,面向对象也不过如此。
线上学习可以说是疫情形势下的一个最好的解决办法,我可以去线上观看课程,如果看到了不懂的地方可以回放,如果看到了比较清楚的地方可以稍微放快速度,非常方便。
其他的内容,比如作业、实验这些方面,我认为是跟线下学习没有区别的,实验课时间变长了,这可能是一个好消息。
总的来说,我认为线上学习是非常好的,但是这是目前形势的唯一选择,如果可以给我选择的机会,那我宁愿这次课的形式不会是线上的,我宁愿没有这次疫情,去学校“线下”上课。