UML正向建模与开发总结

24371113-刘鑫杰 2026-06-27 22:49:54

第四单元的训练以一个小型图书馆管理系统为背景,重点锻炼我们对程序架构的设计和抽象能力,以及UML建模能力,包括类图、状态图和顺序图。本单元共经历两次迭代作业,第一次作业完成了图书馆的基本借阅、还书、预约、取书和查询功能,第二次作业在原有基础上新增了精品书架、评分、阅读、归还四项功能。在整个单元的实践中,我完成了从需求分析到UML建模再到代码实现的完整正向建模流程,对UML在软件开发中的作用有了更加深入的理解。

 

本单元所实践的正向建模与开发,其核心思路是首先对系统需求进行充分分析,识别出系统中的关键实体、业务流程和状态转换,然后通过UML图形化语言将分析结果显式地表达出来,最后依据UML模型进行代码实现。在这一过程中,两阶类图发挥了至关重要的作用。一阶类图主要用于需求分析和概念建模阶段,它关注的是系统中有哪些核心类以及类之间的大致关系,不涉及过多的方法细节和属性类型。在我的实践中,一阶类图帮助我快速梳理出图书馆管理系统中的核心实体,包括图书、图书副本、用户、书架、借还处、预约处、阅览室、评分处等,以及它们之间的基本关联关系。第二次作业新增的精品书架概念在一阶类图中体现为书架类的子类或属性扩展,评分功能则引入了评分记录类。通过一阶类图,我能够在投入编码之前就对系统的整体结构有一个清晰的把握。二阶类图则是在一阶类图的基础上进行深化和细化,它需要精确到每个类的属性类型、方法签名以及更为细致的关联关系,包括多重性、导航方向等。在二阶类图的设计过程中,我不得不仔细思考每个方法的输入输出、每个属性的具体类型以及类之间的协作方式,例如图书状态转换相关的检查方法、评分计算和精品书架判定逻辑的接口设计等。两阶类图的分阶段设计有效降低了从需求到代码之间的认知跨度,使得建模过程更加可控和有序。

 

在本单元作业的架构设计中,我采用了分层架构的思想,将整个图书馆管理系统划分为业务门面层、业务逻辑层和数据存储层。业务门面层负责解析用户输入指令并调用相应的业务逻辑方法,业务逻辑层封装了图书馆的各项业务流程,包括借阅、还书、预约、取书、阅读、归还、评分、查询,数据存储层则负责图书信息、用户信息、借阅记录和评分记录等数据的存储和检索。第二次作业新增的阅读流程要求用户从书架取书前往阅览室阅读,且当日阅读后未归还则无法再次阅读,这需要在业务逻辑层新增阅读管理和阅览室状态维护的模块;归还流程允许用户将阅读后的图书归还至借还处;评分流程则要求维护每个ISBN号的评分记录并计算平均分;精品书架功能要求每次开馆前整理后根据评分将图书分配至普通书架或精品书架。最终的代码设计与UML模型设计之间存在着紧密的追踪关系,从静态结构来看,代码中的每个类都可以在二阶类图中找到对应的模型元素;从动态行为来看,顺序图中描述的消息交互序列可以直接映射到代码中方法调用的顺序,状态图中定义的状态转换则可以映射到代码中对象状态的变更逻辑。特别是第二次作业新增的图书状态变化路径,图书从书架可以被借阅到用户手中,也可以被阅读到阅览室,阅读归还后进入借还处,整理后再回到书架,这一完整的状态转换路径在状态图中得到了清晰的定义,并直接指导了代码实现中图书位置状态的枚举定义和转换检查逻辑。在实际编码过程中,我始终以UML模型作为指南,每实现一个类或方法都会对照模型检查一致性。

 

