本单元两次作业架构总结
第一次作业
第一次作业是完成对UML类图的解析,以及一些查询操作。在本次作业中,根据UML类图层次结构,我分别设立了三个类用于存储UML类图,一个类用于存储查询操作函数。
三个数据类分别为MyUmlClass类、MyUmlInterface类和MyUmlOperation类,前两个类分别保存了类和接口以及其下的方法、属性、继承关系等,最后一个类保存的是属性及该属性中使用的参数。
我使用MyUmlInteraction类用于存储查询操作函数,该类与上述几个数据类产生关联,将输入类图保存在数据类中,并在该类中完成查询。
第二次作业
第二次作业在第一次作业的基础上新增了对状态图和时序图的查询,以及对几种基本规则的检测。在这次作业中,我吸取了前一次作业的教训,将不同操作根据操作对象不同分别保存,再在函数主干中进行调用。
四个单元中架构设计及OO方法理解的演进
第一单元:第一单元的三次作业大体上是从毫无章法到逐渐层次化的过渡,刚开始是我仅仅在一个类中将所有内容完成,导致代码耦合非常严重,debug时也很麻烦;而到后两次作业时,我逐渐将任务分摊到不同类中,每个类负责的内容比较明确,纠错时也更容易定位。
第二单元:第二单元围绕着电梯调度的主题展开,基本思路是实现电梯对象和调度器,调度器从请求队列中输入请求,并根据请求完成电梯对象的调度。本单元的三次作业无非是从单电梯到多电梯,再到有限制的多电梯的演进。本单元在架构上的提升并不大,更多的是对进程控制的理解。
第三单元:第三单元考查的是对图的处理,本单元的亮点在于实现接口以及单元化测试。此外,本单元中我们还熟悉了JML语言的基本内容,程序的基本架构都按照JML文档规定完成。
第四单元:第四单元考查的是对UML类图的解析。在架构上,我根据操作对象不同将方法函数保存在不同类中以方便管理,在程序主干中完成不同对象的关联整合以实现要求。
四个单元中测试理解和实践的演进
第一单元中的测试更多的是通过使用大量数据进行暴力测试来卡数据边界,而第二单元中的测试则更多通过分析程序运行逻辑来寻找bug;到了第三单元和第四单元,新学习的单元测试可以有效检测边界数据的正确性,而程序逻辑的正确性检测则需要严格对照接口文档进行验证。
课程收获
经过一学期OO课程的学习,最直观的感受是代码量的增大,从百来行代码到一千行以上,同时我对于层次化和结构化也更加敏感了。当拿到一份需求时,之前我往往只是按顺序一个个实现功能,对于程序整体的掌控却不到位;而现在,我会先关注需求文档中的整体信息,抽提中需求并对其分类,在实现时层次化,用底层方法辅助实现上层方法,增强代码的复用性,同时使程序更加易读。这就是面向对象编程这门课给我最大的收获。
建议
1)建议每个单元的互测结束后,能够给出一些大佬们的代码以供参考,在第二次作业后,课程组给出了几份优秀代码,这些代码中的设计思路给我们改进设计提供了很好的建议,但之后的作业却没有类似的展示,这让我感到不解;
2)在前几次作业中,互测的手段绝大部分是跑评测机用大规模数据卡数据边界,我觉得这并不能达到鼓励同学阅读他人代码的初衷,因为跑评测机甚至根本不需要看别人的代码,仅仅将多份代码用大量数据对拍就够了。。希望之后课程组能够改进互测方式,减少单纯对数据边界的暴力测试;
3)周五上午讲理论课,下午的实验课上就需要运用理论课上所讲内容,这个规划让我感到很难受。希望能够优化一下排课时间,比方说周四上理论课,周五再上实验课,给一个晚上时间用于消化理论课上所学内容。