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( ̄▽ ̄)ブ

posted on 2022-06-23 17:07  martinriven  阅读(11)  评论(0编辑  收藏  举报