2024试卷
单选题(20)
1、在一个聊天系统(类似ChatGPT)中,属于控制类的是()。
A. 话语者类
B.聊天文字输入界面类
C. 聊天主题辨别类
D. 聊天历史类
解析
B-C-E备选架构中分析类分为边界类、控制类和实体类。
边界类(用户界面类/设备接口类):最上层,系统外部环境与内部运作之间的交互,每一对参与者和用例就可以定义一个边界类。
控制类:中间层,独立于外部环境,定义用例中的控制逻辑和事务管理,并不是每次激活都以同样的方式运行(因为事件流本身具有不同的状态)。
实体类:表示业务信息的名词。
选项分析
A. 话语者类:实体类(Entity Class),表示参与聊天的用户(如用户信息、身份)。
B. 聊天文字输入界面类:边界类(Boundary Class),负责用户交互(如输入框、按钮)。
C. 聊天主题辨别类:控制类,分析聊天内容,识别主题或意图(如判断用户问题是编程相关还是生活相关),属于业务逻辑处理。
D. 聊天历史类:实体类,存储聊天记录(如数据库表映射)。
正确答案:C. 聊天主题辨别类
相关概念
对象:一个实体,具有明确定义的边界和标识(唯一),封装了状态(属性、关系)和行为(操作、方法、状态机)。
只有对象名没有类名的对象是错误的(任何对象都来自类的实例化)。
类:一系列对象的抽象描述,将具体对象的特征和行为参数化,用类的属性和操作表示。
每一个类在某一时刻都有0个或多个实例存在。
类是静态的,对象是动态的。
2.在一个牛排咖啡雄所使用的系统里,有一系列的"风味牛排"。比如说菲利牛排、咖喱牛排、奶酪牛排等等。现在我们想用设计模式来描述牛排销售系统,该用()
A.单键模式
B.桥接模式
C.工厂模式
D.观察者模式
解析
题目描述的场景是创建多种风味牛排对象(如菲利牛排、咖喱牛排等),这属于对象创建问题。
工厂模式(Factory Pattern)
作用:封装对象的创建逻辑,统一通过工厂类生成具体对象。
适用场景:系统需要创建多种相似对象(不同风味的牛排)。隐藏具体类的实例化过程(如根据输入参数"菲利"
生成对应牛排)。
选项分析
A. 单例模式:确保全局唯一实例(如配置管理器),而牛排需要创建多个对象。
B. 桥接模式:分离抽象与实现(如支付方式与订单系统的解耦),与对象创建无关。
D. 观察者模式:处理对象间的事件通知(如订单状态更新),与题目需求无关。
正确答案:C. 工厂模式
相关概念
GoF模式(23种):按照作用范围分为类模式、对象模式;按照目的分为创建型模式,结构型模式和行为型模式。
一、创建型模式(5种)——解决“如何创建对象”
模式 | 目的 | 实现要点 | 生活例子 |
---|---|---|---|
单例模式 | 确保一个类只有一个实例 | 私有构造 + 静态getInstance() | 一个国家只有一个总统 |
工厂方法 | 让子类决定创建哪种对象 | 定义Creator 接口,子类实现 | 奶茶店让你选“珍珠奶茶”或“椰果奶茶” |
抽象工厂 | 创建一组相关对象(家族) | 多个工厂方法封装在一个接口 | 家具店卖“北欧风”或“中式”全套家具 |
建造者模式 | 分步骤构建复杂对象 | Director 指挥,Builder 实现 | 组装电脑(先选CPU,再选内存…) |
原型模式 | 克隆对象,避免重复创建 | 实现Cloneable 接口 | 复印机复印文件 |
二、结构型模式(7种)——解决“如何组合对象”
模式 | 目的 | 实现要点 | 生活例子 |
---|---|---|---|
适配器模式 | 让不兼容的接口一起工作 | 包装旧类,提供新接口 | 用转接头让USB插TypeC口 |
桥接模式 | 分离抽象和实现,灵活扩展 | 抽象类持有实现接口 | 遥控器(抽象)控制电视(实现) |
组合模式 | 统一处理树形结构(部分-整体) | 组件接口 + 叶子/非叶子节点 | 文件系统(文件夹和文件) |
装饰模式 | 动态添加功能,不修改原类 | 包装对象,链式调用 | 给奶茶加珍珠、加椰果(不换杯子) |
外观模式 | 简化复杂系统的调用 | 提供统一入口类 | 一键启动电脑(封装CPU、内存等操作) |
享元模式 | 共享对象,节省内存 | 缓存可复用对象 | 游戏里重复使用相同的子弹模型 |
代理模式 | 控制对象访问(延迟、安全等) | 代理类包装真实对象 | 代购帮你买奶粉(你接触不到卖家) |
三、行为型模式(11种)——解决“对象如何交互”
模式 | 目的 | 实现要点 | 生活例子 |
---|---|---|---|
责任链模式 | 让多个对象依次处理请求 | 链式传递nextHandler | 审批流程(员工→经理→CEO) |
命令模式 | 将请求封装为对象,支持撤销/重做 | Command 接口 + Invoker | 遥控器按键(每个按钮是一个命令) |
解释器模式 | 解析特定语法 | 表达式类 + 上下文 | 翻译英文为中文(按语法规则解析) |
迭代器模式 | 统一遍历集合 | Iterator 接口 | 用遥控器换台(不关心电视台如何存储) |
中介者模式 | 减少对象间直接耦合 | Mediator 协调交互 | 微信群聊天(用户不直接联系,通过群) |
备忘录模式 | 保存和恢复对象状态 | Originator + Memento | 游戏存档 |
观察者模式 | 一对多的消息通知 | Subject + Observer | 微信公众号(你订阅后自动收到推送) |
状态模式 | 根据状态改变做出不同的行为 | 状态类实现同一接口 | 电灯开关(开/关状态) |
策略模式 | 动态切换算法 | 策略接口 + 具体实现类 | 支付方式(支付宝/微信/现金随意换) |
模板方法模式 | 定义算法骨架,子类实现细节 | 抽象类 + 具体子类 | 泡茶流程(烧水→放茶叶→倒水) |
访问者模式 | 分离算法和数据结构 | Visitor 访问元素类 | 超市收银台统计不同商品价格 |
3.在面向对象的系统中,系统责任的良好分配原则是()。
A.在类之间均匀分配
B.集中分配在少数控制类中
C.根据交互图的消息进行分配
D.根据个人喜好进行分配
解析
在面向对象设计中,系统责任的分配原则应遵循均匀分配的核心思想:
符合单一职责原则(SRP),每个类专注于明确的功能。
避免“上帝类”(功能臃肿)或“贫血类”(功能过少),提高可维护性和扩展性。
选项分析
B. 集中分配在少数控制类中:导致控制类过度复杂,违反低耦合原则,难以修改和测试。
C. 根据交互图的消息分配:交互图(如顺序图)描述动态行为,而责任分配应优先考虑静态设计原则(如高内聚)。
D. 根据个人喜好分配:缺乏规范性,易导致系统混乱。
正确答案:A.在类之间均匀分配
4.以下关于UML中的相关概念解释,()是站在用户的角度上去展示系统的功能?
A.用例图
B.类图
C.协作图
D.组件图
解析
用例图从用户(Actor)角度描述系统提供的功能(用例),是UML中唯一以用户为中心的图表,用于需求分析阶段。
选项分析
B. 类图:开发视角,展示静态结构(类、属性、关系)。
C. 协作图(即通信图):开发视角,描述对象间的动态交互(消息传递)。
D. 组件图:架构视角,展示系统物理模块的组成与依赖。
正确答案:A.用例图
相关概念
结构图:类图、对象图、包图、组合结构图、构件图、部署图、外廓图
行为图:顺序图(强调消息执行顺序)、通信图(强调对象协作)、时间图、交互概览图、活动图(事务执行的控制流或数据流)、状态机图、用例图
5.在 OO的顺序图中,通常由左向右分层排列各个对象,正确的排列方法是()
A.执行者角色 控制类 用户界面 业务层 后台数据库
B.执行者角色 用户界面 控制类 业务层 后台数据库
C.执行者角色 控制类 用户界面 后台数据库 业务层
D.执行者角色 用户界面 业务层 控制类 后台数据库
解析
OO(Object-Oriented,面向对象)的顺序图中,对象的排列顺序遵循系统交互的逻辑流程,从左到右依次为:
执行者角色(Actor):位于最左侧,代表系统的外部用户或触发者(如用户、外部系统)。
用户界面(UI):执行者首先与界面交互(如网页、APP界面)。
控制类(Controller):处理用户输入的业务逻辑,协调其他组件(如MVC中的Controller)。
业务层(Business Layer):实现核心业务规则和领域逻辑(如Service层)。
后台数据库(Database):位于最右侧,负责数据持久化。
正确答案:B.执行者角色 用户界面 控制类 业务层 后台数据库
相关概念
详见书P44
6.在采用面向对象技术进行数据库的设计中,将类与类之间"多对多"的关联关系映射成关系数据模型时应建立一种()来实现多对多的关联。
A.关联表
B.视图
C.超类表
D.子表
解析
在面向对象(OO)设计中,类之间的多对多关联无法直接映射到关系型数据库(RDBMS)中,因为关系数据库的表结构仅支持外键直接引用(即一对多)。因此,需要通过关联表来实现多对多关系的转换。
具体步骤
-
识别多对多关系:
- 例如:
学生(Student)
和课程(Course)
之间是多对多关系(一个学生可选多门课,一门课可被多个学生选)。
- 例如:
-
创建关联表:
- 新建一个表(如
Student_Course
),包含两个外键,分别指向Student
和Course
的主键。 - 关联表的主键通常是这两个外键的组合键(Composite Key)。
- 新建一个表(如
选项解析
B. 视图:视图是虚拟表,不存储实际数据,无法维护关联关系。
C. 超类表:用于继承关系(is-a,如父类与子类),与多对多无关。
D. 子表:通常表示一对多的关系(has-many,如订单与订单项)。
正确答案:A.关联表
7.类之间的关联关系通常表示了()。
A.类之间的强关系
B.类之间附加的系统约束
C.类之间的弱关系
D.类之间的无关系
解析
关联关系(Association)表示类之间的结构化连接,存在长期、有意义的交互,通常通过成员变量、方法参数或返回值实现。
示例:
学生
与课程
的选课关系(持久性关联)。
订单
与商品
的包含关系(业务逻辑依赖)。
正确答案:A.类之间的强关系
相关概念
依赖
定义:临时性的弱关系,一个类的变化可能影响依赖它的类(通过方法参数、返回值或局部变量建立)。
表示:虚线箭头 ⤳
(从依赖方指向被依赖方)。
示例:
-
报表生成器
依赖数据库连接
(仅在生成报表时临时使用)。
关联
定义:强语义的稳定关系,表示类之间的长期结构化连接(通过成员变量实现)。
表示:实线箭头 ⟶
或双向实线。
示例:
-
学生
与课程
的选课关系(多对多关联)。
聚合
定义:特殊的关联关系,表示整体-部分的弱拥有关系(部分可独立存在)。
表示:空心菱形 ◇
指向整体。
示例:
-
汽车
聚合车轮
(车轮可拆卸并安装到其他汽车)。
组合
定义:更强的聚合关系,表示整体-部分的强拥有关系(部分生命周期依赖整体)。
表示:实心菱形 ◆
指向整体。
示例:
-
房子
组合房间
(房子拆除后房间不复存在)。
泛化
定义:继承关系,子类继承父类的特性(is-a关系)。
表示:空心三角箭头 △
指向父类。
示例:
-
猫
继承动物
。
实现
定义:类实现接口或协作实现用例的契约关系。
表示:虚线空心三角箭头 ⤳△
指向接口/用例。
示例:
-
ArrayList
实现List
接口。
8. UML中关联的多重度是指()
A.一个类有多少个方法被另一个类调用
B.一个类的实例能够与另一个类的多少个实例相关联
C.一个类的某个方法被另一个类调用的次数
D.两个类所具有的相同的方法和属性
解析
在UML中,关联的多重度(Multiplicity)用于定义类实例之间的数量关系,具体表现为:
一个类的实例可以关联到另一个类的实例的数量范围。
- 例如:
1
:一对一关联(如一个人拥有一个身份证)。0..*
:零到多(如一个顾客可以下零或多个订单)。1..*
:一到多(如一个部门必须包含至少一个员工)。
正确答案:B.一个类的实例能够与另一个类的多少个实例相关联
9.在面向对象程序设计中,常常将接口的定义与接口的实现相分离,可定义不同的类实现相同的接口。在程序运行过程中,对该接口的调用可根据实际的对象类型调用其相应的实现。为达到上述目的,面向对象语言须提供()机制。
A. 继承和过载(overloading)
B.抽象类
C. 继承和重置(overriding)
D.对象自身引用
正确答案:A. 继承和过载(overloading)
10. (单选题,1.0 分)如果要对一个游戏中的二个主要角色:玩家、NPC的工作流程建模,那么需要使用下面哪个图()。
A. 顺序图
B.协作图
C.活动图
D.状态图
解析
活动图描述事务执行的控制流或数据流。
正确答案:C.活动图
11.在某信息系统中,存在如下的业务陈述:①一个客户提交0个或多个订单②一个订单由一个且仅由一个客户提交。系统中存在两个类:"客户"类和"订单"类。对应每个"订单"类的实例,存()“客户"类的实例;
A.0个
B.1个
C.1个或多个
D.0个或多个
正确答案:B.1个
12.在用例建模的过程中,若几个用例执行了同样的功能步骤,这时可以把这些公共步骤提取成独立的用例,在UML的用例图上,将用例之间的这种关系标记为。
A. include
B. extends
C. Uses
D. inheritances
解析
在UML用例建模中,包含关系(include)用于表示多个用例共享相同的功能步骤,其核心特点如下:
- 作用:将公共步骤提取为独立的子用例,并在原用例中显式包含它。
- 语法:
<<include>>
箭头(从主用例指向被包含用例)。
选项解析
B. extends:用于可选扩展(如“订单”可扩展“加急配送”),不适用于公共步骤。
C. uses:旧版UML术语,已被include
取代。
D. inheritances:用例间不存在继承关系。
正确答案:A. include
相关概念
扩展extend:表示一个用例可选地扩展另一个用例的行为,仅在特定条件下触发。<<extend>>
箭头(从扩展用例指向基用例)。
- 订单支付可扩展“使用优惠券”。
- 用户注册可扩展“邮箱验证”(仅需部分用户)。
包含include:表示一个用例必须包含另一个用例的步骤,是强制的公共行为。<<include>>
箭头(从主用例指向被包含用例)。
- 支付、查看订单等操作必须包含“登录”。
- 删除文件需包含“确认对话框”。
泛化generalization:表示父子用例之间的继承关系,子用例可重写或扩展父用例的行为。空心三角箭头 △
(从子用例指向父用例)。
- “用户登录”泛化为“密码登录”和“指纹登录”。
- “支付”泛化为“信用卡支付”和“支付宝支付”。
13.()意味着一个操作在不同的类中可以有不同的实现方式。
A. 多态性
B. 多继承
C. 类的复用
D. 封装
正确答案: A. 多态性
相关概念
抽象:对象到类的过程就是抽象,香蕉→水果
封装:客户通过接口访问,实现信息隐藏
分解:划分多个相对独立的小单元
泛化:使用继承实现泛化(单一继承、多重继承)
多态:某一方法在指向不同对象时表现出不同的行为
分层:不同抽象级别
复用:借助已有知识建立新软件
14.在UML中,()把活动图中的活动划分为若干组,并将划分的组指定给对象,这些对象必须履行该组所包括的活动,明确地表示哪些活动是由哪些对象完成的。
A.组合活动
B.同步条
C.活动
D.泳道
正确答案:D.泳道
15. 类之间的聚合关系表示()。
A.整体和部分的生命周期一致的拥有关系
B.相同类的多个实例之间的关系
C.整体和部分的生命周期独立的拥有关系
D.没有直接关联
正确答案: C.整体和部分的生命周期独立的拥有关系
16.采用瀑布模型进行系统开发的过程中,每个阶段都会产生不同的文档。以下关于产生这些文档的描述中,正确的是()。
A.外部设计评审报告在概要设计阶段产生
B.集成测评计划在程序设计阶段产生
C.系统计划和需求说明在详细设计阶段产生
D.在进行编码的同时,独立的设计单元测试计划
解析
瀑布模型是一种线性、顺序的软件开发流程,每个阶段必须完全完成后才能进入下一阶段,像瀑布一样不可逆流。最传统的开发模型,适合确定性高的项目,但灵活性差。
正确答案:D.在进行编码的同时,独立的设计单元测试计划
17.面向对象分析的第一步是()。
A. 定义服务
B. 确定附加的系统约束
C. 确定问题域
D.定义类和对象
解析
确定问题域——定义类与对象——确定属性和方法——建立类之间的联系——动态行为建模
正确答案:C. 确定问题域
18. ()是不需要接收信息就能主动执行的服务
A.内部服务
B.外部服务
C. 内嵌服务
D.上层服务
正确答案:A. 内部服务
解析
在面向对象系统中,服务(方法或操作)的执行可以分为以下几类:
1. 内部服务(Internal Service)
-
定义:由对象主动触发,无需外部输入或消息调用即可执行。
-
特点:
-
通常是对象内部状态变化触发的行为(如定时任务、状态机转换)。
-
不依赖外部调用,自主运行。
-
-
示例:
-
定时保存数据(如每隔1小时自动备份)。
-
日志系统的自动清理(当日志文件超过阈值时触发)。
-
2. 其他选项的排除
-
B. 外部服务:需外部对象或用户请求才能执行(如API调用、用户点击按钮)。
-
C. 内嵌服务:通常指系统底层功能(如硬件驱动),与题目无关。
-
D. 上层服务:通常是业务流程组合,依赖外部输入。
19.在某信息系统中,存在如下的业务陈述:①一个客户提交0个或多个订单②一个订单由一个且仅由一个客户提交。系统中存在两个类"客户"类和"订单"类。对应每个"客户"类的实例,存在()个"订单"类的实例;
A.0个
B.1个
C. 1个或多个
D. 0个或多个
正确答案:D
20. 在用例建模的过程中,若几个用例执行了同样的功能步骤,这时可以把这些公共步骤提取成独立的用例,这种用例称为()
A.扩展用例
B.抽象用例
C.公共用例
D.参与用例
正确答案:C
多选题(5)
21.软件工程的三要素是()
A. 方法
B. 工具
C. 模型
D. 过程
E. 语言
正确答案:ABD
22.下列各类图中用于动态建模的有()
A. 状态图
B. 类图
C. 时序图
D. 活动图
解析
状态图、时序图、活动图、通信图、用例图
正确答案:ACD
24.常见的面向对象分析模型中的关系有()
A. 组合
B. 依赖
C. 关联
D. 泛化
正确答案:ABCD
25.下面哪些图形可以清楚地表达并发行为()
A.类图
B. 状态体
C. 活动图
D. 顺序图
E.实现图
正确答案:CD