OO第四单元总结
二、在四个单元中架构设计及OO方法理解的演进
第一单元 多项式求导
第一个单元中,是从零经验的开始。第一次作业时,对面向对象的思想还没有完全建立,还是很“面向过程”,但是在三次作业的练习的过程中,对面向对象的理解也更为深刻。分为因子、项、和多项式三大类进行求导计算。
第二单元 电梯
第二个单元,主要就是多线程的线程安全和如何上锁的问题。且需考虑实际运行中的时间优化问题,需判断捎带情况以减小电梯运行时间。第二次作业中我的调度器还不是一个线程而只是一个类。调度器主要实现对Request和Elevator的信息判断而确定电梯是否需要开门进/出人。将当前楼层作为参数传入,遍历电梯内队列,判断是否有人出去;遍历等待队列,结合电梯运行方向,判断是否有人要进来。第三次作业中,我的调度器的作用是:从sumQueue不断取出Request,对其进行信息判断后加入到对应电梯的队列中。一定要避免暴力轮询和死锁。三条队列要唤醒时,必须唤醒所操作队列,不能一口气全部唤醒。
第三单元 规格化设计
第三个单元,主要依据规格要求写出相应函数。基础部分是依据已经给出的JML规格对代码进行完善和补充,在MyPathContainer
中,对Path
的存储设置了两个HashMap
。一个Key,Value分别为Integer和Path,另一个则相反。主要目的在于便于两种方式的路径查找。后继作业则对MyGraph中新增邻接矩阵、两点间距离矩阵和结点映射的HashMap。最后一次作业则新增一个Edge类,用来存取两站点之间边的信息。此种要求的层层递进,可能会类似于我们实际工作中遇到的不断添加要求的甲方,必须要依照之前已有的部分再进一步完善。
第四单元 UML类图解析架构
第四个单元,将类图解析与OO联系起来。此部分主要参考前文第一大点。
三、在四个单元中测试理解与实践的演进
在这四个单元中,我的程序都不是十全十美的……必须配合相关数据才能检查出我自己程序的漏洞。而这也正是我的薄弱之处。对数据的构造不够全面专业,而使得自己的程序漏洞不能全部填补上,还是会在强测中出现各种各样的问题。在本学期的学习和练习的过程中,我认为思考、构思好在“下手”是十分重要的,不能想到半途就开始写,这样往往需要重构orz。同时,自我测试也是必不可少的,需要依靠自己的数据检查自己的程序是否是完全符合要求的。如何对边缘数据进行构造仍然是我需要学习的部分。
四、自己的课程收获
这学期的OO作业,从面向对象的基本思想开始培养,区别于以前的面相过程式编程。再进行线程及其安全性的控制与判定,然后是依据规格进行程序设计,培养工程化设计的思想并进行数据完备性的检测。最后是解析UML类图,将图形化的东西与代码结合起来,原本抽象的东西有直观图像参考,而已有的直观类图信息也可转化为不同元素及其关系。
最初时,我还只会写一main到底,对“对象”,“实例化”等概念并没有明晰的认识,总体思路仍在沿用C语言的思维方式。但是在从大概第二次开始,“类”的概念已经显著重要起来。如何恰当的分出每一个类十分重要,将项,多项式分类,每个类再有相应的求导计算方式,才能较为顺利地求出答案。同时,对问题考虑的完备性也十分重要。其主要体现在对非法公式的判断上,稍有不注意便可能有“漏网之鱼”。对我来说,本单元带给我的收获主要是对“对象”这个概念的认识和运用。
下一单元则开始涉及多线程。让我有用“一块”代码控制不同的线程的尝试。且在此单元中,debug调试方式“返璞归真”,采用print出来的方式,来看当前数据是否正确。锁上和开锁的地方一定要理清思路后才能写得正确,也需配合实际数据进行测试和调整。
第三单元,依据规格完成相关函数。本单元我觉得最重要的就是对规格描述的理解。同时,对HashMap的使用显得不可或缺。良好的存储方式会大大提高寻找相关数据的方便性,且缩短CPU时间。此单元相较其他单元,也体现了在实际问题中,一些算法的重要性。可见,我们仍然不能放弃相关算法的学习。并且此单元也较为明显得体现出功能层层递进时我们需要的不断改善。
最后一个单元,将类图解析与OO联系起来。对类图相关信息的查找实现,实际上加深了我们对自己平时所写程序间类与类,属性与类,类与接口等之间的关系的理解。将图像与抽象思考联系起来,显得更为清晰和具体。
五、立足于自己的体会给课程提三个具体改进建议
①在课程每次新作业的安排时间上,希望能与OS时间错开。现有安排下,每次新作业恰好与OS每次新Lab时间较为冲突,希望能稍加错开,更加便于时间的管控安排。
②希望课下给的数据点包括一个强测,以便能更好得完善自己的程序。
③是否可以在课程中添加有关测试数据生成的方法,个人依然不是很会“对拍”。
希望这门课能越来越好,帮助同学们学到更多有用的东西,提升自己的能力。