BUAA_OO_第四单元总结及课程总结
本单元作业的架构设计
第十三次作业
本次作业主要实现了对于类图的分析,需要对传入的类图元素进行建模。我采用自顶向下的解析方法,先解析出所有的类,再将类对应的属性和方法添加到具体的类中,最后为每个方法添加参数。再查询继承,实现以及关联的对应结果的时候,我采用了在线查找的方式,即在初始化的时候不将继承关系添加到类中,而是在调用查询方法的时候再查找继承关系。
在数据管理方面,主要使用Hashmap,因为Hashmap方便数据的查找和修改。
UML类图如下:

第十四次作业
第二次作业与第一次作业相比多了时序图和状态图的解析。同样采用自顶向下的初始化方法。对于时序图,首先将Interaction初始化,接着将对应的Lifeline添加到对应的Interaction中,最后将Message添加到对应的Interaction中。由于代码量较大,所以将初始化的部分单独拆分成了一个类,并且对部分方法实现了缓存机制,让查找更加快速。
UML类图如下:

第十五次作业
第十五次作业与之前相比多了对模型的有效性检查。在初始化完成之后,针对每一种有效性进行了分别的检查。
UML类图如下:

四个单元的架构设计及OO方法的理解
由于在寒假之前并没有任何java基础,所以除了预习之外,第一单元是我接触到的第一个代码量较大的java项目。在完成作业的时候,采用的方法是自底向上的建模,建立了常数项类,三角函数类,因子类,项类,表达式类等。在保证了初步的功能正确之外,我尝试了一下对性能进行优化,将同一层括号内的常数项合并,以及完成了乘法式中可以合并的项的合并,但是由于没有对优化之后的代码做充分的测试,导致强测炸了几个点,当时挺难受的。总的来说,第一单元让我第一次接触到了面向对象建模的编程思想,让我学会了按照层次抽象并且建立模型的方法。
第二单元是我第一次接触到多线程的思想,在刚学习这一单元的时候,我对线程和进程的概念完全不了解,所以采用了最保守也是最安全的加锁方法,只建立了一个托盘类,和托盘相关的所有操作都加上了锁。在第二次作业中,我也只建立了一个托盘,所有电梯都自行从托盘中取出乘客;在第三次作业中也是只建立了一个托盘,但是由于可以电梯只能在特定层数停靠,所以对一小部分乘客事先进行了分配,其余乘客仍然是采取抢人的调度策略。在学习了操作系统关于磁盘扫描和多处理机作业调度的一些算法之后,我算是对这一单元大家写的不同的调度方法都有了更深的理解,但在当时我为了减少de多线程bug的难度,采用了一个请求队列的方式,效果也不错。这个单元同样在第一次作业,由于没有进行充分的测试,采用了优先处理最近请求的调度,导致炸了所有morning的点。第二单元让我对并发编程以及代码的安全性分析有了更深的理解。
第三单元和前两个单元相比显得较为简单。我们只需要通过阅读官方包中给出的JML规格来填写代码即可,不需要自己设计架构。对于同样的JML描述,可以采取的实现方法不同,效率也大不相同,需要使用更加高效和简洁的实现,为了达到这个目的,我们不能仅仅是阅读JML规格,更应该理解方法到底干了什么,才能用我们自己的方法进行优化。第三单元让我了解了规格的写法以及方法的接口话设计。
第四单元学习了UML的规格,UML模型将对象和对象之间的关系抽象出来,构建出了不同层次的模型。我认为这一个单元也是层次化抽象并且建立模型的一个单元。通过这一单元的学习,让我更加深入地理解了层次化建模和抽象地方法。
四个单元中测试理解和实践
第一单元是我刚开始接触用java写代码量较大的项目的一个单元,没有很多精力去搭建测评机。更多的时候都是白嫖别人的测评机,或者干脆自己简单的测一下,结果确实不怎么好,之前已经说过有一次自己优化之后代码产生的bug就没有被自己测出来。并且对于边界数据的生成也不是很懂,就稀里糊涂地过完了第一单元。但是由于炸了一次,我也开始意识到测试对于保证代码的正确性是挺重要的,如果不好好测试就有炸的风险。
第二单元的时候,我和几个同学一起搭建了一个自己的测频机,测了后两次作业,效果还不错。在测试的时候采用的是多人对拍的方法,并且使用了python生成数据和跑我们写的java程序,并且写了一个python程序用于判断输出是否合法,对每一个输出更新电梯的状态,判断这个状态是否合法,如果不合法就错了,由于每个人调度不一样,所以输出也不一样,只能采用合理性检验来判断程序的输出是否正确。再用python实现测评机的时候,也学习了命令行运行带包的java程序和python的多线程。由于是大家一起写的测评机,使用了gitee托管代码如下:


第十五次作业的测评机架构如下:
还有一部分没有贴出来了,测评机基本实现了自动解包编译并且测试,只需要将代码的文件夹放进去,在设置想要测试的总数就能够对拍测试了。除此之外还实现了测到一定数目给参与测试的人发邮件的功能,自动解包和发邮件的功能由fjh实现(tqqqqqql)
课程收获
-
对java语言的特性更熟悉了。
-
会自己搭测评机和生成数据了。
-
和大家一起合作搭测评机使用了gitee线上协作。
三个具体改进建议
-
寒假的时候加一些多线程的相关教程,可以让大家一点多线程的设计方式,了解一下多线程的概念。啥都不讲就直接来一个多线程说实话觉得体验不怎么好,希望能够用一种更加舒服的方式让大家学到东西。
-
实验课给答案,或者给出分数,不然交上去之后也不知道自己对不对,甚至不知道自己多少分。
-
寒假的预习部分可以介绍一下测评机的搭建,从0到有往往是很困难的,不一定非要留到开学才开始介绍,可以寒假就让同学们有个印象,这样也可以让开学之后的压力稍微小一点。
-


浙公网安备 33010602011771号