OO第四单元&本学期总结
作者:互联网
第四单元架构设计
第一次作业
主要功能是实现类图的相关操作。首先新建了一个类SortContainer来对输入的数据进行整理,包括:将不同的元素区分开并分别储存、一步步搭建类图的结构。新建了类MyCLass、MyOperation,建立多个列表来存储相关信息。
第二次作业
主要功能是实现状态图和时序图的相关操作,相当于在第一次作业基础上增加了两个新的模块。对数据的整理和模块的搭建仍然在类SortContainer中进行。也新建了MyInteraction和MyStateMachine类来分别管理两个模块。
由于查询方法中涉及状态图的后续可达结点,需要进行图的遍历,又新建了StateNode类专门进行图的相关操作,它储存了当前结点信息和临接结点。
第三次作业
主要功能是实现对UML图的检查,加深对UML图的理解。我选择了在图构建完之后统一检查。其中R001、R005-R008实现比较简单,只需要准确理解规则。R002我采用了对每个结点,判断其是否构成环的算法,非常简单粗暴。R003、R004主要则是采用了bfs算法遍历图的邻接节点,判断是否有重复的。
四个单元中架构设计及OO方法理解的演进
第一单元:第一单元的内容是多项式求导。这单元主要是对OO方法的初步理解和对架构设计的摸索。架构方面,前几次作业都没有考虑架构的可扩展性,实现较为简单,还是保留着面向过程那种一main到底的思想,导致每次作业都需要重构。而第三次作业是最有挑战性的,也是让我对面向对象理解有了深层认识:把不同的项、运算法则变成一个个类,使用接口统一管理各个对象,运用多态的思想来统一调用求导方法等等。而如果用面向过程思想来考虑这个问题,则会变得复杂很多。
第二单元:电梯问题主要是对多线程编程的学习。在这单元中,我着重学习了多线程的相关原理、线程同步与线程安全,以及不同种类的锁的应用。同时也学习了许多与多线程相关的模型,例如生产者消费者模型,将其应用到自己的作业和架构设计中。
第三单元:JML规格的理解。这单元的作业第一次给出了接口,自己没有认真思考架构设计,只是将几个方法根据架构补充完整。而后续出现了CPU超时等问题,采用了缓存法来加快效率。这单元主要是对图这个结构以及其中的算法有了一定的了解,同时认识到算法复杂度、空间换时间的意义。
第四单元:UML图的解析。在架构设计上,将数据整理为多个图进行分析,几次作业并没有太多的重构,对UML图的结构有了深入的认识,不只停留在表面。
四个单元中测试理解与实践的演进
第一单元:第一单元的测试样例不容易自动构造,所以主要采用手动构造测试样例的方法。不仅需要考虑一般的情况,更要对一些边界情况进行详细的测试,同时前一次的测试样例也可以用来进行下一次作业的测试。但如果设计者和测试者是同一个人,可能会陷入思维定式,无法找到一些忽略的边界情况,使得漏洞暴露在互测中。
第二单元:由于测试样例比较容易构造,采用了自动测试的方法,用python
完成了测试数据的生成、传入、读取结果、检验结果等一系列操作。这也让我看到了自动测试的强大。
第三单元:主要使用Junit
进行单元测试。单元测试相比于前者,确实简单方便了很多,而且是针对特定的方法进行测试,更加有针对性,容易DEBUG。但是也要注意测试的覆盖率。同时没有考虑对运行时间的测试,导致几个方法复杂度过高,超时。
第四单元:自行构造测试样例,画图测试,主要对图的一些复杂情况进行测试。
课程收获
- JAVA和IDEA入门了。
- 面向对象,会造类和对象了。
- 会简单的多线程设计了。
- 会画UML图了。
- 开始设计程序前必须考虑架构设计和可扩展性。
- 会无形之中使用各种设计方法了。
课程改进建议
- 对于许多刚刚接触面向对象思想的同学来说,第一单元的难度是最大的,也需要反复的重构。诚然,一次次重构让我们意识到架构的重要性,但我认为对架构的一点提示,对同学来说还是帮助很大的。
- 研讨课参与程度不高,可能对我来说几篇技术博客会起到更好的效果。
- 第三单元学习了JML,但是网络上关于JML的工具使用真的令人费解。(未来应该不会用了吧)
特别的线上学习
对OO这门课来说,我觉得线上的教学并没有对我的学习造成多大的影响。课程方面,上课录播可以提前观看,可以倍速观看,可以反复观看,每个人都有自己的配方,以适应自己的学习节奏。而最重要的课程作业,本来就是课下独立完成的,唯一的缺点就是和同学讨论时比较麻烦。
总的来说,这学期的OO让我收获颇多,也让我在家里的学习更加充实而有挑战。
标签:OO,架构设计,样例,作业,测试,本学期,单元 来源: https://www.cnblogs.com/shonnyx/p/13138081.html