272
社区成员




相比于前几个单元的直接开发,本单元的特色就是先使用 UML 类图正向建模再写代码。先正向建模有助于提前暴露设计缺陷,如:循环依赖、职责分配不合理等。相比于后期代码重构的时间成本来说,修改类图设计通常更快。此外,在团队开发中,先使用 UML 正向建模可以快速让团队了解每个类的职责。
本单元最终类图如下
架构避免了 Book
类与 Student
类的双向关联。Student
拥有的若干 Book
实体由 Student
类记录,但是 Book
对应的 Student
信息则由 Library
类记录,保证 Book
仅保留其作为书本的基本信息。
需要构建高质量上下文,给大模型明确的目标和约束。例如:“你需要构建一个图书管理系统,它需要有xxxx功能,必须借助课程组给的官方包辅助构建”
不过,此时大模型给出的架构困难可能有不少冗余设计、循环依赖等问题,因此大模型给出的架构仅供参考。
在前两个单元,并不存在很多对架构设计的思考,是直接想到什么写什么,如果发现有地方实现不合理就返回直接改代码。
不过在第四单元,我预先使用 UML 进行建模,提前对架构完成了初步构思。尽管在实际实现过程中并没有完全按照初版 UML 类图去写,对架构进行过一定的微调,但这是一次成功的正向建模的尝试。
第一第二单元,我主要采用评测机即黑盒测试的方法,对程序的整体进行测试。
在第三单元,由于每个方法都有明确的 JML 规格,因此单元测试的性价比拉满,我会对一些具体实现与 JML 描述差异较大的方法进行 Junit 测试。而黑盒测试虽然也可以检查出程序的 bug,但在这个单元就没什么性价比了。
最大的收获就是对 Java 这门语言的一些核心特性的掌握,包括各种容器、类的继承、多线程编程、异常处理等。
其次是面向对象编程的思想。这门课程使我在面对规模比较大的问题时,以面向对象的角度去思考问题。尽管面向对象编程的代码量通常比函数式编程大,但是可读性强,易于维护,在多次迭代的场景中很有优势。
最后是对于时间分配的技能。OO 课程压力大,任务重,而 OS 的铁拳也很硬,这就要合理分配时间与精力。