在本单元的开发过程中,我尝试使用大模型辅助正向建模,在复杂场景中完成架构设计任务。通过实践,我总结了引导大模型在复杂场景中完成架构设计任务的一些经验。首先,大模型需要充分的上文信息才能做出合理的架构设计决策,因此在使用大模型之前,我需要将需求文档中的关键信息进行整理和提炼,以结构化的方式呈现给大模型,包括核心业务实体、关键业务流程、系统约束条件等,第二次作业中新增的精品书架判定条件、阅读流程的当日限制、评分取整规则等都需要明确告知模型。其次,大模型的输出往往是一个相对通用的设计方案,我需要结合具体场景进行定制化调整,不能完全照搬,例如大模型给出的整理策略可能过于理想化,未考虑到每本图书在一次整理中仅能移动一次的限制条件。再次,大模型在架构设计中容易出现遗漏边界情况的问题,比如信用分系统或逾期处理等,这需要我进行人工审查和补充。最后,引导大模型完成架构设计的最佳方式不是一次性提出全部需求,而是采用迭代式的对话方式,先让大模型给出整体框架,然后逐步深入各个模块的详细设计,每次聚焦于一个具体的设计问题,例如先讨论整体类结构,再深入讨论整理流程的策略设计。

 

回顾四个单元的架构设计学习历程,我的架构设计思维经历了一条从模仿到理解再到自主设计的演进路径。第一单元表达式求值让我初次接触到了面向对象的设计思想,学会了如何将问题域中的实体映射为程序中的类,但当时的架构设计更多地是对已有框架的模仿。第二单元电梯调度则让我真正开始思考架构设计的重要性,多个电梯之间的协作、调度策略的可扩展性等问题迫使我在编码之前进行更为系统的设计,我开始关注接口与实现的分离、设计模式的应用以及模块之间的松耦合。第三单元的JML规格驱动开发让我从契约式设计的角度重新审视架构设计,规格成为架构设计中不可或缺的一部分。到了第四单元的UML正向建模,我终于建立起了从需求分析到UML建模再到代码实现的完整设计流程,一阶类图和二阶类图的引入让我在设计阶段就能对系统进行多视角的审视,状态图帮助我捕捉图书在普通书架、精品书架、阅览室、借还处、预约处和用户手中等不同状态之间的转换,顺序图则帮助我梳理借阅、预约、取书、阅读、归还和整理等复杂业务流程中对象之间的消息交互顺序。四个单元的学习让我逐渐认识到,架构设计不是一个一次性的活动,而是一个贯穿整个开发过程的持续演进过程。

 

测试思维同样经历了从简单到系统的演进过程。在第一单元,我的测试主要依赖于手动构造样例和随机测试,缺乏系统性的测试策略。第二单元开始,我意识到了性能测试的重要性,电梯调度中不同调度策略对性能的影响需要通过专门的性能测试来评估。第三单元的JML规格驱动开发彻底改变了我的测试方式,规格的存在为测试提供了精确的预言,JUnit测试成为验证代码正确性的重要手段。到了第四单元,UML模型成为测试设计的重要依据,类图帮助我理解系统的静态结构以设计单元测试,状态图帮助我理解图书状态的合法转换路径以设计状态相关的测试用例,顺序图帮助我理解模块间的交互以设计集成测试用例。针对第二次作业新增的评分功能,我专门测试了评分取整逻辑和精品书架判定条件的正确性;针对阅读和归还流程,我设计了涵盖正常阅读、未归还时再次阅读、跨日归还等场景的测试用例;针对整理流程,我特别关注了在借还处有书、阅览室有书、预约处有逾期书等情况下开馆前整理的正确行为。四个单元的学习让我建立起了一套从单元测试到集成测试再到场景测试的完整测试体系。

 

最后,总结自己在OO课程中的收获。首先是形式化规格和模型思维的建立,JML规格和UML模型让我学会了用精确的语言和图形来表达设计和需求,这种精确表达的能力对于团队协作和大型软件开发至关重要。其次是测试驱动开发的习惯养成,规格和模型的存在让测试不再是事后补充,而成为验证设计和实现正确性的核心手段。再次是复杂系统拆解与架构设计的能力,通过四个单元不同规模的系统开发实践,我学会了如何在面对复杂问题时进行合理的模块划分和架构设计。此外,互测环节的经历让我体会到了代码审查的重要性,通过阅读和理解他人的代码,我不仅发现了自己代码中的不足,也学习到了许多优秀的编程习惯和设计思路。最重要的是,OO课程让我认识到软件工程不仅仅是编码技术,更是一种系统化的思维方式,从需求分析、架构设计、详细设计到编码实现、测试验证,每个环节都有其独特的重要性。这门课程虽然已经结束,但它所培养的面向对象思维、规格化开发理念和系统化测试方法,将在我未来的学习和职业生涯中持续发挥作用。

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

309

社区成员

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

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