6488 文字
32 分
期末模拟试卷:A/B 套试题与参考答案
この記事は現在の言語に翻訳されていません。メイン言語で表示しています。
📝 期末模拟试卷:A/B 套试题与参考答案
本文将 A、B 两套模拟卷及其参考答案合并为一篇。每套试卷分别包含分析题与简答题、设计大题两个分部,题目、答案和评分标准均保留在对应小节中。
第一部分:A 套试卷与参考答案
A 套:分析题与简答题
一、 分析大题(本题共3小题,共30分)
📝 场景说明
某校园“网上订餐系统”中,学生可以通过手机端进行下单。用户下单时,系统必须强制进行身份与配送地址验证。在确认订单前,如果用户账户中有“校园尊享会员积分”,系统会根据特定策略,选择性触发积分抵扣(免除部分现金支付)。
订单提交成功后,若用户在下单时勾选了“需要准时达配送险”,系统将在生成订单的同时,自动向第三方保险平台投保并生成配送险保单。订单支付支持微信支付与支付宝支付。
❓ 题目要求
- 用例图绘制(10分):请根据上述业务场景,绘制该系统的用例图,并正确表示其中的包含(
<<include>>)、扩展(<<extend>>)以及泛化(Generalization)关系。 - 用例规约编写(10分):请为“提交下单”核心用例,编写一份详尽 of 用例规约。
- 系统顺序图(SSD)绘制(10分):绘制“提交下单”这一核心业务流程的系统顺序图,必须将系统作为黑盒。
🔑 参考答案与评分标准
1. 用例图绘制(10分)
- 评分标准:
- 参与者与系统边界划分正确(2分);
- 主用例及子用例命名规范(2分);
<<include>>虚线箭头从主用例指向子用例(2分);<<extend>>虚线箭头从扩展用例指向主用例,且标明扩展点(2分);- 泛化(支付方式)使用实线空心三角指向父用例(2分)。
🎨 规范用例图示
Rendering diagram...
2. “提交下单”用例规约(10分)
-
评分标准:
- 基本要素完整(前置、后置条件等)(3分);
- 基本业务流程逻辑清晰、分步明确(4分);
- 扩展流程/异常流程处理描述正确(3分)。
-
标准答案:
- 用例名称:提交下单
- 主要参与者:学生(用户)
- 前置条件:用户已成功登录系统,且购物车内已选择至少一件有效商品。
- 主要流程(Basic Flow):
- 用户在购物车界面点击“去结算”按钮。
- 系统读取用户信息,强制触发 [包含:身份与地址验证] 流程。
- 系统计算订单的总金额及运费,并在界面呈现应付总额。
- 用户确认配送信息及商品无误,点击“提交订单”按钮。
- 系统锁定库存,创建未支付订单。
- 系统若识别到用户勾选了“需要准时达配送险”,则同步触发 [包含:自动投保生成保单]。
- 系统返回订单提交成功响应,引导用户进入支付收银台。
- 扩展流程(Alternative Flows):
- 4a. 积分抵扣(
<<extend>>):- 若用户账户内有积分且在确认订单前选择使用,系统调用积分计算服务,按规则抵扣部分金额,更新应付总额,随后继续执行步骤5。
- 5a. 商品库存不足:
- 系统检测到部分商品库存为0,则中断下单流程,提示用户“部分商品已被抢光”,解锁已锁定的其他商品。
- 4a. 积分抵扣(
- 后置条件:订单在数据库中被创建,状态置为
CREATED(待支付),相应商品库存被锁定。
3. 系统顺序图(SSD)绘制(10分)
- 评分标准:
- 生命线仅包含外部 Actor 与
:System两个黑盒(3分); - 消息方向、名称及入参规范,使用同步实心三角箭头(4分);
- 返回消息使用虚线开放箭头(3分)。
- 生命线仅包含外部 Actor 与
🎨 规范系统顺序图示
Rendering diagram...
二、 简答大题(本题共2小题,共20分)
❓ 题目要求
- 原则与设计模式应用(10分):
- 请分别简述 SOLID 原则中的单一职责原则(SRP)和依赖倒置原则(DIP)。
- 针对“三层架构设计”或“策略模式应用”场景,举例说明你在设计中是如何遵循这两个原则的。
- 核心建模原理辨析(10分):
- 请简述操作契约(Operation Contract)中“后置条件”的定义与意义。
- 解释为什么在撰写后置条件时,严禁使用“更新数据库”、“保存”等动词,并阐述后置条件“黄金三法则”的具体内容。
🔑 参考答案与评分标准
1. 原则与设计模式应用(10分)
-
评分标准:
- 准确说明单一职责原则(SRP)和依赖倒置原则(DIP)的定义(4分);
- 结合三层架构设计或策略模式,举例说明设计是如何遵循这两个原则的(6分)。
-
标准答案:
- 单一职责原则(SRP)定义:一个类或模块,应该有且仅有一个引起它变化的原因。它要求一个类只专注于做好一类业务,不能承载过杂的职责。
- 依赖倒置原则(DIP)定义:高层模块不应该依赖低层具体实现类,二者都应该依赖其抽象接口;抽象不应该依赖细节,细节应该依赖抽象。
- 在设计中的体现:
- 单一职责原则的遵循:在三层架构中,表示层的
OrderController只负责参数校验和调用分发;业务层OrderServiceImpl只负责核心交易规则与事务,完全不编写具体的 SQL 数据存取语句,后者完全交由OrderRepository。这样,当数据库存储方式发生改变(如从 MySQL 迁移到 MongoDB),只有持久层会发生变化,业务层和表示层完全不用修改,各个类引起变化的原因极其单一。 - 依赖倒置原则的遵循:
OrderController并不直接声明依赖OrderServiceImpl具体实现类,而是依赖抽象的OrderService接口。具体实现类实现了该接口并被注入框架容器中。高层与低层之间完全通过抽象接口隔离开来,满足了 DIP 原则。
- 单一职责原则的遵循:在三层架构中,表示层的
2. 核心建模原理辨析:后置条件契约(10分)
-
评分标准:
- 准确说出后置条件的定义与意义(4分);
- 说出为什么不能用“过程性动词”的原因(2分);
- 准确默写出后置条件“黄金三法则”的内容(4分)。
-
标准答案:
- 后置条件的定义与意义:后置条件描述了当一个外部系统事件执行完毕后,系统状态所发生的基础性、持久化改变。它的意义在于不关注“系统如何实现这个功能”,而是提供了一个客观的、可验证的系统终态判定标准,是详细设计阶段类方法行为的重要设计契约。
- 严禁使用过程性动词的原因:因为“更新”、“保存”或“处理”属于具体的程序执行过程(Process),而不是系统状态的结果(State)。操作契约必须独立于具体实现技术,只描述“发生了什么改变”,而非“怎么修改数据库”。
- 后置条件“黄金三法则”:
- 对象被创建或销毁(如:创建了一个
Order的实例order)。 - 对象的属性值发生修改(如:
order.status被修改为CREATED)。 - 对象之间的连接关系(关联)被创建或断开(如:
order与当前的User实例建立了关联)。
- 对象被创建或销毁(如:创建了一个
A 套:设计大题
一、 设计大题(本题共5小题,共50分,每题10分)
📝 题目背景
针对下单系统,当用户点击“确认创建订单”时,系统将触发系统事件:submitOrder(userId, itemId, count)。
❓ 题目要求
- 设计题1:三层架构设计类图绘制(10分):绘制出该功能的完整设计类图(DCD)。要求必须体现经典的三层架构(Controller Service接口 ServiceImpl Repository接口 Entity),并精确标出属性的数据类型、方法签名、可见性以及类间关系。
- 设计题2:设计模式应用与策略类图(10分):订单的折扣计算支持多种策略(如:满减折扣、新用户立减、节日折扣、VIP积分抵扣)。为了使结算算法容易扩展,且在运行时能根据订单属性动态切换折扣计算方式,请应用策略模式绘制该结算模块的设计类图。
- 设计题3:活动图设计(10分):绘制系统在“支付订单”时的后台处理活动图。流程要求:读取账户余额 判定余额是否充足;若不充足提示余额不足并等待用户重试并终止;若充足,则扣减账户余额,随后通过分叉(Fork)同步条并发执行“扣减商品库存”和“修改订单状态为已支付”,最后通过汇合(Join)同步条结束流程。
- 设计题4:状态机图设计(10分):绘制系统生命周期中订单对象(
Order)的状态机图。需包含以下状态:CREATED、PAID、DELIVERING、COMPLETED、CANCELLED,并标明状态迁移上的触发事件和保护条件。 - 设计题5:系统包图设计(10分):网上订餐系统采用三层架构设计以实现高内聚、低耦合。请根据本套试卷中设计题1的类关系,绘制系统包图(Package Diagram),展示
presentation(表示层)、business(业务逻辑层)、dataaccess(数据访问层)与model(实体模型层)之间的依赖方向,并结合“依赖倒置原则”说明如何设计接口包以避免业务包对持久化实现包的直接依赖。
🔑 参考答案与评分标准
1. 三层架构设计类图绘制(10分)
- 评分标准:
- 三层分层结构清晰(表示层、业务层、数据访问层)(2分);
- 接口与实现类隔离,实现关系(
Realization)箭头使用虚线加空心三角形(2分); - 方法签名有明确的数据类型、返回类型与可见性标识(2分);
- 实体类(Entity)中包含主键
{PK}和外键{FK}约束(2分); - 依赖方向单向正确,无逆向交叉依赖(2分)。
🎨 规范设计类图示
Rendering diagram...
💡 绘图与考试规范提示(三层架构类图):
- 主外键标注:由于 Mermaid 语法限制,属性列表中若带花括号
{PK}/{FK}会引起崩溃,本图例使用黄色note框在Order类下方标注。- 考试手绘要求:在期末闭卷考试手绘类图时,必须直接把
{PK}和{FK}写在属性行后面,例如:- orderId : Long {PK}。
2. 策略模式设计类图绘制(10分)
- 评分标准:
- 正确抽象出
DiscountStrategy策略接口(3分); - 上下文类
DiscountContext正确聚合/关联策略接口(3分); - 具体策略实现类通过实现关系(虚线空心三角)指向策略接口(4分)。
- 正确抽象出
🎨 策略模式类图示
Rendering diagram...
3. 支付订单处理逻辑活动图(10分)
- 评分标准:
- 正确使用空心菱形表达余额是否充足的条件分支(3分);
- 正确使用黑色粗同步条实现“分叉(Fork)”,产生并发流程(3分);
- 正确使用黑色粗同步条实现“汇合(Join)”,合并并发流程(3分);
- 起点、终点及终止符号正确规范(1分)。
🎨 支付活动图示
Rendering diagram...
💡 绘图与考试规范提示(活动图决策分支):
- 判定问题标注:由于 Mermaid 无法在决策菱形(
<<choice>>)中写字,我们将判定条件(“余额是否充足?”)写在了输入线上。- 考试手绘要求:在期末闭卷考试手绘活动图时,必须将判定问题直接写在菱形框内部。
4. 订单状态机图(10分)
- 评分标准:
- 状态框使用圆角矩形,写有明确的大写状态名(2分);
- 状态转移路线正确,从创建到取消/完成闭环(4分);
- 状态迁移线上有明确的触发事件和保护条件(4分)。
🎨 状态机图示
Rendering diagram...
5. 系统包图设计(10分)
- 评分标准:
- 正确识别并绘制出表示层、业务层、数据层与实体模型包四者(3分);
- 依赖方向箭头(虚线箭头
..>)正确,无循环依赖(3分); - 准确阐述包级别如何应用依赖倒置原则(DIP),通过接口包切断业务层对具体持久层实现的物理依赖(4分)。
🎨 系统包图示
Rendering diagram...
💡 DIP在包级别的解耦应用说明
- 接口归宿包设计:业务接口
OrderService放在business包中;而持久层接口OrderRepository应当定义在独立的dataaccess接口包(或直接在business包作为服务契约)。 - 切断直接依赖:具体的持久层实现包(例如
dataaccess-impl,含有具体的 SQL 映射和 MyBatis/JPA 代码)反过来依赖dataaccess接口包。 - 成果:在包的物理组织结构上,
business业务包只依赖dataaccess接口包,并不物理依赖具体的数据库持久化实现包。实现了高层不依赖低层具体实现的原则(DIP),方便了数据库技术在后续的任意无缝替换。
第二部分:B 套试卷与参考答案
B 套:分析题与简答题
一、 分析大题(本题共3小题,共30分)
📝 场景说明
某高校图书馆推出“自助图书租借系统”。读者通过自助终端扫码借书。在确认租借前,系统必须强制进行读者信用度与历史逾期记录校验。 若读者信用极佳(积分 > 800分),系统会选择性触发免租金免押金通道(免除扣款校验)。
读者确认租借后,若读者在终端勾选了“购买图书损坏险”(一次性保费2元),系统将在生成租借记录的同时,向第三方险企发起投保。投保成功后,系统开始记录借阅时限并打开书柜挡板。
❓ 题目要求
- 用例图绘制(10分):绘制该“自助图书租借系统”的用例图,并正确表达主用例“租借图书”与其它用例之间的包含(
<<include>>)、扩展(<<extend>>)以及泛化(Generalization)关系。 - 详细设计级对象序列图绘制(10分):请绘制确认借书阶段,系统后台的详细对象序列图。生命线至少包含:
TerminalPage(表示层边界类)、RentalController(控制类)、RentalService(接口)、RentalServiceImpl(实现类)、RentalRepository(持久层)。需绘制出完整的业务层实例化记录、Repository 调用及返回、以及alt判定框。 - 系统操作契约分析(10分):分析“确认借书(confirmRental)”这一系统事件,编写操作契约。重点应用后置条件“黄金三法则”描述系统状态改变。
🔑 参考答案与评分标准
1. 用例图绘制(10分)
- 评分标准:
- 参与者与系统边界划分正确(2分);
- 主用例及子用例命名规范(2分);
<<include>>虚线箭头从主用例指向子用例(2分);<<extend>>虚线箭头从扩展用例指向主用例,且标明扩展点与条件(4分)。
🎨 规范用例图示
Rendering diagram...
2. 对象序列图绘制(10分)
- 评分标准:
- 正确使用各层分析类对象作为生命线(2分);
- 正确绘制出
RentalServiceImpl内部alt(选择条件)判断框(3分); - 正确展现
<<create>>实例化RentalRecord实体(2分); - 消息方向、名称、同步异步与返回符号完全正确(3分)。
🎨 规范设计级对象序列图示
Rendering diagram...
3. 系统操作契约分析(10分)
-
评分标准:
- 系统操作签名、交叉引用及前置条件书写正确(3分);
- 后置条件符合“过去时态”,且严禁出现过程性动词(3分);
- 后置条件完美对应“黄金三法则”,即实例创建、属性变更、关联建立(4分)。
-
标准答案:
- 系统操作:
confirmRental(userId: Long, bookId: Long, isInsured: Boolean) - 交叉引用:用例:租借图书
- 前置条件:该读者(
userId)处于登录状态,且其信用评分已通过系统初始校验,未处于黑名单中。 - 后置条件(黄金三法则体现):
- 一个
RentalRecord的实例record被创建(法则一:实例创建)。 record.rentalStatus属性被修改为RENTED,record.startTime被修改为当前系统时间(法则二:属性修改)。record与当前的User实例建立了关联;record与对应的Book实例建立了关联(法则三:关联建立)。
- 一个
- 系统操作:
二、 简答大题(本题共2小题,共20分)
❓ 题目要求
- 系统可行性分析的维度辨析(10分):
- 系统开发前需要进行可行性分析。请问可行性分析的三大维度是什么?
- 请简述各个维度所关注的核心技术或组织问题是什么。
- IT项目中的成本分类(10分):
- 在企业信息化建设项目中,请分别定义“有形成本”、“无形成本”、“一次性成本”和“续生成本”。
- 请针对这四个成本定义,各举一个属于 IT 项目的具体实例。
🔑 参考答案与评分标准
1. 系统可行性分析的三大维度及核心问题(10分)
-
评分标准:
- 准确写出三大维度名称(3分);
- 详细阐述每个维度的核心评估重点(7分)。
-
标准答案:
- 技术可行性(Technical Feasibility):
- 核心关注点:评估“我们能建这个系统吗?”主要看开发团队对相关技术栈的掌握和熟悉程度、系统规模(是否过大、超出了团队的交付能力)、以及系统与组织现有软硬件基础设施的兼容性。
- 经济可行性(Economic Feasibility):
- 核心关注点:评估“我们应该建这个系统吗?”主要进行成本收益分析(有形与无形、一次性与续生成本收益),通过计算投资回报率(ROI)、平衡点、净现值(NPV)来论证该项目的财务合理性。
- 组织/操作可行性(Organizational/Operational Feasibility):
- 核心关注点:评估“如果建成了,系统会被接受和使用吗?”主要看系统是否匹配组织既有的工作流程和文化、高层管理和业务人员对系统变革的接受态度。评估是否有强力的“项目赞助人(Sponsor)”在组织层面为项目保驾护航。
- 技术可行性(Technical Feasibility):
2. IT 项目中的成本分类及实例说明(10分)
-
评分标准:
- 四个定义准确,表述专业规范(6分);
- 实例均属于合理的 IT/软件项目真实场景(4分)。
-
标准答案:
- 有形成本(Tangible Costs):
- 定义:能够容易且精确地用货币金额进行计量的系统开发或运行费用。
- IT项目实例:向华为云采购弹性云服务器(ECS)的直接账单费用。
- 无形成本(Intangible Costs):
- 定义:对企业有负面影响,但在财务上极难用具体金钱金额进行直接、精确衡量的成本。
- IT项目实例:由于系统切换,导致一线业务员不适应新系统操作而产生的抵触情绪与短期工作士气下滑。
- 一次性成本(One-time Costs):
- 定义:仅在系统建设初期、开发与部署阶段发生的一次性资金支出。
- IT项目实例:委托外部软件公司进行系统定制开发所支付的合同款。
- 续生成本(Recurring Costs):
- 定义:系统上线投入运行后,在后续整个使用生命周期内,为了保障其日常正常运转而必须按周期持续支付的费用。
- IT项目实例:每年支付给安全厂商的系统年度防火墙规则库升级与技术支持服务费。
- 有形成本(Tangible Costs):
B 套:设计大题
一、 设计大题(本题共5小题,共50分,每题10分)
❓ 题目要求
- 设计题1:三层架构设计类图绘制(10分):绘制图书租借场景下的设计类图(DCD)。要求必须体现经典的三层架构(Boundary Controller Service接口 ServiceImpl Repository接口 Entity),并精确标出属性的数据类型、方法签名、可见性以及实体类
RentalRecord中属性的主外键({PK},{FK})。 - 设计题2:活动图设计(10分):绘制系统在“新图书入库与多格式解析”时的后台处理活动图。流程要求:读取书籍原始数据 判断书籍格式;若是电子书,则触发“电子书格式标准化转换”,若是纸质书,则通过分叉(Fork)同步条并发执行“生成书籍物理RFID标签”和“同步至检索索引库”,最后两个流程通过汇合(Join)同步条合并分支,并持久化入库标记结束流程。
- 设计题3:状态机图设计(10分):绘制租借记录对象(
RentalRecord)的状态机图。需包含以下状态:RESERVED(已预订)、RENTED(租借中)、RETURNED(已归还)、OVERDUE(已逾期)、LOST(图书丢失)/CANCELLED,并标明状态迁移上的触发事件和保护条件。 - 设计题4:职责分配与 GRASP 模式(10分):当系统需要计算一笔租金时,有多个相关类:
RentalRecord(租借记录)、BookSpecification(图书价格规格)、FinePolicy(逾期罚款政策)。请运用 GRASP 信息专家模式(Information Expert),写出详细的职责分配推导逻辑,确定“计算最终租金与罚款”的职责属于哪个类。 - 设计题5:第三范式数据库逻辑结构设计(10分):在系统中,“图书(Book)”和“用户(User)”是多对多关系(一个用户可以借多本书,一本书也可以被多个用户在不同时间借阅)。请将该多对多关系转换设计为符合第三范式(3NF)的关系型数据库逻辑表结构,写出主要表名称、字段,标明主键(PK)和外键(FK)。
🔑 参考答案与评分标准
1. 三层架构设计类图绘制(10分)
- 评分标准:
- 经典三层分层清晰且依赖方向单向正确(3分);
- 接口与实现类隔离,实现关系(
Realization)箭头使用虚线加空心三角形(3分); - 主外键
{PK}/{FK}标注完整规范(4分)。
🎨 规范设计类图示
Rendering diagram...
💡 绘图与考试规范提示(三层架构类图):
- 主外键标注:由于 Mermaid 语法限制,属性列表中若带花括号
{PK}/{FK}会引起崩溃,本图例使用黄色note框在RentalRecord类下方标注。- 考试手绘要求:在期末闭卷考试手绘类图时,必须直接把
{PK}和{FK}写在属性行后面,例如:- recordId : Long {PK}。
2. 新图书入库活动图(10分)
- 评分标准:
- 正确表达书籍格式的多分支判定(3分);
- 并行同步条分叉与汇合(Fork / Join)绘制及对应控制流正确(4分);
- 起点、终点等流程节点符号标准(3分)。
🎨 图书入库活动图示
Rendering diagram...
💡 绘图与考试规范提示(活动图决策分支):
- 判定问题标注:由于 Mermaid 无法在决策菱形(
<<choice>>)中写字,我们将判定条件(“书籍格式为何?”)写在了输入线上。- 考试手绘要求:在期末闭卷考试手绘活动图时,必须将判定问题直接写在菱形框内部。
3. 租借记录状态机图(10分)
- 评分标准:
- 状态框使用圆角矩形,写有明确的大写状态名(2分);
- 正确展现逾期过渡及各种完结态的流向(4分);
- 迁移线上的事件及保护条件标注清晰(4分)。
🎨 租借记录状态机图示
Rendering diagram...
4. 以 GRASP 原则进行职责分配推理(10分)
- 标准答案:
- 根据 GRASP 信息专家模式(Information Expert),职责应分配给拥有执行该职责所需全部信息的类。
- 计算租金的核心基础数据存放在
RentalRecord(记录了实际借阅时长、是否受损等),而图书每日的基础租金单价存放在BookSpecification中,逾期计算罚款的倍率和天数规则存放在FinePolicy中。 - 为了计算最终租金与罚款,
RentalRecord必须要关联BookSpecification以获取基础价格,并关联FinePolicy以判断是否逾期并计算罚款。由于RentalRecord完整持有了计算租借时间差的全部业务数据,且它组合/连接了另外两个专家类。 - 结论:计算“最终租金与罚款”的核心方法
calculateTotalFee()应分配给RentalRecord类。
5. 逻辑数据库模型设计(10分)
-
评分标准:
- 正确识别多对多关系无法在物理表直接存储,必须拆分为两个一对多,引入中间关联表(4分);
- 主表与中间关联表字段设计合理(3分);
- 精确标出主键(PK)与外键(FK)(3分)。
-
逻辑表结构设计:
- 用户表 (
sys_user):user_id(BIGINT) —— PKusername(VARCHAR)credit_score(INT)
- 图书表 (
lib_book):book_id(BIGINT) —— PKisbn(VARCHAR)title(VARCHAR)status(VARCHAR)
- 图书租借关联记录表 (
lib_rental_record) —— 中间关联表:record_id(BIGINT) —— PKuser_id(BIGINT) —— FK (关联sys_user.user_id)book_id(BIGINT) —— FK (关联lib_book.book_id)start_time(TIMESTAMP)end_time(TIMESTAMP)rental_status(VARCHAR)
