跳转至

面向对象基础与开发流程

本篇按软件设计师考试的知识范围整理对象、类、多态、面向对象开发流程及设计原则。配图来自用户提供的讲义,已保存为本地文件;例题保留原题及选项,参考答案和解析由本笔记补充。

学习时先掌握考试术语,再结合 Java 示例理解。讲义配图中的简化说法,在对应段落补充适用范围。

本页保留 10 道课件例题与 179 个知识题块。知识题按基础、开发流程、设计原则、UML、设计模式归组,原编号不变;来源第 111、136 题的对照仍分别保存在第 025、101 题内。UML 和设计模式需要先学各自的建模规则与协作结构,下文在相应题组前衔接已有专题,不能仅凭基础概念直接开始做题。

考点一:基本概念

1. 对象:标识、状态和行为

对象是系统中的运行时实体,具有 标识、状态和行为。

组成 含义 猫对象的例子
标识 Identity 区分不同对象,即使属性值相同也可以是不同对象 “猫大”和“猫二”表示两个对象
状态 State 对象在某一时刻的属性值 毛色、高度等当前取值
行为 Behavior 对象可以执行的操作 叫、跑

农场中的猫、狗和牛对象

不同对象的名称、属性值和行为

对象名、属性、状态与方法的对应关系

考试中常用“对象名、状态、行为”描述对象。理解时应区分 对象标识 与 引用变量名:多个变量可以引用同一个对象,对象也不必拥有一个可读的名字或显式 id 字段。

“对象=属性(数据)+方法(操作)+对象标识”可以用作记忆式,但不表示每个实例都单独存储一份方法代码。

2. 封装与访问控制

封装将逻辑相关的数据和行为组织在一起,通过对外接口控制访问,并隐藏内部实现细节。这样,使用者可以调用对象提供的服务,而不必知道数据如何存储、算法如何执行。

封装及 public、protected、private 等访问控制示意

例如,账户通过 deposit()、withdraw() 修改余额,而不是允许外部任意改写余额字段;这些操作还可以检查金额是否合法。

Java 访问级别 基本访问范围
public 在类型本身可访问等前提下,允许外部访问
protected 同包可访问;跨包子类访问还受继承及限定表达式等规则限制
无访问修饰符(包访问) 同一包内可访问;这里不是接口的 default 方法
private 限制在声明它的类相关的封闭作用域内

基础选择题通常将 private 概括为“只有本类中定义的方法可以访问”,不限定这些方法必须是 public。在 Java 中,同一顶层类所包围的嵌套类型之间还可以访问彼此的私有成员,不能将考试简化当作完整语言规则。

3. 类和对象

类描述一组对象共同的属性结构和行为,对象是类的实例。

  • 从多个具体对象提炼共同特征,得到类,是抽象过程。
  • 根据类创建具体对象,是实例化过程。
  • 同一类的对象具有共同的属性定义和操作,但各自的实例属性值、状态与标识可以不同。

从具体对象抽象出类,以及由类实例化对象

例如,所有猫对象都有“毛色”这一属性,不表示它们拥有相同的毛色;“共享属性和行为”也不表示它们共享同一份可变实例状态。

实例成员与当前对象 this

类的成员变量也称属性或字段,成员函数也称方法。属性的**定义**说明对象能保存什么,属性的**值**才是某一时刻的状态。例如每个播放任务都有 progress 字段,不同任务的进度值可以不同;static 字段则属于类,不是每个对象各有一份。

Java 的 this 表示当前接收调用的对象,可用来区分同名字段与参数。例如:

1
2
3
4
5
6
7
class DownloadTask {
    private int progress;

    void updateProgress(int progress) {
        this.progress = progress;
    }
}

左侧 this.progress 是当前任务的字段,右侧 progress 是本次调用的参数;只写 progress = progress 会把参数赋给自身。静态方法没有当前实例,不能直接使用 this。C++ 对应的成员访问常写成 this->progress。

抽象类与接口:abstract class 和 interface

**抽象类**为一组子类型提供共同基础,可以同时包含字段、已实现的方法和未实现的抽象方法。Java 抽象类不能直接 new;具体子类必须实现继承而来、尚未实现的抽象方法,才能实例化。抽象类也可以没有抽象方法,其“不能直接实例化”的约束仍然成立。

**接口**首先是对外服务的契约,说明使用者可以请求哪些操作。Java 的 interface 是表达契约的一种语言机制;接口不能直接实例化,接口类型的变量可以引用实现类的对象。接口可以有默认方法、静态方法,不能把“接口”一概理解成完全没有方法实现。

例如 Player player = new AudioPlayer(); 中,Player 若是接口,变量按它的契约使用对象,实际对象仍是 AudioPlayer;若 Player 是抽象类,同样不能据此认定创建了一个“直接的 Player 对象”。在 UML 中,抽象类常以斜体类名或 {abstract} 标注;子类实例可作为父类型的实例参与关联,抽象父类自身没有直接实例。

4. 实体类、边界类和控制类

这是分析模型中按职责划分的三种角色,常称为 实体—边界—控制(Entity–Boundary–Control)。

类型 主要职责 例子
实体类 Entity 表达业务领域中的概念及信息,通常需要较长时间保存 客户、商品、订单、账户
边界类 Boundary(题目也称接口类) 处理用户或外部系统与本系统的交互 页面、对话框、扫码入口、外部系统适配接口
控制类 Control 协调某个用例或业务流程中各对象的活动 支付流程控制、订单处理协调

扫码支付中实体类、接口或边界类、控制类的划分

分析类的类别由职责决定。同一个领域名词,在不同模型中可能承担不同角色:面向用户的交互入口属于边界,长期保存的业务信息属于实体,协调完成用例的对象属于控制。

扫码支付例题的分类说明

在本讲义的扫码支付题中,客户类是实体类,二维码类按交互入口归为边界类/接口类。具体建模仍由职责决定:若模型关注的是二维码所携带并保存的支付信息,也可能将相关数据建模为实体,不能仅凭类名分类。

这里的“接口类”是分析模型中的边界角色,不等同于 Java 的 interface。实体也不限于现实中可触摸的事物,订单、合同等业务概念同样可以是实体。

5. 继承与泛化

继承使子类能够复用或扩展父类允许继承的结构与行为;泛化从多个特殊类型中提炼共同特征,形成更一般的类型。

动物类与猫、狗子类之间的继承和泛化

  • Animal 是较一般的类型;Cat、Dog 是更具体的类型。
  • 从猫、狗提取“动物”的共性,体现泛化。
  • 让猫类、狗类继承动物类,体现继承与特化关系。

考试中“父类和子类之间共享数据和方法的机制”通常对应 继承。这里强调定义与行为的复用,不表示父类对象和子类对象共用同一份实例数据。

继承表达“是一种”(is-a),持有其他对象表达“有一个/由它组成”(has-a)。例如播放器持有缓冲区,不意味着播放器是缓冲区的子类。具体子类可以增加自己的属性和行为,而不是只能沿用父类已有成员。

子类型替换具有方向:AudioPlayer 对象可当作 Player 使用,普通 Player 对象却不一定是 AudioPlayer。向下转型也不会把对象变成另一种类型;实际类型不匹配时,Java 会抛出 ClassCastException。另外,“下载中”“已完成”通常是同一任务的不同状态,不能仅因状态名称不同就推导继承层次。

在 UML 类图中,泛化画为**实线空心三角,三角指向父类型**;接口实现使用虚线空心三角。其余连接关系及所有权边界见 UML 类图中的六种关系。

6. 单重继承与多重继承

类型 含义 需要关注的问题
单重继承 一个类只有一个直接父类 继承链可以有多层
多重继承 一个类具有多个直接父类 同名成员、重复继承与二义性

狮虎兽多重继承示意及同名属性的二义性

Java 的类只支持单一直接父类,但可以实现多个接口;接口也可以继承多个接口。多个接口的默认方法发生冲突时,需要按语言规则解决。不能将多重类继承的示意图直接当成 Java 类声明规则。

7. 重写与重载

重写与重载的讲义示意图

对比 重写/覆盖 Overriding 重载 Overloading
作用 子类为可重写的方法提供符合契约的新实现 为同一个方法名提供不同的参数列表
方法名 相同 相同
参数列表 Java 中须满足重写签名规则 数量、类型或类型排列不同
返回类型 必须满足兼容规则,例如协变返回类型 不能仅靠返回类型区别重载
选择实现的关键 对可动态分派的实例方法,根据接收对象实际类型选择实现 编译时根据参数的编译时类型等规则选择方法签名
典型例子 猫和狗重写 call() print(int) 和 print(String)

配图把重载画在一个类内部,这是典型示例;Java 的重载方法集合也可以包含继承来的方法,不能记成“重载只能发生在同一个类中”。同名 static 方法的隐藏也不属于实例方法重写。

8. 多态及其分类

“不同对象收到同一消息,可以产生不同的结果”是面向对象多态的常见描述。例如同样调用 call(),猫叫“喵”,狗叫“汪”。

相同 call 操作在猫和狗对象上产生不同结果

从较广义的类型系统分类看,可以按下表记忆:

大类 类型 核心含义 理解示例
通用多态 参数多态 同一份代码通过类型参数适用于多种类型 泛型 List<T>、泛型方法
通用多态 包含多态/子类型多态 同样的操作可作用于一个类型及其子类型 Animal 引用指向 Cat 或 Dog
特定多态 过载多态/重载多态 同一个名称在不同上下文中对应不同含义或操作 print(int) 与 print(String)
特定多态 强制多态/转换多态 通过类型转换使值适用于目标操作 为调用接收 double 的方法,将 int 隐式转换成 double

**包含多态**中的“包含”指父类型可接受的对象范围包含其子类型对象,不是对象内部持有另一个对象的组合关系。

讲义将参数多态称为“应用广泛、最纯的多态”,可作为原资料的描述理解;分类时应抓住“类型参数”,不依赖这类评价性措辞。

讲义提到包含多态涉及运行时类型检查。更准确地说,Java 的常见实现通过运行时分派选择方法实现,程序员不需要为每次调用显式编写 instanceof 或强制转换。

“强制多态”中的“强制”也不等于代码中必须出现 (Type)。这里通常讨论语言提供的类型适配或隐式转换;显式向下转型是另一项需要单独理解的操作。

9. 动态绑定与静态绑定

绑定是把一次调用与它应执行的代码联系起来。

类型 发生时机 记忆关键词
静态绑定/早期绑定 在程序运行前,按编译阶段能够确定的信息进行绑定 编译时
动态绑定/后期绑定 运行时依据接收对象的实际类型等信息选择实现 运行时

父类引用通过动态绑定调用猫或狗的实现

下面是可独立运行的 Java 示例,保存为 PolymorphismDemo.java:

public class PolymorphismDemo {
    static abstract class Animal {
        abstract String call();
    }

    static class Cat extends Animal {
        @Override
        String call() {
            return "喵";
        }
    }

    static class Dog extends Animal {
        @Override
        String call() {
            return "汪";
        }
    }

    public static void main(String[] args) {
        Animal animal = new Cat();
        System.out.println(animal.call()); // 喵

        animal = new Dog();
        System.out.println(animal.call()); // 汪
    }
}

理解这一示例可以抓住:存在子类型关系、子类型提供自己的方法实现、通过父类或接口类型使用对象。这是一种典型演示形式;动态分派并不要求源码中的变量一定声明为父类类型。

一次方法调用可以先在编译时选择重载签名,再在运行时选择该签名对应的重写实现。字段访问、static 方法等不具有上述实例方法的动态分派行为;private、final 方法也不能由子类重写。

Java 运行模型:JIT、堆与栈

Java 源码先编译为字节码,运行时由虚拟机执行。**解释执行**由解释器执行字节码指令;**即时编译 JIT**在运行期间把方法等代码编译成机器码,常针对热点代码优化;**提前编译 AOT**在运行前完成相应编译工作。即时编译不是“逐条解释”的别名。典型 JVM 可混合使用解释与 JIT;Android ART 也可能结合解释、JIT 与 AOT,不能把某种实现策略当成 Java 语言的唯一规定。

按基础 JVM 模型,类实例和数组从**堆**分配;每个线程的虚拟机**栈**保存方法调用的栈帧,包括局部变量表、操作数栈等。局部变量可以保存对象引用,引用位于某个栈帧并不意味着所引用的对象也在栈上。方法执行时使用栈帧,不等于方法的代码本身存放在调用栈中。

垃圾回收主要处理不再可达的堆对象,不负责替程序自动关闭所有文件、数据库连接等外部资源。逃逸分析、标量替换等优化可能消除实际分配;遇到未指定特殊实现的基础题,先按“字节码执行、运行时编译、对象在堆、调用有栈帧”理解,再检查题目限定。

消息与对象通信

消息表达一个对象向另一个对象提出的请求,例如“调用这个方法并传入这些参数”。接收对象根据自身实现处理请求。一次消息可以分清**接收者、操作名与实参**:在 repository.load(userId) 中,接收者是 repository,请求的操作是 load,userId 是实参。引用用来定位对象,消息表达请求,两者并不互斥;显式指针也不是面向对象语言的必要条件。

对象间的消息既可以同步,也可以异步。 Java 普通方法调用通常同步执行;事件队列、消息队列等机制可以实现异步交互。不能把“消息传递”一律理解成网络通信或异步通信。

在基础组成题中,对象自身的要素是标识、状态和行为;“消息”描述对象之间的交互,不是与它们并列的对象组成要素。

基础概念练习(41 题)

保留原题编号,答案与解析默认折叠。

题目 001

来源:知识点练习「面向对象技术」第 1 题(原站入口)。

在类模型中,一个一般类与一个或多个由它细化出的特殊类之间,属于哪一种关系( )?

  • A. 泛化

  • B. 关联

  • C. 聚集

  • D. 组合

答案与解析

平台答案:A。

整理解析

选 A。泛化表示一般类型与特殊类型的关系,特殊类型继承一般类型的特征。关联描述连接,聚集和组合描述整体与部分;这些关系都不等同于类型细化。

题目 002

来源:知识点练习「面向对象技术」第 2 题(原站入口)。

程序运行期间,对象收到服务请求后,依据接收对象的实际情况,才把请求的操作连接到具体实现方法。这种机制称为什么( )?

  • A. 静态绑定

  • B. 通用绑定

  • C. 动态绑定

  • D. 过载绑定

答案与解析

平台答案:C。

整理解析

选 C。方法实现到运行时才按接收对象的实际类型确定,属于动态绑定;编译时就确定目标的调用属于静态绑定。

题目 003

