BUAA_OO_第四单元作业总结
简述
本单元的主要任务是对UML类图进行解析检查,通过输入指令来对 UML 类图、状态图和顺序图进行分析,难度相当于前三个单元还是比较简单的。
这次作业主要是对UML类图模型进行分析。在建立模型时,我主要是通过三次遍历UMLElements数组来实现对我模型的建立的,三次遍历的层次是:
-
UMLClass、UmlInterface、UmlAssociation
-
UmlAttribute、UmlOperation、UmlGeneralization、UmlInterfaceRealization、UmlAssociationEnd
-
UmlParameter
由于是静态模型,为了节省模型指令的查询时间,可以看到,我采取了时间换空间的做法,将模型指令的查询结构存储的起来,避免了重复指令查询所带来的二次开销。同时,对于查询类的继承深度等指令,我也采取了递归的方法,并在迭代过程中将父类的继承深度也记录了下来,从而节省了查询该类父类以及其他子类的继承深度的查询时间。
UML图
第二次作业
这次的作业相当于上一次,增加了状态图、循序图的查询指令,具体实现我主要还是采取了递归迭代的方法,但是还是有一些非常粗心的小错误,导致这次的作业还是有一些小Bug。
UML图
第三次作业
这次作业主要任务是完成对UML模型有效性的检查,不算很难,相较于上次,主要是增加了Check方法,以及对UMLUmlAssociation类进行了修改。
UML图
架构设计思维及OO方法理解的演进
第一单元
第一单元作为开启我OO课程的第一课,在其学习过程中,我也是收益匪浅。在第一单元中,我主要学习了面对对象编程的层次化设计,相较于之前的面对过程编程而言,这次的作业设计算得上是为我建立了解决任务问题的一种结构化、程序化的新思路,让我的程序设计不再是以前那种比较混乱的状态,而是一种有层次、分模块的设计,这种设计对于后期的Bug修复、迭代改进都是非常有用的。
第二单元
这单元我们主要学习了JAVA的多线程,设计主要强调了对象运行时的行为状态以及并发过程的控制并保证线程安全。这单元的作业我基本上都是采取的生产者-消费者的设计模式,因此,我代码的并发和互斥控制还是比较简单的,比较麻烦的一点主要还是对于电梯的调度算法设计以及轮询问题的解决。
第三单元
本单元的主要是对JML规格理解与代码实现。本单元的代码设计其实并不是很难,比较麻烦的是算法问题以及如何优化查询时间。对此,我主要是采取了Cache缓存的解决方法,来避免由于重复指令所产生巨大时间开销。
第四单元
本单元的主题是:模块化设计与模型管理。UML模型既是我们在设计开发初期建立的一个初步的模型设计,也是在我们完成开发后,进行模型管理与分析的一个良好工具。在完成作业的过程中,既加深了我对“对象”的理解,让我深度了解UML图,也重温前面单元的设计思想。
测试理解与实践的演进
对自己的代码模型进行测试是我们在开发过程中一个不可或缺的过程,如何构建出有效的数据也是我们在设计过程中不得不认真思考的问题。
在设计过程中,我主要采用的是手动构造特殊边界数据以及利用机器来生成大量数据进行黑箱测试。这两种方法是具体实践过程中还是比较有效的,但是由于生成的数据的有限性,还是会有些BUG测试不到。
当然,除了测试之外,要想我们的程序少出BUG,最重要的还是在设计过程和编写代码的过程中要认真思考,逻辑清晰,边写边测,这样才能减少我们程序出现BUG的次数。
课程收获
-
思想上,学习了面对对象的程序设计方法,理解了在程序设计过程中层次化、结构化的重要性,明白了面对对象语言的三大特征:封装、继承、多态。
-
代码能力上,学习了JAVA语言。相较于之前的C语言,在使用JAVA语言的过程中,通过对层次化、结构化的代码编写,我也成功实现了对具有上千行代码的小项目的编写。
-
工具上,学习并使用了git、markdown、idea、博客园等工具的使用。
改进建议
-
寒假预习的内容可以更加丰富。可以在寒假预习阶段加入各种测试方法的介绍与实践。
-
中测的数据还是比较弱,有些情况下中测过了,但强测却基本上全挂了,希望加强下中测数据。
-
第四个单元的有些指令有点看不明白,希望对于部分说明比较困难的指令可以结合下具体数据。