BUAA-OO第四单元博客作业

黄拓远-22371180 学生 2024-06-11 18:48:33

目录

 

本单元所实践的正向建模与开发

正向建模介绍

定义问题

建立模型

参数化

求解和仿真

比较和验证

本单元作业的设计架构,代码与模型的追踪关系

架构设计

追踪关系

四个单元中架构设计思维的演进

四个单元中测试思维的演进

课程收获


本单元所实践的正向建模与开发

正向建模介绍

正向建模(Forward Modeling)是一种通过构建和分析模型来预测系统行为的科学和工程方法。在不同领域中,正向建模有其特定的应用和方法,但其核心思想是从已知的系统参数和输入条件出发,通过模型推导出系统的输出和行为。

正向建模的一般步骤包括:

  1. 定义问题:明确建模的目标和范围。
  2. 建立模型:选择合适的数学方法和工具来构建模型,包括方程、算法和计算方法。
  3. 参数化:确定模型所需的参数和初始条件。
  4. 求解和仿真:使用数值方法或计算机仿真来求解模型,并预测系统行为。
  5. 比较和验证:将模型输出与实际观测数据进行比较,验证模型的准确性和可靠性。

正向建模是一个迭代过程,模型可能需要不断调整和改进,以提高预测精度和可靠性

定义问题

本次作业的目标就是实现一个图书馆系统,完成图书馆所支持的相关业务。

图书馆书架上的所有图书按照 “类别号-序列号” 的形式编制书号。图书分 A、B、C 三类,每种类别可能包含多个图书。

图书馆的运行分为两个时段:白天开馆,夜晚闭馆。开馆后,图书管理系统需要处理用户的各种请求,依据图书馆的运行规则决定是否批准用户的请求;同时,开馆时和闭馆时,图书馆内部依据需要整理各部门的图书,以满足接下来可能处理的各种请求。

开馆时图书管理系统需要处理的请求包括:借书,还书,查询,预约,预约取书,续借和图书漂流。

第三次作业还引入了用户信用分系统,对用户的行为做进一步限制。

建立模型

本单元没有涉及较难的数学方法,至于模型的构建我是把每个部门都构建了一个类,其中根据需要选择了合适的容器用于存放图书。并且添加了方法用于进行一些图书管理的操作。

参数化

本次模型所需的参数有:各个部门用于装书的容器,每个部门独特的一些参数(如user部门的信誉积分)。

求解和仿真

本次作业没有设计这一点。

比较和验证

本单元作业在评测中没有出现任何错误,这也说明了上述建模方法的可行性以及模型的可靠性。

本单元作业的设计架构,代码与模型的追踪关系

架构设计

以下是我第三次作业的uml类图

 

根据提供的类图,代码架构可以分析如下。这是一个典型的面向对象的设计,表示一个图书馆系统,包含多个类及其关系。以下是每个类的描述和它们的职责:

  1. Pinfo

    • 存储与图书相关的信息。
    • 包含图书借阅和预约的状态。
    • 方法包括添加、移除、归还图书,检查过期状态等。
  2. ReserveInfo

    • 存储图书预约的信息。
    • 包含预约的图书ID和状态。
    • 提供方法检查预约状态和相等性。
  3. Ao

    • 提供与图书预约和借阅相关的操作。
    • 方法包括预约图书、归还图书、取消预约等。
    • 通过用户信息和图书ID进行操作。
  4. User

    • 存储用户信息及其借阅的图书信息。
    • 方法包括借阅图书、归还图书、添加积分等。
  5. Bro

    • 管理图书的预约和借阅。
    • 提供预约图书、移除预约、获取预约信息等方法。
  6. Bs

    • 管理图书库存。
    • 提供添加、移除、查找图书的方法。
  7. MainClass

    • 主控制类,管理整个系统的操作。
    • 包含各种用户和图书的操作方法。
  8. Bdc

    • 图书库存管理。
    • 提供添加、移除、查找图书的方法。
    • 管理图书的借阅状态。

类之间的关系:

  • Pinfo 和 ReserveInfo 通过图书ID关联。
  • Ao 使用 UserPinfo 和 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类图的绘画。总的来说收获很多,这门课程不仅教会了我编程技巧,还培养我解决实际问题的能力和系统化的设计思维,为我未来的职业发展打下坚实的基础。

 

 

 

...全文
67 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