OO第四单元博客 & 2025OO课程总结博客
前言
又是一个单元的结束,但却是整个OO的结尾,就像沙河图书馆的建成标志着我们在沙河校区的日子结束,图书馆系统的完成也意味着OO告一段落(如此恰好是助教特意安排的嘛/好奇)。本单元核心是UML的学习,以及借助画UML图来正向建模,总的来说本单元的开发难度明显小于前三个单元,不过对于建模及自主架构设计的考察意味更加明显。
本单元正向建模与开发
本单元围绕小型图书管理系统的建构来展开正向建模的学习,需要实现对书籍的管理,以及不同部门的协作。三次迭代作业中,我们分别绘制了UML类图、状态图、顺序图:
- 类图是整个程序的蓝图,反映了代码的组成成分,也即是架构中的一个个模块
- 状态图则刻画了程序的结构,表明程序可能发生的变化
- 顺序图反映的则是程序中不同成分的协作,反映程序是如何运行的
通过这三个图的绘制,从侧面简洁的刻画出了我们代码建构的图书管理系统的面貌。
类图
类图定义了系统的静态结构,是我们整个工程的基石。它清晰地展示了系统中有哪些实体(类)、它们各自拥有什么属性(Attributes)和行为(Methods),以及它们之间存在的静态关系(如关联、继承、实现)。
(图太丑就不贴出来了/哭)本次作业的类设计是按照现实模块映射的思路来设计的,即根据现实的图书馆的功能模块划分来进行图书管理系统的搭建。简单来说就是对应每一个部门和实体,建立一个实体类:

然后根据实际应该具备的功能在对应类中实现对应的方法,如用户的取书和还书,预约处预约等,由此依据类图便实现了以Library为总控,Book为操作单位,其它实体作为协作模块的代码设计。
状态图
状态图描绘了一个对象在其生命周期内所有可能的状态以及状态之间的转换条件和行为。
本次作业要求绘制书籍转移的状态图,以书籍的移动为状态转移的标志,即按照书籍所在的地点为状态即可完成该作业的状态图,包括了bro,ao,bs,hbs,rr,user六个状态,转移的trigger则是由borrow,return,read,restore来实现的。由此便刻画出了书籍的状态变化。
顺序图
顺序图专注于对象之间的交互,它按照时间顺序展示了为完成某一特定功能,各个对象之间是如何通过消息(方法调用)来回通信的。
本次作业要求通过消息发送来刻画用户预约成功到完成取书这一行为的协作图,即需要刻画Library等类通过方法进行通信协作完成这一行为的完整消息链,也就是层层调用的方法,对其添加SendMessage标签即可。
架构设计 & UML模型设计

核心架构
Library:作为主控类,负责接收指令信息,调度给不同的部分进行处理Book:作为所有行为的操作单位,同时也作为数据类记录书籍的各种状态及转移信息User:作为数据类记录用户的各种操作信息以及持有书籍状态
UML追踪关系
- 类图:对应所有类其中的属性以及核心方法
- 状态图:以书籍位置为状态,即书籍的
LibraryBookState属性,以写Trigger注释的方法为状态转移的标志 - 顺序图:由
Library发送消息给AppointmentOffice,将书籍转移至预约处,再由用户向预约处发送取书请求,若有则成功取书,无则取书失败
大模型辅助正向建模
大模型的使用主要在于实验课上学习了ROSES架构和链式引导,在实际大模型使用体验上,这确实是一套很适合的引导方向,采用这种方式提问能够较为清楚的说明问题,也能够更好的引导大模型生成的代码和架构。
四个单元架构设计的演进
四个单元的架构设计,明显是一个粗糙到细致,逐渐完善的过程:
- 第一单元:第一单元是表达式化简,着重于递归下降的整体架构,但是在迭代的过程中需要修改的地方较多,实现的功能也比较散,没有很好的实现高内聚低耦合的架构
- 第二单元:主要依赖于实验所提供的多线程提供方式,在其上进行自己的改动,实现的架构逻辑较为清晰,但是自己的设想架构部分较少
- 第三单元:完全按照JML进行架构设计,除了具体实现上加入了一些动态维护的东西,总体架构还是很不错,不过也主要是课程组给的功劳
- 第四单元:较为清晰的架构,能够根据不同功能实现不同的所需的类,完全自主搭建的架构,也很好的实现了高内聚低耦合,实现的较为完整
四个单元测试思维的演进
- 第一单元:主要采用黑盒测试,采用测评机的暴力测试方法,使用sympy库进行化简对比,同时加上一些简易的手搓数据点
- 第二单元:完全依赖测评机,少量加上一些高并发数据,即短时间投入大量数据。
- 第三单元:依赖于对拍的测评机,在宿舍之间与几个同学之间进行对拍测试,加上手动构造一些测试TLE的数据点
- 第四单元:依赖其它同学提供的测评机以及想到的一些小数据点
课程收获 & 感想
伴随着图书馆大门的关闭,OO课程也到了尾声,一个半学期的陪伴,也到了尽头。想起oop第一次打开idea开始创建第一个Java文件的捉襟见肘,到现在快速实现的图书馆小系统的迭代,就有颇多感概。一年半的面向对象的学习结束,我想我也成功的从面向过程的编程思想中脱离了出来,不再是一main到底,也不再是重度堆积MainClass。
总的来说,虽然OO课就这么结束了,但是还是很喜欢OO所带来的实实在在的充实感和成就感,也很喜欢那些绞尽脑汁debug的时间,这种课程制度也确实很好的激发了我的学习兴趣。在最后,也感谢课程组的老师和助教们的努力工作,感谢一学期以来的陪伴。/撒花/撒花
相关推荐
北航OO课作业代码
北航OO课的作业代码,从电梯到出租车,你想要的都在里面。注释充足,供有需要的同学参考(切勿抄袭哦~)
【异常】The template string is not valid.] with root cause: ‘“1/2/3“‘ came as a complete surprise to me
此错误的核心是,需仔细检查占位符格式、变量名有效性及特殊字符转义。通过日志输出和单元测试可快速定位问题。若涉及动态生成模板,需确保数据源的可靠性。
ALV OO 模板
ALV OO 模板
ABAP OO的八个理由
1.ABAP OO具有更高层次的数据封装性 2.ABAP OO可以实现一个类的多个实例 3.ABAP OBJECT通过继承进一步增强了程序代码的可重用性 4.ABAP OO是你可以通过接口(interface)来调用对象的业务逻辑,而不是直接去使用对象,这样就避免了你需要详细了解每一个对象的特定功能 5.ABAP OO非常容易与事件驱动的模式结合在一块 6.ABAP OO更加明确所以更易于使用 7.ABAP OO具有更加清晰的语法和语义规则 8.ABAP的一些新技术只能通过ABAP OO来实现
ephec_java_oo:2014-2015 年 Java OO 课程期间进行的练习
Java 面向对象编程 在“Java Object Oriented Programming”课程期间进行的练习 - EPHEC 2014-2015


