272
社区成员




随着第四单元的结束,本学期的OO课程也进入尾声。下面进行总结。
目录
第四单元主要学习UML图的绘制。单元背景是在一所小型图书馆内开发一个小型图书管理系统。
本单元的正向建模开发主要需要我们先建立一个良好的架构。可以发现其实从代码实现难度的角度看,本单元作业并不困难。第一次作业除了需求理解方面基本没有难度。所以单元考察的主要是我们首先建立一个合理的恰当的架构,既清晰明了地运转代码,又能更好地迭代开发。
我的架构首先在Main类里进行Parse初始化,在Parse类里进行输入解析,然后建立了Library,Book,User,Shelf,AppointmentDesk,BorrowAndReturnDesk,Order等几个抽象出的类,后续还有HotShelf,CommonShelf,和ReadingRoom类。这几个类可以分工明确的完成题目的所有需求。
在架构设计时,主要需要我们画出类图、顺序图和状态图。
本单元我会使用大模型进行需求分析。主要把指导书和我的架构先后喂给大模型,让大模型先分析需求,生成一个架构,然后分析我的架构能否满足指导书中的所有需求。
不过,直接让大模型读指导书生成代码或架构不太现实,结果也不尽如人意。需要像实验课那样给予提示。
本学期学习了四个单元的课程,分别是表达式(递归下降),电梯(多线程),社交网络(JML),图书馆管理系统(UML),获取了许多知识。我有许多收获。这点在研讨课上已经有了分析,并和同学们分享。
手忙脚乱是我第一单元最好的写照。由于一个寒假没有学习Java和面向对象思维的代码,我再次完成OO课程作业十分困难。出现了很多因为不适应面向对象思维,不熟悉java代码的错误,开发也相对困难。
同时,由于只满足于中测通过,而中测和强测测试点强度相差甚大,导致我第二次强测全军覆没。
但研讨课这种全新的教学方式让我收获很多。研讨课后我学习了同学的代码架构,对我的架构进行了重构,debug成功。
相对第一单元不那么慌乱,但由于多线程的难度还是出现许多问题。主要问题在于共享变量的同步控制。架构设计倒是其次,主要在debug。
dubug方面,轮询、死锁、超时,运输逻辑错误是最多出现的问题。经过长时间的debug训练,我更加熟练掌握了打断点和通过print输出来debug的方法。
学习了JML规格,明白如何阅读并根据JML规格撰写代码。
首先,如何利用大模型帮助我们实现代码开发。大模型可以帮助我们阅读JML,分析需求,并提供初步的代码实现。对于简单的方法和类的实现,大模型根据JML规格可以完成的十分优秀。但是对于复杂度高的方法,JML规格往往只给出最简单粗暴的逻辑,复杂度十分高,大模型也往往只会根据JML规格给出高复杂度方法。这需要我们自行开发方法降低复杂度。如果想用大模型辅助,需我们给好充足的提示词,如采用什么方法(算法),哪一步干什么等。
然后debug方面主要也是某些方法复杂度过高引起的RTLE。阅读讨论区可以得到“动态维护属性”的方法,十分有效的解决了问题。
本单元学习了UML的相关知识,前文已经详细阐释,不再赘述。