OO第四单元总结
OO第四单元总结
一、第四单元架构设计

如图为第十五次作业的最终架构设计,由三次作业扩展而来。第十三次作业仅要求解析UML类图,因此我为了记录继承关系、关联关系,接口实现而分别设计了MyClass、MyInterface类,为记录方法指针类型设计了MyOperation类,为记录关联关系的两端设计了MyAssociation类,并最终建立MyUmlIntetaction类实现所要求的接口,查询功能的实现,大部分通过调用其他类的方法完成。
第十四次作业任务要求实现解析顺序图和状态图,这里我采取了类似的思路,通过建立MyLifeline类记录发送、接受的消息,用以实现查询功能;建立MyStateMachine记录状态总数;建立MyState用以记录可迁移到的状态以及转移关系;建立MyTransition类用以记录发生状态转移对应的事件。
第十五次作业内容为正确性的检查,基本上可利用已给的架构予以实现。这里主要的难度在于接口继承成环的查询,主要核心思路在于bfs遍历时利用一个容器记录此次遍历路径,在找到环时输出此环即可。
二、架构设计及OO方法的演进
在第一单元作业主要要求我们掌握正则表达式以及思考如何正确架构,由于预习工作不到位,我对java语言尚不熟悉,因此对作业难以构思出合理的架构,后在第二次作业中,才逐渐认识到任务中中每一个元素都可看作一个类,多个元素组成的新元素,恰可作为原元素的子集。因此为完成任务,只要将所给输入通过正则表达式合理分离,利用构造函数生成对应的元素,再将一个个元素组合,即是整个任务所需内容。通过对单个元素的功能进行实现(单个因子求导),再实现组合元素功能的实现逻辑(组合求导逻辑),即可完成任务。在第三次作业中,格式正确性的检查又让我不得不使用了递归下降的分析法,但仅在分析阶段使用,为增量设计,并不需抛弃第二次作业的架构。
在第二单元作业中,我们第一次接触了多线程的程序设计,如何避免同步访问、出现死锁成为了我们最需要关注的问题。在第一次作业中,我们仅需保证取请求、入请求间不冲突即可,因此不难实现;但之后的多电梯问题使得架构、策略多样化。对于电梯中到来的请求,一般有两种处理方法:通过调度器将请求以某种策略合理分配至某个电梯;让电梯之间自由竞争。我在权衡难易之后,决定采用AFS调度策略并让电梯自由竞争主请求,并随时捎带。在决定设计策略后,架构也就水到渠成,电梯类处理请求、调度器类加入请求并设置电梯运行模式、同时设计不同模式下对应的运行策略即可,整体上基本保持增量设计,并未重构。
第三单元内容主要是JML规格设计,利用JML规格语言,我们可实现编程的规范化、接口化,通过JML语言精确给出函数功能要求,我们实现了一个无向图的简单设计,并以节点为基础,网络为主体架构,支持丰富的查询功能,该单元架构已由规定接口给出,简单直观。
第四单元中,我们学习了UML图的相关内容,并设计程序实现了UML图的相关解析,提供部分查询功能。该单元架构思路主要来源于类与类、类与接口、接口与接口之间的关系记录需要,一旦对某个元素的内容有记录需要,便建立相应的类,在实现查询功能时,对应调用相应的类的查询方法即可。该单元让我们更加深刻的理解面向对象中对象、类、接口之间的关系,从而抛开复杂的代码,着眼于功能的实现。
三、总结在四个单元中测试理解与实践的演进
第一单元主要依靠手动构建边缘数据,复杂数据等进行测试,效率较为低下;第二单元由于多线程测试结果具不可预测性,bug难以复现,仅针对不同模式构造了少量随机数据,保证电梯运行下大部分时间的正确性;第三单元的测试主要依赖于JUnit构建样例,后发现性能要求较高时,利用程序循环输出构造极端数据,对性能予以测试。第四单元主要通过starUml手动构建图,并通过课程组程序生成对应样例的数据予以测试,并通过构建的图判断输出结果的正确性。总体而言,虽然未曾写过评测机,测试的方法也是逐渐趋于自动化、全面化、高效化。
四、课程收获
OO课程任务紧张,安排紧凑,但也让我收获颇多。虽然一开始预习不到位让我前期遇到很多挫折,但也在这些挫折中进步。OO课程虽然不着力于具体算法、编程知识的学习,但我也在这方面收获颇丰,如正则表达式的学习,多线程程序的设计等;它更注重的是面向对象思想的培养,架构的设计优化等这些更高层次的内容。面向对象就是把具体任务抽象化,将其中一个个元素剥离起来成为一个个的类,功能的正确实现依赖于类功能的正确实现和类之间的正确交互,这种面向对象的编程思想是让我在今后学习、工作中受用无穷的。今后在拿到要求时,我们应当按照面向对象的思想,分析问题中的不同元素以及其之间如何正确交互,从而形成合理的架构设计,而后才能着眼于代码的具体实现上。
此外,OO课程也告诉我们测试的重要性,数据的不透明性、互测的设立都是为了这一点;同时,互测也是让我们了解其他人架构,与不同的思维火花相碰撞的好机会。由此,我们也应当注重代码规范,添加简要注释,让他人能够清楚、明白地阅读自己写的代码,理解其所代表的意义,这是在今后工作中需要的优良素养。
五、给课程组建议
- 实验上机课能够有更多的反馈,让人充分清楚本周理论知识所学是否掌握。
- 作业任务描述时希望能够更加清晰,官方包所提供的功能实现对于本次任务的帮助能够更加清楚的说明。
- 从pre到第一次作业之间跨度过大,第一周直接上手大作业着实很不适应,希望有更平滑的过渡和提早的说明提示。

浙公网安备 33010602011771号