一、作业架构设计
前言
第四章介绍了UML
建模语言,相对应的作业是UML
类图、顺序图、状态图的解析器。第二次作业是对第一次作业的新功能拓展,并且第二次作业中我没有改动第一次的代码。
1.1 第一次UML
架构设计
这一次解决的是UML
类图的元素解析问题。
1.2 第二次UML
这一次添加了模型有效性检查、顺序图查询和状态图查询这几类功能。
1.3 实验分析
完成这次实验需要我们对UML
建模语言足够熟悉,在开始实验之前我们需要自己在StarUML
里画几个图来深入理解。StarUML
的元素的层次划分也有助于我们完成这一单元的作业。
难点分析
-
阅读官方包的源代码。我们最好通读读所有
UMLElement
的代码 -
UMLElement
数量过多。 -
指令繁杂。但是大部分指令都是查询指令,建立完三种图后进行相关处理,就都是查询的步骤了。
架构分析
-
对
UMLElement
进行分类,给出层次 -
对所有
UMLElement
都拓展一遍 -
包装查询指令,
MyUMLGeneralInteraction
类中只是包装后的方法。 -
对本身的操作就放在该
UMLElement
的类里。 -
共享类图、顺序图和状态图
-
二、对架构设计及OO
方法理解的演进
刚开学时的编程完全是面向过程编程,包括第一单元的前两次作业,架构都十分混乱,不能提取明确的对象和相关行为出来。
在学了继承和接口之后,我开始不自主地使用一些设计模式,后来使用Junit
单元化测试。
在这些过程中都是自己慢慢探索的,比如继承关系,初次见到时是很不理解的,包括实验课上也写不出继承的代码来。对继承的深入理解需要我们从多次代码的演练中得到。同时要写出真正oop
的代码来,我们也需要熟悉这个编程语言。对java
的陌生、不了解java
的强大功能也让我们在学期初体会不到oop
的魅力。
在经过前两单元的训练后,我们对oop
有了些理解,此时课程组采用使用官方包的形式完成作业,此时我们也可以读到真正优秀的面向对象的代码。
此外,单元化层进式作业也让我感受到了oop
的优点:可维护、可拓展、架构清晰、可读性强……
三、对测试的理解与实践的演进
测试是保证程序正确性的有效手段。
最初的测试是手造测试集,构造几个我自己觉得容易错的数据来测试自己的程序。
后来使用python
来写测评机、对拍器。在测试这方面需要同学们的帮助,多个程序对拍更能看出问题所在。
此外还有Junit
单元测试。Junit
就偏向模块化测试,测试某个功能是否符合我们预期。
四、课程收获
1.最显著的就是java编程能力,让我能在一天内写完UML第二次作业,将近2000行代码。
2.面向对象的思维。以后写的代码也需要测试,需要拓展和维护,多运用面向对象的思维,会让代码更符合以上标准。
3.信息检索能力。java编程是自学的,相关特性及各种容器需要我们自己去学。
五、建议
1.互测可能在第一单元用处大。但是此后,面对一个屋子7、8个人的代码我不可能通读,我希望读的是优秀同学的优秀代码,而不是随机分到的代码,并且分数高不代表架构优秀。所以建议后三个单元取消互测。
2.实验课意义不大。老师说希望实战使用一下课上的内容。一对于同学们来说理解速度有差异,可能有人需要经过多份代码的尝试和同学们的知道才会真正掌握相关知识;二实验内容累赘,本身实验时长就短,做不到什么有收获的实验。所以要不然就取消,要不然就精进一下实验课内容,不要刚讲的马上就实验,而是考察前几次课的内容。