本单元三次作业的架构设计
第十三次作业
在这次作业,实现一个UML类图的解析。作业中对UmlClass、UmlInterface、UmlOperation和UmlAssociation进行了重新封装,根据需要实现的查询功能实现了一些新的方法。
在MyUmlInteraction类中需要进行查询时只需要在对应的类中调用相应的方法即可,新建了对应的类,如MyClass , MyInterface,MyAttribute,MyOperation来预处理相关信息,在读入数据完成之后,MyUmlInteraction预处理各种查询。
本次作业中,提升性能的关键在于进行缓存。可以进行缓存的情景除了将刚完成的查询结果进行保存以外,在进行DFS回溯的过程中实际上同时获得了整条继承链上的所有类/接口的同种信息,这些信息同样可以进行缓存。
第十四次作业
本次作业需要完成一个UML类图、顺序图和状态图的解析器,有三个类,分别处理类图,顺序图与状态图。主要查询和处理方式与第一次作业相似。
但在本次作业我实现的时候出现问题在UML顺序图和状态图的处理,于是出现错误。
第十五次作业
本次作业与第十四次作业类似,但需要进行合法且Java可复现的图的指令解析外,还需要对不符合有效性检查的图在刚完成创建时报错。
在本次作业中个人出现的BUG是在判断错误的时候,有些错误类型没有正确的实现。
四个单元中的架构设计及OO方法理解的演进
第一单元:
第一单元应该是相对来说比较复杂的单元,由于刚开始对Java的编程不太熟练,对Java的正则表达式没有不足的知识,导致有很多多问题。
第一单元基本上是训练我们熟悉OO编程风格,第一单元主要是实现了表达式求导。
次作业中的不足如下:
- 对Java语言特性不够了解
- 对抽象层次存在疑惑
第二单元:
这单元主要实现多线程,主要运用了生成者消费者模式,并且理解了多线程的编程思维和线程安全与死锁相关知识。
次作业中的不足如下:
- 对于多线程的背后运行机制尚不明晰
- 没有很好地符合开闭原则
- 对类锁的理解不够,导致实现的时候多线程的时候不够完善,出现好多BUG
第三单元:
这单元是JML的熟悉和使用,学习并且使用JML进行开发。比较难的部分是实现算法和分析文档中的JML规格
本次作业中的不足如下:
- 没有对明显具有继承关系的类使用继承
- 对JML规格的分析能力不够
第四单元:
这单元是UML的学习,UML图可以可以对程序进行抽象化和可视化的工具。本单元实际上是通过对UML图的建模与分析对面向对象语言的整体结构、状态变化和时序关系有一个更高层次的认识,从而对程序中的静态关联和动态转移有理论上的把握。UML实际上是设计步骤中需要使用的工具,是很高层的抽象模型。
本次作业中的不足如下:
- 对UML图的操作实现还不够完善,导致作业出很多错误
四个单元中测试理解与实践演进
因为个人的能力限制,我的测试主要是用手动提交测试样例进行的,在这一段花了时间非常多,从第三单元学会了使用JUnit对程序进行单元测试。
课程收获
经过OO课程的学习,我的编程能力有了提高,代码风格也变得更好了,而且有了代码风格的知识,对面向对象的理解也更深,同时也掌握了一些测试的工具和方法以及常用的开发方式和架构。
通过每两周的研讨课和课程的实验,我从同学们的演讲获得了很丰富的知识。然后个人对Java语言现在比较熟悉了,虽然对实现复杂的Program还需要花一点时间。
改进建议
对OO的改进建议:
- 希望会减压,因为对我来说OO比较难的一门课
- 实验课可以公布答案和解决方法
- 可以继续优秀代码展示,于是会提高了同学们的代码质量·
OO线上的体会
对我来说OO线上和线下都没有区别,因为作业都是在线上的。区别可能是如果线下的时候我个人比较方便和老师或助教联系问问题,然后能够很清晰和老师或助教讨论。
由于我是来自印尼的留学生,因为疫情情况我无法回到国内,我个人存在的问题是在网速的问题,有时候要访问OO的网站时非常慢,然后有时候也完全不能够访OO及国内网站,为了解决这问题我个人还需要靠VPN上国内网站:(,
这对我来说是比较惨的情况,虽然不能与老师同学面对面交流,但是线上课程可以随时观看我觉得这是线上上课的一个优点,缺点时个人也觉得线上课程也不是完全方便的,因为我们还是靠网速来上课。
谢谢各位老师和助教这学期的指导,辛苦老师们和助教。
,新建了对应的类,如MyClass , MyInterface来预处理相关信息,在读入数据完成之后,dfs预处理各种查询。