其他分享
首页 > 其他分享> > OO第四单元总结&学期总结

OO第四单元总结&学期总结

作者:互联网

OO第四单元总结&学期总结

第四单元架构设计

UML类图

由于三次作业迭代式开发,我们只取最后一次作业的架构作类图如下:

image

hw13

这次作业中由于只涉及到类图及几条有关的查询指令,实现较为简单。具体通过为每种元素构建一个类,并采取哈希表等数据结构作为容器存储各种元素,在构造方法中多轮遍历传入的元素,做预处理后提供查询方法。实现(理解上)较为困难的指令有两条,均为耦合度的计算方面。此外继承深度和类实现的接口方面我采用了dfs+标记的形式进行优化。总的来说,难点在对UML图和官方包代码的理解上。

hw14

这次作业主要加入了顺序图和状态图相关的查询指令,从这次作业开始需要注意代码风格的限制。尤其是一个类不超500行的限制,于是我选择将顺序图和状态图抽出,同时由于状态图需要的遍历层数较多,选择将构造方法单独抽象为一个build类并提供相应接口。这样子下来可以将顶层的两个类都压在200不到300行上,避免最后一次作业大规模的重构。新增指令中,需要注意的主要为关键节点判断指令,难点在对概念的理解和具体实现上,由于复杂度要求很低,直接采取dfs+标记的形式即可。

hw15

最后一次作业加入了有效性检验对此我只在上一次的构造方法中做了实现,并提供顶层接口。部分底层存储逻辑为了支持有效性检验做了微调。其中,在遍历传入元素预处理部分直接检验的有效性有R001、R005、R008、R009;剩余检验需要书写专门的函数。其中难点主要在R002以及R009上,同样最大的难点在于对于概念的理解。另外,循环和重复继承同样可以使用带标记的dfs直接解决。这里需要注意的是由于类图是单继承,所以不会出现R004的重复继承情况,无需做判断。

架构设计思维与OO方法理解演进

Unit1

本单元接触了java语言及面向对象的最基本思想,从hw1的杂乱无章到hw3的最初成型,也算是看到了层次化设计的一点门道。同时,这也是第一次接触了递归下降的算法以及相关分层思想。总之,如何将一个复杂任务解耦,分拆为不同的独立性较强的模块是我们需要考虑的首要任务,例如考虑好底层模块后,进行自底向上设计。说起来容易,做起来难,具体的实现总是没那么简单。例如写到一半发现少考虑了一个接口,下一次作业为了上一次作业又需要新增一个补丁。缝缝补补,总算在hw3完成了一个初步的框架。

Unit2

本单元主要是电梯调度的多线程编程。如何采取合理的设计模式,并在保证线程安全的前提下尽量最大化电梯的效率是这个单元首要的目标。具体的编程实践中,我主要对生产者-消费者模式和单例模式这两种最基本的模式做了一定的尝试,并对流水线模式等有了初步的了解。本单元中如何封装电梯类等也是一个首要的问题,这要求我们继续扩展自己的面向对象思想。总之,这单元的线程安全问题是最基本的,只有保证不死锁,不轮询,才能进一步考虑之后的问题。而性能上,我也对一些调度策略有了了解,并尝试分析了各种优化的可能。

Unit3

本单元主要是JML规格理解即契约式编程,以及附带了一些基本的图算法实践。这单元的主要任务是读懂JML语言,并且严格把控图算法的复杂度。具体到实现上,还要尽量避免直接按照JML规格书写,因为容易出现\(O(n^2)\)的算法被卡超时。同时,合理学习利用最短路、最小生成树算法及其最基本的优化策略(堆优化、并查集优化等)。

Unit4

本单元主要是UML图的学习与编程模拟,这单元的任务逻辑清晰但细节上有更多雷点。虽然层次分明即输入层,信息存储层和查询层,但鉴于查询指令多,UML图元素理解问题等,需要我们不大意,才能更好地完成任务。除了编程训练外,本单元的意义还在于对状态图、顺序图和类图加深自己的认识,便于以后使用。

测试理解与实践的演进

自我测试有三种大体思路以及两种正确性检验策略:

策略:

在三次评测机编写中,我采取了py程序生成数据并进行对拍的方式对第三单元的程序进行正确性检验;采取半随机方式,构建不同测试点对程序进行测试。同时前三单元每一次的作业,都会针对互测限制手工构造可能的边界压力数据。遗憾由于平常太懒或时间紧张,并没有写过太多的次评测机,也在这里感谢每次写评测机的臻哥。

课程收获

改进建议

标签:总结,OO,编程,作业,检验,学期,算法,UML,单元
来源: https://www.cnblogs.com/Ncikwz-20231190/p/16423242.html