展开题目 003(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 3 题(原站入口)。

不同对象对同一消息可给出不同响应,这种现象称为(3),题述通过(4)机制支持:把通用功能的消息置于类层次的上层,把各自实现放在下层,由下层类的对象作出不同响应。

请作答:第 3 题。

  • A. 绑定

  • B. 继承

  • C. 消息

  • D. 多态

答案与解析

平台答案:D。

整理解析

选 D。同一操作在不同类型对象上表现不同,是多态。题述特指基于类型层次的多态;平台用父类指针和虚函数说明的是 C++ 的一种实现,不能据此把所有语言、所有多态都限定为这种写法。

题目 004

展开题目 004(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 4 题(原站入口)。

不同对象对同一消息可给出不同响应,这种现象称为(3),题述通过(4)机制支持:把通用功能的消息置于类层次的上层,把各自实现放在下层,由下层类的对象作出不同响应。

请作答:第 4 题。

  • A. 绑定

  • B. 继承

  • C. 消息

  • D. 多态

答案与解析

平台答案:B。

整理解析

选 B。题干明确使用上层类与下层类组织共同操作及不同实现,所问结构机制是继承。运行时选择哪个重写实现还涉及动态绑定;继承本身不等于动态绑定,也不是参数多态等所有多态形式的必要条件。

题目 012

展开题目 012(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 12 题(原站入口)。

下面哪一对类存在一般类型与特殊类型的关系( )?

  • A. 汽车与轮船

  • B. 交通工具与飞机

  • C. 轮船与飞机

  • D. 汽车与飞机

答案与解析

平台答案:B。

整理解析

选 B。飞机是一类交通工具,可建立从飞机到交通工具的泛化关系;其他各对都是并列的具体交通工具类别。

题目 013

展开题目 013(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 13 题(原站入口)。

将多态区分为参数、包含、过载和强制四类时,以子类型化为典型例子、在许多语言中都存在的是哪一种( )?

  • A. 参数

  • B. 包含

  • C. 过载

  • D. 强制

答案与解析

平台答案:B。

整理解析

选 B。子类型对象可在需要其父类型的位置使用,这属于包含多态。参数多态对应类型参数,过载多态对应同名的不同签名,强制多态对应类型转换。纠错:包含多态不必依赖运行时类型检查;Java 可在编译期检查子类型兼容性,再在运行时分派重写方法,动态分派与类型检查是不同事情。

题目 014

展开题目 014(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 14 题(原站入口)。

在面向对象语言中,对象之间通过(14)通信。关于良好的面向对象语言应支持哪些能力,下列不正确的说法是(15)。

请作答:第 14 题。

  • A. 消息传递

  • B. 继承

  • C. 引用

  • D. 多态

答案与解析

平台答案:A。

整理解析

选 A。面向对象模型把请求接收对象执行操作称为消息传递,常落实为方法调用。纠错:消息传递是交互模型,指针或引用是实现中定位对象的手段,两者不互斥;例如 C++ 可通过对象指针调用方法。

题目 015

展开题目 015(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 15 题(原站入口)。

在面向对象语言中,对象之间通过(14)通信。关于良好的面向对象语言应支持哪些能力,下列不正确的说法是(15)。

请作答:第 15 题。

  • A. 应该支持被封装的对象

  • B. 应该支持类写实例的概念

  • C. 应该支持通过指针进行引用

  • D. 应该支持继承和多态

答案与解析

平台答案:C。

整理解析

按将选项理解为所有面向对象语言都应具备的要求,平台选 C:显式指针不是面向对象的必要条件。不能解释成面向对象语言禁止指针,C++ 本身就允许使用指针。原页已核实:B确为“应该支持类写实例的概念”;保留“写”字,疑为“与”的笔误。按类及实例这一通常意图理解,它指面向对象的基本抽象。

题目 023

展开题目 023(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 23 题(原站入口)。

对象、类、继承和消息传递被列为面向对象的4个核心概念。其中,一个对象将什么封装成整体( )?

  • A. 命名空间

  • B. 要完成任务

  • C. 一组数据

  • D. 数据和行为

答案与解析

平台答案:D。

整理解析

选 D。对象既保存属性所表示的状态,又提供操作这些状态的行为;仅有数据集合不足以概括对象。

题目 025

展开题目 025(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 25、111 题(原站入口)。

同一个类中,若有多个方法名称相同、参数类型列表不同,这种机制叫什么( )?

  • A. 重载

  • B. 调用

  • C. 重置

  • D. 标记

答案与解析

平台答案(来源第 25 题):A。

整理解析(来源第 25 题)

选 A。相同方法名配合不同参数列表构成重载。以 Java 为例,重载选择主要依据编译期可见的签名及实参类型;仅返回类型不同不能建立重载,重载也不同于子类重写同签名方法。

来源第 111 题对照

原题题干

同一类中有多个同名方法,它们的参数类型、参数个数或参数类型排列顺序不同。这称为什么?

原题选项对照

原选项内容本页选项
A

方法标记

D
B

方法调用

B
C

方法重载

A
D

方法覆盖

C

原平台答案(来源第 111 题,原题选项):C;对应本页选项:A;本页平台答案:A。

整理解析(来源第 111 题)

选C,这是方法重载;方法覆盖通常指子类重新实现继承来的可覆盖方法。平台称方法由名称、参数表和返回类型唯一标识,不能普遍套用:在Java、C++等常见语言中,仅返回类型不同不足以构成重载。

题目 034

展开题目 034(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 34 题(原站入口)。

在面向对象系统中,对象是运行时实体。它的组成不包括(34);一个类所定义的一组相似对象则共享(35)。

请作答:第 34 题。

  • A. 消息

  • B. 行为(操作)

  • C. 对象名

  • D. 状态

答案与解析

平台答案:A。

整理解析

选 A。教材通常把对象概括为标识、状态和行为;消息是请求对象执行操作的交互信息。选项“对象名”在此用于表示标识,但真实系统中的对象不一定具有程序员显式命名的变量名。

题目 035

展开题目 035(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 35 题(原站入口)。

在面向对象系统中,对象是运行时实体。它的组成不包括(34);一个类所定义的一组相似对象则共享(35)。

请作答:第 35 题。

  • A. 属性和状态

  • B. 对象名和状态

  • C. 行为和多重度

  • D. 属性和行为

答案与解析

平台答案:D。

整理解析

选 D。同类对象共享属性的定义及可提供的行为,但各个实例的属性值可以不同,所以不能把“共享属性”理解成所有对象共享同一份状态。

题目 036

展开题目 036(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 36 题(原站入口)。

在下面的 UML 类图中,Car 和 Boat 中的 move() 与 Transport 中的同名方法是什么关系( )?

题目配图

  • A. 继承

  • B. 覆盖(重置)

  • C. 重载

  • D. 聚合

答案与解析

平台答案:B。

整理解析

选 B。图中空心三角指向 Transport,表明 Car、Boat 是其特殊类型;子类各自提供同签名的 move(),题意是覆盖即重写。参数列表不同才对应重载,不能仅凭方法名相同就判定为重载。

题目 045

展开题目 045(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 45 题(原站入口)。

在面向对象方法中,父类与子类共享数据及方法的机制称为(45);子类沿用父类接口、用自身需要的实现替换相应父类实现,称为(46)。

请作答:第 45 题。

  • A. 封装

  • B. 继承

  • C. 覆盖

  • D. 多态

答案与解析

平台答案:B。

整理解析

选 B。继承使子类获得父类的特征并可扩展行为。这里的“共享”是特征定义或实现的复用,不表示所有父子类实例共用同一份实例数据。

题目 046

展开题目 046(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 46 题(原站入口)。

在面向对象方法中,父类与子类共享数据及方法的机制称为(45);子类沿用父类接口、用自身需要的实现替换相应父类实现,称为(46)。

请作答:第 46 题。

  • A. 封装

  • B. 继承

  • C. 覆盖

  • D. 多态

答案与解析

平台答案:C。

整理解析

选 C。子类在既有操作契约下给出新的实现是覆盖,即重写。重载则是相同名称配合不同参数列表,不能混同。

题目 056

展开题目 056(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 56 题(原站入口)。

不同对象收到同一通用消息可以产生不同结果,调用者只发送该消息,具体实现由接收对象决定。这种现象叫什么( )?

  • A. 接口

  • B. 继承

  • C. 覆盖

  • D. 多态

答案与解析

平台答案:D。

整理解析

选 D。这是对象对同一操作表现不同的多态性;调用者依赖共同接口,实际接收对象执行自身的实现。继承和覆盖可以参与实现这种行为,但并非该现象本身的名称。

题目 057

展开题目 057(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 57 题(原站入口)。

在所列机制中,哪一种支持面向对象的多态行为( )?

  • A. 静态分配

  • B. 动态分配

  • C. 静态类型

  • D. 动态绑定

答案与解析

平台答案:D。

整理解析

选 D。本题按运行时对象多态理解:动态绑定依据实际接收对象选择重写实现。限定:软考的广义多态还包括参数、过载和强制多态,不能推成所有多态都必须动态绑定;Java 的重载选择通常在编译期完成。

题目 067

展开题目 067(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 67 题(原站入口)。

当一个类有两个或更多超类时,这种继承方式称为(67),它可能使子类中的成员出现(68)。

请作答:第 67 题。

  • A. 多重继承

  • B. 多态

  • C. 封装

  • D. 层次继承

答案与解析

平台答案:A。

整理解析

选 A。一个类同时从多个超类继承,称为多重继承。该题是一般面向对象概念;Java 类仅能直接继承一个类,但可实现多个接口,不能把一般概念当成Java类继承语法。

题目 068

展开题目 068(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 68 题(原站入口)。

当一个类有两个或更多超类时,这种继承方式称为(67),它可能使子类中的成员出现(68)。

请作答:第 68 题。

  • A. 动态

  • B. 私有

  • C. 公共

  • D. 二义性

答案与解析

平台答案:D。

整理解析

选 D。多个父类可能提供同名成员或经不同路径带来同一祖先成员,未有消歧规则时就可能不明确该选择哪一份。题干说的是“可能”,不表示多重继承必然无法解析。

题目 070

展开题目 070(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 70 题(原站入口)。

在以下描述中,哪一项体现面向对象的多态( )?

  • A. 客户类无需知道所调用方法的特定子类的实现

  • B. 对象动态地修改类

  • C. 一个对象对应多张数据库表

  • D. 子类只能够覆盖父类中非抽象的方法

答案与解析

平台答案:A。

整理解析

选 A。客户通过共同接口调用操作,由实际对象执行相应子类实现,因此不必了解具体子类的实现细节。多态不要求对象更换自身所属类;抽象方法也可由子类实现,并非只能覆盖非抽象方法。

题目 078

展开题目 078(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 78 题(原站入口)。

把逻辑相关的数据和行为组合在一起,并向使用者隐藏内部信息,称为(78)。如果类的属性或方法被声明为 private,那么(79)可以访问它们。

请作答:第 78 题。

  • A. 抽象

  • B. 继承

  • C. 封装

  • D. 多态

答案与解析

平台答案:C。

整理解析

选 C。封装把状态与操作放入统一边界,并通过访问控制隐藏实现细节,外部代码只依赖对外接口。

题目 079

展开题目 079(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 79 题(原站入口)。

把逻辑相关的数据和行为组合在一起,并向使用者隐藏内部信息,称为(78)。如果类的属性或方法被声明为 private,那么(79)可以访问它们。

请作答:第 79 题。

  • A. 应用程序中所有方法

  • B. 只有此类中定义的方法

  • C. 只有此类中定义的public方法

  • D. 同一个包中的类中定义的方法

答案与解析

平台答案:B。

整理解析

按教材的基本访问控制模型选 B。private 的访问权取决于声明范围,不取决于调用方法自己是否为 public;同包的普通其他类也不会自动获得访问权。语言限定:Java 同一顶层类范围内的嵌套类型之间可访问私有成员,C++ 还可显式授权友元,因此“只有此类方法”是本题的简化口径,不能不加条件地推广到所有语言。

题目 080

展开题目 080(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 80 题(原站入口)。

利用继承创建子类后,以下哪项正确描述子类可具有的内容( )?

  • A. 只能有父类中的属性

  • B. 只能有父类中的行为

  • C. 只能新增行为

  • D. 可以有新的属性和行为

答案与解析

平台答案:D。

整理解析

选 D。子类可在继承特征的基础上增加属性和操作,以表达更具体的概念;继承并不把扩展限制为只能增加行为。

题目 089

展开题目 089(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 89 题(原站入口)。

对象的哪一方面同时描述其全部属性(题干称通常是静态的)和这些属性的当前取值(题干称通常是动态的)( )?

  • A. 状态

  • B. 唯一ID

  • C. 行为

  • D. 语义

答案与解析

平台答案:A。

整理解析

选 A。状态由对象在某时刻的属性取值刻画。这里“属性通常静态”指属性结构相对稳定,不是说属性必须声明为 static;当前值也可以不变。平台将广泛的“对象语义”直接等同于共享资源的指针/引用语义,范围过窄,不能作为通用定义。

题目 090

展开题目 090(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 90 题(原站入口)。

把一次过程调用与执行该调用所需的代码在运行时连接,称为(90);若在编译时完成这种连接,则称为(91)。

请作答:第 90 题。

  • A. 消息传递

  • B. 类型检查

  • C. 静态绑定

  • D. 动态绑定

答案与解析

平台答案:D。

整理解析

选 D。运行时才选择要执行的方法实现是动态绑定;编译期确定则是静态绑定。本问回答第90空;第91空属于同一材料的另一个小问。

题目 091

展开题目 091(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 91 题(原站入口)。

将过程调用与响应调用所需执行的代码建立联系:第90空指在运行时完成这种结合的机制,第91空指在编译时完成结合的机制。本题回答第91空。

  • A. 消息传递

  • B. 类型检查

  • C. 静态绑定

  • D. 动态绑定

答案与解析

平台答案:C。

整理解析

选C。编译时确定调用所对应的实现称为静态绑定;运行时才确定则称动态绑定。消息传递描述对象之间的操作请求,类型检查验证类型约束,两者都不等同于绑定时机。平台把消息传递只解释为并行机之间的消息包通信,范围过窄。

题目 092

展开题目 092(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 92 题(原站入口)。

不同类拥有共同的超类;同一条消息可以触发这些类的不同对象所实现的方法。这体现了哪种现象?

  • A. 类型转换

  • B. 映射

  • C. 单态

  • D. 多态

答案与解析

平台答案:D。

整理解析

选D。多态使同一操作请求根据对象的具体类型产生不同实现。平台把“同一对象收到不同消息”也直接算作多态并不充分;它将单态解释为只有一个实例,也混淆了单态与单例。

题目 100

展开题目 100(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 100 题(原站入口)。

面向对象方法中的继承主要用于什么?

  • A. 在已存在的类的基础上创建新类

  • B. 在已存在的类中添加新的方法

  • C. 在已存在的类中添加新的属性

  • D. 在已存在的状态中添加新的状态

答案与解析

平台答案:A。

整理解析

选A。继承在已有类的基础上定义新类,使派生类获得并可扩展基类的特征。平台把B、C直接称为封装、D称为多态不成立:给现有类增加成员或增加状态,本身不足以定义这些机制。

题目 101

展开题目 101(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 101、136 题(原站入口)。

操作或方法使用相同名称,但在不同上下文中具有不同含义,这称为什么多态?

  • A. 参数

  • B. 包含

  • C. 过载

  • D. 强制

答案与解析

平台答案(来源第 101 题):C。

整理解析(来源第 101 题)

选C,即过载多态,例如同名方法按参数类型或数量区分。参数多态用统一定义处理多种类型,包含多态依靠子类型关系,强制多态涉及类型转换。平台称包含多态一般需要运行时类型检查不严谨;动态派发与运行时类型检查不是一回事。

来源第 136 题对照

原题题干

哪一种多态允许同一个名称在不同上下文中具有不同含义?( )

原题选项对照

原选项内容本页选项
A

参数

A
B

包含

B
C

过载

C
D

强制

D

原平台答案(来源第 136 题,原题选项):C;对应本页选项:C;本页平台答案:C。

整理解析(来源第 136 题)

同名函数或运算符随参数类型、个数等上下文具有不同含义,属于过载多态,选C。参数多态使用类型参数,包含多态基于子类型替换,强制多态涉及类型转换。平台所称“包含多态一般需要运行时类型检查”不宜作为定义;动态分派与运行时类型检查是不同机制。

题目 102

展开题目 102(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 102 题(原站入口)。

某销售系统支持客户扫描二维码付款。采用面向对象方法建模时,第102空判断客户类的类别,第103空判断二维码类的类别。

本题回答第102空:客户类属于哪一类?

  • A. 接口

  • B. 实体

  • C. 控制

  • D. 状态

答案与解析

平台答案:B。

整理解析

选B。客户类表示系统需要管理的业务对象及其信息,按实体—边界—控制的分析分类属于实体类。它与作为系统外部参与者的具体客户不是同一建模角色。

题目 103

展开题目 103(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 103 题(原站入口)。

某销售系统支持客户扫描二维码付款。采用面向对象方法建模时,第102空判断客户类的类别,第103空判断二维码类的类别。

本题回答第103空:二维码类属于哪一类?

  • A. 接口

  • B. 实体

  • C. 控制

  • D. 状态

答案与解析

平台答案:A。

整理解析

按题目将二维码视为付款交互入口的设定,选A,即接口类或边界类。这里按承担的交互职责分类,并不意味着任何保存二维码数据的类都必然是边界类。

题目 122

展开题目 122(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 122 题(原站入口)。

类中的成员变量与成员函数,有时分别称为什么?

  • A. 属性和活动

  • B. 值和方法

  • C. 数据和活动

  • D. 属性和方法

答案与解析

平台答案:D。

整理解析

选D。成员变量描述属性或状态,成员函数定义可执行的方法。变量保存的值是某一时刻的具体数据,不等于属性这个结构概念。

题目 125

展开题目 125(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 125 题(原站入口)。

在运行时才把过程调用与响应调用所需执行的代码结合起来,称为什么绑定?

  • A. 动态

  • B. 过载

  • C. 静态

  • D. 参数

答案与解析

平台答案:A。

整理解析

选A。动态绑定根据运行时接收对象等信息确定调用的实现;静态绑定在运行前即可确定。平台把“参数或返回值不同”都当作重载条件不能普遍成立,例如Java、C++不能仅靠不同返回类型重载。

题目 133

展开题目 133(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 133 题(原站入口)。

在C++、Java等面向对象语言中,哪个关键字可用来区分同名的对象属性与局部变量?

  • A. private

  • B. protected

  • C. public

  • D. this

答案与解析

平台答案:D。

整理解析

选D。Java可写this.x,C++可写this->x,明确访问当前对象的成员。其余选项是访问控制关键字。平台称protected允许父类访问子类成员不准确;Java还涉及同包访问,C++也有自身限制,不能用那一句话统一概括。

题目 134

展开题目 134(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 134 题(原站入口)。

用面向对象方法开发系统时,下列与新冠病毒相关的哪组对象具有“一般—特殊”关系?

  • A. 确诊病人和治愈病人

  • B. 确诊病人和疑似病人

  • C. 医生和病人

  • D. 发热病人和确诊病人

答案与解析

平台答案:A。

整理解析

平台选A,将治愈病人看作曾确诊病人的特殊子集。但确诊、治愈也可建模为同一患者随时间改变的状态;若“确诊病人”仅指当前仍患病者,两者并非子类关系。题干未明确时间口径,平台结论依赖其采用的分类约定,不能仅凭状态变化推导继承。

题目 144

展开题目 144(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 144 题(原站入口)。

Java除自动垃圾回收外,还符合哪组特征?( )

①采用即时编译;②采用静态优化编译;③对象在堆空间分配;④对象在栈空间分配。

  • A. ①③

  • B. ①④

  • C. ②③

  • D. ②④

答案与解析

平台答案:A。

整理解析

按本题采用的典型JVM模型,JIT在运行时把字节码编译为机器码,对象在堆中分配,选①③,即A。纠正平台表述:即时编译不等于逐条解释执行,“Java程序最初都解释执行”也不是语言规定;栈存放栈帧、局部变量等,不能说方法代码存于栈中。AOT、逃逸分析等实现优化不改变本题的考查口径。

题目 147

展开题目 147(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 147 题(原站入口)。

Bird和Cat继承Animal,Parrot继承Bird;bird、cat、parrot分别是Bird、Cat、Parrot的对象。第(147)空选择错误说法。另在Animal中定义move()接口,Bird、Cat、Parrot各自实现move();不同对象收到同一调用消息却给出不同结果,这种现象是(148)。

本题作答第147空。

  • A. cat和bird可看作是Animal的对象

  • B. parrot和bird可看作是Animal的对象

  • C. bird可以看作是Parrot的对象

  • D. parrot可以看作是Bird的对象

答案与解析

平台答案:C。

整理解析

子类实例可以按父类类型使用,所以cat、bird、parrot均可视作Animal,parrot也可视作Bird;Bird实例不因此成为Parrot实例,C错误。

题目 148

展开题目 148(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 148 题(原站入口)。

Bird和Cat继承Animal,Parrot继承Bird;bird、cat、parrot分别是Bird、Cat、Parrot的对象。第(147)空选择错误说法。另在Animal中定义move()接口,Bird、Cat、Parrot各自实现move();不同对象收到同一调用消息却给出不同结果,这种现象是(148)。

本题作答第148空。

  • A. 封装

  • B. 继承

  • C. 消息传递

  • D. 多态

答案与解析

平台答案:D。

整理解析

同一move()调用因接收对象的实际类型而执行不同实现,体现多态,选D。继承建立类型层次,封装隐藏实现,消息传递描述对象间的请求机制。平台把消息一概称为异步通信不准确,面向对象消息也可以是同步调用。

题目 167

展开题目 167(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 167 题(原站入口)。

哪种机制在程序运行时把一次调用与实际响应它的代码结合起来?( )

  • A. 强类型

  • B. 弱类型

  • C. 静态绑定

  • D. 动态绑定

答案与解析

平台答案:D。

整理解析

运行时确定此次调用应执行的实现是动态绑定,选D;静态绑定在运行前确定调用目标。强类型、弱类型讨论类型约束,不是调用绑定时机。

题目 171

展开题目 171(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 171 题(原站入口)。

游戏中有野鸭、红头鸭等多种鸭子,它们都会游泳、呱呱叫,颜色随种类不同。鸭子父类实现叫声与游泳方法,把显示颜色声明为抽象方法,由野鸭、红头鸭分别实现,此机制为(171)。向这些不同类型的对象发送同一显示颜色消息,各自显示本类颜色,这一现象为(172)。

本题作答第171空。

  • A. 继承

  • B. 聚合

  • C. 组合

  • D. 多态

答案与解析

平台答案:A。

整理解析

子类继承鸭子父类的共同实现,并实现父类声明的抽象方法,本空考查继承,选A。平台把聚合、组合解释为“由多个子类对象组成”不准确:它们描述整体与部分,不要求两端存在父子类关系。

题目 172

展开题目 172(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 172 题(原站入口)。

游戏中有野鸭、红头鸭等多种鸭子,它们都会游泳、呱呱叫,颜色随种类不同。鸭子父类实现叫声与游泳方法,把显示颜色声明为抽象方法,由野鸭、红头鸭分别实现,此机制为(171)。向这些不同类型的对象发送同一显示颜色消息,各自显示本类颜色,这一现象为(172)。

本题作答第172空。

  • A. 覆盖

  • B. 重载

  • C. 动态绑定

  • D. 多态

答案与解析

平台答案:D。

整理解析

同一消息交给不同类型的对象会执行各自实现,体现多态,选D。覆盖是子类重新实现父类方法,动态绑定是运行时选择实现的机制,重载则要求同名方法具有可区分的参数签名。平台末句“A、D”是在汇总两小问,Q171选A、Q172选D,不能把本题当作多选。

考点二:面向对象开发流程

面向对象分析、设计、程序设计与测试的流程及主要活动

阶段 关注的问题 典型活动
面向对象分析 OOA 问题领域里有什么,系统需要完成什么 识别对象、关系、交互、操作与内部信息
面向对象设计 OOD 如何组织软件对象来实现需求 确定类与接口、分配职责、定义属性和服务、设计关系及包
面向对象程序设计 OOP 如何用语言实现设计 编写类、方法、接口及协作代码
面向对象测试 实现与协作是否符合预期 算法层、类层、模板/类簇层、系统层的验证

这里的“模板/类簇层”关注相关类的协作,不是专指模板方法设计模式。上图概括活动及其关系;实际开发可以迭代进行,不要求四个阶段只能各执行一次。

OOA 的五项主要活动

活动 需要回答的问题 订单系统示例
认定对象 问题领域中有哪些重要对象或概念? 客户、商品、订单
组织对象 对象如何归类,彼此存在什么关系? 订单由订单项组成,订单关联客户
描述对象间的相互作用 谁向谁提出什么请求? 下单流程请求库存检查
确定对象的操作 对象需要提供什么行为? 订单确认、取消
定义对象的内部信息 对象要表达哪些属性和状态? 订单号、金额、状态

记忆顺序:找对象 → 理关系 → 看交互 → 定操作 → 定属性。

OOA 的目标是理解应用问题并建立需求模型。题目若问“主要活动不包括什么”,实际编写程序通常属于 OOP,而不是 OOA。不能仅凭“识别”“定义”等单个动词区分阶段,还应看活动的目标和产物。

OOA:从需求文字筛选候选类

名词或名词短语常提示候选对象/类,动词或动词短语常提示操作与交互,但最终是否建类还要看职责。分析“读者借阅图书,并记录到期日期”时,读者、图书、借阅记录可成为候选类,“借阅”提示操作,“到期日期”通常先作为记录的属性。应合并同义概念,剔除系统范围外的名词,也不要把每个页面控件、数值或临时步骤都建成业务类。

OOA 关注需求与可观察行为,例如“下载失败后允许重试”,暂不要求决定线程池和存储引擎。边界对象可帮助发现交互,实体承载领域信息,控制对象协调流程;这些角色随后还会在设计中细化。

OOD:把需求模型细化为实现方案

常见设计活动是**识别类及对象、定义属性、定义服务、识别关系、识别包**。这里的服务指类对外承担的操作职责,不专指 Android Service 组件。以下载为例,分析阶段明确“记录任务、支持取消”;设计阶段进一步决定任务类的字段类型、取消接口、调度器与任务的协作、模块依赖及异常处理;OOP 再把这些决定实现为代码。

因此,“识别类”“定义操作”可能同时出现在分析和设计中。区分时应看产物:领域需求模型属于分析,面向实现的类、接口与模块方案属于设计,具体语言代码属于实现。

OO 测试:从方法到系统

层次 验证范围 下载功能示例
算法层 单个方法或算法的输入、输出与分支 分段偏移量计算是否正确
类层 一个类的操作、状态及不变式 已取消任务是否还能进入运行状态
模板/类簇层 相互协作的一组类及其交互 调度器取消任务后是否通知仓储与监听者
系统层 完整系统是否满足需求 用户从发起下载到完成、取消的完整流程

这里按教材的面向对象测试粒度理解层次。继承来的方法也可能受到子类重写、状态或协作者变化的影响,不能仅因父类测过就跳过子类的契约与协作验证。

OO 开发流程练习(9 题)

保留原题编号,答案与解析默认折叠。

题目 024

来源:知识点练习「面向对象技术」第 24 题(原站入口)。

在面向对象开发中,哪一环节负责选用合适的面向对象语言,把程序写成协作的对象集合,并通过继承等关系组织对象所属的类( )?

  • A. 分析

  • B. 设计

  • C. 程序设计

  • D. 测试

答案与解析

平台答案:C。

整理解析

选 C。选定语言并实现相互协作的对象属于面向对象程序设计。分析侧重问题域及需求,设计侧重实现方案与职责划分;平台把实现源代码并入设计的说法应与编码阶段区分。

题目 058

来源:知识点练习「面向对象技术」第 58 题(原站入口)。

面向对象分析旨在理解应用问题。以下哪项不属于这一阶段的主要活动( )?

  • A. 认定并组织对象

  • B. 描述对象间的相互作用

  • C. 面向对象程序设计

  • D. 确定基于对象的操作

答案与解析

平台答案:C。

整理解析

选 C。分析阶段识别对象、关系、交互和所需操作,形成问题域模型;用具体程序设计语言实现这些对象属于后续编码工作。

题目 069

展开题目 069(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 69 题(原站入口)。

采用面向对象方法开发软件时,在分析阶段架构师主要关注系统的哪一方面( )?

  • A. 技术

  • B. 部署

  • C. 实现

  • D. 行为

答案与解析

平台答案:D。

整理解析

选 D。分析首先明确系统应完成的行为和业务职责;具体技术、部署方式和代码实现是更偏设计与实现阶段的决策。

题目 081

展开题目 081(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 81 题(原站入口)。

进行面向对象分析时,常从需求文字中的哪类短语入手识别候选对象( )?

  • A. 动词短语

  • B. 名词短语

  • C. 形容词

  • D. 副词

答案与解析

平台答案:B。

整理解析

选 B。名词短语常指向问题域中的实体或概念,可作为候选对象/类;动词短语更常提示职责与操作。这只是识别线索,仍需剔除重复、范围外概念及仅应建成属性的名词。

题目 145

展开题目 145(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 145 题(原站入口)。

面向对象分析通常按哪一顺序开展活动?( )

  • A. 认定对象、组织对象、描述对象的相互作用、确定对象的操作

  • B. 认定对象、定义属性、组织对象、确定对象的操作

  • C. 认定对象、描述对象间的相互作用、确定对象的操作、识别包

  • D. 识别类及对象、识别关系、定义属性、确定对象的操作

答案与解析

平台答案:A。

整理解析

本题采用的分析流程为:认定对象→组织对象→描述对象间相互作用→确定对象操作,之后再定义内部信息,选A。纠正平台例子:门、窗是房屋的组成部分,不是房屋的子类;整体—部分关系不能当作继承关系。

题目 156

展开题目 156(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 156 题(原站入口)。

面向对象设计阶段主要包括哪些活动?( )

  • A. 认定对象、组织对象、描述对象间的相互作用、确定对象的操作

  • B. 认定对象、定义属性、组织对象、确定对象的操作

  • C. 识别类及对象、确定对象的操作、描述对象间的相互作用、识别关系

  • D. 识别类及对象、定义属性、定义服务、识别关系、识别包

答案与解析

平台答案:D。

整理解析

本题教材口径下,设计包括识别类及对象、定义属性与服务、识别关系和包,选D;A列出的是相应的分析活动。实际开发中分析与设计会迭代,活动名称并非完全互斥。

题目 169

展开题目 169(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 169 题(原站入口)。

面向对象分析首先进行(169);面向对象程序设计语言用于支持面向对象(170)。

本题作答第169空。

  • A. 组织对象

  • B. 描述对象间的相互作用

  • C. 认定对象

  • D. 确定对象的操作

答案与解析

平台答案:C。

整理解析

首先从问题领域识别需要建模的对象,即认定对象,选C;之后再组织对象、分析交互和确定操作。

题目 170

展开题目 170(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 170 题(原站入口)。

面向对象分析首先进行(169);面向对象程序设计语言用于支持面向对象(170)。

本题作答第170空。

  • A. 用例设计

  • B. 分析

  • C. 需求分析

  • D. 实现

答案与解析

平台答案:D。

整理解析

面向对象程序设计语言把分析、设计得到的类和协作落实为程序,用于面向对象实现,选D。

题目 173

展开题目 173(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 173 题(原站入口)。

面向对象分析认定对象时,通常先把应用领域自然存在的哪类语言成分作为候选对象?( )

  • A. 问题

  • B. 关系

  • C. 名词

  • D. 动词

答案与解析

平台答案:C。

整理解析

领域叙述中的名词常指向实体,可用来发现候选对象,选C。仍需按系统职责筛选,不能把每个名词都直接建成类;动词通常更有助于发现操作。

面向对象设计的七项原则

前五项通常合称 SOLID,另外两项是组合复用原则和迪米特法则。

原则 核心含义 如何理解或应用
单一职责 SRP(也译单一责任) 一个类或模块应只有一个主要的变化原因 将计价规则、数据库存储、PDF 排版等独立变化的职责分开
开放—封闭 OCP 对扩展开放,对修改封闭 针对预期变化建立扩展点,增加新实现时减少对稳定代码的修改
里氏替换 LSP 子类型应能替代父类型,而不破坏客户依赖的契约 子类不能随意加强前置条件或削弱后置条件
依赖倒置 DIP 高层策略与低层细节都依赖抽象;细节应适配抽象 订单业务依赖支付接口,由具体支付渠道实现接口
接口隔离 ISP(也译接口分离) 客户端不应被迫依赖不需要的操作 按使用方职责设计专门接口,而非无边界地堆积一个总接口
组合复用/组合重用 CRP 合适时通过组合与委托复用行为,降低继承耦合 汽车持有发动机并委托工作;合理的子类型关系仍可使用继承
迪米特法则 LoD/最少知识原则 对象尽量只了解直接协作者 避免跨越多层对象导航并依赖其内部结构

“组合复用原则”与后文“共同重用原则”在部分资料中都缩写为 CRP,需结合中文名称和语境区分。

单一职责的判断方式

判断的重点是 变化原因,而不是方法数量。例如:

  • InvoiceCalculator 随计价规则变化,负责计算金额。
  • InvoiceRepository 随持久化策略变化,负责保存和读取发票。
  • InvoicePdfExporter 随打印要求变化,负责输出 PDF。

一个仓储类可以同时提供新增、查询和更新等多个方法,只要它们围绕同一职责。也不应为了追求“单一”而把每一个小操作机械拆成独立类。

开放—封闭原则不代表代码永远不能修改;接口隔离不代表接口数量越多越好;依赖倒置也不等同于某一种依赖注入框架。

ISP 与 DIP:分别看接口范围和依赖方向

假设下载页面只需要查询进度,却被迫依赖带有删除缓存、配置数据库等操作的巨大接口,问题在于**接口隔离 ISP**:应提供该客户所需的较小契约。若下载业务直接依赖某个 SQLite 实现,难以更换存储方式,问题在于**依赖倒置 DIP**:可让业务依赖 TaskStore 抽象,由数据库实现适配它。前者问“客户需要接口里的哪些方法”,后者问“高层策略依赖抽象还是具体细节”,两者可以同时应用。

依赖注入只是把协作者传给对象的一种装配方式。例如构造函数传入具体数据库对象,并不自动满足依赖倒置;还要看业务代码依赖的类型与契约由谁决定。

包与组件设计的六项原则

讲义使用“包”作为讨论单位。工程实践中也常以可独立发布、复用的组件或模块为单位;它不一定恰好等于一个 Java package。

原则 核心含义 易错点
重用发布等价 REP 重用的粒度与发布的粒度相对应 可复用组件需要清晰的版本和发布边界
共同封闭 CCP 因相同原因、在相近时间变化的类应尽量放在一起 将同一类变化限制在少量组件中,不要求每次都修改包内所有类
共同重用 CRP 通常一起被复用的类应尽量放在一起 避免为了使用一个类而依赖大量无关类,不是要求客户端调用包中每一个类
无环依赖 ADP 组件依赖图不应出现循环 应形成有向无环图(DAG),防止多个组件互相牵制
稳定抽象 SAP 组件的抽象程度应与稳定程度相协调 稳定组件需要足够的抽象,以支持变化而不频繁修改自身
稳定依赖 SDP 依赖应朝更稳定的方向建立 “稳定”关注依赖结构与修改代价,不只是代码长时间没变

做题时,“同一类变化”对应共同封闭,“一起使用/复用”对应共同重用。讲义中“影响包内所有类”“重用包内所有类”是简化表述,应结合上面的组织目标理解,避免机械照搬到实际设计。

ADP:怎样判断模块依赖有环

把模块作为顶点,把“使用方 → 被依赖方”画成有向边。从某模块沿依赖边出发又能回到自身,就形成了环;不只 A → B → A,A → B → C → A 也是环。例如 ui → domain → data → ui 会让三者的构建、发布和测试相互牵制。可把真正共用的契约移入合适的独立模块,或让细节实现业务层抽象,以消除返回路径;拆出模块后仍需重新检查整张依赖图。

SOLID 与组件原则练习(7 题)

保留原题编号,答案与解析默认折叠。

题目 113

来源:知识点练习「面向对象技术」第 113 题(原站入口)。

面向对象设计要求一个类仅有一个引起变化的原因。这是哪项设计原则?

  • A. 单一责任

  • B. 开放-封闭

  • C. 接口分离

  • D. 里氏替换

答案与解析

平台答案:A。

整理解析

选A,即单一责任(单一职责)原则。应把因不同职责而变化的代码分开;它不等于一个类只能有一个方法,而是让类的变化原因保持内聚。

题目 124

来源:知识点练习「面向对象技术」第 124 题(原站入口)。

面向对象设计要求类、模块、函数等软件实体可以扩展,而已有实现应对修改保持封闭。这是哪项原则?

  • A. 共同重用

  • B. 开放封闭

  • C. 接口分离

  • D. 共同封闭

答案与解析

平台答案:B。

整理解析

选B,即开放封闭原则:优先通过扩展增加行为,减少修改稳定代码,并非禁止修复错误。平台在解释接口分离时又加入“依赖抽象、不依赖具体”的描述,混入了依赖倒置原则;接口分离重点是客户不依赖不需要的接口。

题目 135

来源:知识点练习「面向对象技术」第 135 题(原站入口)。

某设计原则要求把针对同一类性质变化的类放在同一个包中;题干表述为:变化一旦影响该包,就影响其中所有类,而不影响其他包。这对应哪项原则?

  • A. 共同重用

  • B. 开放-封闭

  • C. 接口分离

  • D. 共同封闭

答案与解析

平台答案:D。

整理解析

选D,即共同封闭原则,强调把因同类原因一起变化的类组织在一起,让变化尽量局限于少量组件。题干和平台所说“一次变化必影响包中所有类、绝不影响其他包”过于绝对,这是模块组织目标,不是每次修改必须满足的结果。

题目 146

来源:知识点练习「面向对象技术」第 146 题(原站入口)。

面向对象设计要求客户不依赖自己不用的方法;原题又将其表述为“依赖抽象而非具体,抽象层不依赖细节”。它要求选择哪项原则?( )

  • A. 单一责任

  • B. 开放-封闭

  • C. 接口分离

  • D. 里氏替换

答案与解析

平台答案:C。

整理解析

首句“不强迫客户依赖不用的方法”指接口分离原则,平台答案C保留。但题干后半句“依赖抽象、抽象不依赖细节”属于依赖倒置原则,两者并不等价;平台把两项原则混写,不能据此记忆。

题目 157

来源:知识点练习「面向对象技术」第 157 题(原站入口)。

某包中的类应共同重用:一旦重用其中一个类,就需要重用包内其余类。该说法对应哪项设计原则?( )

  • A. 接口分离

  • B. 开放-封闭

  • C. 共同封闭

  • D. 共同重用

答案与解析

平台答案:D。

整理解析

题目对应共同重用原则,选D:应把会被一起重用的类组织在同一包,避免使用者被迫依赖无关类。“重用一个就必须实际使用全部类”是教材的简化表述;共同封闭关注相同变更原因,不意味着每次修改都影响包内所有类而绝不影响其他包。

题目 168

来源:知识点练习「面向对象技术」第 168 题(原站入口)。

面向对象设计要求包依赖图不存在环,这对应哪项原则?( )

  • A. 单一责任

  • B. 无环依赖

  • C. 依赖倒置

  • D. 里氏替换

答案与解析

平台答案:B。

整理解析

无环依赖原则要求包之间的有向依赖不形成回路,选B,使依赖结构可分层、包可较独立地发布和测试。“有向无环图”是准确名称,平台所写“直接的无环图形”不规范。

题目 174

来源:知识点练习「面向对象技术」第 174 题(原站入口)。

一个类只承担一种职责,修改它的原因应只有一个,这体现什么原则?( )

  • A. 单一责任

  • B. 开放-封闭

  • C. 接口分离

  • D. 依赖倒置

答案与解析

平台答案:A。

整理解析

这是单一责任原则,选A。“一个修改原因”强调同一职责或同一类业务主体的变化,不等于类只能有一个方法。开闭原则关注扩展方式,接口分离关注客户所需接口,依赖倒置关注抽象依赖。

例题与解析

共 10 道题:前 7 道对应基本概念,后 3 道对应开发流程与设计原则。题目选项保留原材料,答案为依据概念整理的参考答案。

例题 1:封装与 private

在面向对象方法中,将逻辑上相关的数据以及行为绑定在一起,使信息对使用者隐蔽称为(①)。当类中的属性或方法被设计为 private 时,(②)可以对其进行访问。

选项 第①空 第②空
A 抽象 应用程序中所有方法
B 继承 只有此类中定义的方法
C 封装 只有此类中定义的 public 方法
D 多态 同一个包中的类中定义的方法
参考答案与解析

参考答案:C、B。

绑定相关数据和行为、隐藏内部细节对应封装。按本题的基础访问控制模型,private 成员可由本类的方法访问,并不要求访问方法自身是 public。Java 嵌套类型的语言细节见封装与访问控制。

例题 2:对象与类的组成

在面向对象的系统中,对象是运行时实体,其组成部分不包括(①);一个类定义了一组大体相似的对象,这些对象共享(②)。

选项 第①空 第②空
A 消息 属性和状态
B 行为(操作) 对象名和状态
C 对象名 行为和多重度
D 状态 属性和行为
参考答案与解析

参考答案:A、D。

按题目术语,对象由对象名或标识、状态和行为描述;消息表达对象间的交互。类定义共同的属性结构和行为,各个实例的属性值及状态可以不同,因此第二空选“属性和行为”。

例题 3:实体类与边界类

在某销售系统中,客户采用扫描二维码进行支付。若采用面向对象方法开发该销售系统,则客户类属于(①)类,二维码类属于(②)类。

两空的选项相同:

A B C D
接口 实体 控制 状态
参考答案与解析

参考答案:B、A。

客户表示业务领域实体;本题将二维码视为用户与系统交互的入口,因此属于边界类,也称接口类。支付流程中的协调对象才承担控制类职责。这里的接口类不是 Java 的 interface。

例题 4:继承与覆盖

在面向对象方法中,(①)是父类和子类之间共享数据和方法的机制。子类在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现称为(②)。

两空的选项相同:

A B C D
封装 继承 覆盖 多态
参考答案与解析

参考答案:B、C。

继承提供父子类型之间的定义和行为复用机制;子类重新实现可重写的方法称为重写或覆盖。题干第二空强调具体机制,因此选“覆盖”,不是更广义的“多态”。

例题 5:过载多态

( )多态是指操作(方法)具有相同的名称,且在不同的上下文中所代表的含义不同。

A B C D
参数 包含 过载 强制
参考答案与解析

参考答案:C。

“同一个名字、不同上下文、不同含义”对应过载多态,也叫重载多态。参数多态看类型参数,包含多态看子类型替换,强制多态看类型转换适配。

例题 6:同一消息,不同结果

在面向对象方法中,不同对象收到同一消息可以产生完全不同的结果,这一现象称为( )。在使用时,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定。

A B C D
接口 继承 覆盖 多态
参考答案与解析

参考答案:D。

题干描述的是多态现象:通过统一操作使用不同对象,由接收对象的具体实现产生相应行为。例如,同样调用 Animal.call(),猫和狗表现不同。

例题 7:绑定时机

在下列机制中,(①)是指过程调用和响应调用所需执行的代码在运行时加以结合;而(②)是指过程调用和响应调用所需执行的代码在编译时加以结合。

两空的选项相同:

A B C D
消息传递 类型检查 静态绑定 动态绑定
参考答案与解析

参考答案:D、C。

运行时结合对应动态绑定,编译时结合对应静态绑定。类型检查关注操作与类型是否相容,不能替代绑定时机这一概念。

例题 8:OOA 的主要活动

原材料“考点二”的例题 1:面向对象分析的目的是为了获得对应用问题的理解,其主要活动不包括( )。

选项 内容
A 认定并组织对象
B 描述对象间的相互作用
C 面向对象程序设计
D 确定基于对象的操作
参考答案与解析

参考答案:C。

认定与组织对象、描述交互、确定操作均属于面向对象分析。使用编程语言实现类与方法属于面向对象程序设计,不能混入 OOA 的活动列表。

例题 9:单一职责

原材料“考点二”的例题 2:进行面向对象设计时,就一个类而言,应该仅有一个引起它变化的原因,这属于( )设计原则。

A B C D
单一责任 开放—封闭 接口分离 里氏替换
参考答案与解析

参考答案:A。

“一个引起变化的原因”是单一职责原则的识别语句。单一责任与单一职责是同一原则的不同译法,不能把它理解成“一个类只能有一个方法”。

例题 10:共同封闭

原材料“考点二”的例题 3:进行面向对象系统设计时,针对包中的所有类对于同一类性质的变化;一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。这属于( )设计原则。

A B C D
共同重用 开放—封闭 接口分离 共同封闭
参考答案与解析

参考答案:D。

题干的识别词是“同一类性质的变化”,对应共同封闭原则。工程含义是将因同类原因而变化的类放在一起,使影响尽量集中;不是要求现实中的每次变更必须修改该包全部类,也不是保证任何变更都绝不影响其他包。

UML:建模前置与专题阅读

UML 是描述结构和行为的语言,不能把“会写类”当成“会读所有 UML 图”。先读 UML 图、关系与读图练习,再完成下列题组;该专题已讲解图的用途、箭头方向、多重性、消息、活动并发及状态转换。

UML 事物、图与视图不是同一分类

教材中的“事物”是构成模型的元素,不是图的种类:

事物类别 含义与典型例子
结构事物 模型中相对静态的组成,如类、接口、构件;传统教材也把用例列在此类
行为事物 描述随时间发生的行为,如交互、状态机
分组事物 组织其他模型元素,如包
注释事物 给元素附加说明或约束,常画作折角便笺

一张图可以包含不同类别的元素。用例作为“结构事物”的传统归类,并不改变 UML 2 中用例图属于行为图的分类。构件图属于结构图,同时侧重系统的静态实现视图:“结构图”是图的类别,“实现视图”是观察架构的角度,二者不冲突。构件图表达软件组件、接口与依赖;软件制品放在哪些设备或执行环境上,则由部署图表达。

包的拥有关系不等于引用或导入。 UML 包可以拥有类、接口、构件等可打包元素,也可以嵌套包,但同一模型元素不能同时被两个包直接拥有。例如 sales 拥有类 Order,shipping 可以引用或导入 sales::Order;这仍是同一个类,拥有者仍是 sales,没有因此复制一份或增加第二个拥有者。包作为命名空间要求成员可区分,不能把它简化为模型中所有元素的名字都必须全局唯一。也不要直接套用 Java 包名:a.b 的点号层次不意味着它自动获得 a 的包访问权限。

UML 类图:关系之外还要核对实例约束

关联描述类的实例之间可建立什么连接,具体对象间的一次连接称为**链/链接**。同一对类可以有多个不同含义的关联,例如员工与项目之间分别有“负责”和“参与”;应以关联名或端点角色区分,不能因为端点类相同就合并。自关联的两端也承担不同角色,例如同为员工的导师与受指导者,应分别检查两端约束。

**关联类**为“联系本身”增加属性或行为,用类框通过虚线接到关联线上。例如借阅日期属于“读者借某本书的这次联系”,不宜直接当成读者或书的固定属性。多对多关系本身可以直接画关联,并不一律要求新建类;当需要保存联系的信息、独立标识业务记录时,才有进一步建模的理由。

还要区分“能关联多个对象”与“同一对对象能发生多次业务记录”。同一读者两次借同一本书,需要区分两次借阅。普通多对多关联不会自动表示两个不同记录;可将每次借阅建成独立 Loan 对象,每个 Loan 关联一个读者和一本书,读者、书各可关联多个 Loan。若采用关联类表达重复联系,应明确关联端的唯一性约束;默认的唯一性与标注 {non-unique} 的非唯一性不能混同。判断模型时,要核对记录属性、重复次数和关联约束,而非只看到两端有 *。

多重性从对端的一个实例读起:若“每个小组关联 2..5 名成员”,则 1 名和 6 名都不满足约束;* 的下界为 0,不表示至少 1。抽象类的子类实例仍可参与从父类型继承的关联,但不能凭空创建抽象类的直接实例。完整规则与对象图检查步骤见类图、对象图与多重性。

聚合/组合要根据整体、部分、排他归属与生命周期责任判断,不能根据现实物品能否拆下来决定。Java 对象中有一个引用,也不足以断言 UML 组合;详见聚合与组合的边界。

UML 动态读图:沿对象、消息和控制流追踪

用例图先分清系统外部的**角色**与内部领域对象:使用 App 的人可扮演“读者”参与者,系统保存的读者账户则可建成实体类。它们讨论的角度不同。参与者不只限于自然人;包含、扩展和泛化的符号及方向见用例图与三种用例关系。

顺序图沿生命线读消息,通信图沿对象连接及编号还原调用。task:DownloadTask 表示名为 task 的实例,:DownloadTask 省略实例名;通信图中 1.1 常表示处理消息 1 时的嵌套调用,消息前的 * 表示迭代发送。判断某类需要提供哪些方法,要汇总**发给该类各实例的调用**,而不是收集它向外发出的消息或返回值。完整示例见消息接收者与方法归属和通信图。

活动图按分支和汇合分析可走的路径;分支是选择,分叉才产生并发路径,合并不等于等待所有并发分支完成。状态机图则先确认当前活跃状态,再匹配事件和守卫,最后依次考虑退出行为、转换效果与进入行为。特别要区分外部自转换和内部转换,以及变化事件 when(...) 与时间事件 after(...)。这些执行规则分别见活动图和状态机图,图中个别不规范之处保留在对应练习的折叠解析内。

UML 建模练习(58 题)

保留原题编号,答案与解析默认折叠。

题目 005

来源:知识点练习「面向对象技术」第 5 题(原站入口)。

要继续细化一个复杂用例内部的业务处理流程,以下哪种 UML 图最适合( )?

  • A. 状态图

  • B. 顺序图

  • C. 类图

  • D. 活动图

答案与解析

平台答案:D。

整理解析

选 D。活动图能直接表达步骤、分支、合并及并发等流程。状态图关注对象状态及转换,顺序图关注消息先后,类图描述静态结构。

题目 006

来源:知识点练习「面向对象技术」第 6 题(原站入口)。

阅读下列序列图:其中(6)是返回消息;Account 类需要提供的方法为(7)。

题目配图

请作答:第 6 题。

  • A. tansID

  • B. balance

  • C. withdraw

  • D. deposit

答案与解析

平台答案:B。

整理解析

选 B。图中第3条 balance 消息用虚线从 src:Account 指回事务管理对象,表示 checkBalance 调用的返回;withdraw 与 deposit 都是发向 Account 对象的调用。选项A保留来源的 tansID 写法,图中的 transID 是传入参数,不影响本题判断。

题目 007

展开题目 007(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 7 题(原站入口)。

阅读下列序列图:其中(6)是返回消息;Account 类需要提供的方法为(7)。

题目配图

请作答:第 7 题。

  • A. start()

  • B. checkBalance()和withdraw()

  • C. deposit()

  • D. checkBalance()、withdraw()和deposit()

答案与解析

平台答案:D。

整理解析

选 D。发给 src:Account 的调用是 checkBalance 和 withdraw,发给 tgt:Account 的调用是 deposit;两个接收对象同属 Account 类,因此三种操作都应由该类支持。start 的接收者是事务管理对象,不是 Account。

题目 016

展开题目 016(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 16 题(原站入口)。

按 UML 的结构、行为、分组、注释四类事物划分,类、接口、构件属于(16)事物;附加在一个或多个元素上、表达约束或说明的简单符号属于(17)事物。

请作答:第 16 题。

  • A. 结构

  • B. 行为

  • C. 分组

  • D. 注释

答案与解析

平台答案:A。

整理解析

选 A。类、接口、构件描述模型中的静态组成,归于结构事物;行为事物侧重交互、状态机等动态行为。

题目 017

展开题目 017(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 17 题(原站入口)。

按 UML 的结构、行为、分组、注释四类事物划分,类、接口、构件属于(16)事物;附加在一个或多个元素上、表达约束或说明的简单符号属于(17)事物。

请作答:第 17 题。

  • A. 结构

  • B. 行为

  • C. 分组

  • D. 注释

答案与解析

平台答案:D。

整理解析

选 D。给模型元素附加文字说明或约束的注释符号属于注释事物,不是组织元素的包,也不是行为或结构本体。

题目 020

展开题目 020(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 20 题(原站入口)。

UML 交互图描述对象之间的交互,包含参与交互的对象、关系以及可能传递的消息。以下哪种图不属于交互图( )?

  • A. 序列图

  • B. 对象图

  • C. 通信图

  • D. 时序图

答案与解析

平台答案:B。

整理解析

选 B。对象图给出某一时刻实例及其连接的静态快照,不描绘消息交互。序列图和通信图属于交互图;“时序图”不论在此用作序列图的别名还是指 Timing Diagram,也都属于交互图。补充:UML 2还包括交互概览图,不能把交互图种类局限为旧版常见的两种。

题目 026

展开题目 026(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 26 题(原站入口)。

在 UML 的依赖、关联、泛化、实现四种关系中,(26)是描述一组对象连接即“链”的结构关系;(27)描述特殊元素与一般元素之间的关系,使子元素共享父元素的结构和行为。

请作答:第 26 题。

  • A. 依赖

  • B. 关联

  • C. 泛化

  • D. 实现

答案与解析

平台答案:B。

整理解析

选 B。关联描述类型之间可存在怎样的连接,链则是具体对象间的一次连接,即关联的实例。它与一般—特殊的类型层次关系不同。

题目 027

展开题目 027(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 27 题(原站入口)。

在 UML 的依赖、关联、泛化、实现四种关系中,(26)是描述一组对象连接即“链”的结构关系;(27)描述特殊元素与一般元素之间的关系,使子元素共享父元素的结构和行为。

请作答:第 27 题。

  • A. 依赖

  • B. 关联

  • C. 泛化

  • D. 实现

答案与解析

平台答案:C。

整理解析

选 C。泛化把特殊分类器连接到一般分类器,特殊者继承一般者的特征,常画为指向一般者的实线空心三角箭头。实现关系则表示履行接口等所规定的契约。

题目 028

展开题目 028(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 28 题(原站入口)。

使用 UML 为新系统的需求建模、规划功能或据此安排测试用例,最合适的是(28);若要展示交付系统的软件组件与硬件之间的配置关系,则应使用(29)。

请作答:第 28 题。

  • A. 类图

  • B. 对象图

  • C. 用例图

  • D. 交互图

答案与解析

平台答案:C。

整理解析

选 C。用例图从参与者使用系统的目标出发描述外部可见功能,适合组织功能需求并为测试场景提供依据。它不负责给出软件在硬件节点上的放置位置。

题目 029

展开题目 029(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 29 题(原站入口)。

使用 UML 为新系统的需求建模、规划功能或据此安排测试用例,最合适的是(28);若要展示交付系统的软件组件与硬件之间的配置关系,则应使用(29)。

请作答:第 29 题。

  • A. 类图

  • B. 部署图

  • C. 组件图

  • D. 网络图

答案与解析

平台答案:B。

整理解析

选 B。部署图展示运行节点、执行环境和部署其上的制品,可表达软件与硬件的配置对应;组件图主要表达软件组件本身的结构。严格按 UML 2,部署到节点的是制品,组件通常由制品体现。

题目 037

展开题目 037(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 37 题(原站入口)。

根据下列 UML 图,分别识别标注(I)、(Ⅱ)、(Ⅲ)所指元素,依次填入(37)、(38)、(39)。

题目配图

请作答:第 37 题。

  • A. 参与者

  • B. 用例

  • C. 泛化关系

  • D. 包含关系

答案与解析

平台答案:A。

整理解析

选 A。(I)指向标为 Trader 的小人符号,是系统外部的参与者。参与者表示与系统交互的角色,不要求一定是自然人。

题目 038

展开题目 038(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 38 题(原站入口)。

根据下列 UML 图,分别识别标注(I)、(Ⅱ)、(Ⅲ)所指元素,依次填入(37)、(38)、(39)。

题目配图

请作答:第 38 题。

  • A. 参与者

  • B. 用例

  • C. 泛化关系

  • D. 包含关系

答案与解析

平台答案:C。

整理解析

选 C。(Ⅱ)指向 Limits Exceeded 与 Capture Deal 之间的实线空心三角箭头,是泛化关系,三角端 Capture Deal 为一般用例。即使从业务名称联想到扩展,也必须依据原图符号判断;include 是另两处带标签的虚线箭头。

题目 039

展开题目 039(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 39 题(原站入口)。

根据下列 UML 图,分别识别标注(I)、(Ⅱ)、(Ⅲ)所指元素,依次填入(37)、(38)、(39)。

题目配图

请作答:第 39 题。

  • A. 参与者

  • B. 用例

  • C. 泛化关系

  • D. 包含关系

答案与解析

平台答案:B。

整理解析

选 B。(Ⅲ)指向写着 Limits Exceeded 的椭圆,该符号表示用例;用例之间的连线才表示关系。

题目 040

展开题目 040(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 40 题(原站入口)。

判断下面这张图属于哪一种 UML 图( )?

题目配图

  • A. 类图

  • B. 部署图

  • C. 组件图

  • D. 网络图

答案与解析

平台答案:C。

整理解析

选 C。图中用构件符号表示 Bookingsdll、Servicesdll、GUIlib 和 Main.exe,并用虚线箭头连接其依赖,描述的是组件结构。图上没有部署节点,不能仅因出现文件名便认定为部署图。

题目 047

展开题目 047(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 47 题(原站入口)。

UML 用例图中的参与者,表示以下哪一种概念( )?

  • A. 人、硬件或其他系统可以扮演的角色

  • B. 可以完成多种动作的相同用户

  • C. 不管角色的实际物理用户

  • D. 带接口的物理系统或者硬件设计

答案与解析

平台答案:A。

整理解析

选 A。参与者是相对于所建模系统的外部交互角色,可由人、硬件或其他系统承担。同一个人可以扮演多个角色,多个实际实体也可以扮演同一角色。

题目 048

展开题目 048(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 48 题(原站入口)。

UML 中关联描述一组对象间的链。对于两个类之间可以建立的关联,以下说法哪项合适( )?

  • A. 不能有多个

  • B. 可以有多个由不同角色标识的

  • C. 可以有任意多个

  • D. 多个关联必须聚合成一个

答案与解析

平台答案:B。

整理解析

选 B。同一对类可基于不同业务角色建立不同关联,例如同一用户类与试卷类可分别表达学员和普通网友的测试关系。多个关联应有可区分的语义,不能被强制压成一个;角色名是常用区分方式,而不是所有UML关联都必须写角色名的语法规则。

题目 049

展开题目 049(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 49 题(原站入口)。

识别下列 UML 图的类型(49),并分别说明标注(Ⅰ)与(Ⅱ)表示什么(50)、(51)。

题目配图

请作答:第 49 题。

  • A. 序列图

  • B. 状态图

  • C. 通信图

  • D. 活动图

答案与解析

平台答案:D。

整理解析

选 D。图按接单、履约、开票、收款等动作组织控制流,并使用分叉和汇合表达并发,是活动图。纠错:不能按“状态图每条箭头都有事件”来机械判断;状态机允许没有显式触发事件的完成转换。

题目 050

展开题目 050(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 50 题(原站入口)。

识别下列 UML 图的类型(49),并分别说明标注(Ⅰ)与(Ⅱ)表示什么(50)、(51)。

题目配图

请作答:第 50 题。

  • A. 合并分叉

  • B. 分支

  • C. 合并汇合

  • D. 流

答案与解析

平台答案:A。

整理解析

平台答案为 A。原图(Ⅰ)的粗横条有一条流进入、两条流离开,将处理拆成并发路径,是分叉节点(fork);下方多入一出的粗横条才是汇合(join)。原页已核实:A确写“合并分叉”。保留原选项,其意图应为并发分叉,不能把该非标准用词当作UML正式名称。

题目 051

展开题目 051(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 51 题(原站入口)。

识别下列 UML 图的类型(49),并分别说明标注(Ⅰ)与(Ⅱ)表示什么(50)、(51)。

题目配图

请作答:第 51 题。

  • A. 分支条件

  • B. 监护表达式

  • C. 动作名

  • D. 流名称

答案与解析

平台答案:B。

整理解析

选 B。(Ⅱ)指向方括号中的 [not complete],这是监护表达式,即守卫条件;只有条件为真,相应控制流才可通过。动作名是 Fill Order 等节点文字,不是这段条件。

题目 059

展开题目 059(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 59 题(原站入口)。

对于下列 UML 状态图,以下哪一种情形不一定使系统退出复合状态 B( )?

题目配图

  • A. 状态B中的两个结束状态均达到

  • B. 在当前状态为B2时,事件e2发生

  • C. 事件e2发生

  • D. 事件e1发生

答案与解析

平台答案:C。

整理解析

选 C。e2 的出发状态是 B2,只有 B2 活跃且该转换可触发时,e2 才沿图中箭头退出 B 到 C3;仅说 e2 发生不足以保证退出。e1 对应从 B 到 C1 的转换;两个正交区域均达到终态时,B 完成并沿无触发器的完成转换到 C2。

题目 060

展开题目 060(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 60 题(原站入口)。

对于 UML 状态图的转换(transition),以下说法哪项不正确( )?

  • A. 活动可以在转换时执行也可以在状态内执行

  • B. 监护条件只有在相应的事件发生时才进行检查

  • C. 一个转换可以有事件触发器、监护条件和一个状态

  • D. 事件触发转换

答案与解析

平台答案:C。

整理解析

选 C。转换标签通常组织为“触发器 [守卫条件] / 效应”,其中不是把“一个状态”作为效应项。纠错:平台用“转换至少有两个状态”论证不成立,自转换的源与目标可以是同一个状态。B应按相应触发被处理时评估守卫来理解;完成转换也可不显式写事件触发器,不能把B、D扩大为所有转换都必须等待外部事件。

题目 061

展开题目 061(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 61 题(原站入口)。

下列①②③④属于 UML 的哪类图(61)?场景要求:一名 Doctor 可治疗多名 Patient,一名 Patient 也可由多名 Doctor 治疗;同一名医生可能多次治疗同一病人,每次 Treatment 要记录日期和时间。图中符合场景的模型是(62)。

题目配图

请作答:第 61 题。

  • A. 用例图

  • B. 对象图

  • C. 类图

  • D. 协作图

答案与解析

平台答案:C。

整理解析

选 C。图中使用 Doctor、Patient、Treatment 等类框,属性、关联及多重度来定义类型结构,属于类图。对象图则表示具体实例在某时刻的连接。

题目 062

展开题目 062(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 62 题(原站入口)。

下列①②③④属于 UML 的哪类图(61)?场景要求:一名 Doctor 可治疗多名 Patient,一名 Patient 也可由多名 Doctor 治疗;同一名医生可能多次治疗同一病人,每次 Treatment 要记录日期和时间。图中符合场景的模型是(62)。

题目配图

请作答:第 62 题。

  • A. ①

  • B. ②

  • C. ③

  • D. ④

答案与解析

平台答案:A。

整理解析

平台答案保留 A(①)。①以两端 、{non-unique} 和带日期时间的 Treatment 关联类表达可重复的医患治疗联系。但②将每次治疗建成独立 Treatment 对象,Doctor、Patient 端均为1,Treatment端均为,同样允许同一医患组合有多次治疗记录。原页已核实,题干只有多对多、多次治疗及记录日期时间这些条件,没有“必须使用关联类”等限制,四幅原图均按题面保留。因此②也符合文字要求,不能把平台①解释为唯一可行模型。

题目 071

展开题目 071(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 71 题(原站入口)。

判断完整 UML 图的类型(71),并识别两组局部符号:下方按原顺序列出的前两幅小图表示(72),接下来的两幅箭头小图表示(73);最后一幅是对应的完整图。

题目配图

题目配图

题目配图

题目配图

题目配图

请作答:第 71 题。

  • A. 序列图

  • B. 状态图

  • C. 通信图

  • D. 活动图

答案与解析

平台答案:C。

整理解析

选 C。完整图把参与对象布置在连接网络中,以1、1.1、2.1等编号标示消息先后和嵌套层级,重点呈现参与者的连接组织,是通信图。序列图通常另以纵向生命线突出时间顺序。

题目 072

展开题目 072(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 72 题(原站入口)。

判断完整 UML 图的类型(71),并识别两组局部符号:下方按原顺序列出的前两幅小图表示(72),接下来的两幅箭头小图表示(73);最后一幅是对应的完整图。

题目配图

题目配图

题目配图

题目配图

题目配图

请作答:第 72 题。

  • A. 类

  • B. 对象

  • C. 流名称

  • D. 消息

答案与解析

平台答案:B。

整理解析

选 B。前两个框分别为带下划线的 :Order 与 b:Book,表示实例;前者省略对象名,后者给出对象名 b 及所属类 Book。不能把实例所属的类名误读成该框本身在表示类。

题目 073

展开题目 073(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 73 题(原站入口)。

判断完整 UML 图的类型(71),并识别两组局部符号:下方按原顺序列出的前两幅小图表示(72),接下来的两幅箭头小图表示(73);最后一幅是对应的完整图。

题目配图

题目配图

题目配图

题目配图

题目配图

请作答:第 73 题。

  • A. 类

  • B. 对象

  • C. 流名称

  • D. 消息

答案与解析

平台答案:D。

整理解析

选 D。箭头旁的 find_books()、search() 等是对象间发送的消息;编号表达顺序或嵌套层级,* 表示迭代发送。它们不是对象或类的名称。

题目 082

展开题目 082(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 82 题(原站入口)。

阅读下列 UML 类图:Shop 与 Magazine 的关系为(82),Magazine 与 Page 的关系为(83)。以下哪一项通常不使用 UML 类图建模(84)?

题目配图

请作答:第 82 题。

  • A. 关联

  • B. 依赖

  • C. 组合

  • D. 继承

答案与解析

平台答案:A。

整理解析

选 A。Shop 与 Magazine 之间是标有 sells 的普通实线关联;Magazine 端的 * 表示一个 Shop 可关联多个 Magazine,符号本身包含零个的可能。这里没有泛化三角、依赖虚线或组合菱形。

题目 083

展开题目 083(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 83 题(原站入口)。

阅读下列 UML 类图:Shop 与 Magazine 的关系为(82),Magazine 与 Page 的关系为(83)。以下哪一项通常不使用 UML 类图建模(84)?

题目配图

请作答:第 83 题。

  • A. 关联

  • B. 依赖

  • C. 组合

  • D. 继承

答案与解析

平台答案:C。

整理解析

选 C。Magazine 端的实心菱形表示组合,Magazine 是整体,Page 是部分;Page 端的 * 描述每本杂志关联的页数范围。组合强调部分在同一时刻至多属于一个组合整体,不能把菱形方向读反。

题目 084

展开题目 084(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 84 题(原站入口)。

阅读下列 UML 类图:Shop 与 Magazine 的关系为(82),Magazine 与 Page 的关系为(83)。以下哪一项通常不使用 UML 类图建模(84)?

题目配图

请作答:第 84 题。

  • A. 系统的词汇

  • B. 简单的协作

  • C. 逻辑数据库模式

  • D. 对象快照

答案与解析

平台答案:D。

整理解析

选 D。对象快照记录具体实例及当时的链接,通常使用对象图;类图表达类及其关系,可用于领域词汇、参与协作的静态结构和逻辑数据模式。

题目 093

展开题目 093(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 93 题(原站入口)。

下图描述汽车导航系统。第93空判断UML图的类型,第94空选择该图所展示的内容,第95空选择Mapping对象获取汽车当前位置(GPS Location)所用的消息。

汽车导航系统UML图

本题回答第93空:这是哪类UML图?

  • A. 类图

  • B. 组件图

  • C. 通信图

  • D. 部署图

答案与解析

平台答案:C。

整理解析

选C。图中对象由连接线组织,消息用1、1.1、2、2.1等编号表示调用次序,属于通信图。它强调参与交互的对象及连接,没有顺序图典型的纵向生命线。

题目 094

展开题目 094(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 94 题(原站入口)。

下图描述汽车导航系统。第93空判断UML图的类型,第94空选择该图所展示的内容,第95空选择Mapping对象获取汽车当前位置(GPS Location)所用的消息。

汽车导航系统UML图

本题回答第94空:此图主要展示什么?

  • A. 对象之间的消息流及其顺序

  • B. 完成任务所进行的活动流

  • C. 对象的状态转换及其事件顺序

  • D. 对象之间消息的时间顺序

答案与解析

平台答案:A。

整理解析

按本题对图的侧重点划分选A,通信图展示对象之间的消息流及其顺序,并强调对象间的组织关系。它同样能用编号表示消息次序,因此不能说它完全不表达时间先后;D更接近顺序图的典型描述。

题目 095

展开题目 095(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 95 题(原站入口)。

下图描述汽车导航系统。第93空判断UML图的类型,第94空选择该图所展示的内容,第95空选择Mapping对象获取汽车当前位置(GPS Location)所用的消息。

汽车导航系统UML图

本题回答第95空:Mapping获取汽车当前位置用哪条消息?

  • A. 1: getGraphic()

  • B. 2: getCarPos()

  • C. 1.1: CurrentArea()

  • D. 2.1: getCarLocation()

答案与解析

平台答案:D。

整理解析

选D。图中Mapping指向GPS location的消息标为2.1: getCarLocation();2: getCarPos()是UI发给Mapping的外层请求。嵌套编号2.1表示处理消息2时进一步发出的调用。

题目 104

展开题目 104(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 104 题(原站入口)。

观察下方UML图:第104空判断图的类型,第105空选择图所表达的内容,第106空依次判断标号①、②所示接口的种类。

带接口标记的UML图

本题回答第104空:这是哪一种UML图?

  • A. 类图

  • B. 组件图

  • C. 通信图

  • D. 部署图

答案与解析

平台答案:B。

整理解析

选B。各方框带有组件标识,并以供接口、需接口及依赖连接协作,表示组件图。它没有部署图所强调的设备节点和执行环境。

题目 105

展开题目 105(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 105 题(原站入口)。

观察下方UML图:第104空判断图的类型,第105空选择图所表达的内容,第106空依次判断标号①、②所示接口的种类。

带接口标记的UML图

本题回答第105空:这类图主要展示什么?

  • A. 一组对象、接口、协作和它们之间的关系

  • B. 收发消息的对象的结构组织

  • C. 组件之间的组织和依赖

  • D. 面向对象系统的物理模型

答案与解析

平台答案:C。

整理解析

选C。图中Order System依赖Customer Repository与Inventory System提供的接口,表达组件之间的组织和依赖。共享平台解析末尾写“选择B”是前一小问的结论,不能套用到本问;平台将类图概括为一组对象也不准确,类图主要描述类及其关系。

题目 106

展开题目 106(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 106 题(原站入口)。

观察下方UML图:第104空判断图的类型,第105空选择图所表达的内容,第106空依次判断标号①、②所示接口的种类。

带接口标记的UML图

本题回答第106空:①、②分别是哪类接口?

  • A. 供接口和供接口

  • B. 需接口和需接口

  • C. 供接口和需接口

  • D. 需接口和供接口

答案与解析

平台答案:D。

整理解析

选D。①指向半圆形插口,表示需接口;②指向圆形标记,表示供接口。依赖方需要服务,提供方通过供接口承诺服务。共享平台解析末尾的“选择B”不适用于本问,应保留本问平台答案D。

题目 112

展开题目 112(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 112 题(原站入口)。

用面向对象方法开发软件,并将汽车视为一个系统。下列哪组对象之间不属于组成(Composition)关系?

  • A. 汽车和座位

  • B. 汽车和车窗

  • C. 汽车和发动机

  • D. 汽车和音乐系统

答案与解析

平台答案:D。

整理解析

平台答案为D,按其把音乐系统视为可独立使用的外部系统来理解。但仅凭“汽车与某部件”的名称不能唯一判断UML组合关系;座位、发动机也可拆换。组合关注模型中的排他整体所有权和生命周期责任,题干没有明确这些约束,平台所作区分依赖额外建模假设。

题目 114

展开题目 114(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 114 题(原站入口)。

所谓聚合对象,是指具有哪种特点的对象?

  • A. 只有静态方法

  • B. 只有基本类型的属性

  • C. 包含其他对象

  • D. 只包含基本类型的属性和实例方法

答案与解析

平台答案:C。

整理解析

选C。聚合对象由其他对象组成,强调对象的组合结构,与是否只有静态方法、基本类型属性无关。此处的“包含”是组合概念,不能把任何普通对象引用都自动认定为UML聚合关系。

题目 115

展开题目 115(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 115 题(原站入口)。

在UML中,哪类图用来表示交付系统的软件组件与硬件之间的物理关系?

  • A. 类

  • B. 组件

  • C. 通信

  • D. 部署

答案与解析

平台答案:D。

整理解析

选D。部署图描述设备、执行环境等节点,以及软件制品在节点上的部署和通信联系。组件图主要描述逻辑组件及依赖。平台把类图说成一组对象不准确,类图主要表示类,实例结构通常用对象图。

题目 116

展开题目 116(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 116 题(原站入口)。

观察下图:第116空判断UML图的种类,第117空选择它展示的系统行为范围。

学生成绩打印示意图

本题回答第116空:图的具体类型是什么?

  • A. 用例图

  • B. 活动图

  • C. 序列图

  • D. 交互图

答案与解析

平台答案:C。

整理解析

选C。图中有纵向生命线、激活条及按时间顺序排列的消息,还包含loop片段,是序列图。序列图本身也属于交互图,所以D是上位类别而不是与C互斥的另一种图;单选按最具体名称取C。

题目 117

展开题目 117(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 117 题(原站入口)。

观察下图:第116空判断UML图的种类,第117空选择它展示的系统行为范围。

学生成绩打印示意图

本题回答第117空:图展示哪种行为范围?

  • A. 一个用例和一个对象的行为

  • B. 一个用例和多个对象的行为

  • C. 多个用例和一个对象的行为

  • D. 多个用例和多个对象的行为

答案与解析

平台答案:B。

整理解析

按题目把成绩生成与打印看作一个用例场景,选B。学生信息页、TranscriptBuilder、Student、Seminar及打印机等多个对象协作完成该场景。但UML并不规定任何序列图都只能对应一个完整用例,也可描述用例片段或更复杂的交互。

题目 123

展开题目 123(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 123 题(原站入口)。

采用面向对象方法开发系统时,下列哪组对象之间的关系需要建立新类来表示?

  • A. 汽车和座位

  • B. 主人和宠物

  • C. 医生和病人

  • D. 部门和员工

答案与解析

平台答案:C。

整理解析

平台答案为C,通常用就诊等关联对象连接医生与病人。但题干未给出关联需要保存哪些信息,仅凭多对多关系并不能断言UML必须新增类;关联类通常用于给联系本身增加属性或行为。主人与宠物的多重性也取决于业务规则,平台借用关系数据库映射规则作为必然建类依据不充分。

题目 126

展开题目 126(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 126 题(原站入口)。

关于UML状态图,下列哪项说法不正确?

  • A. 活动可以在状态内执行,也可以在迁移时执行

  • B. 若事件触发一个没有特定监护条件的迁移,则对象离开当前状态

  • C. 迁移可以包含事件触发器、监护条件和状态

  • D. 事件触发迁移

答案与解析

平台答案:C。

整理解析

平台答案为C,按迁移标签的常见格式,应写“触发事件[监护条件]/效果(动作)”,而不是把状态当作标签要素。但迁移本身确有源状态和目标状态,平台解析先承认这一点又判C错,表述不自洽;题干的“包含”也不够精确。B还需限定为实际发生的外部迁移,内部迁移并不退出状态,事件发生也不保证一定迁移。

题目 127

展开题目 127(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 127 题(原站入口)。

观察下图:第127空判断UML图的类型,第128空选择对图的描述中不正确的一项。

A与B的关系及多重性

本题回答第127空:这是什么图?

  • A. 对象图

  • B. 类图

  • C. 组件图

  • D. 部署图

答案与解析

平台答案:B。

整理解析

选B。图中A、B是类,连线表示组合关系及多重性,B还有自关联,属于类图。实例图通常使用带下划线的实例标识;平台仅用是否有冒号区分对象图和类图不够可靠。

题目 128

展开题目 128(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 128 题(原站入口)。

观察下图:第127空判断UML图的类型,第128空选择对图的描述中不正确的一项。

A与B的关系及多重性

本题回答第128空:哪项描述不正确?

  • A. 如果B的一个实例被删除,所有包含A的实例都被删除

  • B. A的一个实例可以与B的一个实例关联

  • C. B的一个实例被唯一的一个A的实例所包含

  • D. B的一个实例可与B的另外两个实例关联

答案与解析

平台答案:A。

整理解析

选A。实心菱形位于A端,A是整体、B是部分;删除一个B不要求删除A。A端多重性1表示每个B属于一个A,B端*允许一个A包含多个B。B的自关联两端均为1,两个角色可分别连接其他B。组合删除规则针对整体仍拥有的部分,不能把删除方向反过来。

题目 137

展开题目 137(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 137 题(原站入口)。

UML对象图表示(137);从第138题的对象图中,选出与下列类图不一致的一项(138)。

题目配图

本题作答第137空。

  • A. 一组对象、接口、协作和它们之间的关系

  • B. 一组用例、参与者以及它们之间的关系

  • C. 某一时刻一组对象以及它们之间的关系

  • D. 以时间顺序组织的对象之间的交互活动

答案与解析

平台答案:C。

整理解析

对象图记录某一时刻的对象实例及实例间的连接,选C。平台把类图表述为“一组对象”不准确:类图描述类等类型及其关系,对象图才呈现实例快照。

题目 138

展开题目 138(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 138 题(原站入口)。

UML对象图表示(137);从第138题的对象图中,选出与下列类图不一致的一项(138)。

题目配图

本题作答第138空。

  • A. 题目配图

  • B. 题目配图

  • C. 题目配图

  • D. 题目配图

答案与解析

平台答案:D。

整理解析

A端多重性为1、B端为*:每个B只能连接一个A,每个A可连接零个或多个B。D让同一个B连接两个A,违反A端的1,故选D;其余三图均符合。

题目 143

展开题目 143(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 143 题(原站入口)。

依据下列UML类图,哪一项说法错误?( )

题目配图

  • A. 一个A1的对象可能与一个A2的对象关联

  • B. 一个A的非直接对象可能与一个A1 的对象关联

  • C. 类B1的对象可能通过A2与C1的对象关联

  • D. 有可能A的直接对象与B1的对象关联

答案与解析

平台答案:D。

整理解析

A标注{abstract},不能直接实例化,故D所说的A的直接对象不存在,选D。A1、A2实例可参与继承自A的关联,B1也可经A2间接关联C1。图中A端为2..4,表示一个B1关联2至4个A的实例;平台写成“2到多个”遗漏了上界4。

题目 149

展开题目 149(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 149 题(原站入口)。

用UML状态图描述系统、类或用例的动态行为时,通常建模的对象是(149)。图中当前活动状态为A;发生b=0事件且a>5为true时,经过(150)后D成为活动状态。第(151)空选择关于状态图的错误说法。

题目配图

本题作答第149空。

  • A. 系统的词汇

  • B. 反应型对象

  • C. 活动流程

  • D. 对象快照

答案与解析

平台答案:B。

整理解析

状态机描述对象如何响应事件、满足守卫条件并改变状态,适合反应型对象,选B。词汇属于静态结构建模,活动流程对应活动图,对象快照对应对象图。

题目 150

展开题目 150(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 150 题(原站入口)。

用UML状态图描述系统、类或用例的动态行为时,通常建模的对象是(149)。图中当前活动状态为A;发生b=0事件且a>5为true时,经过(150)后D成为活动状态。第(151)空选择关于状态图的错误说法。

题目配图

本题作答第150空。

  • A. 一旦状态A的exit动作完成,或如果当前执行do动作,则终止执行

  • B. 一旦状态A和B的所有动作完成

  • C. 一旦正在进行的状态A完成

  • D. 一旦状态B的exit动作完成

答案与解析

平台答案:A。

整理解析

平台答案A。按图,C到D的迁移由when b=0触发、以a>5为守卫;从当前子状态A离开时终止尚在执行的do活动,执行A的exit动作及必要的外围退出步骤,然后进入D,不必先经过B或等C自然完成。A的文字不严谨:终止do与执行exit不是二选一。平台把图中的b=0写成b=5,并声称须等C完成,均应纠正。

题目 151

展开题目 151(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 151 题(原站入口)。

用UML状态图描述系统、类或用例的动态行为时,通常建模的对象是(149)。图中当前活动状态为A;发生b=0事件且a>5为true时,经过(150)后D成为活动状态。第(151)空选择关于状态图的错误说法。

题目配图

本题作答第151空。

  • A. 动作可以在状态内执行,也可以在状态转换时执行

  • B. 当触发转换的事件发生并且转换没有指定的监护条件时,对象将离开当前状态,并且其do动作终止

  • C. when(…)称为时间事件

  • D. 状态由事件触发

答案与解析

平台答案:D。

整理解析

平台答案D保留:严格说事件触发的是迁移,对象随后进入目标状态。但C同样错误,when(条件)是变化事件;时间事件通常用after(时长)或at(时刻)表示。因此本题不能视为只有一个无歧义错误选项。B还隐含外部迁移且没有其他冲突的前提;内部迁移不会退出状态。

题目 158

展开题目 158(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 158 题(原站入口)。

某电商系统按面向对象方法识别出网店、商品、购物车、订单买家、库存,以及支付(微信、支付宝)等类。购物车与商品适合采用(158)关系,网店与商品适合采用(159)关系。

本题作答第158空。

  • A. 关联

  • B. 依赖

  • C. 组合

  • D. 聚合

答案与解析

平台答案:D。

整理解析

平台按购物车为整体、商品可脱离购物车独立存在的建模假设选D(聚合)。这不是仅凭类名就能唯一确定的关系;若购物车只引用商品目录中的商品,也可建普通关联,并让购物车与购物项建立组合。保留题目的聚合口径。

题目 159

展开题目 159(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 159 题(原站入口)。

某电商系统按面向对象方法识别出网店、商品、购物车、订单买家、库存,以及支付(微信、支付宝)等类。购物车与商品适合采用(158)关系,网店与商品适合采用(159)关系。

本题作答第159空。

  • A. 依赖

  • B. 关联

  • C. 组合

  • D. 聚合

答案与解析

平台答案:C。

整理解析

平台答案C,隐含商品是网店独占拥有、随店删除的商品记录。题干没有说明独占所有权或生命周期,因此仅由“网店包含商品”不能推出组合;若商品可跨店共享或在店关闭后保留,关联或聚合也可能合理。组合强调排他的整体—部分所有权,不能只机械地等同于出生、消亡时刻完全一致。

题目 160

展开题目 160(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 160 题(原站入口)。

系统要求登录失败次数不超过3次,登录状态图如下。当前活动状态为Logging in,发生Valid Entry时的结果是(160);图中[tries < 3]与tries++分别表示(161)和(162)。

题目配图

本题作答第160空。

  • A. 保持在Logging in状态

  • B. 若[tries < 3]为true,则Logged in变为下一个活动状态

  • C. Logged in立刻变为下一 个活动状态

  • D. 若tries=3为true,则Logging Denied变为下一个活动状态

答案与解析

平台答案:B。

整理解析

Valid Entry标注在通向Logged in的边上,只有守卫tries<3为真才迁移,故平台答案B;不能说该事件在tries=3时必然触发另一条边。题图另有实质缺陷:Invalid Entry画成外部自转换,会在tries++后重新进入Logging in并执行entry/tries=0,使失败计数无法累积到3。初始化应移到仅首次进入的路径,或调整为不重置计数的内部处理。

题目 161

展开题目 161(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 161 题(原站入口)。

系统要求登录失败次数不超过3次,登录状态图如下。当前活动状态为Logging in,发生Valid Entry时的结果是(160);图中[tries < 3]与tries++分别表示(161)和(162)。

题目配图

本题作答第161空。

  • A. 状态

  • B. 转换

  • C. 监护条件

  • D. 转换后效果

答案与解析

平台答案:C。

整理解析

方括号中的tries<3是守卫(监护)条件,决定该迁移是否允许发生,选C。图中Invalid Entry的外部自转换会再次执行Logging in的entry/tries=0,导致失败计数被清零;这项图示缺陷不改变本空对方括号的识别。

题目 162

展开题目 162(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 162 题(原站入口)。

系统要求登录失败次数不超过3次,登录状态图如下。当前活动状态为Logging in,发生Valid Entry时的结果是(160);图中[tries < 3]与tries++分别表示(161)和(162)。

题目配图

本题作答第162空。

  • A. 状态

  • B. 转换

  • C. 转换后效果

  • D. 监护条件

答案与解析

平台答案:C。

整理解析

斜线后的tries++是迁移执行时的效果,按选项术语选C“转换后效果”;它不是整个状态转换,也不表示必须在进入目标状态之后才执行。图中外部自转换随后又执行entry/tries=0,抵消计数累积,故原图不足以正确实现三次失败限制。

题目 175

展开题目 175(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 175 题(原站入口)。

UML活动图主要用于描述(175)。在下图中,A1执行结束后,可能的活动执行序列是(176)。

题目配图

本题作答第175空。

  • A. 系统在它的周边环境的语境中所提供的外部可见服务

  • B. 某一时刻一组对象以及它们之间的关系

  • C. 系统内从一个活动到另一个活动的流程

  • D. 对象的生命周期中某个条件或者状态

答案与解析

平台答案:C。

整理解析

活动图描述活动之间的控制流或对象流,选C。A指向用例所提供的外部服务,B是对象快照,D是状态。

题目 176

展开题目 176(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 176 题(原站入口)。

UML活动图主要用于描述(175)。在下图中,A1执行结束后,可能的活动执行序列是(176)。

题目配图

本题作答第176空。

  • A. A2、A3、A4和A5

  • B. A3、A4和A5,或A2、A4和A5

  • C. A2、A4和A5

  • D. A2或A3、A4和A5

答案与解析

平台答案:D。

整理解析

菱形分支使A1之后选择A2,或选择A3后再分叉执行A4、A5,故D应读作“A2,或(A3、A4和A5)”。A4与A5可并发,图未规定二者先后次序;后面的汇合条需等待两者完成。

题目 177

展开题目 177(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 177 题(原站入口)。

UML构件图表示构件的组织与依赖,通常包含构件、接口和各类关系,主要体现系统的静态( )视图。

  • A. 关联

  • B. 实现

  • C. 结构

  • D. 行为

答案与解析

平台答案:B。

整理解析

按UML视图分类,构件图侧重软件构件及接口的静态实现视图,选B。构件图本身属于结构图,但本题问的是视图名称;物理节点及构件部署位置应主要由部署图描述。

设计模式:GoF 专题与题库

设计原则约束“怎样的设计更合理”,设计模式则描述某类反复出现的问题、适用条件和对象协作方案。模式不是固定代码模板;只见到 Context、一条继承线或一个包装对象,都不足以认定具体模式。应先指出哪一部分需要变化,再追踪谁持有谁、谁调用谁、操作由谁实现。

GoF 模式有两个独立分类维度:**创建型/结构型/行为型**按解决的问题分类,**类模式/对象模式**按主要组织机制分类。类模式偏重继承,对象模式偏重组合与委托;对象模式的类图中也可以有继承。完整的 23 种分类及例外见模式分类与识别方法,不要根据“图中出现类”判断类模式。

GoF 创建型:区分产品、产品族与构建步骤

创建型题先区分“谁决定具体类型”和“怎样装配结果”。工厂方法把实例化决定交给子类;抽象工厂创建相互配套的一族产品;建造者分离构建步骤与具体表示。读 Builder 类图时,组织步骤的是 Director,落实步骤的是 ConcreteBuilder,Product 是产物。复制已有实例与控制唯一实例则分别读原型、单例。“隔离创建细节”是多种模式的共同目标,仍需更具体的条件来区分。

GoF 结构型:接口、所有权和包装的目的

借助结构型模式专题逐一比较:适配器转换不兼容接口,桥接连接两个独立变化维度,装饰附加职责,代理控制访问,外观简化子系统使用,享元共享可复用的内部状态,组合统一处理树中的叶子与容器。它们都可能有委托调用,判断时必须问“为什么要转交”。

例如 Android 页面通过自定义目标接口使用一个旧 SDK,可采用适配器;RecyclerView.Adapter 名字中的 Adapter 本身不能代替这项结构分析。另需分清:UML **组合关系**约束整体对部分的所有权,**组合设计模式**强调树结构和统一操作,二者并不等价。

GoF 行为型:跟踪一次请求怎样完成

读行为型模式专题时,分别跟踪通知、协调、算法、状态与请求。观察者通过订阅关系传播变化;中介者集中管理多方交互规则,必要时也可以借助观察者机制通知参与者。对象之间是一对多还是多对多,只说明数量;区分模式还要明确这些对象承担的是变化通知还是交互协调职责。

策略封装可互换算法,状态封装对象在不同内部状态下的行为;两者都可能在运行时切换。命令把待执行动作封装为对象,调用者触发命令,接收者承担实际业务;可撤销还需逆操作或状态记录。责任链让请求经过候选处理者,处理后是否继续传递、无人接手如何处理,都要看题设与实现。

角色题尤其要分清访问者的 accept/visit、命令的调用者与接收者、观察者的主题与订阅者。迭代器负责“怎样遍历”,访问者负责“对元素执行什么操作”;访问者适合元素类型较稳定而操作不断增加的情况,新增元素类型仍可能影响所有访问者。其余易混概念见模式之间的区别。

GoF 设计模式练习(64 题)

保留原题编号,答案与解析默认折叠。

题目 008

来源:知识点练习「面向对象技术」第 8 题(原站入口)。

根据下面的类及调用关系图,识别设计模式(8),并选择与其匹配的使用场景(9)。

题目配图

请作答:第 8 题。

  • A. 适配器(Adapter)

  • B. 责任链(Chain of Responsibility)

  • C. 外观(Facade)

  • D. 桥接(Bridge)

答案与解析

平台答案:C。

整理解析

选 C。图中 Compiler 提供 Compile 入口,并协调扫描器、语法分析器、代码生成器等子系统对象,符合外观模式用统一入口封装复杂调用的意图。不能只凭某个类名判断,应结合这些对外入口与内部依赖。

题目 009

来源:知识点练习「面向对象技术」第 9 题(原站入口)。

根据下面的类及调用关系图,识别设计模式(8),并选择与其匹配的使用场景(9)。

题目配图

请作答:第 9 题。

  • A. 有多个对象可以处理一个请求,在运行时刻自动确定由哪个对象处理

  • B. 想使用一个已经存在的类,而其接口不符合要求

  • C. 类的抽象和其实现之间不希望有一个固定的绑定关系

  • D. 需要为一个复杂子系统提供一个简单接口

答案与解析

平台答案:D。

整理解析

选 D。Compiler 的统一入口简化客户端使用编译子系统的方式,适合复杂子系统需要简单接口的场景。A对应责任链,B对应适配器,C对应桥接。

题目 010

展开题目 010(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 10 题(原站入口)。

在所列模式中,(10)既有类结构型形式,也有对象结构型形式。它与(11)都能通过间接层,从对象自身以外的接口向该对象转发请求。

请作答:第 10 题。

  • A. 桥接(Bridge)

  • B. 适配器(Adapter)

  • C. 组成(Composite)

  • D. 装饰器(Decorator)

答案与解析

平台答案:B。

整理解析

选 B。适配器可借助继承实现类适配,也可持有适配对象并委托实现对象适配,因此同时有两种结构型形式。它的目的在于连接不兼容接口。

题目 011

展开题目 011(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 11 题(原站入口)。

在所列模式中,(10)既有类结构型形式,也有对象结构型形式。它与(11)都能通过间接层,从对象自身以外的接口向该对象转发请求。

请作答:第 11 题。

  • A. 桥接(Bridge)

  • B. 适配器(Adapter)

  • C. 组成(Composite)

  • D. 装饰器 (Decorator)

答案与解析

平台答案:A。

整理解析

平台选 A。桥接让抽象对象把工作交给所持有的实现对象,与适配器一样包含间接调用。两者意图不同:桥接支持抽象与实现分别变化,适配器解决接口不兼容。仅有转发行为不足以唯一识别一个模式,仍须结合设计意图。

题目 018

展开题目 018(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 18 题(原站入口)。

一组对象的通信虽有明确规则,但交互复杂、相互依赖难以理解。用(18)模式以一个中介对象集中封装交互,让各对象无需直接相互引用,并可独立调整交互规则。题目把它与(19)作为对照:前者集中封装通信,后者引入其他对象分布通信,称两者为相互竞争的模式。

请作答:第 18 题。

  • A. 解释器(Interpreter)

  • B. 策略(Strategy)

  • C. 中介者(Mediator)

  • D. 观察者(Observer)

答案与解析

平台答案:C。

整理解析

选 C。把复杂的多方协作规则交给专门对象统一协调,正是中介者模式;参与对象主要与中介者通信。限定:这不表示中介者与观察者不能共用,中介者也可通过订阅通知与各对象交互。

题目 019

展开题目 019(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 19 题(原站入口)。

一组对象的通信虽有明确规则,但交互复杂、相互依赖难以理解。用(18)模式以一个中介对象集中封装交互,让各对象无需直接相互引用,并可独立调整交互规则。题目把它与(19)作为对照:前者集中封装通信,后者引入其他对象分布通信,称两者为相互竞争的模式。

请作答:第 19 题。

  • A. 解释器(Interpreter)

  • B. 策略(Strategy)

  • C. 中介者(Mediator)

  • D. 观察者(Observer)

答案与解析

平台答案:D。

整理解析

选 D。观察者通过主题与订阅者之间的通知关系分布通信;中介者则把跨对象协作规则集中管理。这是两者设计侧重点的比较,并不禁止在同一系统中同时采用。

题目 021

展开题目 021(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 21 题(原站入口)。

根据下图识别设计模式(21),并选择该模式适用的情形(22)。

题目配图

请作答:第 21 题。

  • A. 抽象工厂(Abstract Factory)

  • B. 生成器(Builder)

  • C. 工厂方法(Factory Method)

  • D. 原型(Prototype)

答案与解析

平台答案:B。

整理解析

选 B。Director 控制构建步骤,通过 Builder 调用 BuildPart;ConcreteBuilder 负责具体构建并提供 GetResult 获取 Product。这一职责分工对应生成器模式。

题目 022

展开题目 022(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 22 题(原站入口)。

根据下图识别设计模式(21),并选择该模式适用的情形(22)。

题目配图

请作答:第 22 题。

  • A. 一个系统要由多个产品系列中的一个来配置时

  • B. 当一个类希望由它的子类来指定它所创建的对象时

  • C. 当创建复杂对象的算法应该独立于该对象的组成部分及其装配方式时

  • D. 当一个系统应该独立于它的产品创建、构成和表示时

答案与解析

平台答案:C。

整理解析

选 C。生成器把构建过程与具体部件及表示分开,使相同的构建流程可以产生不同产品表示。A侧重产品族,B侧重把实例化决定交给子类;D是多种创建型模式共有的宽泛目标,C与图中逐步构建的意图最直接。

题目 030

展开题目 030(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 30 题(原站入口)。

观察下图,判断模式名称(30)、所属类别(31),以及适用场景(32)。

题目配图

请作答:第 30 题。

  • A. 代理(Proxy)

  • B. 生成器(Builder)

  • C. 组合(Composite)

  • D. 观察者(Observer)

答案与解析

平台答案:C。

整理解析

选 C。Leaf 和 Composite 都是 Component 的子类型,而 Composite 又保存多个 Component,因此叶子对象与容器对象可以按同一接口处理,形成组合模式。图中空心菱形表示聚合关系;“组合设计模式”这一名称不要求使用 UML 实心菱形的组合关系。

题目 031

展开题目 031(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 31 题(原站入口)。

观察下图,判断模式名称(30)、所属类别(31),以及适用场景(32)。

题目配图

请作答:第 31 题。

  • A. 创建型

  • B. 结构型

  • C. 行为

  • D. 结构型和行为

答案与解析

平台答案:B。

整理解析

选 B。该模式通过统一抽象把叶子与容器组织成层次结构,重点是对象如何组成更大的结构,所以属于结构型模式。

题目 032

展开题目 032(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 32 题(原站入口)。

观察下图,判断模式名称(30)、所属类别(31),以及适用场景(32)。

题目配图

请作答:第 32 题。

  • A. 表示对象的部分一整体层次结构时

  • B. 当一个对象必须通知其他对象,而它又不能假定其他对象是谁时

  • C. 当创建复杂对象的算法应该独立于该对象的组成部分及其装配方式时

  • D. 在需要比较通用和复杂的对象指针代替简单的指针时

答案与解析

平台答案:A。

整理解析

选 A。Composite 可聚合多个 Component,而 Component 又可以是 Leaf 或 Composite,正好表达整体—部分的递归层次。图中 Component 端的 * 表示一个 Composite 可关联零个或多个 Component,不能把该多重度反向读成一个部件一定归属多个整体。

题目 033

展开题目 033(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 33 题(原站入口)。

有的设计模式引入主要用作参数的对象。哪一种对象会作为多态 accept 方法的参数( )?

  • A. Visitor

  • B. Command

  • C. Memento

  • D. Observer

答案与解析

平台答案:A。

整理解析

选 A。在访问者模式中,被访问元素提供 accept(visitor),并在其实现中回调适合该具体元素的 visit 操作。传入的是 Visitor 对象,由此把要对元素执行的操作与元素结构分离。

题目 041

展开题目 041(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 41 题(原站入口)。

关于 Singleton(单例)模式,下面哪项描述不正确( )?

  • A. 单例模式是创建型模式

  • B. 单例模式保证一个类仅有一个实例

  • C. 单例类提供一个访问唯一实例的全局访问点

  • D. 单例类提供一个创建一系列相关或相互依赖对象的接口

答案与解析

平台答案:D。

整理解析

选 D。创建一组相关或相互依赖产品的接口属于抽象工厂的意图;单例关注控制某个类的实例数量并提供统一访问点,是创建型模式。

题目 042

展开题目 042(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 42 题(原站入口)。

给对象动态增加额外职责而不改动它自身结构,可用(42)模式;由统一创建接口把具体实例化决定交给子类,可用(43)模式;若一个后端数据模型要连接多个前端用户界面,题目要求选择最适合的(44)模式。

请作答:第 42 题。

  • A. 组合(Composite)

  • B. 外观(Facade)

  • C. 享元(Flyweight)

  • D. 装饰器(Decorator)

答案与解析

平台答案:D。

整理解析

选 D。装饰器持有原对象,在保持相容接口的同时,在委托调用前后附加职责。这样可按对象动态组合功能,无需改动被包装对象的类定义。

题目 043

展开题目 043(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 43 题(原站入口)。

给对象动态增加额外职责而不改动它自身结构,可用(42)模式;由统一创建接口把具体实例化决定交给子类,可用(43)模式;若一个后端数据模型要连接多个前端用户界面,题目要求选择最适合的(44)模式。

请作答:第 43 题。

  • A. 工厂方法(Factory Method)

  • B. 享元(Flyweight)

  • C. 观察者( Observer)

  • D. 中介者(Mediator)

答案与解析

平台答案:A。

整理解析

选 A。工厂方法把创建操作定义在抽象层,由具体子类决定返回何种产品,把具体类的选择推迟到扩展实现。

题目 044

展开题目 044(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 44 题(原站入口)。

给对象动态增加额外职责而不改动它自身结构,可用(42)模式;由统一创建接口把具体实例化决定交给子类,可用(43)模式;若一个后端数据模型要连接多个前端用户界面,题目要求选择最适合的(44)模式。

请作答:第 44 题。

  • A. 装饰器(Decorator)

  • B. 享元(Flyweight)

  • C. 观察者(Observer)

  • D. 中介者(Mediator)

答案与解析

平台答案:D。

整理解析

平台答案保留 D(中介者)。原页已核实:第三空只说一个后端数据模型连接多个前端界面,没有复杂协调或更新通知的限定,前两空也未补足条件。若意图是模型变化时各界面同步更新,通常采用 C 观察者;中介者则适合集中协调多方交互。仅有“连接多个界面”不能唯一推出D,故保留原站答案并明确条件不足,不将D解释为无争议的唯一结论。

题目 052

展开题目 052(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 52 题(原站入口)。

为 GUI 组件提供不同平台上对应的成套类层次结构,应采用哪一种模式( )?

  • A. 享元(Flyweight)

  • B. 抽象工厂(Abstract Factory)

  • C. 外观(Facade))

  • D. 装饰器(Decorator)

答案与解析

平台答案:B。

整理解析

选 B。各平台通常需要彼此配套的按钮、窗口等组件,抽象工厂为这一组产品规定统一创建接口,由具体平台工厂产生相容的一整套组件。

题目 053

展开题目 053(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 53 题(原站入口)。

把请求封装为对象,以便使用不同请求对客户进行参数化,并可对请求排队、记录日志及支持撤销,这描述哪种模式( )?

  • A. 命令(Command)

  • B. 责任链(Chain of Responsibility)

  • C. 观察者(Observer)

  • D. 策略(Strategy)

答案与解析

平台答案:A。

整理解析

选 A。命令对象把接收者和待执行操作封装起来,调用者可统一保存、调度或记录这些请求。撤销仍需命令实现相应逆操作或保存恢复状态,并非只封装请求就自动得到。

题目 054

展开题目 054(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 54 题(原站入口)。

订阅者注册某个主题后,主题出现新消息便通知订阅者。以下哪种模式最适合表达这一发布/订阅关系( )?

  • A. 适配器(Adapter)

  • B. 通知(Notifier)

  • C. 观察者(Observer)

  • D. 状态(State)

答案与解析

平台答案:C。

整理解析

选 C。观察者将主题变化与订阅者通知联系起来,形成一对多依赖。工程中的消息代理式发布订阅还能进一步解耦双方,不必与对象直接注册回调的具体实现完全相同。

题目 055

展开题目 055(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 55 题(原站入口)。

大量对象带来较大存储开销,希望通过共享减少对象数量、降低内存占用并改善性能,应选哪种模式( )?

  • A. 组合(Composite)

  • B. 享元(Flyweight)

  • C. 迭代器(Iterator)

  • D. 备忘录(Memento)

答案与解析

平台答案:B。

整理解析

选 B。享元共享可复用的内部状态,把随使用场景变化的外部状态留给调用方。能共享的状态足够多时才有明显收益,不能把任意可变对象直接合并。

题目 063

展开题目 063(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 63 题(原站入口)。

把一组算法分别封装成可替换的实现,使算法能独立于使用它们的客户变化,这是(63)模式。它适用于以下哪些情况(64)?

①客户需要一组相关对象;②一个对象变化时需改变其他对象;③需要同一算法的不同变体;④多个相关类仅在行为上不同。

请作答:第 63 题。

  • A. 命令(Command)

  • B. 责任链(Chain of Responsibility)

  • C. 观察者(Observer)

  • D. 策略(Strategy)

答案与解析

平台答案:D。

整理解析

选 D。策略模式把变化集中到算法对象,客户经由共同策略接口调用,可以替换算法而少改客户代码。

题目 064

展开题目 064(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 64 题(原站入口)。

把一组算法分别封装成可替换的实现,使算法能独立于使用它们的客户变化,这是(63)模式。它适用于以下哪些情况(64)?

①客户需要一组相关对象;②一个对象变化时需改变其他对象;③需要同一算法的不同变体;④多个相关类仅在行为上不同。

请作答:第 64 题。

  • A. ①②

  • B. ②③

  • C. ③④

  • D. ①④

答案与解析

平台答案:C。

整理解析

选 C,即③④。这两项都把变化集中在可互换的行为或算法上。①更接近相关产品族的创建问题,②更接近变化通知的观察者场景。

题目 065

展开题目 065(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 65 题(原站入口)。

让复杂对象的构建步骤与最终表示分离,从而同一构建过程可产生不同表示的是(65)模式。下列哪些情形适用(66)?

①抽象复杂对象的构建步骤;②由构建过程的具体实现生成复杂对象的不同表示;③一个类只有一个实例;④一个类的实例只取若干状态组合中的一种。

请作答:第 65 题。

  • A. 生成器(Builder)

  • B. 工厂方法(Factory Method)

  • C. 原型(Prototype)

  • D. 单例( Singleton)

答案与解析

平台答案:A。

整理解析

选 A。生成器把步骤的组织与每步如何生产部件分开,由不同具体生成器得到不同产品表示。

题目 066

展开题目 066(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 66 题(原站入口)。

让复杂对象的构建步骤与最终表示分离,从而同一构建过程可产生不同表示的是(65)模式。下列哪些情形适用(66)?

①抽象复杂对象的构建步骤;②由构建过程的具体实现生成复杂对象的不同表示;③一个类只有一个实例;④一个类的实例只取若干状态组合中的一种。

请作答:第 66 题。

  • A. ①②

  • B. ②③

  • C. ③④

  • D. ①④

答案与解析

平台答案:A。

整理解析

选 A,即①②。两项直接对应分离构建步骤与具体表示的目的。③是单例关注的问题,④本身没有说明需要可复用的分步构建过程。

题目 074

展开题目 074(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 74 题(原站入口)。

下图给出观察者模式的抽象结构。角色(74)掌握已注册的观察者,允许任意多个观察者观察同一目标,并提供注册及删除观察者的接口;本模式最主要体现的特征为(75)。

题目配图

请作答:第 74 题。

  • A. Subject

  • B. Observer

  • C. Concrete Subject

  • D. Concrete Observer

答案与解析

平台答案:A。

整理解析

选 A。图中 Subject 声明 registerObserver、removeObserver 和 notifyObservers,负责主题一侧的订阅管理契约;ConcreteSubject 是其具体实现。图中虚线空心三角表示实现接口,不应当作类之间的普通继承线。

题目 075

展开题目 075(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 75 题(原站入口)。

下图给出观察者模式的抽象结构。角色(74)掌握已注册的观察者,允许任意多个观察者观察同一目标,并提供注册及删除观察者的接口;本模式最主要体现的特征为(75)。

题目配图

请作答:第 75 题。

  • A. 类应该对扩展开放,对修改关闭

  • B. 使所要交互的对象尽量松耦合

  • C. 组合优先于继承使用

  • D. 仅与直接关联类交互

答案与解析

平台答案:B。

整理解析

选 B。主题按 Observer 接口通知,不必依赖每个具体观察者的实现,观察者可独立增减,因此突出松耦合。模式并非没有依赖,而是把依赖限制在稳定契约上。

题目 076

展开题目 076(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 76 题(原站入口)。

装饰器模式与外观模式分别对应以下哪种用途(76)、(77)?

①包装一个对象,提供客户想要的另一种接口;②包装一个对象,为其增加额外行为;③包装一个对象,控制对它的访问;④包装一组对象,简化它们的接口。

请作答:第 76 题。

  • A. ①

  • B. ②

  • C. ③

  • D. ④

答案与解析

平台答案:B。

整理解析

选 B,即②。装饰器的重点是在相容接口下增加行为。①侧重接口适配,③侧重代理访问控制,④侧重外观对多个子系统对象的简化。

题目 077

展开题目 077(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 77 题(原站入口)。

装饰器模式与外观模式分别对应以下哪种用途(76)、(77)?

①包装一个对象,提供客户想要的另一种接口;②包装一个对象,为其增加额外行为;③包装一个对象,控制对它的访问;④包装一组对象,简化它们的接口。

请作答:第 77 题。

  • A. ①

  • B. ②

  • C. ③

  • D. ④

答案与解析

平台答案:D。

整理解析

选 D,即④。外观提供较高层的简洁入口来协调子系统对象。纠错:经典外观模式不强制所有客户都只能经该入口,仍可让有特殊需求的客户直接使用子系统;平台将“统一入口”表述为必须经过,限定过强。

题目 085

展开题目 085(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 85 题(原站入口)。

自动售货机在收款并接受商品选择后,依库存、已存货币量、找零能力和所选项目等情况,可表现为:交付商品但不找零;交付商品并找零;金额不足不交付;库存不足不交付。适合用(85)模式实现。下图中(86)是客户使用的主要接口,可由不同状态配置;该模式的分类为(87),主要意图为(88)。

题目配图

请作答:第 85 题。

  • A. 观察者(Observer)

  • B. 状态(State)

  • C. 策略(Strategy)

  • D. 访问者(Visitor)

答案与解析

平台答案:B。

整理解析

选 B。相同的购买请求会因库存、金额等内部状态不同而产生不同处理,图中 Buy 又通过状态抽象委托 handle,符合状态模式。判断依据是状态影响行为的职责安排,不能仅凭类名包含 State 就得出结论。

题目 086

展开题目 086(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 86 题(原站入口)。

自动售货机在收款并接受商品选择后,依库存、已存货币量、找零能力和所选项目等情况,可表现为:交付商品但不找零;交付商品并找零;金额不足不交付;库存不足不交付。适合用(85)模式实现。下图中(86)是客户使用的主要接口,可由不同状态配置;该模式的分类为(87),主要意图为(88)。

题目配图

请作答:第 86 题。

  • A. Vending Machine State

  • B. Buy

  • C. Vending Deposit State

  • D. Vending Stock State

答案与解析

平台答案:B。

整理解析

选 B。Buy 扮演上下文角色,是客户发起购买操作的入口,并关联当前的 Vending Machine State;客户不必直接选择每个具体状态类。题干“接口”指对客户的使用入口,不意味着 Buy 必须声明成 Java interface 或 UML 接口分类器。

题目 087

展开题目 087(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 87 题(原站入口)。

自动售货机在收款并接受商品选择后,依库存、已存货币量、找零能力和所选项目等情况,可表现为:交付商品但不找零;交付商品并找零;金额不足不交付;库存不足不交付。适合用(85)模式实现。下图中(86)是客户使用的主要接口,可由不同状态配置;该模式的分类为(87),主要意图为(88)。

题目配图

请作答:第 87 题。

  • A. 创建型对象模式

  • B. 结构型对象模式

  • C. 行为型类模式

  • D. 行为型对象模式

答案与解析

平台答案:D。

整理解析

选 D。状态模式通过上下文与当前状态对象的协作分配行为,属于行为型对象模式。虽使用了状态类型层次,分类关键仍是对象之间的委托,而不是只靠继承固定流程。

题目 088

展开题目 088(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 88 题(原站入口)。

自动售货机在收款并接受商品选择后,依库存、已存货币量、找零能力和所选项目等情况,可表现为:交付商品但不找零;交付商品并找零;金额不足不交付;库存不足不交付。适合用(85)模式实现。下图中(86)是客户使用的主要接口,可由不同状态配置;该模式的分类为(87),主要意图为(88)。

题目配图

请作答:第 88 题。

  • A. 当一个对象状态改变时所有依赖它的对象得到通知并自动更新

  • B. 在不破坏封装性的前提下,捕获对象的内部状态并在对象之外保存

  • C. 一个对象在其内部状态改变时改变其行为

  • D. 将请求封装为对象从而可以使用不同的请求对客户进行参数化

答案与解析

平台答案:C。

整理解析

选 C。状态模式使行为随内部状态变化。A是观察者的变化通知,B是备忘录的状态保存,D是命令的请求封装;名称里含“状态”并不使备忘录等同状态模式。

题目 096

展开题目 096(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 96 题(原站入口)。

设计一个Web应用框架,可生成博客、新闻网站、网上商店等具体应用,并让每种应用选用浅色或深色等主题。类图如下:第96空选择设计模式;第97空选择供客户程序使用、且保存主题类型引用的主要接口;第98空选择模式类别;第99空选择其主要意图。

Web应用与主题类图

本题回答第96空:适合采用哪种模式?

  • A. 观察者(Observer)

  • B. 访问者(Ⅴisitor)

  • C. 策略(Strategy)

  • D. 桥接(Bridge)

答案与解析

平台答案:D。

整理解析

选D。Web应用类型与主题是两个可独立扩展的维度,WebApplication通过Theme引用把它们组合起来,符合桥接模式。新增应用或主题无需为两者的每种组合都建立一个子类。

题目 097

展开题目 097(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 97 题(原站入口)。

设计一个Web应用框架,可生成博客、新闻网站、网上商店等具体应用,并让每种应用选用浅色或深色等主题。类图如下:第96空选择设计模式;第97空选择供客户程序使用、且保存主题类型引用的主要接口;第98空选择模式类别;第99空选择其主要意图。

Web应用与主题类图

本题回答第97空:哪个接口供客户使用并持有主题引用?

  • A. WebApplication

  • B. Blog

  • C. Theme

  • D. Light

答案与解析

平台答案:A。

整理解析

选A。图中的WebApplication位于应用抽象层,既是Blog、Store、News Site的共同抽象,又通过关联保存Theme引用。Theme是实现主题功能的一侧,Light是其具体实现。

题目 098

展开题目 098(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 98 题(原站入口)。

设计一个Web应用框架,可生成博客、新闻网站、网上商店等具体应用,并让每种应用选用浅色或深色等主题。类图如下:第96空选择设计模式;第97空选择供客户程序使用、且保存主题类型引用的主要接口;第98空选择模式类别;第99空选择其主要意图。

Web应用与主题类图

本题回答第98空:该模式属于哪一类别?

  • A. 创建型对象模式

  • B. 结构型对象模式

  • C. 行为型类模式

  • D. 行为型对象模式

答案与解析

平台答案:B。

整理解析

选B。桥接以对象组合连接抽象层和实现层,属于结构型对象模式;其核心是组织协作结构,而不是规定创建过程或一套算法行为。

题目 099

展开题目 099(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 99 题(原站入口)。

设计一个Web应用框架,可生成博客、新闻网站、网上商店等具体应用,并让每种应用选用浅色或深色等主题。类图如下:第96空选择设计模式;第97空选择供客户程序使用、且保存主题类型引用的主要接口;第98空选择模式类别;第99空选择其主要意图。

Web应用与主题类图

本题回答第99空:该模式的主要意图是什么?

  • A. 将抽象部分与其实现部分分离,使它们都可以独立地变化

  • B. 动态地给一个对象添加一些额外的职责

  • C. 为其他对象提供一种代理以控制对这个对象的访问

  • D. 将一个类的接口转换成客户希望的另外一个接口

答案与解析

平台答案:A。

整理解析

选A。应用抽象与主题实现分别变化,通过引用协作。B对应装饰,C对应代理,D对应适配器,均不是本例两个维度独立扩展的主要意图。

题目 107

展开题目 107(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 107 题(原站入口)。

超市销售系统中,顾客把毛巾、饼干、酸奶等Item放入Shopping_Cart;Checkout通过Manual或Auto方式逐项累计价格并结账。下图省略方法。第107空选择设计模式;第108空选择声明accept(Checkout)并由子类实现该操作的类;第109空判断模式类别;第110空选择适用场景。

超市物品与收银类图

本题回答第107空:采用了哪种模式?

  • A. 观察者(Observer)

  • B. 访问者(Visitor)

  • C. 策略(Strategy)

  • D. 桥接器(Bridge)

答案与解析

平台答案:B。

整理解析

选B。Item接收Checkout访问者,具体物品通过accept把与自身类型有关的结算操作交给访问者,符合访问者模式。平台称桥接体现整体—部分关系、策略只能被一个对象调用,均不能作为判别依据:桥接分离变化维度,策略也可被多个上下文使用。

题目 108

展开题目 108(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 108 题(原站入口)。

超市销售系统中,顾客把毛巾、饼干、酸奶等Item放入Shopping_Cart;Checkout通过Manual或Auto方式逐项累计价格并结账。下图省略方法。第107空选择设计模式;第108空选择声明accept(Checkout)并由子类实现该操作的类;第109空判断模式类别;第110空选择适用场景。

超市物品与收银类图

本题回答第108空:哪个类声明accept操作?

  • A. Item

  • B. Shopping_Cart

  • C. Checkout

  • D. Manual和Auto

答案与解析

平台答案:A。

整理解析

选A。Item是元素的共同抽象,声明接收Checkout访问者的accept操作;Towel、Cookie、Yogurt分别实现它。Shopping_Cart保存元素集合,Checkout一侧承担访问操作。

题目 109

展开题目 109(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 109 题(原站入口)。

超市销售系统中,顾客把毛巾、饼干、酸奶等Item放入Shopping_Cart;Checkout通过Manual或Auto方式逐项累计价格并结账。下图省略方法。第107空选择设计模式;第108空选择声明accept(Checkout)并由子类实现该操作的类;第109空判断模式类别;第110空选择适用场景。

超市物品与收银类图

本题回答第109空:该模式属于哪一类别?

  • A. 创建型对象模式

  • B. 结构型对象模式

  • C. 行为型类模式

  • D. 行为型对象模式

答案与解析

平台答案:D。

整理解析

选D。访问者把作用于对象结构中各元素的操作分配给访问者对象,属于行为型对象模式,关注对象之间如何协作完成操作。

题目 110

展开题目 110(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 110 题(原站入口)。

超市销售系统中,顾客把毛巾、饼干、酸奶等Item放入Shopping_Cart;Checkout通过Manual或Auto方式逐项累计价格并结账。下图省略方法。第107空选择设计模式;第108空选择声明accept(Checkout)并由子类实现该操作的类;第109空判断模式类别;第110空选择适用场景。

超市物品与收银类图

本题回答第110空:该模式适用于哪种情况?

  • A. 必须保存一个对象在某一个时刻的(部分)状态

  • B. 想在不明确指定接收者的情况下向多个对象中的一个提交一个请求

  • C. 需要对一个对象结构中的对象进行很多不同的并且不相关的操作

  • D. 在不同的时刻指定、排列和执行请求

答案与解析

平台答案:C。

整理解析

选C。当元素类型相对稳定,却需要不断增加不同操作时,可把各操作组织成访问者,减少对元素类的反复修改。A是备忘录的用途,B对应责任链,D对应命令。

题目 118

展开题目 118(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 118 题(原站入口)。

第118空所指的模式把多个有机会处理请求的对象连接成链,请求沿链转发直到被处理,以降低发送者对具体接收者的依赖。第119空所指的模式按顺序访问聚合对象的各个元素,而不暴露内部表示。第120空选择这两种模式共同所属的类别。

本题回答第118空:沿处理对象链转发请求的是哪种模式?

  • A. 责任链(Chain of Responsibility)

  • B. 解释器(Interpreter)

  • C. 命令(Command)

  • D. 迭代器(Iterator)

答案与解析

平台答案:A。

整理解析

选A。责任链把候选处理者串联,请求方不必指定最终由谁处理。它降低直接耦合,但不保证任何请求一定被某个节点接受,链尾的未处理情况仍需设计。

题目 119

展开题目 119(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 119 题(原站入口)。

第118空所指的模式把多个有机会处理请求的对象连接成链,请求沿链转发直到被处理,以降低发送者对具体接收者的依赖。第119空所指的模式按顺序访问聚合对象的各个元素,而不暴露内部表示。第120空选择这两种模式共同所属的类别。

本题回答第119空:不暴露内部表示而遍历元素的是哪种模式?

  • A. 责任链(Chain of Responsibility)

  • B. 解释器(Interpreter)

  • C. 命令(Command)

  • D. 迭代器(Iterator)

答案与解析

平台答案:D。

整理解析

选D。迭代器把遍历位置和推进操作封装在迭代对象中,客户端通过统一方式访问集合,而无需知道集合内部采用数组还是链表等结构。

题目 120

展开题目 120(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 120 题(原站入口)。

第118空所指的模式把多个有机会处理请求的对象连接成链,请求沿链转发直到被处理,以降低发送者对具体接收者的依赖。第119空所指的模式按顺序访问聚合对象的各个元素,而不暴露内部表示。第120空选择这两种模式共同所属的类别。

本题回答第120空:这两种模式共同属于什么类别?

  • A. 创建型对象模式

  • B. 结构型对象模式

  • C. 行为型对象模式

  • D. 行为型类模式

答案与解析

平台答案:C。

整理解析

选C。责任链组织处理对象间的请求传递,迭代器组织集合元素的访问过程,二者都通过对象协作分配行为,属于行为型对象模式。

题目 121

展开题目 121(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 121 题(原站入口)。

观察者(Observer)模式适用于下列哪种需求?

  • A. 访问一个聚合对象的内容而无须暴露它的内部表示

  • B. 减少多个对象或类之间的通信复杂性

  • C. 将对象的状态恢复到先前的状态

  • D. 一对多对象依赖关系,当一个对象修改后,依赖它的对象都自动得到通知

答案与解析

平台答案:D。

整理解析

选D。主题状态变化时,通知依赖它的多个观察者,是一对多的通知关系。A对应迭代器,B对应中介者,C对应备忘录。

题目 129

展开题目 129(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 129 题(原站入口)。

某公司开发绘图软件,要求不同绘图程序能够绘制不同图形,且新的图形和绘图程序都可持续增加。题干以绘制直线和图形为例给出下图。第129空选择将抽象与实现分离、使二者独立变化的模式;第130空选择定义实现类接口的类;第131空选择适用情况;第132空判断模式类别。

图形与绘图程序的类图

本题回答第129空:采用哪种模式?

  • A. 适配器(Adapter)

  • B. 装饰(Decorator)

  • C. 桥接(Bridge)

  • D. 组合(Composite)

答案与解析

平台答案:C。

整理解析

选C。图形抽象与绘图实现分别形成变化维度,符合桥接模式。图中的Shape—Drawing箭头画向Shape;若将其理解为标准桥接的导航引用,方向不妥,通常应由Shape持有Drawing引用。应结合题干意图判断,不把不规范箭头照搬为模式定义。

题目 130

展开题目 130(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 130 题(原站入口)。

某公司开发绘图软件,要求不同绘图程序能够绘制不同图形,且新的图形和绘图程序都可持续增加。题干以绘制直线和图形为例给出下图。第129空选择将抽象与实现分离、使二者独立变化的模式;第130空选择定义实现类接口的类;第131空选择适用情况;第132空判断模式类别。

图形与绘图程序的类图

本题回答第130空:哪个类定义实现类接口?

  • A. Shape

  • B. Circle和Rectangle

  • C. V1Drawing和V2Drawing

  • D. Drawing

答案与解析

平台答案:D。

整理解析

选D。Drawing声明绘线、绘圆等底层操作,V1Drawing、V2Drawing实现这些操作;Shape是面向客户的图形抽象。桥接的抽象接口与实现接口不要求完全相同。

题目 131

展开题目 131(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 131 题(原站入口)。

某公司开发绘图软件,要求不同绘图程序能够绘制不同图形,且新的图形和绘图程序都可持续增加。题干以绘制直线和图形为例给出下图。第129空选择将抽象与实现分离、使二者独立变化的模式;第130空选择定义实现类接口的类;第131空选择适用情况;第132空判断模式类别。

图形与绘图程序的类图

本题回答第131空:该模式适用于哪种情况?

  • A. 不希望在抽象和它的实现部分之间有一个固定判定关系

  • B. 想表示对象的部分-整体层次结构

  • C. 想使用一个已经存在的类,而它的接口不符合要求

  • D. 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责

答案与解析

平台答案:A。

整理解析

选A。桥接适合避免抽象与某种实现永久绑定,让二者独立扩展。原选项“固定判定关系”措辞不当,应按固定绑定关系理解。B、C、D分别对应组合、适配器、装饰模式。

题目 132

展开题目 132(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 132 题(原站入口)。

某公司开发绘图软件,要求不同绘图程序能够绘制不同图形,且新的图形和绘图程序都可持续增加。题干以绘制直线和图形为例给出下图。第129空选择将抽象与实现分离、使二者独立变化的模式;第130空选择定义实现类接口的类;第131空选择适用情况;第132空判断模式类别。

图形与绘图程序的类图

本题回答第132空:该模式属于什么类别?

  • A. 创建型对象

  • B. 结构型对象

  • C. 行为型对象

  • D. 结构型类

答案与解析

平台答案:B。

整理解析

选B。桥接用对象组合把抽象部分与实现部分连接起来,属于结构型对象模式;两侧虽然也有继承层次,但模式的关键协作是对象间组合。

题目 139

展开题目 139(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 139 题(原站入口)。

儿童套餐由主餐(各类比萨)、饮料和玩具组成;各套餐品种可不同,制作流程相同,由前台服务员Waiter调度厨师。软件设计如下图。模式(139)将复杂对象的构建过程与表示分开,使同一流程能产生不同表示;(140)负责使用Builder接口组织对象构造。该模式归为(141),适用情形为(142)。

题目配图

本题作答第139空。

  • A. 生成器(Builder)

  • B. 抽象工厂(Abstract Factory)

  • C. 原型(Prototype)

  • D. 工厂方法(Factory Method)

答案与解析

平台答案:A。

整理解析

共同的制作步骤由指挥者组织,不同建造者决定各部件的具体表示,符合生成器(Builder)模式,选A。抽象工厂侧重成套产品,原型侧重复制实例,工厂方法把创建决定交给子类。

题目 140

展开题目 140(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 140 题(原站入口)。

儿童套餐由主餐(各类比萨)、饮料和玩具组成;各套餐品种可不同,制作流程相同,由前台服务员Waiter调度厨师。软件设计如下图。模式(139)将复杂对象的构建过程与表示分开,使同一流程能产生不同表示;(140)负责使用Builder接口组织对象构造。该模式归为(141),适用情形为(142)。

题目配图

本题作答第140空。

  • A. PizzaBuilder

  • B. SpicyPizzaBuilder

  • C. Waiter

  • D. Pizza

答案与解析

平台答案:C。

整理解析

Waiter充当Director,通过PizzaBuilder接口按顺序调用构建步骤,选C;SpicyPizzaBuilder负责具体构建,Pizza是产品。原题“构造一个使用Builder接口的对象”应理解为借助该接口构造产品;平台把Product又称作具体产品建造者不准确,产品与建造者是不同角色。

题目 141

展开题目 141(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 141 题(原站入口)。

儿童套餐由主餐(各类比萨)、饮料和玩具组成;各套餐品种可不同,制作流程相同,由前台服务员Waiter调度厨师。软件设计如下图。模式(139)将复杂对象的构建过程与表示分开,使同一流程能产生不同表示;(140)负责使用Builder接口组织对象构造。该模式归为(141),适用情形为(142)。

题目配图

本题作答第141空。

  • A. 创建型对象

  • B. 结构型对象

  • C. 行为型对象

  • D. 结构型类

答案与解析

平台答案:A。

整理解析

Builder解决复杂对象的创建,并通过指挥者与建造者对象协作完成,因此属于创建型对象模式,选A。

题目 142

展开题目 142(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 142 题(原站入口)。

儿童套餐由主餐(各类比萨)、饮料和玩具组成;各套餐品种可不同,制作流程相同,由前台服务员Waiter调度厨师。软件设计如下图。模式(139)将复杂对象的构建过程与表示分开,使同一流程能产生不同表示;(140)负责使用Builder接口组织对象构造。该模式归为(141),适用情形为(142)。

题目配图

本题作答第142空。

  • A. 当一个系统应该独 立于它的产品创建、构成和表示时

  • B. 当一个类希望由它的子类来指定它所创建的对象的时候

  • C. 当要强调一系列相关的产品对象的设计以便进行联合使用时

  • D. 当构造过程必须允许被构造的对象有不同的表示时

答案与解析

平台答案:D。

整理解析

相同构造过程允许不同产品表示,正是Builder的针对性用途,选D。B对应工厂方法,C对应抽象工厂。A是创建型模式的广义独立性诉求,不能像平台解析那样仅凭这句话唯一判为原型模式。

题目 152

展开题目 152(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 152 题(原站入口)。

股票代理Broker按照客户的买卖等操作指示处理股票,设计如下图。模式(152)把请求封装为对象,使客户可按请求参数化,并支持请求排队、日志和可撤销操作;(153)声明执行操作的接口。该模式属于(154),适用情形为(155)。

题目配图

本题作答第152空。

  • A. 命令(Command)

  • B. 观察者(Observer)

  • C. 状态(State)

  • D. 中介者(Mediator)

答案与解析

平台答案:A。

整理解析

将操作请求对象化的是命令模式,选A。Broker持有并调用命令,具体命令把execute()委托给Stock的相应操作。排队、日志和撤销可以在此结构上扩展;图中execute()本身并不自动实现撤销。

题目 153

展开题目 153(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 153 题(原站入口)。

股票代理Broker按照客户的买卖等操作指示处理股票,设计如下图。模式(152)把请求封装为对象,使客户可按请求参数化,并支持请求排队、日志和可撤销操作;(153)声明执行操作的接口。该模式属于(154),适用情形为(155)。

题目配图

本题作答第153空。

  • A. Operation

  • B. sellOperation/BayOperation/ViewOperation

  • C. Broker

  • D. Stock

答案与解析

平台答案:A。

整理解析

Operation位于命令层次的上层,声明execute()接口,选A;SellOperation、BuyOperation、ViewOperation为具体命令,Broker为调用者,Stock为接收者。原选项B保留了sellOperation/BayOperation的拼写,题图对应SellOperation/BuyOperation。

题目 154

展开题目 154(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 154 题(原站入口)。

股票代理Broker按照客户的买卖等操作指示处理股票,设计如下图。模式(152)把请求封装为对象,使客户可按请求参数化,并支持请求排队、日志和可撤销操作;(153)声明执行操作的接口。该模式属于(154),适用情形为(155)。

题目配图

本题作答第154空。

  • A. 结构类型

  • B. 结构型对象

  • C. 创建类型

  • D. 行为型对象

答案与解析

平台答案:D。

整理解析

命令模式通过命令对象分离请求者与执行者,组织对象间的职责和调用,属于行为型对象模式,选D。

题目 155

展开题目 155(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 155 题(原站入口)。

股票代理Broker按照客户的买卖等操作指示处理股票,设计如下图。模式(152)把请求封装为对象,使客户可按请求参数化,并支持请求排队、日志和可撤销操作;(153)声明执行操作的接口。该模式属于(154),适用情形为(155)。

题目配图

本题作答第155空。

  • A. 一个对象必须通知其他对象,而它又不能假定其他对象是谁

  • B. 抽象出待执行的动作以参数化某对象

  • C. 一个对象的行为决定于其状态且必须在运行时刻根据状态改变行为

  • D. 一个对象引用其他对象并且直接与这些对象通信而导致难以复用该对象

答案与解析

平台答案:B。

整理解析

把待执行动作封装为命令对象,再用它配置调用者,符合B。A是不预知具体观察者的通知场景,C对应状态模式,D对应以中介者减少直接通信耦合。

题目 163

展开题目 163(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 163 题(原站入口)。

系统中各组Group具有不同数据访问权限;每个User属于一个或多个组,每组包含零个或多个用户。用户与组的映射交给独立对象维护,设计如下图。模式(163)用一个对象封装对象间交互,免去用户与组的显式相互引用,降低耦合并允许独立改变交互。它属于(164),适用情形为(165)。

题目配图

本题作答第163空。

  • A. 状态(State)

  • B. 策略(Strategy)

  • C. 解释器(Interpreter)

  • D. 中介者(Mediator)

答案与解析

平台答案:D。

整理解析

UserGroupMapper集中维护用户与组的交互,双方经它协作而非直接互相引用,符合中介者模式,选D。关键是集中协调交互;单纯增加数据库映射表并不自动构成中介者模式。

题目 164

展开题目 164(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 164 题(原站入口)。

系统中各组Group具有不同数据访问权限;每个User属于一个或多个组,每组包含零个或多个用户。用户与组的映射交给独立对象维护,设计如下图。模式(163)用一个对象封装对象间交互,免去用户与组的显式相互引用,降低耦合并允许独立改变交互。它属于(164),适用情形为(165)。

题目配图

本题作答第164空。

  • A. 创建型类

  • B. 创建型对象

  • C. 行为型对象

  • D. 行为型类

答案与解析

平台答案:C。

整理解析

中介者通过对象协作分配和集中协调交互职责,属于行为型对象模式,选C。

题目 165

展开题目 165(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 165 题(原站入口)。

系统中各组Group具有不同数据访问权限;每个User属于一个或多个组,每组包含零个或多个用户。用户与组的映射交给独立对象维护,设计如下图。模式(163)用一个对象封装对象间交互,免去用户与组的显式相互引用,降低耦合并允许独立改变交互。它属于(164),适用情形为(165)。

题目配图

本题作答第165空。

  • A. 需要使用一个算法的不同变体

  • B. 有一个语言需要解释执行,并且可将句子表示为一个抽象语法树

  • C. 一个对象的行为决定于其状态且必须在运行时刻根据状态改变行为

  • D. 一个对象引用其他对象并且直接与这些对象通信而导致难以复用该对象

答案与解析

平台答案:D。

整理解析

当对象因直接引用、通信而与许多伙伴紧密耦合时,可把交互交给中介者,选D。A对应策略,B对应解释器,C对应状态模式。

题目 166

展开题目 166(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 166 题(原站入口)。

购物中心收银软件需在不同时期切换打折、返利、满减等促销活动,适合采用什么模式?( )

  • A. 策略(Strategy)

  • B. 访问者(Visitor)

  • C. 观察者(Observer)

  • D. 中介者(Mediator)

答案与解析

平台答案:A。

整理解析

把各促销计算规则分别封装为可替换算法,由收银流程选用,属于策略模式,选A。访问者侧重为对象结构增加操作,观察者侧重通知,中介者侧重协调对象间交互。

题目 178

展开题目 178(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 178 题(原站入口)。

系统按日志级别采用不同记录方式。各日志处理对象检查消息级别,达到自身级别就记录,否则跳过;之后都把消息交给下一个处理对象。类图如下。模式(178)把处理对象前后连接,使多个对象有机会处理同一请求,降低发送者与具体接收者的耦合;它属于(179),适用情形为(180)。

题目配图

本题作答第178空。

  • A. 责任链(Chain of Responsibility)

  • B. 策略(Strategy)

  • C. 过滤器(Filter)

  • D. 备忘录(Memento)

答案与解析

平台答案:A。

整理解析

Logger通过nextLogger连接后继,各节点自行判断是否处理,构成责任链,选A。本题明确记录后仍继续传递,因此允许多个节点处理;不能额外假定第一个节点处理后必定停止。

题目 179

展开题目 179(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 179 题(原站入口)。

系统按日志级别采用不同记录方式。各日志处理对象检查消息级别,达到自身级别就记录,否则跳过;之后都把消息交给下一个处理对象。类图如下。模式(178)把处理对象前后连接,使多个对象有机会处理同一请求,降低发送者与具体接收者的耦合;它属于(179),适用情形为(180)。

题目配图

本题作答第179空。

  • A. 行为型类

  • B. 行为型对象

  • C. 结构型类

  • D. 结构型对象

答案与解析

平台答案:B。

整理解析

责任链通过处理对象及其后继引用分配请求处理职责,属于行为型对象模式,选B。

题目 180

展开题目 180(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 180 题(原站入口)。

系统按日志级别采用不同记录方式。各日志处理对象检查消息级别,达到自身级别就记录,否则跳过;之后都把消息交给下一个处理对象。类图如下。模式(178)把处理对象前后连接,使多个对象有机会处理同一请求,降低发送者与具体接收者的耦合;它属于(179),适用情形为(180)。

题目配图

本题作答第180空。

  • A. 不同的标准过滤一组对象,并通过逻辑操作以解耦的方式将它们链接起来

  • B. 可处理一个请求的对象集合应被动态指定

  • C. 必须保存一个对象在某一个时刻的状态,需要时它才能恢复到先前的状态

  • D. 一个类定义了多种行为,并且以多个条件语句的形式出现

答案与解析

平台答案:B。

整理解析

通过调整链中的对象及先后顺序,可动态指定参与处理请求的对象集合,选B。A描述过滤,C描述保存和恢复状态的备忘录,D是可以用策略分离多种行为的典型情形。

题目 181

展开题目 181(先作答,再查看解析)

来源:知识点练习「面向对象技术」第 181 题(原站入口)。

新能源汽车中,电能汽车与光能汽车采用不同的发动机驱动方法。客户端希望统一调用驱动接口,以屏蔽这些方法的差异,应采用哪种模式?( )

  • A. 中介者(Mediator)

  • B. 访问者(Visitor)

  • C. 观察者(Observer)

  • D. 适配器(Adapter)

答案与解析

平台答案:D。

整理解析

适配器向客户端提供统一目标接口,并把调用转换为各已有驱动接口的操作,选D。关键是接口转换;中介者协调交互,观察者负责通知,访问者为对象结构定义外部操作。

复习速查与易错点

看到的关键词 优先联想到
标识、状态、行为 对象
绑定数据与行为、隐藏实现 封装
同类对象共享的结构与操作 类定义的属性和行为
用户或外部系统的交互入口 边界类/接口类
父子类型之间的复用机制 继承
子类替换父类的相应方法实现 重写/覆盖
同名、不同参数列表 方法重载
同一消息、不同对象表现不同 多态
类型参数 参数多态
子类型化、同一类型及其子类型 包含多态
同一个名字在不同上下文含义不同 过载多态
通过类型转换适配操作 强制多态
运行时选择方法实现 动态绑定
找对象、理关系、看交互、定操作、定属性 OOA
一个变化原因 单一职责
因同类原因一起变化 共同封闭
通常一起被复用 共同重用

多态定义题:先找关键词,再核对含义

定义辨析题可以先用关键词定位候选答案,再检查题干描述的机制是否符合该概念。重点看具有区分度的特征,不要仅凭某个词就直接作答。

多态类型 常见关键词 核心含义
参数多态 类型参数、泛型 同一份代码通过类型参数适用于不同类型
包含多态 子类型化、父类型及其子类型 通过父类型统一使用子类型对象
过载多态 同名、不同上下文、不同含义 同一个名称对应多种操作,例如方法重载
强制多态 类型转换、自动转换、类型适配 转换操作对象的类型,以满足函数或操作符的要求

补充辨析题(根据用户提供的题干):

多态分为参数多态、包含多态、过载多态和强制多态四种不同形式,其中( )多态在许多语言中都存在,最常见的例子就是子类型化。

补充辨析题答案与解析

答案是 包含多态。决定答案的线索是“子类型化”;“在许多语言中都存在”适用于不止一种多态,区分度较低。可以用 Animal animal = new Cat(); 核对含义:Cat 是 Animal 的子类型,可以在需要父类型的位置使用。

容易混淆的表述:

  • **“参数列表不同”通常是在说方法重载,对应过载多态;“类型参数”**让代码适用于多种类型,才是参数多态的特征。
  • **“同一个名字在不同上下文含义不同”对应过载多态;“不同对象收到同一消息产生不同结果”**描述的是多态现象,需结合选项判断题目是否进一步区分子类型多态。
  • **“父类、子类”**也可能出现在继承题中。强调复用父类结构和行为时关注继承;强调通过父类型使用不同子类型时关注包含多态。

做题顺序:先看问的是哪一层概念 → 找最有区分度的关键词 → 用定义或小例子核对 → 排除其他选项。

常见误解

  1. 接口不一定只有声明没有实现。 Java 8 起接口可以定义默认方法和静态方法,Java 9 起还支持私有方法;接口的规则取决于语言与版本。
  2. 重载不限于一个类的直接声明。 继承的方法也可能参与重载;只改变返回类型不构成 Java 方法重载。
  3. 消息不一定异步。 普通方法调用、事件派发和消息队列要分别判断。
  4. 包含多态不要求逐次显式检查类型。 Java 的动态分派会根据接收对象选择实现。
  5. 多态不全部依靠运行时绑定。 广义分类还包括参数、过载与转换多态;讨论 Java 面向对象特性时,多态通常特指运行时子类型多态。
  6. 共同封闭与共同重用关注不同维度。 前者组织变化,后者组织复用;都不能机械解释为“必须修改或调用包里的所有类”。
课件例题答案速查

答案速查:1:C、B;2:A、D;3:B、A;4:B、C;5:C;6:D;7:D、C;8:C;9:A;10:D。

关联阅读与资料来源

评论