OO2021

Posted 陈嘉骏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OO2021相关的知识,希望对你有一定的参考价值。

2021面向对象设计与结构 - 第四单元(UML)

 

本单元作业的架构设计 & 四个单元作业的架构设计

第一单元(表达式求导)

这单元的作业主要以输入数据分析为主,但我这单元的作业完成度并不高,主要是因为架构是基于该题目进行设计的,因此之后基于前作业基础进行功能增加的时候就需要重构了。整体结构主要是以Term类和Expression类组成。

 

第二单元(多线程电梯)

这单元的作业主要以多线程为主,主要使用了Input类进行输入处理,再让Elevator类与WaitQueue类进行数据处理,并且整体结构也从一开始的集中式改成了分布式。

 

第三单元(JML规格)

这单元的作业主要以了解JML规格为主,让我们根据已给出的JML规格编写代码程序。这里使用了Disjoint Set和Dijkstra算法对一些特定函数进行数据处理。

 

第四单元(UML模型)

这单元的作业主要以了解UML模型为主,让我们编写代码程序解析UML模型。这里对StateMachine、Collaboration、Class和Interaction个别开了Map类,对个别类型的请求和输入数据进行处理。同时为了方便扩展,我在存放每个element的时候都特别创了MyUmlClass之类的类来管理数据,这样如果有对个别类添加功能的要求时,更容易进行添加。

对于个别Map类里的数据存储,主要使用HashMap进行存取。由于大部分请求的传入参数都以Name为主,因此我将各个element的名字作为HashMap的Key存储,而element和id则作为HashMap的value进行存储。这样对于同样名称是否有重复和取值时都比较好判断且方便。

 

OO方法理解的演进

第一单元中,从题中的表达式计算,将不同的功能分配给不同的类去处理,我理解了面向对象的基础概念。

第二单元中,从实现题目要求的过程中,我理解了多线程之间的交互和其需要管理的数据安全问题。

第三单元中,根据JML规格编写代码程序的过程中,我对JML规格有了更好的理解。

第四单元中,对UML模型进行解析的过程中,我对UML的各个元素的结构和整体UML模型的层次化设计有了更好的理解。

 

四个单元中测试理解和实践的演进

第一单元和第二单元基本上都是靠自己手写测试数据来测试。

第三单元则使用室友写好的对拍器进行数据测试。

第四单元并没有做过多测试,第三次作业主要使用官方包和已给的mdj档进行dump处理,之后进行数据测试。

 

课程收获

OO课程让我对面向对象的概念有了更好的了解,也更好的掌握了Java语言的编程技巧。

除了知识上的收获,其实还有了心理上的收获。我记得有一次我因为花费了很长时间去编写代码程序,最后却因为一个中测点没过导致无效作业搞得心累,就在朋友圈发了个文发泄发泄。具体内容是忘了,但我特别记得在我发了那个文之后,助教就在朋友圈也发了一个文,无法确定是不是发来训我的。但也真就在看到了助教的文之后,我才想明白了,决定不放弃,好好为之后的作业做准备。

 

课程的改进建议

单元的作业难度跨度过大

在第一次单元的第一次作业和第二次作业的难度跨度很大,加上每次作业都是基于上一次的作业基础添加新功能,导致我并没有办法完成第二次和第三次的作业。这个问题在之后的几个单元里都有所改善,希望类似的问题不会再发生,以免吓坏之后的学生(不瞒大家说我就在那时候想过放弃,还好坚持了下来o_o。

 

指导书有的要求描述的不够清晰

我觉得有些题目所给的要求并没有说的足够清楚,导致有时候审题之后写完代码运行时才发现题目要求的是不一样或是更深入的东西。我认为指导书里其实可以在一些比较难实现的题目要求那部分给一些解题小提示,这样我们可以基于小提示去网上进行搜索研究,应该就不至于不问人就完成不了作业了。

 

实验课的反馈

在很多次的实验课中,每次结束后跟朋友们讨论时都无法确定谁对谁错,没有反馈导致我们无法从中学习。希望以后的实验课能够在结束之后,给出该实验的正确解答,让大家都能知道自己哪些对哪些错,再从错误中学习。

以上是关于OO2021的主要内容,如果未能解决你的问题,请参考以下文章

2021OO第三单元总结

OO-第三单元总结-2021

BUAA_OO_2021_Unit3_Summary

QQ恶搞 - 卡死对方的手机QQ

oo发啥音,怎么读?

集合的使用