BUAA-OO 第四单元总结

徐琬莹-23373432 2025-06-12 20:27:50

第四单元总结

正向建模与开发

正向建模与开发是指在系统工程或软件开发中,从需求出发逐步构建解决方案的方法。强调从抽象到具体的设计流程,是一种自顶向下的软件设计过程,从而对系统架构有一个整体把握。
本单元围绕图书馆管理系统,模拟借书、还书、查询、预约、取书、阅读、归还和用户积分等功能,完成图书馆所支持的相关业务。在开始写代码前,我先根据图书馆的功能划分了几个类,思考每个类内部的属性和方法,初步绘制一个简单的 UML 类图,编写代码时再进行修改和完善。

架构设计

最终的 UML 类图如下:

img

  • Book:书籍,记录书的 id、历史移动轨迹、预约日期、借阅日期以及是否为热门图书。
  • BookShelf:书架,存放图书馆的书,并记录用户的预约信息。
  • AppointmentOffice:预约处,为用户保留预约的书,处理取书请求,并将逾期未取的书放回书架。
  • BorrowAndReturnOffice:借还处,存放用户归还的书籍。
  • ReadingRoom:阅览室,存放用户阅读且未主动归还的书籍。
  • UserTable:用户平台,记录用户的信用积分和借阅的书籍。
  • Library:图书馆,统一管理各个部门,实现各部门的协作,对用户请求进行合理性检查并发送到对应的部门。
  • Main:主类,处理输入信息,并传给图书馆。

代码设计和 UML 模型设计之间的追踪关系

UML 图是抽象的设计规格说明,代码是具体的实现。类图确保与代码中的类、成员变量、方法签名严格一致,状态图确保转移逻辑被准确实现,顺序图确保消息的顺序和类型在代码中得到正确体现。

引导大模型在复杂场景中完成架构设计任务

为什么在复杂场景下大模型容易“翻车”?原因主要有以下几点:

  • 需求模糊性: 复杂场景需求天然存在歧义、矛盾或隐含条件,大模型易基于片面理解生成“合理但不完全正确”的方案。
  • 约束复杂性: 性能、成本、可维护性等多维度约束交织,大模型难以自动权衡优先级和冲突。
  • 抽象与落地的断层: 能生成高层概念,但在关键细节上容易出现技术漏洞或不可行方案。

因此,在复杂场景中使用大模型辅助正向架构设计,需要一套系统化、迭代式的人机协作策略,分为以下四个阶段:

  1. 解构复杂需求:将庞大需求拆解为多个子问题,明确每个子问题的输入、输出、功能作用和约束条件。
  2. 分层迭代式引导架构设计:给出具体步骤,每一步需要做什么,可提供设计模式示例,并要求大模型结合具体场景评估优劣。
  3. 审查漏洞:要求大模型从安全、性能、扩展性等角度主动寻找漏洞,列出可能出现异常的极端情况及应对方案。
  4. 反馈闭环:根据逻辑矛盾或不符合约束之处,要求其修正完善并解释原因。

将大模型应用于复杂架构设计的本质,是用其“超级联想”和“知识蒸馏”的能力扩展人类工程师的思维广度,再通过人的批判性思维和工程经验进行深度收敛,提高设计效率,但需记住:大模型只是副驾驶,我们才是掌控方向的机长。

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

第一单元

本单元的主题是表达式展开与化简,重点是掌握递归下降的算法,同时以正则表达式作为辅助。将一个包含加、减、乘、乘方、括号、三角函数、自定义递推函数和普通函数以及求导因子的多变量表达式变形展开,自顶向下地建立一棵表达式树。经过本单元的三次迭代,我学会了层次化设计的思想,且架构要有可扩展性以满足迭代需求。

第二单元

本单元的主题是多线程,我掌握了多线程的基本知识和生产者-消费者模式,理解了调度器的作用与实现方法,能够利用锁来处理并行任务和共享资源竞争,解决线程安全问题。

第三单元

本单元的主题是社交网络,我学会了规格化设计,通过前置条件、后置条件和副作用范围限定,严格定义模块行为。但 JML 规格定义只是描述一个方法或属性的功能和效果,并不限制采用何种数据结构和算法;而实现则需要考虑具体算法和数据结构,不仅要保证正确性,还需考虑性能,也就是规格与设计分离。

第四单元

本单元的主题是图书馆管理系统,采用正向建模与开发,从需求出发自顶向下地逐步构建解决方案,从而对系统架构有一个整体把握。先根据图书馆的功能划分出几个必要的类,思考每个类内部的属性和方法,初步绘制一个简单的 UML 类图,编写代码时再进行修改和完善。

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

  • 写完代码后,利用样例或自己试几个简单的数据进行基础测试。
  • 通过 Junit 编写自动化测试,并尽可能地覆盖各个属性、方法和分支。
  • 利用评测机大量地进行随机测试,并对数据做一些约束,防止因数据过于随机而没有什么参考性。
  • 手动构造极端数据进行压力测试。

课程收获

OO 伴随了整个学期,从第一单元的表达式,到第四单元的 UML,我深刻理解并实践了面向对象构造与实际的核心思想,封装不仅仅是属性隐藏,更强调职责的边界划分;继承不仅是代码复用,更重要的是建立类型层次结构;通过父类引用或接口引用操作子类对象,增强了系统的可扩展性和可维护性;能够使用类图、顺序图和状态图清晰、规范地表达设计思路,提升了建模与设计表达能力。
OO 这门深刻而富有挑战的课程即将落下帷幕,回首这段学习历程,这门课带给我的,远不止于掌握若干设计模式或绘图技巧,它更像是一场深刻的思维革命。未来,无论是在开发实践中打磨代码,还是在架构设计上运筹帷幄,这段宝贵的经历和习得的能力都将是我坚实的基石。
感谢老师和助教团队的辛勤付出!也感谢并肩作战的同学们!

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

272

社区成员

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

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