272
社区成员




OO第四单元的主题是UML正向建模,旨在从抽象的系统设计(如类图、用例图)出发,逐步推导出具体的代码实现,这需要我们先从逻辑设计出发,再生成可执行代码。
我们在第四单元的三次作业中需要依次完成类图、状态图与顺序图。
Book
的状态,其状态的集合对应着代码中BS
、AO
等枚举变量,相应的状态转移路径的Trigger
就是我们设计的borrow
等方法。我最终的类图如下:
这里我采用了Library
作为核心类,管控BookShelf
、AppointmentOffice
等部门类,而Book
类则是流转在各个组件类间的对象。从层次上看,Library
负责接收各式请求,然后找到对应的Book
和部门,由部门类实现具体的需求并修改Book
的状态。
值得一提的是,由于题目中的动态测评的特殊性。有很多方法我们是不必具体实现的,比如borrow
这一动作,可以看出我并没有在User
类中设计一个完善的容器。这是因为在还书的请求中我们可以直接获取书籍的bookId
,因此我使用的方法是在Library
类中备份全部的书籍,直接添加书籍的记录。
Library
、BookShelf
、AppointmentOffice
等核心类及其关系,后续实现具体代码时反过来修改UML类图;Book
的状态转移关系和其触发方法;一些可能有用的方法:
在第四单元我主要是使用大模型进行代码的填充,如当我需要某个类时,我可能会先定义好其属性并给出一些空方法,随后交给大模型生成具体代码。这些简单的任务大模型的准确率还是可以的,一定程度上也能帮我节省时间。
Expr
拆成Term
和Factor
,体现了架构设计中很重要的分治思想,由此实现化繁为简。ensures
子句等;编写自动化生成数据脚本,构造压力测试数据检验程序是否进行了合理优化。经历了四个单元的学习,我对于面向对象的思想有了更深入的理解。在设计程序时我会优先设计一个合理的架构,并在此基础上实现具体的代码。
当然在这个阶段我们可以借用llm工具来实现,这使我使用大模型辅助代码生成的能力也有了很大的提升。
此外,在代码的具体实现过程中,我也了解了很多面向对象的思想。如常说的高内聚、低耦合,我不再是使用一个几百行的main方法,也学会了根据方法之间的联系和复用程度进行设计。
这为我提供了一个良好的编程习惯。最后对于测试部分,我了解了对于一个程序需要进行哪些方面的测试(回归性测试、单元测试、压力测试等),也使用junit和自搭的测评机实现了程序的测试,效率比起之前靠瞪眼debug有了很大提高。
我的OO课程过的还是比较曲折的,因为自己有主持团的排练任务,周六的下午到晚上会被占用,这正好和OO的最后冲刺时间重合掉了,周中的排练也可能会占用一些时间。尤其是一、二单元,每次交OO都像是一场战争,甚至有一次因为熬夜写OO第二天犯了肠胃炎去医院挂了一天水,但即便如此那一次的OO还是没有写完(悲)。我想OO不但教给了我一个有用的技能,更是一定程度上磨砺了我的心性吧。我大概一辈子也忘不了面向对象设计与构造这门课了!