BUAA-OO-第四单元总结
一、第四单元架构设计
- 类图UML
- 顺序图UML
- 状态图UML
- 本单元架构总结
第四单元不像第三单元有详细的UML来解读,但第四单元有十分详细的手册,每一部分的框架其实手册已经给出,我们只需要按照框架,在每一部分填上代码即可。而其中的算法,不像一些大佬用了拓扑等数据结构、算法,我只用了最基本的bfs、dfs。值得一提的是,第三次的时候,由于前两次在MyImplementation
里面代码行数太多,我便将类图、顺序图、状态图分成了3个抽象类,使得代码看起来更简洁。
二、OO学期总结
1、架构设计思维与OO方法的理解
第一单元
- 第一单元学到的最重要的一点是跟编译相关的知识——递归下降,这也是第一单元代码的主基调。
- 其次是层次化设计和封装、解耦:因为我们OO是四周一单元,每周都是对上周的内容进行增量“开发”,因此如果前面没有规划好,“屎山”会越积越大。这单元初次对封装解耦有所了解,合理的封装和层次化设计,可以让你的代码更适合增量开发。(这单元的重构让我吃足了苦头,本学期第一次熬夜:)
第二单元
- 本单元是魔鬼电梯单元,首先最主要的是各种模式,如生产者-消费者模型、单例模式等,这些都在作业得到了应用和实践。
- 其次由于是多线程,本单元第二重要的是保证线程安全。一是通过锁来保证,选取合适的临界区用锁锁住共享对象,处理完再notifyall。二是用java已经实现的线程安全数据结构来存储数据。
- 策略的选择,一开始自己设计各种策略,最后发现,自由竞争YYDS!
第三单元
- 本单元主要就是读JML,理解JML,然后就是填代码;用到的算法也都是数据结构学过的(十分友好)。
第四单元
- 本单元架构在手册中已经给出,不太需要我们思考架构,可以说是个“翻译”单元,跟同学对拍差不多应该就行了。
2、测试的理解和实践的演进
- 第一单元的测试最好写,同学写好随机生成数据的,然后每个人跑出来,用sympy库直接就可以进行比较。数据生成时额外加入一些特殊情况,对比如括号匹配的问题进行测试,很有效。
- 第二单元的测试主要是测试时间和正确性,要限制运行时间(要不然强测就寄了)。测试的时候加入多人一起运行,然后比较,实现端到端全自动化测试。
- 第三第四单元的测试只是单纯对拍,按照数据限制规则,随机生成数据,然后几个人的跑出来对拍结果。
3、课程收获
- 第一收获当然是面向对象这个思想,这门课教的就是面向对象:)
- 第二收获就是抗打击能力,当你每次重构的时候面对屎山,都要建设自己的心理,要不然真可能重构不下来(本人很荣幸,这学期重构了两次,感受良好,还没猝死🙂)
- 第三收获就是代码规范了,课程组给我们了checkstyle小插件,每次提交前都用它测测代码哪儿写的不太规范。(但这个有很多吐槽的,就放建议了)
- 线程安全的消费者-生产者模型感觉已经刻入骨髓了,至少这个暑假都不会忘,伤我太痛了;毕竟花了一个晚上把自己不规范的线程安全跟同学过了一遍,当时真的是感觉彻底掌握了
synchronize-notifyall
这种加锁方式。
三、课程建议
- 预习阶段多给点东西吧/(ㄒoㄒ)/~~,起码把第一单元用的梯度下降加进去,第一周真的很致郁,熬了两个大夜才整明白,差点就挂第一次了。
- checkstyle的规则真的希望能修改一部分,比如import,IDEA会自动变成import *,每次IDEA自动变了后都要删了一个一个找上加入,这个太折磨了。
- 最后就是希望能改进下课时,每个春季学期由于假期必定会冲一次课,然后就因此让OO进入烤漆,这样太考验学生心态了。希望能缩减下,比如第三第四单元现在还比较简单,可以增加点难度,少写一次,让OO尽量跟烤漆错开。
最后,感谢荣老师!感谢课程组各位学长学姐!完结,撒花!o( ̄▽ ̄)ブ