目录
本单元所实践的正向建模与开发
正向建模介绍
定义问题
建立模型
参数化
求解和仿真
比较和验证
本单元作业的设计架构,代码与模型的追踪关系
架构设计
追踪关系
四个单元中架构设计思维的演进
四个单元中测试思维的演进
课程收获
本单元所实践的正向建模与开发
正向建模介绍
正向建模(Forward Modeling)是一种通过构建和分析模型来预测系统行为的科学和工程方法。在不同领域中,正向建模有其特定的应用和方法,但其核心思想是从已知的系统参数和输入条件出发,通过模型推导出系统的输出和行为。
正向建模的一般步骤包括:
- 定义问题:明确建模的目标和范围。
- 建立模型:选择合适的数学方法和工具来构建模型,包括方程、算法和计算方法。
- 参数化:确定模型所需的参数和初始条件。
- 求解和仿真:使用数值方法或计算机仿真来求解模型,并预测系统行为。
- 比较和验证:将模型输出与实际观测数据进行比较,验证模型的准确性和可靠性。
正向建模是一个迭代过程,模型可能需要不断调整和改进,以提高预测精度和可靠性
定义问题
本次作业的目标就是实现一个图书馆系统,完成图书馆所支持的相关业务。
图书馆书架上的所有图书按照 “类别号-序列号” 的形式编制书号。图书分 A、B、C 三类,每种类别可能包含多个图书。
图书馆的运行分为两个时段:白天开馆,夜晚闭馆。开馆后,图书管理系统需要处理用户的各种请求,依据图书馆的运行规则决定是否批准用户的请求;同时,开馆时和闭馆时,图书馆内部依据需要整理各部门的图书,以满足接下来可能处理的各种请求。
开馆时图书管理系统需要处理的请求包括:借书,还书,查询,预约,预约取书,续借和图书漂流。
第三次作业还引入了用户信用分系统,对用户的行为做进一步限制。
建立模型
本单元没有涉及较难的数学方法,至于模型的构建我是把每个部门都构建了一个类,其中根据需要选择了合适的容器用于存放图书。并且添加了方法用于进行一些图书管理的操作。
参数化
本次模型所需的参数有:各个部门用于装书的容器,每个部门独特的一些参数(如user部门的信誉积分)。
求解和仿真
本次作业没有设计这一点。
比较和验证
本单元作业在评测中没有出现任何错误,这也说明了上述建模方法的可行性以及模型的可靠性。
本单元作业的设计架构,代码与模型的追踪关系
架构设计
以下是我第三次作业的uml类图

根据提供的类图,代码架构可以分析如下。这是一个典型的面向对象的设计,表示一个图书馆系统,包含多个类及其关系。以下是每个类的描述和它们的职责:
-
Pinfo
- 存储与图书相关的信息。
- 包含图书借阅和预约的状态。
- 方法包括添加、移除、归还图书,检查过期状态等。
-
ReserveInfo
- 存储图书预约的信息。
- 包含预约的图书ID和状态。
- 提供方法检查预约状态和相等性。
-
Ao
- 提供与图书预约和借阅相关的操作。
- 方法包括预约图书、归还图书、取消预约等。
- 通过用户信息和图书ID进行操作。
-
User
- 存储用户信息及其借阅的图书信息。
- 方法包括借阅图书、归还图书、添加积分等。
-
Bro
- 管理图书的预约和借阅。
- 提供预约图书、移除预约、获取预约信息等方法。
-
Bs
-
MainClass
- 主控制类,管理整个系统的操作。
- 包含各种用户和图书的操作方法。
-
Bdc
- 图书库存管理。
- 提供添加、移除、查找图书的方法。
- 管理图书的借阅状态。
类之间的关系:
- Pinfo 和 ReserveInfo 通过图书ID关联。
- Ao 使用 User、Pinfo 和 ReserveInfo 来实现图书预约和借阅。
- User 和 Bro 关联,管理用户的借阅和预约信息。
- Bs 管理图书库存,Bdc 也是图书库存管理的一部分。
- MainClass 作为主控制类,调用其他类的方法来实现系统的功能。
这种架构体现了面向对象编程的基本原则,类与类之间通过组合和关联来实现复杂的功能,每个类有明确的职责和方法。
追踪关系
三次作业中我都是先写代码再根据代码画uml图的,所以就是根据每次作业的要求添加一些东西,然后将其添加到uml图中,没有显示很明显的追踪关系。
四个单元中架构设计思维的演进
第一个单元:递归下降解析表达式
架构设计思维:
- 模块化设计:将表达式解析过程分解为多个模块,每个模块负责处理不同类型的操作符和操作数(如加法、乘法、括号等)。
- 递归实现:需要理解递归的基本概念和递归调用栈,设计一个递归下降解析器来解析和简化表达式。
- 基础数据结构:介绍基本数据结构如栈(用于处理操作符和操作数),帮助理解递归和解析过程。
第二单元:多线程电梯系统
架构设计思维:
- 面向对象设计:通过设计电梯类、电梯控制系统类和请求类,帮助理解面向对象编程的基本原则。
- 并发和线程管理:引入Java的多线程编程模型(如Thread类和Runnable接口),讲解线程的创建、启动和管理。
- 同步和互斥:讨论线程同步的概念,如synchronized关键字、锁和条件变量,确保线程安全。
- 事件驱动设计:设计一个事件驱动系统,电梯系统响应用户请求,并通过事件处理机制调度电梯运行。
第三单元:JML规格
架构设计思维:
- 形式化规范:学习JML语法和语义,帮助理解如何为程序设计形式化规范,定义前置条件、后置条件和不变式。
- 契约式编程:讲解契约式编程思想,通过编写JML规格定义方法的行为契约,确保程序正确性。
- 模块化验证:通过模块化设计,逐步验证每个模块的正确性。
第四单元:UML类图
架构设计思维:
- 系统建模:介绍UML类图的基本元素(类、属性、方法、关系等),理解如何建模系统的静态结构。
- 抽象和设计:通过UML类图进行系统设计和抽象,强调设计原则如封装、继承、多态性等。
- 工具使用:学习使用UML建模工具(如StarUML、Visual Paradigm)创建和管理UML类图。
四个单元中测试思维的演进
在第一单元中,我是通过自己构造一些数据来测试的,但是发现效果不好,后面就全部使用他人的评测机了,一直到学期结束,所以测试思维没什么变化。
课程收获
学会了递归下降以及其在代码设计中的使用,学会了多线程的编程以及注意事项。学会了jml规格以及契约式设计。学会了uml类图的绘画。总的来说收获很多,这门课程不仅教会了我编程技巧,还培养我解决实际问题的能力和系统化的设计思维,为我未来的职业发展打下坚实的基础。