第四单元总结

第四单元总结

一、第四单元的架构设计

1、第一次作业

  第一次作业的内容是解析UML类图相关内容。在给出的源码中,有UmlXXX这样的类,但是为了方便自己操作,我使用了自己设计的MyXXX来存储解析后的类、接口等。例如MyClass类中除了包含基本的信息,还包含它的深度、子类、实现的接口、属性耦合度等。

   

  为了提高查找速度,我使用了边读取边解析的方法,保证大部分查询指令的复杂度为O(1)。由于元素输入的顺序不定,因此我采用多轮读取的方式,保证一个元素在读取的时候,它的parentId所对应的元素已被储存过。

 

2、第二次作业

  本次作业加入了顺序图和状态图。由于元素多了很多,我加了一个MyElement类(类似UmlElement),其他元素都继承了这个类,这样就不用每个类都写id、name的getter和setter。

 

 

   具体实现思路和类图比较类似,都是在读取时不断维护,当读取完最后一个元素时,整个查询系统的构建就已经完成。

 

3、第三次作业

  第三次作业是格式检查。我用单例模式创建了一个错误记录类,在读入元素的时候检测到错误就在这个类里进行操作,而不能在读入时检测出的错误,我在读入结束之后又使用专门的方法去检查。在check时只需要从错误记录类中找到对应的数据即可。

  此外,由于内容的增加,我的MyImplementation类已经到了600多行,于是我将读数据的部分移到了新的MyRead类之中,保证符合格式要求,也让结构看起来更加清晰。

 

 

二、总结自己在四个单元中架构设计思维及OO方法理解的演进

1、第一单元

  这个单元主要目标是Java语法的入门和面向对象思想的初步了解。

  在这个单元的任务是对表达式进行去括号。虽然寒假预习了一些,但是在完成的时候还是感觉比较困难,第一次作业到截止时间前几个小时才完成。在架构上,我采用了训练所给出的递归下降的方法,事实证明这种架构具有较强的可扩展性,我在整个单元的作业中都没有进行过重构。

  在写完三次作业和总结博客之后,我对面向对象的封装、继承等特性有了更深刻的理解;对Java中类、接口、属性、方法、对象等概念有了一定的认识。

2、第二单元

  这个单元的主要目标是通过模拟电梯来理解多线程。

  相比于第一单元,多线程编程中不仅要考虑之前的问题,同时也要考虑线程安全问题。在开始这个单元的工作之前,我花了比较多的时间去了解什么是多线程,java中多线程的实现等。在第一次作业中,需要重点考虑的是策略,就是如何实现捎带。第二次作业由于每一座/层有多个电梯,因此需要加入调度器进行调度。第三次作业中加入了换乘和横向进出限制,需要再对电梯和调度器进行修改。

  在这个单元的学习过程中,我一开始没有搞得很明白,在很多地方都加synchronized和notifyAll,直到有一次我的电梯出现了不断阻塞又唤醒的行为,消耗了大量时间,于是我又去仔细学了一遍,弄懂了其中的原理。

3、第三单元

  这个单元的内容是JML。在团队合作中,编程通常需要一定的规格,才能让所有人的工作能组合到一起。这个单元的实验只要根据给出的JML文档来编程就可以,因此比较简单,但是需要注意的是JML描述的仅仅是规范,直接照抄上面的写法可能会导致性能比较差。在一个项目的开发过程中,设计的是非常重要的,因此需要掌握好这个规范,之后实际工作中会大有用处。

4、第四单元

  这个单元的主要内容是UML图。UML图表示了整体的结构和各种元素之间的关系。之前在写单元总结的时候,画过UML类图和顺序图,当时不太了解,现在回过头看有很多画错的地方。这个单元的学习让我对系统模型有了更清楚的认识。

 

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

  测试是面向对象作业中及其重要的一部分,从手动构造数据到自动评测,我学到了很多。

  在第一单元中,生成数据比较简单,只需要生成前后括号能够匹配的表达式就可以。而验证正确性方面,可以通过python里的sympy库来实现。

  在第二单元中,自动化评测比较困难,就偷了点懒(借了点数据),查出了一些错误。

  在第三单元中,自动化评测相对容易,使用python编写程序输出指令,并和其他同学的程序进行对拍,查出了很多低级错误。

  第四单元测试也可以采用数据生成器和对拍来实现。

 

四、总结自己的课程收获

  第一,我学会了面向对象的编程思想,理解了封装、多态、继承的思想,在编写程序的时候能够把功能分到不同的类中去实现。

  第二,我明白了设计永远是第一位的。在之前,我拿到题目就开始写;但对于比较复杂的需求来说,一上来就写可能导致后面出现比较大的问题,需要重构。因此,先要设计出比较好的架构,这样不仅写起来会更快,可扩展性也会更好。

  第三,学会了Java的语法。

  第四,学会了测试的各种方法。

  第五,十几次作业下来我养成了比较好的代码风格。

 

五、提三个具体的改进建议

  1、在实验课方面,希望在结束后能有一个反馈,不然不知道自己做得是否正确。

  2、在理论课,可以稍微考察一下上课讲述的知识点。

  3、在课下作业方面,可以稍微调整下弱测的强度。虽然完成作业必然需要自己做测试,但我感觉有几次弱测中数据有点弱,几乎没有作用。

posted @ 2022-06-28 19:55  jht0725  阅读(14)  评论(0编辑  收藏  举报