309
社区成员
发帖
与我相关
我的任务
分享本单元以图书馆管理系统为背景,重点考查正向建模、UML 表达与代码实现之间的一致性。类图、状态图和顺序图分别对应静态结构、状态迁移和对象协作,是对系统设计的不同侧面描述。
本单元的主要任务是从需求中提取稳定的对象和状态。随着规则迭代,若仅按输入命令组织代码,业务逻辑会分散在流程判断中,后续扩展和检查都会变得困难。因此,本单元开发的重点在于明确各对象负责的内容,并将可变行为落实为可检查的状态迁移。
类图承担静态建模作用。第一阶段类图用于给出初始对象划分,明确系统中主要概念及其依赖关系;第二阶段类图则应与最终代码保持一致,反映实现后的真实结构。两阶段类图的对比说明,建模需要随实现过程持续修正。
状态图用于描述复本生命周期。图书馆系统中,复本位置变化比单条命令更能体现系统状态。普通书架、精品书架、借还处、预约处、阅览室和用户手中构成主要状态集合。将这些状态及迁移条件显式化,有助于检查代码中的移动操作,避免遗漏不合法的状态转换。
顺序图用于刻画一次业务请求中的对象协作。它关注消息发送顺序、服务对象职责和状态修改位置。通过顺序图可以检查类图中的静态关系是否具备实际调用支撑,也可以发现业务流程中过度集中或职责范围不清的问题。
本单元中,UML 的作用应理解为设计校验工具。类图检查对象划分是否合理,状态图检查状态空间是否完整,顺序图检查对象协作是否清晰。三者之间应形成一致的解释体系。
代码实现会反向暴露模型问题。某些初始设计中的类在实现后可能缺少实际职责,某些状态迁移则可能在早期模型中被忽略。第二阶段类图的价值在于依据最终代码修正模型,使 UML 准确反映系统结构。
因此,本单元的架构设计过程可以概括为:先建立领域模型,再通过实现验证模型,最后用 UML 记录并修正模型。模型与代码之间的往返校准,是本单元区别于单纯编码任务的主要特点。
首先,应引导大模型从指导书中抽取稳定概念和变化点,先形成问题域模型,再讨论代码结构。稳定概念通常对应候选类,变化点通常对应状态或业务规则。
其次,应要求大模型明确每个对象负责的内容,并说明对象之间的依赖关系。该步骤可以直接服务于类图设计。
再次,应将生命周期和对象交互分开建模。状态变化适合用状态图描述,业务流程适合用顺序图描述。分开分析可以使模型更清晰。
最后,应让大模型对架构进行复核,检查职责分配、状态迁移、业务判断和 UML 与代码的一致性。通过这种分阶段引导,大模型可以较好地支持从需求到设计再到实现检查的过程。
四个单元体现了架构设计关注点的逐步扩展。初期更关注如何将功能拆分为类和方法;后续逐渐转向对象结构、并发协作、规格要求和模型表达之间的协调。
第一单元使我认识到,递归结构需要通过对象层次承载。第二单元表明,并发程序的设计重点包括功能分解、调度责任和共享状态管理。第三单元强调规格对实现的要求,使方法行为具备可验证性。第四单元进一步要求通过 UML 表达对象、状态和交互,并与代码保持对应。
由此可见,架构设计的核心在于为变化和规则提供明确位置。类的存在、状态的转移、方法的副作用,都应能在设计中得到解释。
测试思维也从结果验证转向过程和状态验证。早期测试主要检查输入输出是否符合预期;随着任务复杂度上升,测试对象扩展到执行过程、对象状态和方法副作用。
第二单元要求关注线程调度过程中的合法性,同时检查最终乘客是否到达。第三单元要求依据 JML 检查方法执行前后的对象状态。第四单元则需要通过连续场景测试跨日整理、预约失效、逾期扣分、续订和归还等组合规则。
因此,有效测试需要覆盖单条指令的正常路径,也需要覆盖状态叠加后的系统行为。对于面向对象程序,测试也是对职责划分和状态设计的检验。
本课程加深了我对面向对象设计的理解。较好的设计应具备清晰的职责划分、明确记录的状态变化和稳定的扩展位置。UML、规格和测试共同服务于系统可理解性和可维护性。
课程结束后,我对复杂程序开发形成了更明确的认识:实现功能是基本要求,能解释结构、控制变化并通过测试验证设计,才是面向对象方法的核心价值。