OO第四次博客总结
总结本单元两次作业的架构设计
对于架构问题,我的第二次作业在架构上进行了一定小小的更改,引入层次化的目录结构,将各种功能不同的类分门别类的放进不同的包里,使得结构更加清晰,(在这个问题上我醒悟的太晚了)
在本单元作业中,我的作业依然采取树形结构,对于开源库中的大部分元素我都对应的实现了自己的java类,类中除了可以保存对其他对象的引用外,还可以持有一些用来保存缓存的容器,这样可以使得在实现搜索过程中的缓存十分友好。
在本单元的第一次作业中,由于只有继承可以有多继承,对除有关接口的查询这指令外,我使用了带缓存的并查集数据结构,即查询顶级父类,查询所有属性,查询关联,查询属性可见性这几种指令一旦有一个被触发,该继承路径上的所有类的相应问题的答案均被求解并缓存,这大大减少了爆搜的次数。
对于第二次作业中的新加的两个图,依旧采取树形结构,实现自己的java类。
对于新增的三个检查规则,由于并查集不能够有效应对重复继承,因此我选择重新开一个新的图类,专门管理三个规则的搜索与判断。
总结自己在四个单元中架构设计及OO方法理解的演进
架构设计
首先的,变化肯定是很大的.
第一单元,emmmmmm那时候年少无知,最开始就是莽,最开始虽然就知道一个文件写到底这样不好,开课前我也知道实现接口,使用多态,但是写出来的类总是有“上帝类”和“傻子类”,总有那么几个类,除了get set方法,啥也没有,整个就是一个被当做C语言里的struct使用的东东。后来知道了,开类不是让我当结构体使的,要把活都分好,是谁的活叫哪个类去干
第二单元的架构总结起来叫一句话,“以为是黄金,实际是个青铜”。
精心设计架构肯定还是有大幅的进步的,我第一次作业写的类,第三次作业还能复用。
但是我明白了什么叫次次重构次次爽,理由很简单,我没想到调度算法次次换,调度算法和为调度器服务的数据结构被我写死在run方法和调度器里了,结果我三次写了三个一点不贴边的算法,次次重写调度器,删文件那种重写......
第三单元,DS还债单元,我觉得这一单元对我的架构设计水平提升是最高的(虽然昂神说这个没啥必要),并查集,BFS,堆优化的迪杰斯特拉图......五花八门的数据结构,每个数据结构都用了不止一次,要是每次用都重写一遍对应的数据结构那可太赔了(马殿富的离散数学学不完了,肯定想偷懒啊),肯定要搞出点工具类啊继承着玩玩。这一次是真正儿八经的重新认识了继承关系并且自发的用了一把,感觉很爽
第四单元倒是没什么可圈可点的,不过在自己的作业里引入了包来管理不同的类,这也算是架构设计上的一个进步吧。
OO方法理解的演进
- 一年前自学JAVA时:JAVA 整这一堆没用的特性还说什么OOP语言,写这么一本比砖头都厚的大黑书(JAVA编程思想),没事找事呢?
- 开课前预习:这一堆设计模式。。。。脱裤子放屁呢吗?OO就是糊弄乌鸡吴际的,还是面向过程玩的爽。
- 第一单元,次次重构此次爽了几次侥幸全身而退,并看周围同学被虐的鬼哭狼嚎之后:(此时已经不管吴际老师叫乌鸡了)OO还是有点用的,至少分清楚可变对象和不可变对象,使用一下接口与多态还是可以叫我活的很滋润的。
- 第二单元:复用复用复用很重要,是谁的活交给谁去干,设计模式也是很有用的啊。
- 第三单元:继承,继承还真是有用啊。
第四单元:我勒个擦咋这么多类,分几个package吧,不然眼花缭乱,找乱套了。
总结自己在四个单元中测试理解与实践的演进
- oo开课前:测个屁,面向评测机编程
- 第一单元:junit的参数化测试是个好东西,就是第一单元,助教老让用System.exit(0)这个受不了,一exit(0)junit也关了,哪怕参数化测试还没完事......
- 第二单元:junit使不上了,但是单元测试的思想我还是要有的,只要线程安全问题,我一个一个类,一个一个方法测,也是管用的。(第二单元我还真就没犯过线程安全的错误)。至于正确性检验吗:那自己写个脚本检查。
- 第三单元:这次终于有个标准答案了,来来来参数化测试走起。。。。。。。诶JUNIT还能看哪一句被覆盖了,这玩意好啊,我早咋不知道......
- 插曲:第三单元最后一次作业感冒了,我一想,我前几次作业,怎么测试都木有出现bug ,这次就不测了,估计也不会有事叭,不测了...............我收获了第一次不及格作业,强测15分,就因为一句话的笔误.......安全生产,警钟长鸣,麻痹大意要不得啊
第四单元: woc这单元没有数据生成的方法了,参数化测试没戏了.......那手构几个mdj试试测试覆盖率吧。
总结自己的课程收获
- JUNIT是个好东西,单元测试是个好东西
- 当编写代码时候觉得哪里闹挺的时候,基本就是,该看看是不是该用点设计方法了(比如最常用的,工厂模式和单例模式)
- 可变对象还是不可变对象千万要想好。
- 接口,多态,继承,override
- JAVADOC
可扩展性,可复用性这几根弦要时时刻刻绷紧。
立足于自己的体会给课程提三个具体改进建议
1.球球别让大伙System.exit(0)了,这玩意连程序带junit都exit了,对JUNIT的参数化测试玩家感觉很不友好。
2.把上机实验课时间改改吧,上午讲下午就上机这个有点难受
3.(最好把课件跟着仓库发下去,不然找课件也很麻烦)