272
社区成员




最终代码是UML具象化的实现,代码的复杂逻辑和行为通过 UML 展示会更加清晰。
正向建模,在迭代开发中,我会先在 UML 类图中进行类的简单设计,再在代码中补充具体细节,遇到问题后,再修改原有的类图,二者是相互推进,共同迭代的关系。
对于状态图,我会先绘制状态图明确状态转移条件,再实现代码。
对于顺序图,我会先梳理出对象交互后再编码。
类图表示了不同的类之间的关联、继承等关系,也展示了类的参数与方法。
状态图反应了书本在不同位置的移动,以及移动所需要调用的方法。
本单元中我设计了bookshelf类对书籍进行统一管理,通过database类对student进行统一管理。设计了appointment_office、borrow_return_office、reading_room三个类进行书籍借阅归还、阅读的处理。后续还增加了hot_bookshelf类对热门图书进行管理。
辅助架构设计:在完成本单元任务时,我使用了大模型生成初始类图建议,然后对其进行人工调整。
代码测试:我会使用大模型辅助构建评测机和生成数据。
引导大模型在复杂场景中完成架构设计任务时,应该确保向大模型提出的要求没有二义性,让模型对设计模式和测试策略提供建议,并生成基础的代码片段,并通过对话,规范大模型的思考和答案。
Unit1
实现了表达式的展开化简,要求按照表达式、项、因子梯度下降处理。
Processer类用于简化输入,去掉输入中的空白符,合并连续的加减号,便于后续处理。
Lexer类中将输入的字符串识别为一系列Token便于后续解析。
Parser类对Lexer输出的Token进行解析。在Parser中用parseExpr(),parseTerm(),parseFactor()三个方法,通过递归下降的方式,将输入Tokens解析为表达式、项、因子。针对不同的因子,都继承Factor类,使代码更加简洁。
对每一个Factor都有toPoly方法。toPoly方法通过逐层向上将输入转化为Poly,然后用Poly中的toString方法将Poly转化为字符串输出。
Unit2
学习了多线程,主要有三个线程:输入线程、分配线程、电梯线程
synchronized
关键字修饰从而进行同步控制。同时当这两个类中没有需求而输入未结束时,它们会进入等待让出锁,直到接受到新的需求时被唤醒。Unit3
要求根据JML
完成代码,但我们需要进行规格与实现的分离。
JML
给出的示例为静态数组,在真实实现中往往处理较为复杂而且性能较差,我们需要自行选择合适的数据结构例如动态数组或哈希表JML
的方法为遍历,性能较差,我们需要自己选择合适的算法或者进行维护,尽量优化性能Unit4
是UML
正向建模,要求我们完成一个图书管理系统
Unit1
并没有进行自动化测试,但是因为要开始hack别人,所以我会自己捏造一些边界数据等等,用这些数据对自己的代码进行测试,然后去hack别人。
Unit2
我开始使用测评机测试,这样基本上我的bug都能够测试出来。
Unit3
输出一致,只能进行对拍,我用评测机生成测试数据然后和室友比较输出是否一致。
Unit4
代码较为简单,没有进行自动化测试。
经过一个学期OO课程的训练,我在代码架构设计、代码测试能力、大模型应用等等方面都有了重大提升。OO课程的学习过程中结果遇到了许多问题,有一些单元的结果也不尽人意,但是我的java代码水平得到了确确实实的提高,我深刻感受到了自己的进步。
最后,OO完结散花!!!