2024春OO课程四单元总结

姜涵章-21375212 学生 2024-06-15 11:17:02

@

2024春OO课程四单元总结

  • 建模过程
  • 架构设计
  • 设计与测试思维演进
  • 第一单元
  • 第二单元
  • 第三单元
  • 第四单元
  • 课程收获
  • 感谢

建模过程

本单元的重点是UML,即希望我们能在编程前先使用UML画出架构图,如类图等,来辅助我们编程,我在本单元的完成过程中,也践行了这种做法,先用建模工具画出了类图,大致分析好了每个类的功能有哪些,每个类的属性有哪些,方法有哪些。类图如下

img

在建模的后编程的过程中,我发现了很多好处

首先,建模可以帮助我们更好地理解问题。在开始编程之前,我需要确切地理解问题的需求和约束条件。通过建模,我可以将问题抽象为一个具有明确输入和输出的模型,从而更好地理解问题的本质。建模可以帮助我们发现隐藏在问题背后的结构和关系,并对问题进行更全面的分析。

其次,建模可以帮助我们设计合适的解决方案。在建模过程中,我们可以选择合适的数据结构和算法,以及确定程序的组织方式和模块划分。通过建模,我们可以在更高层次上思考问题,避免陷入细节,从而设计出更清晰、更高效的解决方案。

最后,建模可以帮助我们减少错误和改动的次数。在建模过程中,我们可以通过逻辑推导和测试验证模型的正确性。通过模型的测试,我们可以发现潜在的问题和漏洞,避免在程序的实现过程中出现错误。此外,建模还可以在开始编码之前发现需求变更,这样就可以避免在程序实现后才发现需求变化,从而减少改动的次数。

架构设计

我将书架,预约台,借还处都设置成了一个类,分别有对应的取书,存书,和整理等方法,将这些方法的具体实现对外隐藏,让外界可以方便的去操作这些柜台。此外,除了main类以外,我还建立了Controller类,其中的方法对应了题目中的每一种操作(如借书,还书,预约等等),由Controller去对各个柜台进行存取和移动,减少了类之间的耦合性。

设计与测试思维演进

第一单元

在完成第一单元时,我对于架构设计并没有什么思路,也不懂得什么是一个好的架构,只会在课程组给的实验代码的基础上进行修改。第一单元中最重要的是层次化设计,从表达式到项再到因子,在不断的重构与思考中,第一单元结束时我得到了一个还算不错的架构。

测试方面,第一单元我搭建了一个简单的数据生成器,由于没时间写检验程序,就采用对拍的方式来验证代码的正确性。虽然简陋,但也帮助我de出了一些bug

第二单元

第二单元的重点是多线程,我也是第一次解除多线程的编程,其中出现了无数线程问题,也是我所有单元中耗时最长的一个单元,但在这一张中我也收获很多,懂了什么是线程安全,如何对共享资源进行保护,如何避免死锁。

测试方面,由于这一单元在代码方面耗时太长,没时间编写评测机,就选择利用别人搭建的评测机来debug(感谢dpo),我也意识到了评测机对作业的重要性,仅靠手动输入数据来测试的效率太低。

第三单元

第三单元重点是JML,相对前两张而言代码量小一些,并且由于JML的存在,架构也基本固定,不太需要自己来进行设计,在此我也体会到了JML对编程的帮助,同时本单元要在满足JML设计要求的前提下进行一些算法的优化,防止超时,我也学到了很多关于图论的算法。

测试方面,我和同学合作写了一个简单的评测机,对我的debug有很大帮助,有了前面的经验,我对于python的掌握也逐渐熟练,同样的,我对于写评测机也愈发熟练。

第四单元

第四单元重点是UML,和第三单元类似,实现逻辑不难,我从中学会了先建模后编程,我也因此获得了一个自认为还可以的架构。由于本单元的时间相较前几个单元较为充裕,我决定从头到尾自己搭建一个评测机,最初评测机的功能只有简单的数据生成和合法性验证,后面我逐渐增加的了数据生成的强度,将不同类型的数据分开测试,并且在合法性验证方面分的更加细节,让使用者通过报错信息能快速的定位自己的错因,我也增加了在报错时将图书馆的信息打印到文件的功能,进一步帮助使用者debug,最后我还自学了一些python的tkinter的知识,尝试为我的评测机搭建了图形化界面,一整套流程下来,我收益颇丰,不断精进了python的使用,也学了一些新知识,同时我也体会到了这其中的乐趣。

课程收获

在oo这门课程中,我的代码量超过了我之前所有的科目,仍然记得在第一单元时面对如此大的代码量和思考复杂度时的心情,但是还好有老师细心的讲解,公众号的推文,同学和助教的帮助,帮助我们挺过难关,正所谓“轻舟已过万重山”,现在回看之前的自己,当时认为无法逾越的困难好像也不过如此,感谢oo带给我的帮助。在知识方面,oo这门课也让我学到了很多东西,包括一门新语言java,面向对象的编程理念和过程,JML,UML,多线程等等,每一单元的题目,都能看出是oo课程组一届一届细心打磨出来的,再包括从中测,强测到互测的流程,让我们能一步一步的检查自己代码的正确性,为下一次迭代做准备。为oo课程组的全体老师和助教们点赞!如果可以的话,我也非常希望能加入oo助教团队,所谓“薪火相传”,进行完自己的oo课程学习后,能够去服务下一届学生们。

感谢

感谢同学提供的灵感和帮助,感谢助教们悉心维护课程网站,随时回答同学的问题,和认真讲解的老师。

...全文
67 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