代码改变世界

面向对象课程总结

2019-06-24 17:12  mxj1  阅读(272)  评论(0)    收藏  举报

课程总结博客

第四单元作业架构设计

第十三次作业如下

构建了MyUmlInteraction容器,在输入过程中,对UMLElements根据其不同的Elements.type分别保存。为了避免有些需要存在包含关系的Elements(例如UMLClass包含UMLAttribute,UMLOperation,而UMLOperation又包含UMLParameter)被包含的elements在包含的elements之前被输入,采用了三次循环处理,第一次先处理UMLClass,UMLInterface,第二次处理UMLOperation,UMLAttribute,UMLAssociation,UMLAssociationEnd,UMLInterfaceRealization,UMLGeneralization,第三次处理UMLParameter。输入时对数据进行预处理,保存在类内部的容器内,在查询时直接通过内部容器进行查询即可。

第十四次作业类图如下

构建了四个容器MyUmlClassModelInteraction,MyUmlCollaborationInteraction,MyUmlStateChartInteraction,MyUmlStandardPreCheck,分别储存类图,顺序图和状态图以及对类图进行相应的规则检查。在MyUmlGeneralInteraction中分别构建了这四个容器,将四个容器所需要的UMLElements分配给四个容器,并在规则检查和查询方法中分别调用四个容器中相应的方法。四个容器的构建类似第十三次作业的UMLInteraction(其中UmlClassModelInteracion即为UMLInteraction),包括对输入的解析和相应的查询及规则检查方法。

四个单元中架构设计以及OO方法的演进

第一个单元是一个让我们由面向过程的思考方法转向面向对象的设计方法的过程,特别是在第三次作业中需要建立Poly,Factor,Term的层次关系,如果梳理不清层次关系就没法处理复杂的复合函数的情况。

第二个单元接触了多线程程序设计,从第五次、第六次作业的最基本的生产者消费者模式到第七次作业的Worker Thread模式。因为多线程程序设计中逻辑对象比较明显(电梯中的输入请求、调度器、电梯),将这些逻辑对象之间的交互方式与各自需要处理的工作明确后就能较为简单的完成作业。

第三个单元中增量式的开发是这四个单元中特征最明显的,从第九次作业的Path到第十次作业的Graph再到第十一次作业的RailwaySyste,这一单元终于不再是次次重构次次爽。

第四单元中UML类图部分我仅仅将类图、状态图、顺序图以及正确性检测这四个逻辑对象分开进行处理,虽然可能不是一个好的架构设计但是我觉得也足够简洁明了。

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

在第一个单元中,通过讨论课同学的分享,我学习了bash脚本批量生产测试数据进行测试的方法,它能够批量生产测试数据并测试,大大节省了测试时间。同时,编写数据生成方法的过程也是在考虑各种数据情况以及极限数据的边界,如果不能很好的考虑到这些问题,即使跑再多组生成数据也不能发现bug,只是在用正确的数据再做无用功。

在第三个单元课程中介绍了JUNIT单元测试,它可以帮助我们对代码进行系统的测试,同时能查看分支代码覆盖率。同时,第三个单元在正确性要求的基础上又引入了CPU时间限制,这就要求我们测试时不仅要考虑正确性问题还要考虑时间问题。第十一次作业中我写出的第一版程序能够实现指导书要求的功能,但在我构建的极端样例下需要10min中才能运行完成,显然是不符合要求的。这种对于时间以及空间的要求在工程中是很常见的,测试时也要注意考虑。

课程收获

对课程的三个具体改进建议

一、强调寒假预习的重要性

由于没有一门介绍java基础语法的前导课,所以课程组可以强调一下寒假预习的重要性,仅仅依靠寒假的四个作业可能并不能达到让同学们直接开始肝作业的水平,特别是在第一单元的难度不低的前提下。

二、尽量按照既定时间线发布任务

我觉得可能是由于oo课程改革的缘故,某些任务的难度没有控制,以及个别描述可能没有经过精细打磨,也就使得老师和助教们不得不在指导书发布后对指导书进行修改(这里要感谢一下老师和助教们的无休的工作)。这种对指导书的更改对我来讲体验并不算好,其原因在于难于规划时间,如果指导书一发布就开始进行可能会面临指导书有所更改的情况,而如果较晚开始做作业又担心无法在提交截止前完成作业。如果可以的话希望老师和助教们能够提前完备的准备好指导书(最好有助教提前写过标程,确保指导书无误)。

三、提早发布课件

提早发布课件可以让同学对接下来的课程有一个初步的认识。而且本学期有些课件的字体过于小导致教室后排的同学完全无法看清,提早发布课件可以让同学们在自己的设备上观看。