BUAA OO 第四单元&课程总结

BUAA OO 第四单元博客&课程总结

第四单元总结

本单元着重于理解UML模型,分析其结构,进行指令的查询和抛出异常等。在完成作业之前,要熟悉UML类图、顺序图和状态图的结构以及各种元素之间的联系才能够准确查询每一条指令,以便能够建立正确的分析UML结构的模型。

第四单元架构分析

在实现过程中,首先要建立一个记录UML类图,顺序图,状态图的图。这个图的节点包括类,接口,属性,子图包括状态图,顺序图等。通过数组和HashMap等容器实现。

本次作业之中,分别建立了三各类分别处理UML类图,顺序图和状态图。在这三个类中,处理模式是类似的。分别采用三次遍历模型的element进行建图,第一次遍历建立结点,以UML类图为例,需要存储类和接口的信息;第二次遍历设置类和接口的属性,方法等;第三次遍历设置节点的边,以类图为例,就是泛化,联系,聚合等关系,通过存储id联系完成。实现了图的初始化,再通过迭代器等方式进行数据处理,便于指令查询时进行数据选择。

四个单元架构设计思维

第一单元

在OO课程中,进步最明显的就是第一次没交上,后来的每次作业强测结果还不错了。因为pre没有完成的原因,对Java应用十分困难,第一次作业又没应用好训练内容,导致第一次作业没交上。第二次和第三次作业完成的相对良好,找到了学习门路。

第一单元主要是抽象表达式元素和结构之间的联系,能够从表达式中提取出数字,三角函数等元素进行存储,能够理解parser的用处,理解它的遍历处理的方式。其次,代码的层次也要在开始建立之前考虑好,避免后面作业重构。比如说建立相对应的类存储三角函数信息,在通过处理的类将这些元素的类整合起来,输出最后的内容。

第一单元作业非常完美的诠释了面向对象编程思想和设计模式的重要性,完成一个大的项目必须要有良好的架构,这在以后的每一次的作业之中都至关重要。

第二单元

第二单元总体的完成情况不错,也倾注了很多的精力。

第二单元设计多线程知识,尽管debug十分困难,但学习过程还是很有趣的。作业的架构主要参考了上机内容的生产者-消费者模式。细节方面需要注意锁的使用和synchronized块的范围,以及何时进行正确的锁的释放以避免轮询问题。第一次作业的架构就还不错,应用了LOOK算法,所以后面两次作业的改动就不太大,线程之间如何沟通,同步等都比较熟练,代码的逻辑性得到提升,更加有条理。

第三单元

第三单元学习JML体系,这一单元相对容易完成,主要是根据规格完成方法内容。相对困难点在于要熟悉图论算法并做出一些优化,在这里花了较多的时间,但相对于前两个单元,工作还小很多。

第四单元

第四单元主要是建立UML的模型并实现查询和抛出异常等功能。总体难度不大,重点是要熟悉UML类图、顺序图和状态图各个元素之间的关系。需要注意的是要仔细阅读指导书,完全理解功能的含义再着手写代码,否则很可能会出现bug。

四个单元测试实践

第一单元

第一单元的测试主要是手动构造样例,针对不同的元素构造数据测试代码的正确性。这一部分测试比较简单,不过发现bug后修复bug十分困难,占据了比较多的时间。

第二单元

第二单元首先是手动构造了一些样例,但这样的样例比较单一,很难验证算法的正确性。后来进行了一些数据的随机生成,指令较多时,更容易发现存在的问题。对于轮询的问题,使用了jcommander来跟踪程序运行的各种状状态,大多是没用while循环和不恰当的锁的释放造成轮询。

第三单元、第四单元

三四单元内容有一些类似,需要认真读取指导书的内容,注意细节。数据的形式也相对简单,自己写了数据生成器,通过和同学对拍进行测试。

课程收获

感觉十分良好!通过这一学期的学习,接触到了很多的面向对象思想和设计模式。在之前写代码的时候并没有着重考虑过设计层次之类的问题,现在已经掌握了正确的编程流程,写出的代码逻辑性可读性更强。

相比于第一次作业没完成,到最后很适应这种迭代设计模式,感觉对写代码的兴趣提升了很多,更喜欢设计层次时的乐趣。会很多算法和技巧必不可少,但应用架构设计和层次组织能力在编程中也十分重要,希望今后能有更多的练习!

 

 

posted @ 2022-06-29 12:55  徐俊响  阅读(27)  评论(1编辑  收藏  举报