← 目录51CTO 讲义

软件工程(第五版)

51CTO 软考题库 · 共 436 题(单选 356 + 问答 80)


1. 喷泉模型是一种适合于面向(1)开发方法的软件过程模型。该过程模型的特点不包括 (2)。

答案:A

解析(AI 生成):

喷泉模型以对象为驱动,分析、设计、实现等阶段之间没有明显界限,可无缝、迭代地反复进行,因此最适用于面向对象开发方法。数据、数据流、事件分别对应以数据为中心、结构化分析与事件驱动的建模方式,都不是喷泉模型所服务的开发范型。

单选题


2. 某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品 种类可能不同,但制作过程相同。前台服务员(Waiter)调度厨师制作套餐。欲开发一软件, 实现该制作过程,设计如下所示类图。该设计采用(1)模式将一个复杂对象的构建与它的 表示分离,使得同样的构建过程可以创建不同的表示。其中,(2)构造一个使用 Builder 接口的对象。该模式属于(3)模式,该模式适用于(4)的情况。 图片

答案:A

解析:

生成器模式是创建型设计模式,它将一个复杂对象的构建与它的表示分离,使得同样 的构建过程可以创建不同的表示。本题中,Waiter 构造一个使用 Builder 接口的对象。 生成器模式适用于两种情况,当创建复杂对象的算法应该独立于该对象的组成部分以 及他们的装配方式时。当构造过程必须允许被构造的对象有不同的表示时。

单选题


3. (1)模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。例如计算机系统中的线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序等对象都利用了这个特点。(2)模式将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

答案:C

解析:

命令模式将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式将发出命令的责任和执行命令的责任分割开。请求的一方不必知道接收请求的一方的接口,也不必知道请求是怎么被接收的,以及操作是否被执行、何时被执行以及怎样被执行的。 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。

单选题


4. (1)模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。例如计算机系统中的线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序等对象都利用了这个特点。(2)模式将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

答案:A

解析:

命令模式将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式将发出命令的责任和执行命令的责任分割开。请求的一方不必知道接收请求的一方的接口,也不必知道请求是怎么被接收的,以及操作是否被执行、何时被执行以及怎样被执行的。 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。

单选题


5. 在线学习系统中,课程学习和课程考试都需要先检查学员的权限,“课程学习”与“检查权限”两个用例之间属于(1)课程学习过程中,如果所缴纳学费不够,就需要补缴学费,“课程学习”与“缴纳学费”两个用例之间属于(2);课程学习前需要课程注册,可以采用电话注册或网络注册,“课程注册”与“网络注册”两个用例之间属于(3)。

答案:A

解析:

用例之间的关系主要有包含、扩展和泛化三类。 (1)包含关系。当可以从两个或两个以上的用例中提取公共行为时,应该使用包含关系来表示它们。“课程学习”与“检查权限”是包含关系。 (2)扩展关系。如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰。“课程学习”与“缴纳学费”是扩展关系。 (3)泛化关系。当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。“课程注册”与“网络注册”是泛化关系。

单选题


6. 项目管理工具用来辅助项目经理实施软件开发过程中的项目管理活动,它不能(1)。(2) 就是一种典型的项目管理工具。

答案:D

解析:

项目管理工具用来辅助软件的项目管理活动。通常项目管理活动包括项目的计划、调度、通信、成本估算、资源分配及质量控制等。一个项目管理工具通常把重点放在某一个或某几个特定的管理环节上,而不提供对管理活动包罗万象的支持。项目管理工具具有以下特征: (1)覆盖整个软件生存周期; (2)为项目调度提供多种有效手段; (3)利用估算模型对软件费用和工作量进行估算; (4)支持多个项目和子项目的管理; (5)确定关键路径,松弛时间,超前时间和滞后时间; (6)对项目组成员和项目任务之间的通信给予辅助; (7)自动进行资源平衡; (8)跟踪资源的使用; (9)生成固定格式的报表和剪裁项目报告。 成本估算工具就是一种典型的项目管理工具。

单选题


7. 根据McCabe度量法,以下程序图的复杂性度量值为(4)。 图片

答案:A

解析:

McCabe 环路复杂性度量公式为:V(G)=E−N+2V(G)=E−N+2 或 V(G)=P+1V(G)=P+1。 其中 EE 为边数,NN 为节点数,PP 为判定节点数。 分析本程序图: 节点数 NN:图中包含 a, b, c, d, e, f, g 共 7 个节点。 边数 EE:图中包含 a->b, b->c, b->d, c->e, d->e, d->f, e->f, f->e, e->g,共 9 条边。 判定节点数 PP:出度大于等于2的节点为判定节点。图中 b (2条出边)、d (2条出边)、e (2条出边) 为判定节点,共 3 个。

代入公式: 公式法:V(G)=E−N+2=9−7+2=4V(G)=E−N+2=9−7+2=4 判定节点法:V(G)=P+1=3+1=4V(G)=P+1=3+1=4

因此,该程序图的复杂性度量值为 4,正确选项为 A。

单选题


8. 在UML中有4种事物:结构事物、行为事物、分组事物和注释事物。其中,(1)事物表示UML模型中的名词,它们通常是模型的静态部分,描述概念或物理元素。以下(2)属于此类事物。

答案:A

解析:

UML有3种基本的构造块,分别是事物(元素)、关系和图。事物是UML中重要的组成部分。关系把事物紧密联系在一起。图是很多有相互相关的事物的组。UML中的事物也称为建模元素,包括结构事物、动作事物、分组事物和注释事物。这些事物是UML模型中最基本的面向对象的构造块。结构事物。结构事物在模型中属于最静态的部分,代表概念上等或物理上的元素。

单选题


9. 模块A通过非正常入口转入模块B内部,则这两个模块之间是()耦合。

答案:D

解析:

内容耦合:一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。

单选题


10. 软件详细设计阶段的主要任务不包括()

答案:C

解析(AI 生成):

详细设计面向模块内部,任务包括数据结构设计、算法设计、模块内部接口与处理过程细节设计,以及数据库物理设计(存储结构、索引与存取路径)。模块之间的接口与调用关系在概要设计(体系结构设计)中已随模块划分确定,不属于详细设计任务,故选该项。

单选题


11. 用白盒测试技术对下面流程图机型测试,至少采用()个测试用例才可以实现路径覆盖。 图片

答案:A

解析(AI 生成):

路径覆盖要求执行到流程图中所有可能的路径,所需测试用例数至少等于图中独立路径的条数。该流程图共有3条不同的执行路径,设计3个用例分别走通即可实现全覆盖,再增加用例不会带来新的路径覆盖,故至少3个。

单选题


12. 某搜索引擎在交付后,开发人员修改了其中的索引方法,使得用户可以更快地得到搜索结果。这种修改属于()维护。

答案:C

解析:

A,原有的索引方法正确性没有问题,B适应性也没有问题,只是时间久,D是预防将来发生的,只有C完善性适合。

单选题


13. 面向对象分析时,执行的活动顺序通常是()。

答案:A

解析:

面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息。

单选题


14. 采用面向对象方法进行系统设计时,不应该强迫客户依赖于它们不用的方法,即:依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。这属于()原则。

答案:C

解析(AI 生成):

接口分离原则主张把庞大接口拆分为多个专用小接口,客户只依赖自己实际使用的方法,避免被迫依赖不使用的方法,从而降低耦合。单一职责约束类的职责划分,开闭原则要求对扩展开放、对修改关闭,里氏替换约束子类可替换父类,均与此描述不符。

单选题


15. 假设Bird和Cat是Animal的子类, Parrot是Bird的子类, bird是Bird的一个对象。cat是Cat的一个对象, parrot是Parrot的一个对象。以下叙述中, 不正确的是(1)。 假设Animal类中定义接口move(), Bird、Cat和Parrot分别实现自己的move (),调用move() 时, 不同对象收到同一消息可以产生各自不同的结果, 这一现象称为(2)。

答案:C

解析:

39题选项C表述错误Parrot是Bird的子类,因此一个Parrot的对象可以看作是Bird的对象。40题是多态,对父类行为的一种重写。

单选题


16. 假设Bird和Cat是Animal的子类, Parrot是Bird的子类, bird是Bird的一个对象。cat是Cat的一个对象, parrot是Parrot的一个对象。以下叙述中, 不正确的是(1)。 假设Animal类中定义接口move(), Bird、Cat和Parrot分别实现自己的move (),调用move() 时, 不同对象收到同一消息可以产生各自不同的结果, 这一现象称为(2)。

答案:D

解析:

39题选项C表述错误Parrot是Bird的子类,因此一个Parrot的对象可以看作是Bird的对象。40题是多态,对父类行为的一种重写。

单选题


17. 股票交易中,股票代理(Broker) 根据客户发出的股票操作指示进行股票的买卖操作,设计如下所示类图。该设计采用(44)模式将一个请求封装为一个对象,从而使得以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作,其中,(45)声明执行操作的接口。该模式属于(46)模式,该模式适用于:(47)_。 图片

答案:A

解析:

命令模式类图如下所示。 图片 其中∶ ● Command 声明执行操作的接口。 ● ConcreteCommand将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现 Execute。 ● Client 创建一个具体命令对象并设定它的接收者。 ● Invoker 要求该命令执行这个请求。 ●Receiver 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。 Command 模式适用于∶ ●抽象出待执行的动作以参数化某对象。Command 模式是过程语言中的回调(callback)机制的一个面向对象的替代品。 ● 在不同的时刻指定、排列和执行请求。一个 Command 对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可以将负责该请求的命令对象传递给另一个不同的进程并在那儿实现该请求。 ● 支持取消操作。Command 的 Execute 操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command 接口必须添加一个 Unexecute 操作,该操作取消上一次 Execute 调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用 Unexecute和 Execute来实现重数不限的"取消"和"重做"。 ● 支持修改日志。这样当系统崩溃时,这些修改可以被重做一遍。在 Command 接口中添加装载操作和存储操作, 可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用 Execute 操作重新执行它们。 ● 用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务(transaction)的信息系统中很常见。Command 模式提供了对事务进行建模的方法。Command 有一个公共接口,使得可以用同一种方式调用所有的事务,同时使用该模式也易于添加新事务以扩展系统。

单选题


18. 股票交易中,股票代理(Broker) 根据客户发出的股票操作指示进行股票的买卖操作,设计如下所示类图。该设计采用(44)模式将一个请求封装为一个对象,从而使得以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作,其中,(45)声明执行操作的接口。该模式属于(46)模式,该模式适用于:(47)_。 图片

答案:A

解析:

命令模式类图如下所示。 图片 其中∶ ● Command 声明执行操作的接口。 ● ConcreteCommand将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现 Execute。 ● Client 创建一个具体命令对象并设定它的接收者。 ● Invoker 要求该命令执行这个请求。 ●Receiver 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。 Command 模式适用于∶ ●抽象出待执行的动作以参数化某对象。Command 模式是过程语言中的回调(callback)机制的一个面向对象的替代品。 ● 在不同的时刻指定、排列和执行请求。一个 Command 对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可以将负责该请求的命令对象传递给另一个不同的进程并在那儿实现该请求。 ● 支持取消操作。Command 的 Execute 操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command 接口必须添加一个 Unexecute 操作,该操作取消上一次 Execute 调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用 Unexecute和 Execute来实现重数不限的"取消"和"重做"。 ● 支持修改日志。这样当系统崩溃时,这些修改可以被重做一遍。在 Command 接口中添加装载操作和存储操作, 可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用 Execute 操作重新执行它们。 ● 用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务(transaction)的信息系统中很常见。Command 模式提供了对事务进行建模的方法。Command 有一个公共接口,使得可以用同一种方式调用所有的事务,同时使用该模式也易于添加新事务以扩展系统。

单选题


19. 股票交易中,股票代理(Broker) 根据客户发出的股票操作指示进行股票的买卖操作,设计如下所示类图。该设计采用(44)模式将一个请求封装为一个对象,从而使得以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作,其中,(45)声明执行操作的接口。该模式属于(46)模式,该模式适用于:(47)_。 图片

答案:D

解析:

命令模式类图如下所示。 图片 其中∶ ● Command 声明执行操作的接口。 ● ConcreteCommand将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现 Execute。 ● Client 创建一个具体命令对象并设定它的接收者。 ● Invoker 要求该命令执行这个请求。 ●Receiver 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。 Command 模式适用于∶ ●抽象出待执行的动作以参数化某对象。Command 模式是过程语言中的回调(callback)机制的一个面向对象的替代品。 ● 在不同的时刻指定、排列和执行请求。一个 Command 对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可以将负责该请求的命令对象传递给另一个不同的进程并在那儿实现该请求。 ● 支持取消操作。Command 的 Execute 操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command 接口必须添加一个 Unexecute 操作,该操作取消上一次 Execute 调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用 Unexecute和 Execute来实现重数不限的"取消"和"重做"。 ● 支持修改日志。这样当系统崩溃时,这些修改可以被重做一遍。在 Command 接口中添加装载操作和存储操作, 可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用 Execute 操作重新执行它们。 ● 用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务(transaction)的信息系统中很常见。Command 模式提供了对事务进行建模的方法。Command 有一个公共接口,使得可以用同一种方式调用所有的事务,同时使用该模式也易于添加新事务以扩展系统。

单选题


20. 股票交易中,股票代理(Broker) 根据客户发出的股票操作指示进行股票的买卖操作,设计如下所示类图。该设计采用(44)模式将一个请求封装为一个对象,从而使得以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作,其中,(45)声明执行操作的接口。该模式属于(46)模式,该模式适用于:(47)_。 图片

答案:B

解析:

命令模式类图如下所示。 图片 其中∶ ● Command 声明执行操作的接口。 ● ConcreteCommand将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现 Execute。 ● Client 创建一个具体命令对象并设定它的接收者。 ● Invoker 要求该命令执行这个请求。 ●Receiver 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。 Command 模式适用于∶ ●抽象出待执行的动作以参数化某对象。Command 模式是过程语言中的回调(callback)机制的一个面向对象的替代品。 ● 在不同的时刻指定、排列和执行请求。一个 Command 对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可以将负责该请求的命令对象传递给另一个不同的进程并在那儿实现该请求。 ● 支持取消操作。Command 的 Execute 操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command 接口必须添加一个 Unexecute 操作,该操作取消上一次 Execute 调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用 Unexecute和 Execute来实现重数不限的"取消"和"重做"。 ● 支持修改日志。这样当系统崩溃时,这些修改可以被重做一遍。在 Command 接口中添加装载操作和存储操作, 可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用 Execute 操作重新执行它们。 ● 用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务(transaction)的信息系统中很常见。Command 模式提供了对事务进行建模的方法。Command 有一个公共接口,使得可以用同一种方式调用所有的事务,同时使用该模式也易于添加新事务以扩展系统。

单选题


21. 某公司报表系统的需求中,属于功能需求的(20)。

答案:A

解析(AI 生成):

功能需求描述系统必须提供的业务处理能力。月底统计销售数据并以柱状图、饼状图显示,属报表统计与展示功能,是功能需求;允许200个用户并发查询属性能容量,导出不超过2秒属时间性能,抵御恶意攻击属安全性,后三者均为非功能需求。

单选题


22. 模块的内聚性最高的是(32)。

答案:D

解析:

7种内聚性由高到底分别为功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚。因此选D。 1.功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 2.顺序内聚:处理元素相关,而且必须顺序执行。 3.通信内聚:所有处理元素集中在一个数据结构的区域上。 4.过程内聚:处理元素相关,而且必须按特定的次序执行。 5.瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行。 6.逻辑内聚:完成逻辑上相关的一组任务。 7.偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务

单选题


23. 软件开发中常采用的结构化生命周期方法,由于其特征而一般称其为(33)。

答案:A

解析(AI 生成):

结构化生命周期方法把开发划分为若干阶段,各阶段自上而下顺序进行、前一阶段完成后才进入下一阶段,以文档为衔接,回溯代价大,特征与瀑布模型一致,故常直接称为瀑布模型。对象模型属面向对象,螺旋模型强调风险驱动的迭代,层次模型是数据模型,均不符。

单选题


24. 以下(34)不是SCRUM MASTER职责。

答案:B

解析:

SCRUM MASTER职责的6大职责:教练、服务型领导、过程权威、保护伞、清道夫、变革代言人。A是保护伞职责;C是过程权威职责;D是服务型领导职责。 (1)教练 ScrumMaster通过对研发团队和产品负责人进行指导,消除两者之间的隔阂,是产品负责人能够直接驱动产品开发。 ScrumMaster重点观察团队使用Scrum的过程,全力帮助团队达到更高级别的工作效能。ScrumMaster驱动团队发现并自主解决问题,当团队遇到无法解决的障碍时,才由ScrumMaster负责解决。 ScrumMaster使用Scrum帮助负责人取得最大的业务成果,管理预期,确保负责人提供团队的必需品,倾听负责人抱怨和变更请求,最终将这些信息转换为团队可以落地的改进措施。 (2)服务型领导 ScrumMaster是团队的服务者,提供的服务要确保满足团队最高优先级的需要。服务型领导从来不会问:“今天你准备为我做什么?”相反,服务型领导会问:“为了帮助你和团队更加有效,今天我能做什么?” (3)过程权威 确保Scrum团队使用特定的方法实施并遵循Scrum的价值观、原则和实践,ScrumMaster需要被充分授权。ScrumMaster需要持续帮助团队改进过程,实现交付的业务价值最大化。 (4)保护伞 ScrumMaster保护开发团队免受外部干扰,让团队可以集中精力在每个冲刺交付业务价值。 (5)清道夫 ScrumMaster需要扫清妨碍团队生产效率的一切障碍(当团队成员自己搞不定的时候)。 (6)变革代言人 ScrumMaster要帮助他人理解变革的需要,在Scrum团队之外Scrum所带来的影响及Scrum能帮助达到的广泛而深远的收益。ScrumMaster还要确保组织的各个层面都发生有效的变革,不仅能够促成短期的成功,而且能够得到长期的收益。

单选题


25. 结构化分析方法是一种预先严格定义需求的方法,它在实施时强调的是分析对象的(35)。

答案:B

解析(AI 生成):

结构化分析以数据流为主线刻画系统,用数据流图、数据字典、加工说明等描述数据的来源、流向、加工与存储,强调分析对象的数据流而非控制流。控制流、程序流、指令流属程序结构与执行顺序的描述,是详细设计或实现层面关注的内容。

单选题


26. 关于软件测试,下列说法中错误的是(36)。

答案:D

解析(AI 生成):

错误在“两个独立、分离的过程”。测试贯穿整个生命周期,与开发并行交织,单元测试对应详细设计、系统测试对应需求,测试准备在编码前就开始。早期开发中测试确与调试混同;测试确为人工或自动运行系统、比较预期与实际结果以检验是否满足需求。

单选题


27. 对下图所示流程图采用白盒测试方法进行测试,若要满足判定覆盖,则至少需要(1)个测试用例。采用McCabe度量法计算该程序的环路复杂性为(2)。 图片

答案:C

解析:

判定覆盖:使程序中每条分支都至少执行一次,因此需要3个测试用例。 计算环路复杂度:封闭区域数加1:3+1=4

单选题


28. 不应该强迫客户依赖于他们不用的方法,接口属于客户,不属于它所在的类层次结构。即依赖于抽象,不依赖于具体,同时,在抽象级别,不应该有对于细节的依赖,这属于(40)设计原则。

答案:C

解析:

类的设计原则有七个,包括:开闭原则、里氏代换原则、迪米特原则(最少知道原则)、单一职责原则、接口分隔原则、依赖倒置原则、组合/聚合复用原则。除以上原则外,还有其他原则。 其中,共同重用原则是指一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。 开放封闭原则,即软件实体(类、模块、函数等)应该是可以扩展的,即开放的。但是不可修改的,即封闭的。 接口分离原则,是指不应该强迫客户依赖于他们不用的方法,接口属于客户,不属于它所在的类层次结构。即依赖于抽象,不依赖于具体,同时,在抽象级别,不应该有对于细节的依赖。 共同封闭原则,是指包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。 由此可见,题目里描述的是接口分离原则,选择的答案是C。

单选题


29. 在UML提供的图中,(1)用于描述系统与外部系统及用户之间的交互;(2)用于按时间顺序描述对象间的交互。

答案:A

解析:

用例图是从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。 类图展现了一组对象、接口、协作和它们之间的关系。在面向对象系统的建模中,最常见的就是类图,它给出系统的静态设计视图。 对象图是描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类图在某一时刻的实例。 组件图展现了一组组件之间的组织和依赖 通信图也是一种交互图,他强调收发消息的对象或参与者的结构组织 部署图是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。 顺序图是一种交互图,交互图展现了一种交互,它由一组对象或参与者以及它们之间可能发送的消息构成。顺序图是强调消息的时间次序的交互图。

单选题


30. 在UML提供的图中,(1)用于描述系统与外部系统及用户之间的交互;(2)用于按时间顺序描述对象间的交互。

答案:D

解析:

用例图是从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。 类图展现了一组对象、接口、协作和它们之间的关系。在面向对象系统的建模中,最常见的就是类图,它给出系统的静态设计视图。 对象图是描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类图在某一时刻的实例。 组件图展现了一组组件之间的组织和依赖 通信图也是一种交互图,他强调收发消息的对象或参与者的结构组织 部署图是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。 顺序图是一种交互图,交互图展现了一种交互,它由一组对象或参与者以及它们之间可能发送的消息构成。顺序图是强调消息的时间次序的交互图。

单选题


31. 下面不属于创建型模式的有(44)。

答案:C

解析:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

单选题


32. Strategy(策略)模式的意图是:(45)。

答案:A

解析:

策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。 单例模式只拥有一个对象,但不用全局对象来控制对象的实例化。 观察者模式定义对象间一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

单选题


33. 某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加人性化,可以使用(46)对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。

答案:B

解析:

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。

单选题


34. 设计模式中的(1)模式将对象组合成树形结构以表示“部分一整体”的层次结构,使得客户对单个对象和组合对象的使用具有一致性。下图为该模式的类图,其中,(2)定义有子部件的那些部件的行为;组合部件的对象由(3)通过component提供的接口操作。 图片

答案:C

解析(AI 生成):

组合模式把对象组织成树形结构表示“部分—整体”层次,使客户对单个对象与组合对象的使用具有一致性,正是题干描述。代理模式控制对对象的访问,桥接模式分离抽象与实现,装饰器模式动态给对象添加职责,均不涉及整体与部分的树形递归结构。

单选题


35. 设计模式中的(1)模式将对象组合成树形结构以表示“部分一整体”的层次结构,使得客户对单个对象和组合对象的使用具有一致性。下图为该模式的类图,其中,(2)定义有子部件的那些部件的行为;组合部件的对象由(3)通过component提供的接口操作。 图片

答案:D

解析(AI 生成):

Composite是组合节点,定义有子部件的那些部件的行为,实现增加、删除、获取子部件,并在operation中递归调用子部件操作,使请求沿树向下传递。Leaf为无子部件的叶节点,Component是统一抽象接口,Client是使用方。

单选题


36. 设计模式中的(1)模式将对象组合成树形结构以表示“部分一整体”的层次结构,使得客户对单个对象和组合对象的使用具有一致性。下图为该模式的类图,其中,(2)定义有子部件的那些部件的行为;组合部件的对象由(3)通过component提供的接口操作。 图片

答案:A

解析(AI 生成):

Client通过Component提供的接口操作组合部件,只面向抽象编程,无需判断当前对象是叶节点还是组合节点,从而对单个对象和组合对象的使用保持一致。Component只声明接口,Leaf与Composite负责实现,不是调用方。

单选题


37. 在面向对象设计中,(1)可以实现界面控制、外部接口和环境隔离。(2)作为完成用例业务的责任承担者,协调、控制其他类共同完成用例规定的功能或行为。

答案:B

解析:

类封装了信息和行为,是面向对象的重要组成部分。在面向对象设计中,类可以分为三种类型:实体类、边界类和控制类。 ①实体类映射需求中的每个实体,实体类保存需要存储在永久存储体中的信息。实体类是对用户来说最有意义的类,通常采用业务领域术语命名,一般来说是一个名词,在用例模型向领域模型转化中,一个参与者一般对应于实体类。 ②控制类是用于控制用例工作的类,一般是由动宾结构的短语(“动词+名词”或“名词+动词”)转化来的名词。控制类用于对一个或几个用例所特有的控制行为进行建模,控制对象通常控制其他对象,因此它们的行为具有协调性。 ③边界类用于封装在用例内、外流动的信息或数据流。边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。边界对象将系统与其外部环境的变更隔离开,使这些变更不会对系统其他部分造成影响。

单选题


38. 开-闭原则(Open-Closed Principle,OCP )是面向对象的可复用设计的基石。开-闭原则是指一个软件实体应当对()开放,对()关闭;里氏代换原则(LiskovSubstitution Principle,LSP )是指任何()可以出现的地方,() 一定可以出现。依赖倒转原则(Dependence Inversion Principle,DIP)就是要依赖于()而不依赖于() ,或者说要针对接口编程,不要针对实现编程。

答案:B

解析:

开-闭原则要求一个软件实体应当对扩展开放,对修改关闭。也就是说,我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为。 里氏代换原则要求子类型必须能够替换它们的基类型,所以在里氏代换原则中,任何可基类对象可以出现的地方,子类对象也一定可以出现。 依赖倒转原则是:要依赖于抽象,不要依赖于具体。也就是常说的要针对接口编程,不要针对实现编程。

单选题


39. 敏捷开发强调以人为本,与用户紧密协作,面对面沟通,尽早发布增量,小而自主的开发团队,实现敏捷开发有多种方式,其中()是高效、低风险、测试先行(先写测试代码,再编写程序)。()强调不同项目,不同策略。

答案:A

解析(AI 生成):

极限编程XP强调测试先行,先写测试代码再编码,配合结对编程、小版本快速交付与持续集成,因而高效低风险。Cockburn水晶方法主张按项目规模与关键程度选不同策略,即不同项目不同策略;FDD为功能驱动开发,开放式源码强调社区协作。

单选题


40. 在UML中,( 1 )用于画出结构化类的内部内容。( 2 )由一组对象或参与者以及它们之间可能发送的消息构成。强调消息的时间次序的交互图。( 3 )强调收发消息的对象或参与者的结构组织。强调的是对象之间的组织结构(关系)。

答案:C

解析:

组合结构图用于画出结构化类的内部内容。 顺序图由一组对象或参与者以及它们之间可能发送的消息构成。强调消息的时间次序的交互图。 通信图强调收发消息的对象或参与者的结构组织。强调的是对象之间的组织结构(关系)。

单选题


41. 在UML中,( 1 )用于画出结构化类的内部内容。( 2 )由一组对象或参与者以及它们之间可能发送的消息构成。强调消息的时间次序的交互图。( 3 )强调收发消息的对象或参与者的结构组织。强调的是对象之间的组织结构(关系)。

答案:B

解析:

组合结构图用于画出结构化类的内部内容。 顺序图由一组对象或参与者以及它们之间可能发送的消息构成。强调消息的时间次序的交互图。 通信图强调收发消息的对象或参与者的结构组织。强调的是对象之间的组织结构(关系)。

单选题


42. 在UML中,( 1 )用于画出结构化类的内部内容。( 2 )由一组对象或参与者以及它们之间可能发送的消息构成。强调消息的时间次序的交互图。( 3 )强调收发消息的对象或参与者的结构组织。强调的是对象之间的组织结构(关系)。

答案:D

解析:

组合结构图用于画出结构化类的内部内容。 顺序图由一组对象或参与者以及它们之间可能发送的消息构成。强调消息的时间次序的交互图。 通信图强调收发消息的对象或参与者的结构组织。强调的是对象之间的组织结构(关系)。

单选题


43. 面向对象设计有7个主要原则。()强调子类可以替换父类。()要求一个对象应当对其他对象有尽可能少的了解。()要依赖于抽象,不是具体实践。

答案:B

解析:

里式替换原则:子类可以替换父类 迪米特原则:一个对象应当对其他对象有尽可能少的了解。 依赖倒置原则:要依赖于抽象,不是具体实践。对接口进行编程,不要对实现编程。

单选题


44. 面向对象设计有7个主要原则。()强调子类可以替换父类。()要求一个对象应当对其他对象有尽可能少的了解。()要依赖于抽象,不是具体实践。

答案:A

解析:

里式替换原则:子类可以替换父类 迪米特原则:一个对象应当对其他对象有尽可能少的了解。 依赖倒置原则:要依赖于抽象,不是具体实践。对接口进行编程,不要对实现编程。

单选题


45. 面向对象设计有7个主要原则。()强调子类可以替换父类。()要求一个对象应当对其他对象有尽可能少的了解。()要依赖于抽象,不是具体实践。

答案:C

解析:

里式替换原则:子类可以替换父类 迪米特原则:一个对象应当对其他对象有尽可能少的了解。 依赖倒置原则:要依赖于抽象,不是具体实践。对接口进行编程,不要对实现编程。

单选题


46. 某软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动的持续时间(天),则完成该项目的最少时间为 () 天。活动BD和HK最早可以从第 ()天开始。(活动AB、AE和AC最早从第1天开始) 图片

答案:D

解析:

项目的工期是从开始到结束持续时间最长的工作。题目中持续时间最长的是ABDIJL,需要时间20天。 BD活动在AB活动结束之后便可以开始,所以最早开始时间为4。HK活动需要在AEGH与ACFH两条路径上的活动均完成之后,才能开始,所以最早开始时间为11。

单选题


47. 对下图所示的程序流程图进行语句覆盖测试和路径覆盖测试,至少需要 (1) 个测试用例。采用McCabe 度量法计算其环路复杂度为 (2) 。 图片

答案:B

解析:

覆盖2条路径就能达到语句覆盖的要求,用2个测试用例即可。路径覆盖需要把程序中的3条路径均覆盖一遍,需要4个用例。 整个程序流程图转化为节点图之后,一共11个节点,13条边,根据环路复杂度公式有:13-11+2=4。

单选题


48. 在面向对象技术中,不同的对象在收到同一消息时可以产生完全不同的结果,这一现象称为() ,它由()机制来支持。利用类的层次关系,把具有通用功能的消息存放在高层次,而不同的实现这一功能的行为放在较低层次,在这些低层次上生成的对象能够给通用消息以不同的响应。

答案:D

解析:

多态性是同一操作作用于不同的类的实例,将产生不同的执行结果,即当不同类的对象收到相同的消息时,得到不同的结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。多态是面向对象程序设计的重要特征之一,是扩展性在“继承”之后的又一重大表现。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。

单选题


49. 绘制分层数据流图 (DFD)时需要注意的问题中,不包括(15)。

答案:B

解析(AI 生成):

分层数据流图只描述数据流动,须为每个数据流、加工、数据存储和外部实体命名,一个加工的数据流不宜过多,分解要尽量均匀,并保持父子图数据流平衡。控制流不属于DFD的表达内容,它由状态转换图等工具描述,因此“图中要表示出控制流”不是绘制要求。

单选题


50. 以下关于软件设计原则的叙述中,不正确的是(16)。

答案:C

解析:

模块的规模要适当。过大的模块会使系统分解得不充分而过小的模块又有可能降低模块的独立性,造成系统接口的复杂性。

单选题


51. 在风险管理中,通常需要进行风险监测,其目的不包括(17)。

答案:A

解析(AI 生成):

风险监测是在风险发生前后持续跟踪:评估已识别的风险是否真的发生,检查风险缓解措施是否被正确实施,并收集信息供后续风险分析使用。风险只能通过规避、转移、减轻、接受来应对,无法被彻底消除,故“消除风险”不是风险监测的目的。

单选题


52. 下图是一个软件项目的活动图,其中顶点表示项目里程碑,连接顶点的边表示活动,边上的权重表示完成该活动所需要的时间(天),则活动(问题1) 不在关键路径上。活动BI和EG的松弛时间分别是(问题2)。 图片

答案:B

解析:

关键路径是AEGHKL、ABDIJL、ABDIJKL,工期20天。 BI的松弛时间等于最迟开始时间-最早开始时间=4-3=1。 EG在关键路径上,松弛时间是0。

单选题


53. 下图是一个软件项目的活动图,其中顶点表示项目里程碑,连接顶点的边表示活动,边上的权重表示完成该活动所需要的时间(天),则活动(问题1) 不在关键路径上。活动BI和EG的松弛时间分别是(问题2)。 图片

答案:B

解析:

关键路径是AEGHKL、ABDIJL、ABDIJKL,工期20天。 BI的松弛时间等于最迟开始时间-最早开始时间=4-3=1。 EG在关键路径上,松弛时间是0。

单选题


54. 以下关于敏捷统一过程(AUP)的叙述中,不正确的是(30)。

答案:C

解析:

敏捷统一过程(Agile Unified Process,AUP)采用"在大型上连续"以及在"在小型上迭代"的原理来构建软件系统。采用经典的UP阶段性活动(初始、精化、构建和转换),提供了一系列活动,能够使团队为软件项目构想出一个全面的过程流。

单选题


55. 在ISO/IEC软件质量模型中,可移植性是指与软件可从某环境移到另一环境的能力有关的一组属性,其子特性不包括(31)。

答案:B

解析(AI 生成):

ISO/IEC质量模型中可移植性包含适应性、易安装性、共存性(易替换性)与易遵循性,描述软件从一种环境迁移到另一种环境的能力。易测试性属于可维护性的子特性,与易分析性、易改变性、稳定性并列,不属于可移植性。

单选题


56. 如下所示代码(用缩进表示程序块),要实现语句覆盖,至少需要(问题1)个测试用例。采用McCabe度量法计算该代码对应的程序流程图的环路复杂性为(问题2)。 图片

答案:A

解析:

该流程图的作用是从小到大排列数组A的n个元素,例如排列数组元素3、2、1,只用一个测试用例即可实现。图中有两个循环形成两个闭环,环路复杂度为闭环个数加1等于3个。

单选题


57. 如下所示代码(用缩进表示程序块),要实现语句覆盖,至少需要(问题1)个测试用例。采用McCabe度量法计算该代码对应的程序流程图的环路复杂性为(问题2)。 图片

答案:C

解析:

该流程图的作用是从小到大排列数组A的n个元素,例如排列数组元素3、2、1,只用一个测试用例即可实现。图中有两个循环形成两个闭环,环路复杂度为闭环个数加1等于3个。

单选题


58. 系统可维护性是指维护人员理解、改正、改动和改进软件系统的难易程度,其评价指标不包括(36)。

答案:D

解析(AI 生成):

可维护性衡量维护人员理解、改正、改动和改进软件的难易,常用可理解性、可测试性、可修改性等指标评价,并配合稳定性、可移植性等特性。一致性指数据、表示或接口在系统内保持统一,属设计与数据管理要求,不是可维护性的评价指标。

单选题


59. 面向对象设计时包含的主要活动是(37)。

答案:D

解析:

面向对象设计时包含的主要活动是识别类及对象、定义属性、定义服务、识别关系、识别包。

单选题


60. 在面向对象设计时,如果重用了包中的一个类,那么就要重用包中的所有类,这属于(38)原则。

答案:D

解析:

接口分离原则:不应该强迫客户依赖于它们不用的方法。 开放-封闭原则:软件实体(类、模块、函数等)应该是可以扩展的,即开放的;但是不可修改的,即封闭的。 共同封闭原则:包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。 共同重用原则:一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。

单选题


61. 某电商系统在采用面向对象方法进行设计时,识别出网店、商品、购物车、订单、买家、库存、支付(微信、支付宝)等类。其中,购物车与商品之间适合采用(39) 关系,网店与商品之间适合采用(40) 关系。

答案:D

解析:

购物车与商品是整体与部分的关系,购物车包含了商品,但是商品可以脱离购物车独立存在,这是一种聚合关系。 网店与商品之间是一种整体与部分的关系,商品是网店的一部分,如果网店不存在了,那么网店中的商品也不存在,它们之间是组合关系。

单选题


62. 某软件系统限定:用户登录失败的次数不能超过3次。采用如所示的UML状态图对用户登录状态进行建模,假设活动状态是Logging in,那么当Valid Entrty发生时,(41)。其中,[tries<3]和tries++分别为(42)和 (43)。 图片

答案:B

解析:

根据状态图,事件Valid Entrty发生,同时当tries<3时,系统变为Logged in状态。 [tries<3]是监护条件,是一种布尔表达式,当结果为true时,说明转换符合触发条件。tries++属于转换,是两个状态之间的一种关系,转换包括事件与动作。转换会引起系统状态的转变。

单选题


63. 某软件系统限定:用户登录失败的次数不能超过3次。采用如所示的UML状态图对用户登录状态进行建模,假设活动状态是Logging in,那么当Valid Entrty发生时,(41)。其中,[tries<3]和tries++分别为(42)和 (43)。 图片

答案:C

解析:

根据状态图,事件Valid Entrty发生,同时当tries<3时,系统变为Logged in状态。 [tries<3]是监护条件,是一种布尔表达式,当结果为true时,说明转换符合触发条件。tries++属于转换,是两个状态之间的一种关系,转换包括事件与动作。转换会引起系统状态的转变。

单选题


64. 某软件系统限定:用户登录失败的次数不能超过3次。采用如所示的UML状态图对用户登录状态进行建模,假设活动状态是Logging in,那么当Valid Entrty发生时,(41)。其中,[tries<3]和tries++分别为(42)和 (43)。 图片

答案:B

解析:

根据状态图,事件Valid Entrty发生,同时当tries<3时,系统变为Logged in状态。 [tries<3]是监护条件,是一种布尔表达式,当结果为true时,说明转换符合触发条件。tries++属于转换,是两个状态之间的一种关系,转换包括事件与动作。转换会引起系统状态的转变。

单选题


65. 在某系统中,不同组(Group)访问数据的权限不同,每个用户(User)可以是一个或多个组中的成员,每个组包含零个或多个用户。现要求在用户和组之间设计映射,将用户和组之间的关系由映射进行维护,得到如下所示的类图。该设计采用(44) 模式,用一个对象来封装系列的对象交互; 使用户对象和组对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。该模式属于(45)模式,该模式适用于: (46)。 图片

答案:D

解析:

中介者模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式属于行为型对象模式,适应于下列情况: 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。 想定制一个分布在多个类中的行为,而又不想生成太多的子类。

单选题


66. 在某系统中,不同组(Group)访问数据的权限不同,每个用户(User)可以是一个或多个组中的成员,每个组包含零个或多个用户。现要求在用户和组之间设计映射,将用户和组之间的关系由映射进行维护,得到如下所示的类图。该设计采用(44) 模式,用一个对象来封装系列的对象交互; 使用户对象和组对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。该模式属于(45)模式,该模式适用于: (46)。 图片

答案:C

解析:

中介者模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式属于行为型对象模式,适应于下列情况: 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。 想定制一个分布在多个类中的行为,而又不想生成太多的子类。

单选题


67. 在某系统中,不同组(Group)访问数据的权限不同,每个用户(User)可以是一个或多个组中的成员,每个组包含零个或多个用户。现要求在用户和组之间设计映射,将用户和组之间的关系由映射进行维护,得到如下所示的类图。该设计采用(44) 模式,用一个对象来封装系列的对象交互; 使用户对象和组对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。该模式属于(45)模式,该模式适用于: (46)。 图片

答案:D

解析:

中介者模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式属于行为型对象模式,适应于下列情况: 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。 想定制一个分布在多个类中的行为,而又不想生成太多的子类。

单选题


68. 在设计某购物中心的收银软件系统时,要求能够支持在不同时期推出打折、返利、满减等不同促销活动,则适合采用(47)模式。

答案:A

解析:

使用策略模式可以将不同时期的促销活动定义为一个个算法,进行封装,它们彼此可以互相替换,也能独立于使用它们的客户而变化。客户也不必知道算法使用的数据,避免暴露相关的数据结构。

单选题


69. 下面关于数据流图中加工的描述正确的是(15)。

答案:C

解析:

根据数据流图中加工的定义,加工是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出,选C。

单选题


70. 以下哪一项不是面向对象的特征(16)。

答案:D

解析(AI 生成):

面向对象的三大特征是封装、继承和多态:封装隐藏内部实现只暴露接口,继承实现属性与行为的复用,多态使同一消息在不同对象上产生不同响应。过程调用是面向过程程序设计中以函数调用组织控制流的机制,不属于面向对象特征。

单选题


71. 面向对象的分析方法主要是建立三类模型,分别是(17)。

答案:D

解析:

面向对象的分析通常要建立三种模型 功能模型:表达系统的详细需求,为软件的进一步分析和设计打下基础。在面向对象方法中,由用例图和场景描述组成。 对象模型:表示静态的、结构化的系统“数据”性质。描述现实世界中实体的对象以及它们之间的关系,表示目标系统的静态数据结构。在面向对象方法中,类图是构建对象模型的核心工具。 动态模型:描述系统的动态结构和对象之间的交互,表示瞬时的、行为化的系统的“控制”特性。面向对象方法中,常用状态图、顺序图、合作图、活动图构建系统的动态模型。 选D。

单选题


72. 为了提高模块的独立性,模块内部最好的是(30)。

答案:C

解析:

内聚有如下种类,他们之间的内聚性由弱到强排列为偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。 1.巧合内聚:指一个模块内的各个处理元素之间没有任何联系。 2.逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。 3.时间内聚:把需要同时执行的动作组合在一起形成的模块。 4.通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。 5.顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须执行顺序执行,前一个功能元素的输出就是下一个功能元素的输入。 6.功能内聚:是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。

单选题


73. 在多层次的结构图中,其模块的层次数称为结构图的(31)。

答案:A

解析(AI 生成):

结构图的深度指模块层次的层数,即从顶层到最底层控制的层数,反映系统的纵向复杂度。跨度指同一层次中模块个数的最大值(扇出的总和),控制域是模块所能影响的范围,粒度指模块功能划分的粗细,三者都不是层次数。

单选题


74. 下列说法中正确的是(34)。

答案:C

解析(AI 生成):

测试只能证明错误存在,不能证明错误不存在。即使测试未发现错误,也不能说明程序正确,A、B都把测试当作正确性的证明;D把未发现错误视为成功,与测试目的相反。测试的价值在于暴露缺陷,因此发现迄今尚未发现的错误才算成功的测试。

单选题


75. 覆盖准则最强的是(35)。

答案:D

解析:

结构化测试中有语句覆盖、条件覆盖、判定覆盖(也称分支覆盖)、路径覆盖等,其中路径覆盖是最强的覆盖准则。

单选题


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

答案:C

解析:

逻辑上相关的数据以及行为绑定在一起,使信息对使用者隐蔽称为封装。对于私有成员来说只能是该类中定义的方法才能对其进行访问。

单选题


77. 38)体现的是一种con-tains-a的关系,体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。

答案:D

解析:

泛化表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般泛化关系是从子类指向父类的。 对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在同定的对应关系时,这两个对象之间为关联关系。关联体现的是两个类,或者类与接口之间语义级别的一种强依赖关系,这种关系一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。 聚合是关联关系的一种特例,体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。 组合也是关联关系的一种特例,体现的是一种con-tains-a的关系,这种关系比聚合更强,也称为强聚合;它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。

单选题


78. UML提供了4种结构图用于对系统的静态方面进行可视化、详述、构造和文档化。其中(1)是面向对象系统规模中最常用的图,用于说明系统的静态设计视图;当需要说明系统的静态实现视图时,应该选择(2);当需要说明体系结构的静态实施视图时,应该选择(3)。

答案:B

解析:

在UML中,结构描述了系统中的结构成员及其相互关系。其中,类图用于说明系统的静态设计视图;构件图用于说明系统的静态实现视图;用例图用于说明系统的用例视图;部署图用于说明系统的静态实施视图(即部署视图)。

单选题


79. 结构化分析方法以数据流图、(15)和加工说明等描述工具,即用直观的图和简洁的语言来描述软件系统模型。

答案:B

解析:

结构化分析方法以数据流图、数据字典和加工说明等描述工具,即用直观的图和简洁的语言来描述软件系统模型,选B。

单选题


80. 结构化方法使用数据流图描述(16)。

答案:D

解析(AI 生成):

数据流图从数据传递和加工的角度刻画系统,用加工、数据流、数据存储和外部实体描述系统做什么,即系统的功能。控制流程由程序流程图或状态图描述,数据结构由数据字典、E-R图描述;加工只是图中的组成成分,不能概括数据流图的描述对象。

单选题


81. 下列中说法错误的是(17)。

答案:D

解析(AI 生成):

面向对象方法既支持过程抽象,也支持数据抽象,A正确;部分语言提供参数化抽象(如泛型),B正确;封装把属性和操作捆绑并隐藏内部细节,从而实现信息隐蔽,C正确。面向对象中最基本的模块是对象而不是类,类是同种对象的抽象,故D错误。

单选题


82. 如果某种内聚要求一个模块中包含的任务必须在同一段时间内执行,则这种内聚为(30)。

答案:A

解析:

1.巧合内聚:指一个模块内的各个处理元素之间没有任何联系。 2.逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。 3.时间内聚:把需要同时执行的动作组合在一起形成的模块。 4.通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。 5.顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须执行顺序执行,前一个功能元素的输出就是下一个功能元素的输入。 6.功能内聚:是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。

单选题


83. 发现错误能力最弱的是(34)。

答案:A

解析:

结构化测试中有语句覆盖、条件覆盖、判定覆盖(也称分支覆盖)、路径覆盖等,其中语句覆盖是发现错误能力最弱的。

单选题


84. (37)是体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。

答案:C

解析:

泛化表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般泛化关系是从子类指向父类的。 对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在同定的对应关系时,这两个对象之间为关联关系。关联体现的是两个类,或者类与接口之间语义级别的一种强依赖关系,这种关系一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。 聚合是关联关系的一种特例,体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。 组合也是关联关系的一种特例,体现的是一种con-tains-a的关系,这种关系比聚合更强,也称为强聚合;它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。

单选题


85. 下图所示为(1)设计模式,属于(2)设计模式,适用于(3)。 图片

答案:C

解析:

设计模式可以分为: 图片 选项A代理(Proxy)模式适用于在需要比较通用和复杂的对象指针代替简单的指针的时候,常见情况有:远程代理 (Remote Proxy) 为一个对象在不同地址空间提供据不代表;虚代理 (Virtual Proxy) 根据需要创建开销很大的对象;保护代理 (Protection Proxy) 控制对原 始对象的访问,用于对象应该有不同的访问权限的时候;智能指引 (Smart Reference) 取代了简单的指针,它在访问对象时执行一些附加操作。 选项B生成器/建造者(Builder)模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 选项C组合(Composite)模式。将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。 选项D观察者(Observer)模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。发生改变的对象称为观察目标,被通知的对象称为观察者。一个观察目标可以对应多个观察者。 从本题图中可看出,类Leaf表示叶子节点(部分节点),类Composite表示组合节点(整体节点),它们同时继承于父类Component,同时实现了相同的操作Operation,这使得客户对单个对象(Leaf类对象)和复合对象(Composite类对象)的使用具有一致性,试题(40)选择C选项。组合模式将对象组合成树形结构以表示“部分-整体”的层次结构关系,故试题(41)选择B选项,试题(42)选择A选项

单选题


86. 下图所示为(1)设计模式,属于(2)设计模式,适用于(3)。 图片

答案:B

解析:

设计模式可以分为: 图片 选项A代理(Proxy)模式适用于在需要比较通用和复杂的对象指针代替简单的指针的时候,常见情况有:远程代理 (Remote Proxy) 为一个对象在不同地址空间提供据不代表;虚代理 (Virtual Proxy) 根据需要创建开销很大的对象;保护代理 (Protection Proxy) 控制对原 始对象的访问,用于对象应该有不同的访问权限的时候;智能指引 (Smart Reference) 取代了简单的指针,它在访问对象时执行一些附加操作。 选项B生成器/建造者(Builder)模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 选项C组合(Composite)模式。将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。 选项D观察者(Observer)模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。发生改变的对象称为观察目标,被通知的对象称为观察者。一个观察目标可以对应多个观察者。 从本题图中可看出,类Leaf表示叶子节点(部分节点),类Composite表示组合节点(整体节点),它们同时继承于父类Component,同时实现了相同的操作Operation,这使得客户对单个对象(Leaf类对象)和复合对象(Composite类对象)的使用具有一致性,试题(40)选择C选项。组合模式将对象组合成树形结构以表示“部分-整体”的层次结构关系,故试题(41)选择B选项,试题(42)选择A选项

单选题


87. 下图所示为(1)设计模式,属于(2)设计模式,适用于(3)。 图片

答案:A

解析:

设计模式可以分为: 图片

选项A代理(Proxy)模式适用于在需要比较通用和复杂的对象指针代替简单的指针的时候,常见情况有:远程代理 (Remote Proxy) 为一个对象在不同地址空间提供据不代表;虚代理 (Virtual Proxy) 根据需要创建开销很大的对象;保护代理 (Protection Proxy) 控制对原 始对象的访问,用于对象应该有不同的访问权限的时候;智能指引 (Smart Reference) 取代了简单的指针,它在访问对象时执行一些附加操作。 选项B生成器/建造者(Builder)模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 选项C组合(Composite)模式。将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。 选项D观察者(Observer)模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。发生改变的对象称为观察目标,被通知的对象称为观察者。一个观察目标可以对应多个观察者。 从本题图中可看出,类Leaf表示叶子节点(部分节点),类Composite表示组合节点(整体节点),它们同时继承于父类Component,同时实现了相同的操作Operation,这使得客户对单个对象(Leaf类对象)和复合对象(Composite类对象)的使用具有一致性,试题(40)选择C选项。组合模式将对象组合成树形结构以表示“部分-整体”的层次结构关系,故试题(41)选择B选项,试题(42)选择A选项

单选题


88. 类是一组具有相同属性的和相同服务的对象的抽象描述,类中的每个对象都是这个类的一个(1)。类之间共享属性与服务的机制称为(2)。一个对象通过发送(3)来请求另一个对象为其服务。

答案:C

解析:

类是一组具有相同属性和相同操作的对象的集合,类中的每个对象都是这个类的一个实例。 类之间共享属性与服务的机制称为继承。一个对象通过发送消息来请求另一个对象为其服务。

单选题


89. 在结构化分析中,用数据流图描述 (1) 。当采用数据流图对一个图书馆管理系统进行分析时, (2) 是一个外部实体。

答案:B

解析:

本题考查结构化分析的基础知识。 数据流图是结构化分析的一个重要模型,描述数据在系统中如何被传送或变换,以及描 述如何对数据流进行变换的功能,用于功能建模。 数据流图中有四个要素:外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;数据流表示数据沿箭头方向的流动;加工是对数据对象的处理或变换;数据存储在数据流中起到保存数据的作用,可以是数据库文件或者任何形式的数据组织。 根据上述定义和题干说明,读者是外部实体,图书和借书证是数据流,借阅是加工。

单选题


90. 在结构化分析中,用数据流图描述 (1) 。当采用数据流图对一个图书馆管理系统进行分析时, (2) 是一个外部实体。

答案:A

解析:

本题考查结构化分析的基础知识。 数据流图是结构化分析的一个重要模型,描述数据在系统中如何被传送或变换,以及描 述如何对数据流进行变换的功能,用于功能建模。 数据流图中有四个要素:外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;数据流表示数据沿箭头方向的流动;加工是对数据对象的处理或变换;数据存储在数据流中起到保存数据的作用,可以是数据库文件或者任何形式的数据组织。 根据上述定义和题干说明,读者是外部实体,图书和借书证是数据流,借阅是加工。

单选题


91. 面向对象分析中,构建用例模型一般分为四个阶段,其中不包含 (38) 阶段。

答案:D

解析:

在OOA方法中,产生用例模型一般需要经历四个阶段: ①确定参与者。 ②确定需求用例。 ③构造用例模型。 ④记录需求用例描述。

单选题


92. 在采用结构化开发方法进行软件开发时,设计阶段接口设计主要依据需求分析阶段 的 (1) 。接口设计的任务主要是 (2) 。

答案:C

解析:

本题考查结构化分析与设计的相关知识。 结构化分析的输出是结构化设计的输入,设计活动依据分析结果进行。接口设计是描述软件与外部环境之间的交互关系,软件内模块之间的调用关系,而这些关系的依据主要是分 析阶段的数据流图。

单选题


93. 已知一个类可以处理以英制标准(英寸、英里等)表示的数据,现在需要处理一公制单位表示的数据,则可以使用 (1) 模式来解决该问题。当 (2) 时,可以使用该设计模式。

答案:A

解析:

本题考查的是设计模式的基本概念。 Adapter(适配器模式)的设计意图是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 Adapter模式适用于以下情况: 1)想使用一个已经存在的类,而它的接口不符合要求。 2)想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。 3)(仅适用于对象Adapter)想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口。对象适配器可以适配它的父类接口。

单选题


94. 已知一个类可以处理以英制标准(英寸、英里等)表示的数据,现在需要处理一公制单位表示的数据,则可以使用 (1) 模式来解决该问题。当 (2) 时,可以使用该设计模式。

答案:B

解析:

本题考查的是设计模式的基本概念。 Adapter(适配器模式)的设计意图是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 Adapter模式适用于以下情况: 1)想使用一个已经存在的类,而它的接口不符合要求。 2)想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。 3)(仅适用于对象Adapter)想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口。对象适配器可以适配它的父类接口。

单选题


95. 设计模式描述了一个出现在特定设计语境中的设计再现问题,并为它的解决方案提供了一个经过充分验证的通用方案,不同的设计模式关注解决不同的问题。例如,抽象工厂模式提供一个接口,可以创建一系列相关或相互依赖的对象,而无须指定它们具体的类,它是—种 (1) 模式; (2) 模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于 (3) 模式; (4) 模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

答案:D

解析:

本题考查设计模式的基础知识。 按照设计模式的目的进行划分,现有的设计模式可以分为创建型、结构型和行为型三种。 其中创建型模式主要包括Abstract Factory、Builder、Factory Method、Prototype、 Singleton等,结构型模式主要包括Adaptor、Bridge、Composite、Decorator、Facade、Flyweight和Proxy,行为型模型主要包括Chain of Responsibility、Command、Interpreter、 Iterator、Mediator、Memento、Observer、State、 Strategy、Template Method、Visitor等。 抽象工厂模式提供—个接口,可以创建—系列相关或相互依赖的对象,而无须指定它们具体的类,它是—种创建型模式;Bridge(桥接)模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于结构型模式;Command(命令)模式将—个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

单选题


96. 设计模式描述了一个出现在特定设计语境中的设计再现问题,并为它的解决方案提供了一个经过充分验证的通用方案,不同的设计模式关注解决不同的问题。例如,抽象工厂模式提供一个接口,可以创建一系列相关或相互依赖的对象,而无须指定它们具体的类,它是—种 (1) 模式; (2) 模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于 (3) 模式; (4) 模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

答案:A

解析:

本题考查设计模式的基础知识。 按照设计模式的目的进行划分,现有的设计模式可以分为创建型、结构型和行为型三种。 其中创建型模式主要包括Abstract Factory、Builder、Factory Method、Prototype、 Singleton等,结构型模式主要包括Adaptor、Bridge、Composite、Decorator、Facade、Flyweight和Proxy,行为型模型主要包括Chain of Responsibility、Command、Interpreter、 Iterator、Mediator、Memento、Observer、State、 Strategy、Template Method、Visitor等。 抽象工厂模式提供—个接口,可以创建—系列相关或相互依赖的对象,而无须指定它们具体的类,它是—种创建型模式;Bridge(桥接)模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于结构型模式;Command(命令)模式将—个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

单选题


97. 设计模式描述了一个出现在特定设计语境中的设计再现问题,并为它的解决方案提供了一个经过充分验证的通用方案,不同的设计模式关注解决不同的问题。例如,抽象工厂模式提供一个接口,可以创建一系列相关或相互依赖的对象,而无须指定它们具体的类,它是—种 (1) 模式; (2) 模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于 (3) 模式; (4) 模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

答案:B

解析:

本题考查设计模式的基础知识。 按照设计模式的目的进行划分,现有的设计模式可以分为创建型、结构型和行为型三种。 其中创建型模式主要包括Abstract Factory、Builder、Factory Method、Prototype、 Singleton等,结构型模式主要包括Adaptor、Bridge、Composite、Decorator、Facade、Flyweight和Proxy,行为型模型主要包括Chain of Responsibility、Command、Interpreter、 Iterator、Mediator、Memento、Observer、State、 Strategy、Template Method、Visitor等。 抽象工厂模式提供—个接口,可以创建—系列相关或相互依赖的对象,而无须指定它们具体的类,它是—种创建型模式;Bridge(桥接)模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于结构型模式;Command(命令)模式将—个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

单选题


98. 设计模式描述了一个出现在特定设计语境中的设计再现问题,并为它的解决方案提供了一个经过充分验证的通用方案,不同的设计模式关注解决不同的问题。例如,抽象工厂模式提供一个接口,可以创建一系列相关或相互依赖的对象,而无须指定它们具体的类,它是—种 (1) 模式; (2) 模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于 (3) 模式; (4) 模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

答案:A

解析:

本题考查设计模式的基础知识。 按照设计模式的目的进行划分,现有的设计模式可以分为创建型、结构型和行为型三种。 其中创建型模式主要包括Abstract Factory、Builder、Factory Method、Prototype、 Singleton等,结构型模式主要包括Adaptor、Bridge、Composite、Decorator、Facade、Flyweight和Proxy,行为型模型主要包括Chain of Responsibility、Command、Interpreter、 Iterator、Mediator、Memento、Observer、State、 Strategy、Template Method、Visitor等。 抽象工厂模式提供—个接口,可以创建—系列相关或相互依赖的对象,而无须指定它们具体的类,它是—种创建型模式;Bridge(桥接)模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于结构型模式;Command(命令)模式将—个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

单选题


99. 某软件公司欲设计一款图像处理软件,帮助用户对拍摄的照片进行后期处理。在软件需求分析阶段,公司的系统分析师识别出了如下3个关键需求: 图像处理软件需要记录用户在处理照片时所有动作,并能够支持用户动作的撤销与重做等行为。 图像处理软件需要根据当前正在处理的照片的不同特征选择合适的处理操作,处理操作与照片特征之间具有较为复杂的逻辑关系。 图像处理软件需要封装各种图像处理算法,用户能够根据需要灵活选择合适的处理算法;软件还要支持高级用户根据一定的规则添加自定义处理算法。 在系统设计阶段,公司的架构师决定采用设计模式满足上述关键需求中对系统灵活性与扩展性的要求。具体来说,为了支持灵活的撤销与重做等行为,采用(1)最为合适;为了封装图像操作与照片特征之间的复杂逻辑关系,采用(2)最为合适;为了实现图像处理算法的灵活选择与替换,采用(3)最为合适。

答案:D

解析:

本题主要考查设计模式知识。题干描述了某软件公司一款图像处理软件的需求分析与设计过程,并明确指出采用设计模式实现关键需求对系统灵活性与扩展性的要求。针对需求1,为了支持灵活的撤销与重做等行为,采用命令模式最为合适,因为命令模式可以将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,还可以对请求排队,或记录请求日志,以及支持可撤销的操作。针对需求2,为了封装图像操作与照片特征之间的复杂逻辑关系,采用状态模式最为合适,因为状态模式将每一个条件分支放入一个独立的类中,这样就可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化;针对需求3,为了实现图像处理算法的灵活选择与替换,采用策略模式最为合适,因为策略模式定义一系列的算法,把它们封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化。

单选题


100. 某软件公司欲设计一款图像处理软件,帮助用户对拍摄的照片进行后期处理。在软件需求分析阶段,公司的系统分析师识别出了如下3个关键需求: 图像处理软件需要记录用户在处理照片时所有动作,并能够支持用户动作的撤销与重做等行为。 图像处理软件需要根据当前正在处理的照片的不同特征选择合适的处理操作,处理操作与照片特征之间具有较为复杂的逻辑关系。 图像处理软件需要封装各种图像处理算法,用户能够根据需要灵活选择合适的处理算法;软件还要支持高级用户根据一定的规则添加自定义处理算法。 在系统设计阶段,公司的架构师决定采用设计模式满足上述关键需求中对系统灵活性与扩展性的要求。具体来说,为了支持灵活的撤销与重做等行为,采用(1)最为合适;为了封装图像操作与照片特征之间的复杂逻辑关系,采用(2)最为合适;为了实现图像处理算法的灵活选择与替换,采用(3)最为合适。

答案:A

解析:

本题主要考查设计模式知识。题干描述了某软件公司一款图像处理软件的需求分析与设计过程,并明确指出采用设计模式实现关键需求对系统灵活性与扩展性的要求。针对需求1,为了支持灵活的撤销与重做等行为,采用命令模式最为合适,因为命令模式可以将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,还可以对请求排队,或记录请求日志,以及支持可撤销的操作。针对需求2,为了封装图像操作与照片特征之间的复杂逻辑关系,采用状态模式最为合适,因为状态模式将每一个条件分支放入一个独立的类中,这样就可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化;针对需求3,为了实现图像处理算法的灵活选择与替换,采用策略模式最为合适,因为策略模式定义一系列的算法,把它们封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化。

单选题


101. 某软件公司欲设计一款图像处理软件,帮助用户对拍摄的照片进行后期处理。在软件需求分析阶段,公司的系统分析师识别出了如下3个关键需求: 图像处理软件需要记录用户在处理照片时所有动作,并能够支持用户动作的撤销与重做等行为。 图像处理软件需要根据当前正在处理的照片的不同特征选择合适的处理操作,处理操作与照片特征之间具有较为复杂的逻辑关系。 图像处理软件需要封装各种图像处理算法,用户能够根据需要灵活选择合适的处理算法;软件还要支持高级用户根据一定的规则添加自定义处理算法。 在系统设计阶段,公司的架构师决定采用设计模式满足上述关键需求中对系统灵活性与扩展性的要求。具体来说,为了支持灵活的撤销与重做等行为,采用(1)最为合适;为了封装图像操作与照片特征之间的复杂逻辑关系,采用(2)最为合适;为了实现图像处理算法的灵活选择与替换,采用(3)最为合适。

答案:C

解析:

本题主要考查设计模式知识。题干描述了某软件公司一款图像处理软件的需求分析与设计过程,并明确指出采用设计模式实现关键需求对系统灵活性与扩展性的要求。针对需求1,为了支持灵活的撤销与重做等行为,采用命令模式最为合适,因为命令模式可以将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,还可以对请求排队,或记录请求日志,以及支持可撤销的操作。针对需求2,为了封装图像操作与照片特征之间的复杂逻辑关系,采用状态模式最为合适,因为状态模式将每一个条件分支放入一个独立的类中,这样就可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化;针对需求3,为了实现图像处理算法的灵活选择与替换,采用策略模式最为合适,因为策略模式定义一系列的算法,把它们封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化。

单选题


102. 在结构化分析中,关于数据流图的描述正确的是 (1) 。当采用数据流图对一个在线交易系统进行分析时, (2) 是一个加工。

答案:D

解析:

本题考查结构化分析的基础知识。 数据流图是结构化分析的一个重要模型,描述数据在系统中如何被传送或变换,以及描 述如何对数据流进行变换的功能,用于功能建模。 数据流图的最上层是顶层图。 IPO图用来表达模块的输入、输出和处理过程。 数据字典用于对数据建模。 数据流图中有四个要素:外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;数据流表示数据沿箭头方向的流动;加工是对数据对象的处理或变换;数据存储在数据流中起到保存数据的作用,可以是数据库文件或者任何形式的数据组织。 根据上述定义和题干说明,客户和安全认证中心是外部实体,待付款信息是数据流,付款是加工。

单选题


103. 在结构化分析中,关于数据流图的描述正确的是 (1) 。当采用数据流图对一个在线交易系统进行分析时, (2) 是一个加工。

答案:D

解析:

本题考查结构化分析的基础知识。 数据流图是结构化分析的一个重要模型,描述数据在系统中如何被传送或变换,以及描 述如何对数据流进行变换的功能,用于功能建模。 数据流图的最上层是顶层图。 IPO图用来表达模块的输入、输出和处理过程。 数据字典用于对数据建模。 数据流图中有四个要素:外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;数据流表示数据沿箭头方向的流动;加工是对数据对象的处理或变换;数据存储在数据流中起到保存数据的作用,可以是数据库文件或者任何形式的数据组织。 根据上述定义和题干说明,客户和安全认证中心是外部实体,待付款信息是数据流,付款是加工。

单选题


104. 在UML用例图中, (38) 是参与者。

答案:A

解析:

在UML用例图中,参与者是指存在于系统外部并直接与系统进行交互的人、系统、子系统或类的外部实体的抽象,如果能触发系统反应,时钟也可以是参与者。

单选题


105. 某电商系统在采用面向对象方法进行设计时,识别出网店、商品、购物车、订单、买家、库存、支付(微信、支付宝)等类。其中,购物车与商品之间适合采用 (44) 关系。

答案:D

解析:

本题考查统一建模语言(UML)的基础知识。 购物车与商品是整体与部分的关系,购物车包含了商品,但是商品可以脱离购物车独立存在,这是一种聚合关系。

单选题


106. 以下设计模式中, (1) 模式使多个对象都有机会处理请求。将这些对象连成一条链。并沿着这条链传递该请求。直到有一个对象处理为止。从而避免请求的发送者和接收者之间的耦合关系。 (2) 模式提供一种方法顺序访问一个聚合对象中的各个元素。且不需要暴露该对象的内部表示。这两种模式均为 (3) 。

答案:A

解析:

责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 迭代器模式提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。两者都属于行为型对象模式。 解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 命令模式将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 创建型模式用于创建对象,包括工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式处理类或对象的组合,包括处理类或对象的组合 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式描述类与对象怎样交互、怎样分配职责,包括策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

单选题


107. 以下设计模式中, (1) 模式使多个对象都有机会处理请求。将这些对象连成一条链。并沿着这条链传递该请求。直到有一个对象处理为止。从而避免请求的发送者和接收者之间的耦合关系。 (2) 模式提供一种方法顺序访问一个聚合对象中的各个元素。且不需要暴露该对象的内部表示。这两种模式均为 (3) 。

答案:D

解析:

责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 迭代器模式提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。两者都属于行为型对象模式。 解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 命令模式将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 创建型模式用于创建对象,包括工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式处理类或对象的组合,包括处理类或对象的组合 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式描述类与对象怎样交互、怎样分配职责,包括策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

单选题


108. 以下设计模式中, (1) 模式使多个对象都有机会处理请求。将这些对象连成一条链。并沿着这条链传递该请求。直到有一个对象处理为止。从而避免请求的发送者和接收者之间的耦合关系。 (2) 模式提供一种方法顺序访问一个聚合对象中的各个元素。且不需要暴露该对象的内部表示。这两种模式均为 (3) 。

答案:C

解析:

责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 迭代器模式提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。两者都属于行为型对象模式。 解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 命令模式将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 创建型模式用于创建对象,包括工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式处理类或对象的组合,包括处理类或对象的组合 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式描述类与对象怎样交互、怎样分配职责,包括策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

单选题


109. 欲开放一个绘图软件,要求使用不同的绘图程序绘制不同的图形,该绘图软件的扩展性要求将不断扩充新的图形和新的绘图程序,以绘制直线和图形为例,得到如下图所示的类图,该设计采用 (1) 模式将抽象部分与其实现部分分离,使它们都可以独立的变化。其中 (2) 定义了实现类接口,该模式适用于 (3) 的情况。 图片

答案:C

解析:

本题考查设计模式的基础知识。 桥接模式模式属于结构型对象模式,可以将抽象部分与其实现部分分离,使它们都可以独立的变化。桥接模式适用于不希望在抽象和它的实现部分之间有一个固定判定关系。Drawing类是抽象类,Shape类是实现类,在桥接图中由抽象类指向实现类。

单选题


110. 欲开放一个绘图软件,要求使用不同的绘图程序绘制不同的图形,该绘图软件的扩展性要求将不断扩充新的图形和新的绘图程序,以绘制直线和图形为例,得到如下图所示的类图,该设计采用 (1) 模式将抽象部分与其实现部分分离,使它们都可以独立的变化。其中 (2) 定义了实现类接口,该模式适用于 (3) 的情况。 图片

答案:A

解析:

本题考查设计模式的基础知识。 桥接模式模式属于结构型对象模式,可以将抽象部分与其实现部分分离,使它们都可以独立的变化。桥接模式适用于不希望在抽象和它的实现部分之间有一个固定判定关系。Drawing类是抽象类,Shape类是实现类,在桥接图中由抽象类指向实现类。

单选题


111. 欲开放一个绘图软件,要求使用不同的绘图程序绘制不同的图形,该绘图软件的扩展性要求将不断扩充新的图形和新的绘图程序,以绘制直线和图形为例,得到如下图所示的类图,该设计采用 (1) 模式将抽象部分与其实现部分分离,使它们都可以独立的变化。其中 (2) 定义了实现类接口,该模式适用于 (3) 的情况。 图片

答案:A

解析:

本题考查设计模式的基础知识。 桥接模式模式属于结构型对象模式,可以将抽象部分与其实现部分分离,使它们都可以独立的变化。桥接模式适用于不希望在抽象和它的实现部分之间有一个固定判定关系。Drawing类是抽象类,Shape类是实现类,在桥接图中由抽象类指向实现类。

单选题


112. 为了有效地捕获系统需求,应采用(30)。

答案:C

解析:

软件过程是软件生命周期中的一系列相关活动,即用于开发和维护软件及相关产品的一系列活动。软件过程模型可以帮助开发团队理解开发过程,形成对开发中的活动、资源和约束的共同理解,可以根据具体情况对一个过程进行裁翦等。瀑布模型从一种非常高层的角度描述了软件开发过程中进行的活动,并且提出了要求开发人员经过的事件序列。该模型适用于项目丌始时需求已确定的情况。V模型是瀑布模型的变种,它说明测试活动是如何与分析和设计相联系的。原型模型允许开发人员快速地构造整个系统或系统的一部分以理解或澄清问题。原型的用途是获知用户的真正需求,因此原型模型可以有效地引发系统需求。螺旋模型把开发活动和风险管理结合起来,以将风险减到最小并控制风险。

单选题


113. 软件(32)是指一个系统在给定时间间隔内和给定条件下无失效运行的概率。

答案:A

解析:

软件可靠性指的是一个系统对于给定的时间间隔内、在给定条件下无失效运作的概率。软件可用性使之在给定的时间点上,一个软件系统能够按照规格说明正确运行的概率。软件可维护性是在给定的使用条件下,在规定的时间间隔内,使用规定的过程和资源完成维护活动的概率。

单选题


114. 在软件维护阶段,为软件的运行增加监控设施属于(33)维护。

答案:C

解析:

在软件开发完成交付用户使用后,就进入软件运行/维护阶段。软件维护活动根据其内容可以分为4种类型:改正性维护,为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应进行的诊断和改正错误的过程;适应性维护,由于信息技术飞速发展,软件运行.的外部环境或数据环境可能会发生变化,为了使软件适应这种变化,而修改软件的过程;完善性维护,在软件使用过程中,用户往往会对软件提出新的功能与性能要求,为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性而进行的维护活动;预防性维护是为了提高软件的可维护性和可靠性等,为以后进一步改进软件打下良好基础而进行的维护工作。

单选题


115. 下图所示的逻辑流,最少需要(34)个测试用例可实现语句覆盖。 图片

答案:A

解析:

语句覆盖是一种白盒测试技术,指的是设计若干测试用例,运行被测程序,使得每一个可执行语句至少执行一次。题中的逻辑流的输入是一个数组a,只要存在某个a[i]>a[j]的情况,则该测试用例下可以覆盖所有的可执行语句,因此至少需要1个测试用例即可。

单选题


116. 在改正当前故障的同时可能会引入新的故障,这时需要进行(35)。

答案:C

解析:

功能测试检查软件是否能实现需求中指定的那些功能。性能测试是测试软件的安全性、精确性、速度和可靠性。回归测试用于识别在改正当前故障的同时可能会引入新的故障。验收测试是客户对系统进行测试以验证软件系统是否符合他们对需求的理解。

单选题


117. UML的设计视图包含了类、接口和协作,其中,设计视图的静态方面由(1)和(2)表现;动态方面由交互图、(3)表现。

答案:A

解析:

通常是用一组视图反映系统的各个方面,以完整地描述系统,每个视图代表系统描述中的一个抽象,显示系统中的一个特定的方面。UML2.0中提供了多种图形,从静态和动态两个方面表现系统视图。 类图展现了一组对象、接口、协作和它们之间的关系。对象图展现了一组对象以及其之间的关系,描述了在类图中所建立的事物的实例的静态快照。序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。通信图和序列图同构,强调收发消息的对象的结构组织。状态图展现了一个状态机,由状态、转换、事件和活动组成,它关注系统的动态视图,强调对象行为的事件顺序。活动图是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程,它专注于系统的动态视图。序列图、通信图、交互图和定时图均被称为交互图,它们用于对系统的动态方面进行建模。

单选题


118. UML的设计视图包含了类、接口和协作,其中,设计视图的静态方面由(1)和(2)表现;动态方面由交互图、(3)表现。

答案:B

解析:

通常是用一组视图反映系统的各个方面,以完整地描述系统,每个视图代表系统描述中的一个抽象,显示系统中的一个特定的方面。UML2.0中提供了多种图形,从静态和动态两个方面表现系统视图。 类图展现了一组对象、接口、协作和它们之间的关系。对象图展现了一组对象以及其之间的关系,描述了在类图中所建立的事物的实例的静态快照。序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。通信图和序列图同构,强调收发消息的对象的结构组织。状态图展现了一个状态机,由状态、转换、事件和活动组成,它关注系统的动态视图,强调对象行为的事件顺序。活动图是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程,它专注于系统的动态视图。序列图、通信图、交互图和定时图均被称为交互图,它们用于对系统的动态方面进行建模。

单选题


119. UML的设计视图包含了类、接口和协作,其中,设计视图的静态方面由(1)和(2)表现;动态方面由交互图、(3)表现。

答案:D

解析:

通常是用一组视图反映系统的各个方面,以完整地描述系统,每个视图代表系统描述中的一个抽象,显示系统中的一个特定的方面。UML2.0中提供了多种图形,从静态和动态两个方面表现系统视图。 类图展现了一组对象、接口、协作和它们之间的关系。对象图展现了一组对象以及其之间的关系,描述了在类图中所建立的事物的实例的静态快照。序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。通信图和序列图同构,强调收发消息的对象的结构组织。状态图展现了一个状态机,由状态、转换、事件和活动组成,它关注系统的动态视图,强调对象行为的事件顺序。活动图是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程,它专注于系统的动态视图。序列图、通信图、交互图和定时图均被称为交互图,它们用于对系统的动态方面进行建模。

单选题


120. 设计模式(1)将抽象部分与其实现部分相分离,使它们都可以独立地变化。下图为该设计模式的类图,其中,(2)用于定义实现部分的接口。 图片

答案:A

解析:

本题考查设计模式的基本知识。 Bridge(桥接)模式将对象的抽象和其实现分离,从而可以独立地改变它们,抽象类定义对该抽象的接口,如上图中Implementor,而具体的子类则用不同方式加以实现,如ConcretelmplementorA和ConcreteImplementorB。Composite(组合)模式是结构型对象模式的一个实例。它描述了如何构造一个类层次式结构,这一结构由两种类型的对象所对应的类构成,其中的组合对象使得用户可以组合基元对象以及其他的组合对象,从而形成任意复杂的结构。Facade(外观)模式则描述了如何用单个对象表示整个子系统。Singleton(单例)模式保证一个类只产生唯一的一个实例。

单选题


121. 设计模式(1)将抽象部分与其实现部分相分离,使它们都可以独立地变化。下图为该设计模式的类图,其中,(2)用于定义实现部分的接口。 图片

答案:D

解析:

本题考查设计模式的基本知识。 Bridge(桥接)模式将对象的抽象和其实现分离,从而可以独立地改变它们,抽象类定义对该抽象的接口,如上图中Implementor,而具体的子类则用不同方式加以实现,如ConcretelmplementorA和ConcreteImplementorB。Composite(组合)模式是结构型对象模式的一个实例。它描述了如何构造一个类层次式结构,这一结构由两种类型的对象所对应的类构成,其中的组合对象使得用户可以组合基元对象以及其他的组合对象,从而形成任意复杂的结构。Facade(外观)模式则描述了如何用单个对象表示整个子系统。Singleton(单例)模式保证一个类只产生唯一的一个实例。

单选题


122. 在系统验收测试中,(1)是在一个模拟的环境下使用模拟数据运行系统;(2) 是在一个实际环境中使用真实数据运行系统。

答案:A

解析:

系统验收测试是最终用户使用真实数据一段时间后进行的最终系统测试;它给最终用户、管理人员和信息系统操作管理人员最后一次机会决定接收或者拒绝系统。系统验收测试是一种详细测试,涉及3个层面的验收测试:验证测试、确认测试和审计测试。 (1)验证测试是在一个模拟环境下使用模拟数据运行系统,它主要寻找错误和遗漏。 (2) 确认测试在一个实际环境中使用真实数据运行系统。在确认测试过程中,可以 测试系统性能、峰值负载处理性能、方法和程序测试、备份和恢复测试等。 (3)审计测试证实系统没有错误并准备好了可以运行。

单选题


123. 在系统验收测试中,(1)是在一个模拟的环境下使用模拟数据运行系统;(2) 是在一个实际环境中使用真实数据运行系统。

答案:C

解析:

系统验收测试是最终用户使用真实数据一段时间后进行的最终系统测试;它给最终用户、管理人员和信息系统操作管理人员最后一次机会决定接收或者拒绝系统。系统验收测试是一种详细测试,涉及3个层面的验收测试:验证测试、确认测试和审计测试。 (1)验证测试是在一个模拟环境下使用模拟数据运行系统,它主要寻找错误和遗漏。 (2) 确认测试在一个实际环境中使用真实数据运行系统。在确认测试过程中,可以 测试系统性能、峰值负载处理性能、方法和程序测试、备份和恢复测试等。 (3)审计测试证实系统没有错误并准备好了可以运行。

单选题


124. 在面向对象技术中,对象具有以下特性:(37)。 ①清晰的边界 ②良好定义的行为 ③确定的位置和数量 ④可扩展性

答案:D

解析:

在面向对象技术中,对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。 通常,对象是具有定义良好的边界并将状态和行为封装于一体的实体。其中,状态表示属性和关系,行为表示操作和方法。对象是类的实例。对象具有以下特性:①清晰的边界;②良好定义的行为;③可扩展性等。

单选题


125. 在面向对象技术中,(1)说明一个对象具有多种形态,(2)定义超类与子类之间的关系。

答案:D

解析:

在面向对象技术中,多态性是指作用于不同的对象的同一个操作可以有不同的解释,从而产生不同的执行结果。通俗地说,具有相似功能的不同函数使用同一个函数名来实现,从而可以使用相同的调用方法来调用这些具有不同功能的同名函数。多态说明一个对象具有多种形态。 继承表示类之间的层次关系,使得某类对象可以沿用另外一类对象的特征和能力。继承描述了超类与子类之间的一般关系。

单选题


126. 在面向对象技术中,(1)说明一个对象具有多种形态,(2)定义超类与子类之间的关系。

答案:A

解析:

在面向对象技术中,多态性是指作用于不同的对象的同一个操作可以有不同的解释,从而产生不同的执行结果。通俗地说,具有相似功能的不同函数使用同一个函数名来实现,从而可以使用相同的调用方法来调用这些具有不同功能的同名函数。多态说明一个对象具有多种形态。 继承表示类之间的层次关系,使得某类对象可以沿用另外一类对象的特征和能力。继承描述了超类与子类之间的一般关系。

单选题


127. 每种设计模式都有特定的意图。(1)模式使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使这个对象看起来如同修改了它的类。下图是采用该模式的有关TCP连接的结构图实例。该模式的核心思想是引入抽象类(2)来表示TCP连接的状态,声明不同操作状态的公共接口,其子类实现与特定状态相关的行为。当一个(3)对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。 图片

答案:D

解析:

状态(State)模式使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使这个对象看起来如同修改了它的类。该模式的主要适用场合有:①一个对象的行为取决于其状态,且它必须在运行时刻根据状态改变其行为;②一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。该状态通常可用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。图1-6是采用状态(State)模式的有关TCP连接的结构图实例。该模式的核心思想是引入抽象类TCPState来表示TCP连接的状态,声明不同操作状态的公共接口,其子类实现与特定状态相关的行为。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。 适配器(Adapter)模式是一种类对象结构型模式。通过将一个的类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 命令(Command)模式的设计意图是:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 Observer(观察者)模式的设计意图是:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

单选题


128. 每种设计模式都有特定的意图。(1)模式使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使这个对象看起来如同修改了它的类。下图是采用该模式的有关TCP连接的结构图实例。该模式的核心思想是引入抽象类(2)来表示TCP连接的状态,声明不同操作状态的公共接口,其子类实现与特定状态相关的行为。当一个(3)对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。 图片

答案:C

解析:

状态(State)模式使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使这个对象看起来如同修改了它的类。该模式的主要适用场合有:①一个对象的行为取决于其状态,且它必须在运行时刻根据状态改变其行为;②一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。该状态通常可用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。 图1-6是采用状态(State)模式的有关TCP连接的结构图实例。该模式的核心思想是引入抽象类TCPState来表示TCP连接的状态,声明不同操作状态的公共接口,其子类实现与特定状态相关的行为。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。 适配器(Adapter)模式是一种类对象结构型模式。通过将一个的类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 命令(Command)模式的设计意图是:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 Observer(观察者)模式的设计意图是:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

单选题


129. 每种设计模式都有特定的意图。(1)模式使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使这个对象看起来如同修改了它的类。下图是采用该模式的有关TCP连接的结构图实例。该模式的核心思想是引入抽象类(2)来表示TCP连接的状态,声明不同操作状态的公共接口,其子类实现与特定状态相关的行为。当一个(3)对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。 图片

答案:A

解析:

状态(State)模式使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使这个对象看起来如同修改了它的类。该模式的主要适用场合有:①一个对象的行为取决于其状态,且它必须在运行时刻根据状态改变其行为;②一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。该状态通常可用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。 图1-6是采用状态(State)模式的有关TCP连接的结构图实例。该模式的核心思想是引入抽象类TCPState来表示TCP连接的状态,声明不同操作状态的公共接口,其子类实现与特定状态相关的行为。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态做出不同的反应。 适配器(Adapter)模式是一种类对象结构型模式。通过将一个的类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 命令(Command)模式的设计意图是:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 Observer(观察者)模式的设计意图是:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

单选题


130. 欲使类A的所有使用者都使用A的同一个实例,应(43)。

答案:C

解析:

单例模式(Singleton)是一种创建型模式,它抽象了实例化过程,可帮助一个系统独立于如何创建、组合和表示它的对象。其意图是保证一个类仅有一个实例(注意:不是保证一个类的方法只能被一个唯一的类调用),并提供一个访问它的全局访问点。对于系统中的某些类,只有一个实例是很重要的。依题意,欲使类A的所有使用者都使用A的同一个实例,应将单例(Singleton)模式应用于A。

单选题


131. UML中接口可用于(44)。

答案:D

解析:

接口就是对操作规范的说明,它只是说明操作应该做什么,但没有定义操作如何做。它可以被理解为类的一个特例,只规定实现此接口的类的操作方法,而将真正的实现细节交由实现该接口的类去完成。UML中接口可用于声明对象类所需要的服务。

单选题


132. 下图所示的活动图中可以同时执行的活动是(45)。 图片

答案:B

解析:

活动图是一种特殊的状态图,描述需要做的活动、执行这些活动的顺序(多为并行的)及工作流(完成工作所需要的步骤)。在图所示的活动图中,活动a22、a33和a44可以同时执行;活动a55和a66可以同时执行。

单选题


133. 31、【51CTO学堂-学员回忆版】若模块A通过控制参数来传递信息给模块B,从而确定执行模块B中的哪部分语句。则这两个模块的耦合类型是(31)耦合

答案:C

解析:

数据耦合:若一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数,公共数据结构或外部变量)来交换输入、输出信息。 标记耦合:模块通过参数表传递记录信息,两个以上的模块都需要其余某一数据结构子结构时,不使用全局变量方式,而是使用记录传递的方式。 控制耦合:一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。 内容耦合:一个模块直接访问另一个模块的内部数据,或者通过非正常入口转入另一个模块内部,或者两个模块有一部分程序代码重叠,又或者一个模块有多种入口。

单选题


134. 32、【51CTO学堂-学员回忆版】在设计中实现可移植性设计的规则不包括(32)

答案:B

解析(AI 生成):

可移植性要求软件尽量少依赖具体软硬件环境。将设备相关程序与设备无关程序分开、采用平台无关的程序设计语言、不使用依赖某一平台的类库,都是常用规则;而使用特定环境的专用功能会把软件绑定到该环境,削弱可移植性,故不属于可移植性设计规则。

单选题


135. 33、【51CTO学堂-学员回忆版】以下关于管道-过滤器软件体系结构风格优点的叙述中,不正确的是(33)

答案:D

解析:

管道过滤器属于数据流架构风格,这种架构风格的特点就是数据交由系统后由系统中的构件进行处理,一个构件处理完毕后将数据交由后续构件继续处理,这个过程是顺序的不存在你来我往的“交互”。

单选题


136. 34-35、【51CTO学堂-学员回忆版】以下流程图中,至少需要(34)个测试用例才能覆盖所有路径。采用 McCabe方法计算程序复杂度为(35) 图片

答案:D

解析(AI 生成):

覆盖所有路径要求流程图中每条独立路径至少执行一次。按各判定结点的真假组合展开,该流程图共有6条不同的执行路径,故至少需要6个测试用例;取3、4、5个都会遗漏部分路径组合,无法实现路径全覆盖。

单选题


137. 34-35、【51CTO学堂-学员回忆版】以下流程图中,至少需要(34)个测试用例才能覆盖所有路径。采用 McCabe方法计算程序复杂度为(35) 图片

答案:C

解析:

McCabe计算公式为m-n+2,其中m为边数,n为节点数数,m=13,n=11,由此算出环路复杂度为4.

单选题


138. 37-38、【51CTO学堂-学员回忆版】采用面向对象方法开发学生成绩管理系统,学生的姓名、性别、出生日期、期末考试成绩、查看成绩操作均被(37)在学生对象中。系统中定义不同类,不同类的对象之间通过(38)进行通信。

答案:A

解析(AI 生成):

封装把对象的属性(姓名、性别、出生日期、期末成绩)和操作(查看成绩)捆绑在一起,对外只暴露必要接口、隐藏内部实现,这正是封装的含意。继承用于复用父类特征,多态指同一消息在不同对象上产生不同响应,均不描述数据与操作的捆绑。

单选题


139. 39、【51CTO学堂-学员回忆版】对采用面向对象方法开发的系统进行测试时,通常从不同层次进行测试。测试类中定义的每个方法属于(39)层。

答案:A

解析:

算法层:用于测试类中定义的每个方法,基本相当于传统软件测试中的单元测试。 类层:用于测试封装在同一个类中的所有方法与属性之间的相互作用。在面向对象软件中,类是基本模板,因此可认为这是面向对象测试中所特有的模块测试。 模板层:用于测试一组协同工作的类之间的相互作用。大体上相当于传统软件测试中的集成测试。但这个也有面向对象的特点,如对象之间通过发送消息相互作用。 系统层:把各个子系统组织完成的面向对象的软件系统,在组装过程中进行测试。

单选题


140. 40、【51CTO学堂-学员回忆版】 在面向对象系统设计中,如果重用了一个包中的某个类,那么就要重用该包中所的类,这属于(40)原则

答案:B

解析(AI 生成):

共同重用原则指包的使用者重用了包中一个类,就应重用包中全部类,即包内类应共同复用、彼此不可分割。共同封闭原则强调改动集中在同一包内;开放-封闭原则指对扩展开放、对修改关闭;接口分离原则指客户端只依赖自己需要的接口。故题干对应共同重用。

单选题


141. 43、【51CTO学堂-学员回忆版】UML包图展现由模型本身分解而成的组织单元及其依赖关系,以下关于包图的叙述中,不正确的是(43)。

答案:B

解析(AI 生成):

包可以包含类、接口、构件、节点等元素,也可以嵌套其他包;同一包内元素不能重名,这些都是包图的常规规则。一个元素在模型中只能属于一个包,虽然可被多个包引用或导入,但并不归多个包所有,因此元素可被多个包拥有的说法不正确。

单选题


142. 44-45、【51CTO学堂-学员回忆版】在某招聘系统中,要求实现求职简历自动生成功能。简历的基本内容包括求职xx的姓名、性别、年龄及工作经历等。希望每份简历中的工作经历有所不同,并尽量减少xx序中的重复代码。针对此需求,设计如下所示类图。该设计采用了(44)模式,由 xx实例指定创建对象的种类,声明一个复制自身的接口,并且通过复制这些 Resume xx WorkExperience 的对象来创建新的对象。该模式属于(45)模式。 图片

答案:D

解析(AI 生成):

题干强调声明复制自身的接口,并通过复制简历与工作经历对象创建新对象,正是原型模式:用原型实例指定创建对象的种类,克隆原型得到新对象,避免重复初始化代码。单例保证唯一实例,抽象工厂创建产品族,生成器分步构建复杂对象。

单选题


143. 44-45、【51CTO学堂-学员回忆版】在某招聘系统中,要求实现求职简历自动生成功能。简历的基本内容包括求职xx的姓名、性别、年龄及工作经历等。希望每份简历中的工作经历有所不同,并尽量减少xx序中的重复代码。针对此需求,设计如下所示类图。该设计采用了(44)模式,由 xx实例指定创建对象的种类,声明一个复制自身的接口,并且通过复制这些 Resume xx WorkExperience 的对象来创建新的对象。该模式属于(45)模式。 图片

答案:D

解析(AI 生成):

原型模式属于创建型模式。创建型模式关注对象的创建机制,包括单例、工厂方法、抽象工厂、建造者和原型;结构型关注类与对象的组合,如适配器、组合、装饰;行为型关注对象间的职责分配与交互,如策略、观察者、命令。故应选创建型。

单选题


144. 46-47、【51CTO学堂-学员回忆版】某旅游公司欲开发一套软件系统,要求能根据季节,节假日等推出不同的旅行定价包,如淡季打折、一口价等。实现该要求适合采用(46)模式,该模式的主要意图是(47)

答案:A

解析(AI 生成):

定价随季节、节假日等条件在淡季打折、一口价等多种算法间切换,算法可相互替换,适合策略模式:把每种定价算法封装成独立类,客户端持有抽象策略、运行时选用。状态模式由对象内部状态驱动行为变化,观察者用于状态变化时通知依赖对象,命令用于封装请求。

单选题


145. 46-47、【51CTO学堂-学员回忆版】某旅游公司欲开发一套软件系统,要求能根据季节,节假日等推出不同的旅行定价包,如淡季打折、一口价等。实现该要求适合采用(46)模式,该模式的主要意图是(47)

答案:D

解析(AI 生成):

策略模式的意图是定义一系列算法,把它们分别封装起来并使它们可以相互替换,使算法变化独立于使用它的客户。A是命令模式,B是观察者模式,C是状态模式,三者分别强调请求封装、状态变化时通知依赖对象和内部状态改变行为,均非策略模式的意图。

单选题


146. 17-18、【51CTO学堂-学员回忆版】下图是一个软件项目的活动图,其中顶点表示项目里程碑,连接顶点的边表示活动,则里程碑(1)在关键路径上,关键路径长度为(2) 图片

答案:B

解析(AI 生成):

关键路径是活动图中总持续时间最长的路径,决定项目的最短工期。关键路径上各里程碑的时差为零,最早开始时间与最迟开始时间相等,任何延误都会直接推迟项目完成。逐点比较各里程碑的这两个时间,E二者相等,故E在关键路径上。

单选题


147. ● UML,序列图用于建模 ( 41 ) ,如下所示序列图中,可能的消息顺序是 ( 42 )。 图片

答案:D

解析:

选项A是指用例图,用例图显示了一组用例、参与者以及它们之间的关系,可以使用用例图展示系统具有的功能,可以理解为系统提供的服务。选项B对象图展示某一时刻一组对象以及它们之间的关系。选项C活动图展示了系统内从一个活动到另一个活动的流程。选项D序列图描述了以时间顺序组织的对象之间的交互活动。

单选题


148. ● UML,序列图用于建模 ( 41 ) ,如下所示序列图中,可能的消息顺序是 ( 42 )。 图片

答案:C

解析:

根据图中的标注loop(循环)是在消息a与消息b的处进行的。因此消息c的顺序排列在循环结束之后。

单选题


149. 【学员回忆版】在设计模块 M 和模块N 时, ( )是最佳的设计。

答案:C

解析:

模块设计应遵循“高内聚、低耦合”的原则。选项C属于数据耦合,模块间仅通过简单数据参数交换信息,耦合度最低,是最佳设计;选项A属于通信耦合(或间接耦合),耦合度高于数据耦合;选项B属于公共耦合,耦合度较高;选项D属于内容耦合,耦合度最高,应避免。因此正确答案为C。

单选题


150. 软件交付之后,由于软硬件环境发生变化而对软件进行修改的行为属于( )维护。

答案:B

解析:

软件维护的内容,主要可以概括为以下四类: 一、改正性维护:改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。 二、适应性维护:使用软件适应信息技术变化和管理需求变化而进行的修改。 三、完善性维护:为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。 四、预防性维护:预防性维护为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。

单选题


151. 软件测试过程中的系统测试主要是为了发现( )阶段的问题。

答案:D

解析:

系统测试的目的在于通过与系统的需求定义做比较,发现软件与系统定义不符合或与之矛盾的地方,以验证软件系统的功能和性能满足指定的要求。

单选题


152. 瀑布模型的主要特点是( )。

答案:C

解析:

瀑布模型是以文档为驱动的模型,适合需求明确的软件项目的模型,优点是容易理解,管理成本低,但缺乏灵活性,难以适应需求的变化,如果软件在后期出现需求变化,整个系统需要从头开始。

单选题


153. UML类图在软件建模时,给出软件系统的一种静态设计视图,用( )关系可明确表示两类事物之间存在的特殊/一般关系。

答案:C

解析:

聚合关系:整体与部分生命周期不同,属于关联关系。 依赖关系:一个事物发生变化影响另一个事物。 泛化关系:表示两类事物之间的特殊/一般关系。 实现关系:接口和类的关系。

单选题


154. 面向对象软件从不同层次进行测试。( )层测试类中定义的每个方法,相当于传统软件测试中的单元测试。

答案:D

解析:

面向对象测试分为四个层次执行: 算法层:测试类中定义的每个方法,基本相当于传统软件测试的单元测试。 类层:测试封装在同一个类中的所有方法与属性之间的相互作用。可以认为是面向对象测试中特有的模块测试。 模板层:测试一组协调工作的类之间的相互作用。大体上相当于传统软件测试中的集成测试。 系统层:把各个子系统组装成完整的面向对象软件系统。

单选题


155. 进行面向对象系统设计时,若存在包A依赖于包B,包B依赖于包C,包C依赖于包A,则此设计违反了( )原则。

答案:D

解析:

稳定抽象原则:此原则强调的是包的抽象程度与其稳定程度一致。 稳定依赖原则:此原则要求包之间的依赖关系都应该是稳定方向依赖的,即包要依赖的包要比自己更具有稳定性。 依赖倒置原则:此原则强调的是程序应该依赖于抽象接口,而不是具体的实现,从而降低客户与实现模块间的耦合。 无环依赖:这个原则明确指出,在组件的依赖关系在图中不允许存在环。从给出的设计描述中,包A、包B、包C之间的依赖关系形成了一个环,这直接违反了无环依赖原则。

单选题


156. 进行面向对象设计时,以下( )不能作为继承的类型。

答案:B

解析(AI 生成):

继承按父类数目和层次结构可分为单重继承、多重继承和层次继承:单重继承只有一个父类,多重继承有多个父类,层次继承是多个子类共享同一父类的分层结构。分布式继承并非继承的分类,只是干扰项,不能作为继承的类型。

单选题


157. 以下哪个活动可以提高软件质量( )

答案:C

解析:

需求分析:需求分析是软件开发生命周期的重要阶段,它确保了开发团队对客户需求有清晰的理解。然而,虽然好的需求分析是高质量软件的基础,但它本身并不直接提高软件质量。它更多地是预防质量问题的一个步骤。 软件开发:软件开发是构建软件系统的过程,但它本身并不直接等同于提高软件质量。在开发过程中,如果没有遵循良好的编程实践和质量保证措施,那么开发出的软件质量可能会受到影响。 软件测试:软件测试是评估软件质量的关键活动。通过测试,可以发现软件中的缺陷、错误和不符合需求的地方,从而帮助开发团队修复这些问题,提高软件质量。 技术评审:技术评审是对软件设计、代码或其他技术文档进行审查的过程,以发现潜在的问题并改进它们。虽然技术评审可以提高软件质量,但它通常是一个预防性的措施,而不是直接提高现有软件质量的活动。

单选题


158. 数据流图中的组成不包括( )。

答案:D

解析:

数据流图由数据流、外部实体、数据加工和数据存储组成。 数据流(Data Flow):数据流是数据在系统中从一个地方流向另一个地方的路径。它表示数据从数据源流向数据接收者(如处理过程、数据存储或另一个数据源)的方向。数据流通常用带箭头的线段表示。 外部实体(External Entity):数据源是数据的起点,即数据的来源。它可以是用户、外部系统、设备或其他外部因素。在数据流图中,数据源通常用矩形表示,并标有相应的名称。 数据加工(Data Process):数据加工是数据流图中对数据进行操作或变换的部分。它表示数据在系统内部如何被处理或转换。在数据流图中,处理过程用圆形或圆角矩形表示,并标有相应的名称和操作描述。 数据存储(Data Storage):数据存储是系统中用于存储数据的部分。它可以是数据库、文件、内存中的数据等。在数据流图中,数据存储用两根平行线表示,并标有相应的名称。

单选题


159. 下列测试方法中,( )覆盖程度最高。

答案:C

解析:

A、语句覆盖(Statement Coverage):也称为行覆盖,它关注的是程序中每一行代码是否至少被执行一次。这是最基本的测试覆盖标准,但往往只能发现简单的错误。 B、判定覆盖(Decision Coverage):也称为分支覆盖,它要求程序中的每一个判定(例如if-else语句)的每一种可能结果(真或假)都至少发生一次。这比语句覆盖更全面,但可能仍会遗漏一些错误。 C、路径覆盖(Path Coverage):它要求测试覆盖程序中所有可能的执行路径。这通常意味着测试需要遍历程序中所有可能的条件组合。路径覆盖是这些选项中最全面的测试覆盖方法,因为它考虑了程序中所有可能的执行路径。 D、条件覆盖(Condition Coverage):它要求程序中的每一个条件(例如if语句中的条件)的每一种可能结果(真或假)都至少发生一次。虽然这比判定覆盖更全面,但它仍然可能遗漏一些错误,因为它不保证所有条件的组合都被测试到。 综上所述,路径覆盖是这些测试方法中覆盖程度最高的。因此,正确答案是C、路径覆盖。

单选题


160. 某个软件,不符合公司的战略决策,属于( )风险

答案:A

解析:

A、商业风险:商业风险通常与公司的战略决策、市场环境、竞争对手等有关。如果一个软件不符合公司的战略决策,那么它很可能会对公司的商业目标产生负面影响,导致商业风险。 B、项目风险:项目风险指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。这些风险可能会影响项目计划的实现,如果项目风险变成现实,就有可能影响项目的进度,增加项目的成本,甚至使软件项目不能实现。 C、开发风险:开发风险主要涉及软件开发过程中的技术问题、资源不足、时间延误等。 D、人员风险:人员风险通常与员工的技能、态度、离职率等有关。 因此,正确答案选 A。

单选题


161. 软件设计的主要任务是设计软件的结构、过程和模块,其中软件结构设计的主要任务是要确定( ) 。

答案:C

解析:

软件设计通常可分为概要设计(软件结构设计)和详细设计。概要设计的任务是确定软件系统的结构、进行模块划分、确定每个模块的功能、接口以及模块间的调用关系。设计软件系统的结构,主要任务是确定模块间的组成关系。

单选题


162. 下面关于数据流图中加工的描述正确的是( )。

答案:C

解析:

根据数据流图中加工的定义,加工是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出,选C。

单选题


163. 51CTO公司欲开发一个软件系统的在线文档帮助系统,用户可以在任何一个查询上下文中输入查询关键字,如果当前查询环境下没有相关内容,则系统会将查询按照一定的顺序转发给其他查询环境。基于上述需求,采用( )最为合适。

答案:A

解析:

责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。在线文档帮助系统需要根据用户的查询需求查询关键字,如果当前查询环境下没有相关内容,则系统会将查询按照一定的顺序转发给其他查询环境。对此要求责任链模式最为合适。

单选题


164. 某软件公司欲开发一个在线交易系统。为了能够精确表达用户与系统的复杂交互过程,应该采用UML的( )进行交互过程建模。

答案:B

解析:

类图、对象图和部署图都属于结构类模型图,用于描述系统应用的静态结构。而序列图属于行为类模型图,用于描述系统动态行为的各个方面。

单选题


165. 用例从用户角度描述系统的行为。用例之间可以存在一定的关系。在“某图书馆管理系统”用例模型中,所有用户使用系统之前必须通过“身份验证”。“身份验证”可以有“密码验证”和“智能卡验证”两种方式。“身份验证”、“密码验证”和“智能卡验证”之间是( )关系。

答案:D

解析:

通常在用例图中可使用关联(Association)、包含(Include)、扩展(Extend)和泛化(Generalization)等4种关系。 当参与者与用例之间进行交互时,用例和参与者之间拥有选项A的“关联”关系。 在一个复杂系统中,不同的用例之间可能存在一些相同的行为,可将这些相同的行为提取出来单独组成一个用例。当其他用例使用该用例时,用例之间便形成了选项B的“包含”关系。 在用例的执行过程中,可能会出现异常行为,也可能会在不同的流程分支中选择执行。这时可以将异常行为或可选分支抽象成一个单独的扩展用例,它与主用例之间形成选项C的“扩展”关系。 选项D的“泛化(Generalization)”关系是描述用例之间一般与特殊关系的,不同的子用例代表了父用例的不同实现方法。“密码验证”和“智能卡验证”是“身份验证”中的两种不同的实现方法。它们与“身份验证”之间是泛化关系。

单选题


166. 划分软件生命周期阶段必须遵循的基本原则不包括 ( ) 。

答案:A

解析:

划分软件生命周期阶段必须遵循一条基本的原则,就是各阶段的任务应尽可能地相对独立,同一阶段各项任务的性质应尽可能地相同,从而达到降低每个阶段任务的复杂度,减少不同阶段任务之间的联系,有利于软件工程的组织和管理。

单选题


167. (1) 中的每个软件配置项的需求到其涉及的系统(或子系统)需求都要具有双向可追踪性。检查设计文档、代码、测试用例等工作成果是否都能在其中找到出处属于 (2) 。

答案:B

解析:

SRS 中的每个软件配置项的需求到其涉及的系统(或子系统)需求都要具有双向可追踪性。双向跟踪包括正向跟踪和反向跟踪,正向跟踪是指检查 SRS 中的每个需求是否都能在后继工作成果中找到对应点;反向跟踪也称为逆向跟踪,是指检查设计文档、代码、测试用例等工作成果是否都能在 SRS 中找到出处。

完形类单选题


168. 在设计模式中, (1) 将一个接口转换成客户希望的另一个接口,从而使接口不兼容的那些类可以一起工作。 (2) 动态地给一个对象增加功能,这些功能可以再动态地被撤销。 (3) 支持以不同的方式遍历一个聚合对象。

答案:C

解析:

适配器模式将一个接口转换成客户希望的另一个接口,从而使接口不兼容的那些类可以一起工作。 通过装饰模式,可以在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;当需要动态地给一个对象增加功能,这些功能可以再动态地被撤销。 命令模式是一种对象的行为型模式,类似于传统程序设计方法中的回调机制,它将一个请求封装为一个对象,从而使得可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是对命令的封装,将发出命令的责任和执行命令的责任分割开,委派给不同的对象,以实现发送者和接收者完全解耦,提供更大的灵活性和可扩展性。 迭代器模式支持以不同的方式遍历一个聚合对象,复杂的聚合可用多种方法来进行遍历。

完形类单选题


169. 在详细设计结束后,以下选项中不是重点审查内容的是()。

答案:A

解析:

本题考查详细设计相关知识。数据流图主要用于系统分析阶段,特别是在需求分析时,描述数据在系统中的流向和变换。在详细设计阶段,详细设计注重于具体的模块功能实现,如算法、数据结构和用户界面等。因此BCD不符合题意,本题选择A选项。

单选题


170. 以下软件工程行为中,()不能提高软件的可维护性

答案:D

解析:

本题考查软件可维护性相关知识。 加强模块间的联系不能提高软件的可维护性。最佳的模块设计原则是高内聚低耦合,加强模块间的联系会与之违背,使得维护和修改变得更加困难。ABC三项均可以一定程度提高软件的可维护性,本题选择D选项。

单选题


171. “开发了一个没有人真正需要的软件系统”属于()风险。

答案:A

解析:

本题考查项目管理相关知识。 商业风险:商业风险涉及市场需求、产品定位、销售策略等与市场接受度直接相关的因素。在这个案例中,"没有人真正需要的软件系统"直接指出了产品的市场需求问题,即开发的产品缺乏明确的市场定位或用户需求。这种风险与项目的商业成功紧密相连,因此为商业风险。管理风险:管理风险通常与项目管理的各个方面有关,如进度控制、资源分配、团队协作等。技术风险:技术风险涉及技术实现的难度、技术可行性、技术更新速度等。项目风险:项目风险是一个更宽泛的概念,可能包括上述所有类型的风险以及项目执行过程中的其他不确定性。然而在这,我们可以更具体地指出风险类型为商业风险。综上所述,开发了一个没有人真正需要的软件系统最直接地反映了市场需求的问题,这与项目的商业成功直接相关。因此,本题选择A选项。

单选题


172. 对面向对象软件从不同层次进行测试。测试一组协同工作的类之间的相互作用,属于()。

答案:C

解析:

本题考查面向对象测试相关知识。 对面向对象软件的测试可分为4个层次进行。 (1)算法层。测试类中定义的每个方法,基本上相当于传统软件测试中的单元测试。 (2)类层。测试封装在同一个类中的所有方法与属性之间的相互作用。在面向对象软件中类是基本模块,因此可以认为这是面向对象测试中所特有的模块测试。 (3)模板层。测试一组协同工作的类之间的相互作用。大体上相当于传统软件测试中的集成测试,但是也有面向对象软件的特点(例如,对象之间通过发送消息相互作用)。 (4)系统层。把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试。

单选题


173. 对业务流程进行建模的最适合的UML图是()。

答案:B

解析:

本题考查UML知识。 用例图展现了一组用例、参与者以及它们之前的关系。用例图是外部用户(被称为参与者)所能观察到的系统功能的模型图。 活动图用于描述系统中各种活动的执行顺序,可以清晰地展示从一个活动到另一个活动的流程,以及决策点和并发行为。适合对业务流程进行建模,因为它能够直观地展示业务流程的各个步骤和决策点。 部署图是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。 交互图用于对系统的动态方面进行建模。一张交互图表现的是一个交互行程序由一组对象和它们之间的关系组成,包含它们之间可能传递的消息。本题选择B选项。

单选题


174. 如下所示的UML序列图中, ( ) 表示返回消息,Account类必须实现的方法有( ) 。 图片

答案:B

解析:

在URL序列图中,调用消息用带实心箭头的实线表示,返回消息用带箭头的虚线表示,图中编号为1、2、4、5的消息均为调用消息,只有编号为3的消息为返回消息。由题目可知,Fund Transaction Manager要调用类Account的checkBalance()、withdraw()和deposit()方法,类Account需要实现这3个方法。

完形类单选题


175. 如下所示的UML序列图中, ( ) 表示返回消息,Account类必须实现的方法有( ) 。 图片

答案:D

解析:

在URL序列图中,调用消息用带实心箭头的实线表示,返回消息用带箭头的虚线表示,图中编号为1、2、4、5的消息均为调用消息,只有编号为3的消息为返回消息。由题目可知,Fund Transaction Manager要调用类Account的checkBalance()、withdraw()和deposit()方法,类Account需要实现这3个方法。

完形类单选题


176. 下图所示为 ( ) 设计模式,适用于 ( ) 。 图片

答案:C

解析:

外观设计模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行交互。外观设计模式提供一个高层次的接口,使得子系统更易于使用。 外观模式适用情况如下: (1)为复杂的子系统提供一个简单的接口; (2)客户程序与抽象类的实现部分之间存在着很大的依赖性; (3)构建一个层次结构的子系统时,适用外观模式定义子系统中每层的入口点。

完形类单选题


177. 下图所示为 ( ) 设计模式,适用于 ( ) 。 图片

答案:D

解析:

外观设计模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行交互。外观设计模式提供一个高层次的接口,使得子系统更易于使用。 外观模式适用情况如下: (1)为复杂的子系统提供一个简单的接口; (2)客户程序与抽象类的实现部分之间存在着很大的依赖性; (3)构建一个层次结构的子系统时,适用外观模式定义子系统中每层的入口点。

完形类单选题


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

答案:A

解析:

本题考查面向对象的基本知识。在面向对象系统中,对象是基本的运行时的实体,它既包括数据(属性),也包括作用于数据的操作(行为)。所以,一个对象把属性和行为封装为一个整体。封装是一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。从程序设计者来看,对象是一个程序模块;从用户来看,对象为他们提供了所希望的行为。在对象内的操作通常叫作方法。一个对象通常可由对象名、属性和方法三部分组成。一个类定义了一组大体上相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性,这些对象共享这些行为和属性。

完形类单选题


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

答案:D

解析:

本题考查面向对象的基本知识。在面向对象系统中,对象是基本的运行时的实体,它既包括数据(属性),也包括作用于数据的操作(行为)。所以,一个对象把属性和行为封装为一个整体。封装是一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。从程序设计者来看,对象是一个程序模块;从用户来看,对象为他们提供了所希望的行为。在对象内的操作通常叫作方法。一个对象通常可由对象名、属性和方法三部分组成。一个类定义了一组大体上相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性,这些对象共享这些行为和属性。

完形类单选题


180. 以下关于结构化开发方法的叙述中,不正确的是 ( ) 。

答案:C

解析:

结构化开发方法也称结构化系统开发方法(Structured System Development Methodology),是目前应用最普遍的一种开发方法。其基本思想是用系统的思想和系统工程的方法,按照用户至上的原则结构化、模块化,自顶向下对系统进行分析与设计。它适合数据处理领域项目。结构化开发方法强调自顶向下的逐步求精,每个阶段需严格遵循预设流程,灵活性较差,不适合大规模、特别复杂的项目。

单选题


181. 某个项目在开发时采用了不成熟的前沿技术,由此而带来的风险属于 ( ) 风险。

答案:B

解析(AI 生成):

项目风险按成因可分为技术、市场、经济、商业等类别。采用不成熟的前沿技术,可能因技术不成熟、难以掌握或无法达到预期效果而失败,属于技术风险。市场风险指需求与竞争变化,经济风险指成本资金波动,商业风险指合同与供应商等,均与技术选型无关。

单选题


182. 在详细设计结束后,以下选项中不是重点审查内容的是( )。

答案:A

解析:

本题考查详细设计相关知识。数据流图主要用于系统分析阶段,特别是在需求分析时,描述数据在系统中的流向和变换。在详细设计阶段,详细设计注重于具体的模块功能实现,如算法、数据结构和用户界面等。因此BCD不符合题意,本题选择A选项。

单选题


183. 某软件系统在测试过程中,()最适合发现模块之间的接口问题。

答案:D

解析:

选项D:集成测试是将多个模块组合在一起进行测试,主要目的是发现模块之间的接口问题,如数据传递错误、模块间调用关系异常等。 选项A:单元测试主要针对单个模块进行测试,侧重于模块内部的功能和逻辑。 选项B:系统测试是对整个系统进行测试,验证系统是否满足需求规格说明书的要求,更关注系统的整体功能和性能。 选项C:验收测试是由用户或客户进行的测试,用于确认系统是否满足业务需求。

单选题


184. 用数据流图对某医院挂号系统如下需求进行建模: (1)患者通过终端提交挂号请求; (2)系统验证患者信息; (3)系统生成挂号单,并存储到挂号记录。 以下()不是数据流。

答案:C

解析:

数据流:是指数据在系统中流动的路径,它代表了数据的传递和处理过程。 选项A:挂号请求是患者通过终端提交给系统的数据,是数据流。 选项B:患者信息在系统验证过程中流动,属于数据流。 选项C:挂号记录是系统存储挂号单的地方,是数据存储,不是数据流。 选项D:挂号单是系统生成并在系统内流动的数据,是数据流。

单选题


185. 在一个气象监测系统中,天气变化会影响多种显示设备(如PC应用和手机应用)。这些设备需要及时更新。这一需求适合采用()设计模式进行设计。

答案:A

解析:

选项A:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。在气象监测系统中,天气变化这个主题对象发生改变时,PC应用和手机应用等观察者对象可以及时收到通知并更新显示,符合本题需求。 选项B:备忘录模式主要用于保存一个对象的某个状态,以便在适当的时候恢复对象,与本题及时更新显示设备的需求无关。 选项C:策略模式定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换,和本题场景不相关。 选项D:状态模式允许一个对象在其内部状态改变时改变它的行为,本题重点是主题对象通知观察者更新,并非对象状态改变导致行为改变。

单选题


186. 以下关于数据流图分层结构的叙述中,不正确的是()。

答案:C

解析:

A选项:各层数据流图之间应该保持“平衡”关系,即子图的输入输出数据流必须和父图中相应处理的输入输出数据流一致,该说法正确。 B选项:顶层数据流图只包含一个处理框,表示待开发的系统,它抽象地描述了系统的功能,该说法正确。 C选项:数据流图的层次越多,细节程度越高,而不是越低。随着分层细化,会逐步展现更多的处理过程和数据流动细节。所以C选项说法错误。 D选项:分层的数据流图可以清晰的表达系统的层次结构,使得系统更易于理解,通过将复杂系统分解为多个层次的子图,便于不同人员对系统进行分析和设计,该说法正确。

单选题


187. 某模块的各个部分,前一部分处理的输出是后一部分处理的输入,则该模块的内聚类型为( )。

答案:A

解析:

顺序内聚:一个模块中各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,通常前一个处理元素的输出是后一个处理元素的输入。 功能内聚:模块内所有元素的各个组成部分全部都为完成同一个功能而存在,共同完成一个单一的功能,模块已不可再分。 通信内聚:指模块内所有处理元素都在同一个数据结构上操作或所有处理功能都通过公用数据而发生关联。 巧合内聚:一个模块内的各处理元素之间没有任何联系,只是偶然地被凑到一起。 综上,本题答案选 A。

单选题


188. 某银行开发核心交易系统,需严格遵循监管审计且需求变更极少,最适合的开发模型是( )。

答案:D

解析:

瀑布模型(D):需求明确且变更少时,阶段性交付文档(如需求规格书、设计文档)便于监管审计,符合银行系统的高合规性要求。 敏捷模型(A):适用于需求频繁变更的场景,与严格监管的文档固化需求矛盾。 RAD(B)与增量模型(C):侧重快速迭代,难以满足核心系统的高稳定性要求。

单选题


189. 在软件项目团队中,成员的技能水平和协作能力差异较大,导致项目进度受阻。为提高团队整体效率,项目经理应优先考虑( )。

答案:D

解析:

技能差异的根本解决:成员技能差异直接影响代码质量和协作效率,内部培训(D)直接提升团队基线能力,长期效果最优。 其他选项对比: 任务重分配(A):仅临时调整分工,未解决能力瓶颈。 外部专家(B):短期指导难以转化为团队持续能力。 奖励机制(C):未针对性提升技能,对复杂任务效果有限。

单选题


190. 采用面向对象设计方法开发电商平台,设计负责处理用户订单的类OrderService,它不仅处理订单创建,还负责记录订单日志和发送确认邮件。OrderService类违反了面向对象设计( )原则。

答案:B

解析:

OrderService同时负责订单创建、日志记录和邮件发送,承担了多个职责,违反单一职责原则

单选题


191. 某电商平台“将订单处理、支付网关集成、物流跟踪等功能拆分为独 立服务。每个服务通过API通信”,这是采用了( )。

答案:D

解析:

微服务架构(D):将系统拆分为独 立部署的服务(订单处理、支付网关),通过 API 通信,符合高内聚低耦合原则。 对比其他架构: 分层架构(A):按功能层划分(如展示层、业务层),不强调服务独 立性。 面向对象(C):以类和对象为核心,与分布式服务无关。 事件驱动(B):通过事件队列通信,非本题描述的 API 直接调用场景。

单选题


192. 下列关于结构化分析方法的数据字典中加工逻辑的叙述中,不正确的是( )

答案:C

解析:

数据字典包含数据流、数据项、数据存储和基本加工4类条目。基本加工条目用于说明DFD中基本加工的处理逻辑,因下层基本加工由上层分解而来,有了基本加工说明就能理解其他加工,每个基本加工都应有加工逻辑说明。加工描述了输入数据流到输出数据流的变化,加工逻辑则阐述该过程的加工规则。加工逻辑处于需求分析阶段,此时尚未进行具体数据结构和算法设计。常用的加工逻辑描述方法有结构化语言、判定表和判定树三种。本题答案选C,因其描述错误,其他选项A、B、D描述均正确。

单选题


193. (作答此空 )设计模式能使一个对象的状态发生改变时通所有依赖它的监听者。( )设计模式限制类的实例对象只能由一个。

答案:D

解析:

原型模式虽然是创建型的模式,但是与工程模式没有 关系,从名字即可看出,该模式的思想就是将一个对 象作为原型,对其进行复制、克隆,产生一个和原对 象类似的新对象。 工厂模式定义一个用于创建对象的接口,让子类决定 实例化哪一个类。FactoryMethod使一个类的实例化 延迟到其子类。 单例模式是一种常用的软件设计模式。在它的核心结 构中只包含一个被称为单例类的特殊类。通过单例模 式可以保证系统中一类只有一个实例而且该实例已与 外界访问,从而方便对实例个数的控制并节约系统资源。 生成器模式(建造者模式)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 责任链模式,有多个对象,每个对象持有对下一个对 象的引用,这样就会形成一条链,请求在这条链上传 递,直到某一对象决定处理该请求。但是发出者并不 清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行 动态的调整。 命令模式的目的就是达到命令的发出者和执行者之间 解耦,实现请求和执行分开。 抽象工厂模式,提供一个创建一系列相关或相互依赖 对象的接口,而无需指定它们具体的类。 抽象工厂需 要创建一些列产品,着重点在于“创建哪些"产品上, 也就是说,如果你开发,你的主要任务是划分不同差异的产品线,并且尽量保持每条产品线接口一致,从而可以从同一个抽象工厂继承。 观察者模式(有时又被称为发布—订阅模式、模型—视 图模式、源—收听着模式或从属这模式)是软件设计模 式的一种。在此种模式中,一个目标物件管理所有相 依于它的观察者物件,并且在它本身的状态状态改变时主动发出通知。这通常透过呼叫各观察者所提供的 方法来实现。

本题选D。

单选题


194. ( )设计模式能使一个对象的状态发生改变时通所有依赖它的监听者。(作答此空)设计模式限制类的实例对象只能由一个。

答案:C

解析:

原型模式虽然是创建型的模式,但是与工程模式没有 关系,从名字即可看出,该模式的思想就是将一个对 象作为原型,对其进行复制、克隆,产生一个和原对 象类似的新对象。

工厂模式定义一个用于创建对象的接口,让子类决定 实例化哪一个类。FactoryMethod使一个类的实例化 延迟到其子类。

单例模式是一种常用的软件设计模式。在它的核心结 构中只包含一个被称为单例类的特殊类。通过单例模 式可以保证系统中一类只有一个实例而且该实例已与 外界访问,从而方便对实例个数的控制并节约系统资 源。

生成器模式(建造者模式)将一个复杂对象的构建与 它的表示分离,使得同样的构建过程可以创建不同的 表示。

责任链模式,有多个对象,每个对象持有对下一个对 象的引用,这样就会形成一条链,请求在这条链上传 递,直到某一对象决定处理该请求。但是发出者并不 清楚到底最终那个对象会处理该请求,所以,责任链 模式可以实现,在隐瞒客户端的情况下,对系统进行 动态的调整。

命令模式的目的就是达到命令的发出者和执行者之间 解耦,实现请求和执行分开。

抽象工厂模式,提供一个创建一系列相关或相互依赖 对象的接口,而无需指定它们具体的类。抽象工厂需 要创建一些列产品,着重点在于“创建哪些"产品上, 也就是说,如果你开发,你的主要任务是划分不同差 异的产品线,并且尽量保持每条产品线接口一致,从 而可以从同一个抽象工厂继承。

观察者模式(有时又被称为发布—订阅模式、模型—视 图模式、源—收听着模式或从属这模式)是软件设计模 式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态状态改变 时主动发出通知。这通常透过呼叫各观察者所提供的 方法来实现。

本题选择C选项

单选题


195. 关键路径是指AOE(Activity On Edge)网中( )。

答案:C

解析:

关键路径是指AOE(Activity On Edge)网中从源点到汇点(结束顶点)的最长路径 。本题选C。

单选题


196. 求单源点最短路径的迪杰斯特拉(Dijkstra)算法是按()的顺序求源点到各顶点的最短路径的。

答案:B

解析:

求单源点最短路径的迪杰斯特拉(Dijkstra)算法是按路径长度递增的顺序求源点到各顶点的最短路径的。本题选B。

单选题


197. ● ( )设计模式将对象组合成树形结构以表示“部分一整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性;(作答此空)设计模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新;欲使一个后端数据模型能够被多个前端用户界面连接,采用( )模式最适合。

答案:C

解析:

本题考查设计模式的基本概念。每种设计模式都有特定的意图,描述一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,该方案能够重用而不必做重复劳动。

    组合(Composite)模式将对象组合成树形结构以表示“部分一整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。适用于:想表示对象的部分—整体层次结构;希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

    外观(Facade)模式为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂;客户程序与抽象类的实现部分之间存在着很大的依赖性;当需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。

    享元(Flyweight)模式运用共享技术有效地支持大量细粒度的对象。适用于:一个应用程序使用了大量的对象;完全由于使用大量的对象,造成很大的存储开销;对象的大多数状态都可变为外部状态;如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象;应用程序不依赖于对象标识。

    装饰器(Decorator)模式描述了以透明围栏来支持修饰的类和对象的关系,动态地给一个对象添加一些额外的职责,从增加功能的角度来看,装饰器模式相比生成子类更加灵活。适用于:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时。

    工厂方法(Factory Method)定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。适用于:当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。

    观察者(Observer)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。适用于:当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。本题选C。

    中介者(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。适用于:一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;想定制一个分布在多个类中的行为,而又不想生成太多的子类。如使一个后端数据模型能够被多个前端用户界面连接,采用此模式最合适。

单选题


198. 设计模式根据目的进行分类,可以分为创建型、结构型和行为型三种。其中结构型模式用于处理类和对象的组合。( )模式是一种结构型模式。

答案:A

解析:

常见的创建型模式主要有工厂方法(Factory Method)、抽象工厂(Abstract Factory)、单例(Singleton)、构建器(Builder)、原型(Prototype)模式; 结构型模式有适配器(Adapter)、组合(Composite)、装饰(Decorator)、代理(Proxy)、享元(Flyweight)、外观(Façade)、桥接(Bridge)模式;本题选A。 行为型模式有策略(Strategy)、模板方法(Template Method)、迭代器(Iterator)、责任链(Chain of Responsibility)、命令(Command)、备忘录(Memento)、状态(State)、访问者(Visitor)、解释器((Interpreter)、中介者(Mediator)、观察者(Observer)模式。

单选题


199. 某旅游公司欲开发一套软件系统,要求能根据季节、节假日等推出不同的旅行定价包,如淡季打折、一口价等。实现该要求适合采用( )模式,该模式的主要意图是(作答此空)。

答案:D

解析:

策略模式的主要方式是把不同策略对应的代码、算法封装到不同的子类中,并用父类 变量接收子类对象。所以选择D选项。

单选题


200. 采用(作答此空)设计模式可保证一个类仅有一个实例:采用( )设计模式可将对象组合成树形结构以表示“部分-整体”的层次结构,使用户对单个对象和组合对象的使用具有一致性;采用( )设计模式可动态地给一个对象添加一些额外的职责。

答案:B

解析:

本题考查面向对象设计中的设计模式。   单例设计模式的目的就是保证一个类仅能够生成一个对象;组合设计模式则用于表示“部分-整体”的层次结构,并且对部分和整体的使用具有一致性;装饰设计模式则动态地给一个对象增加一些额外的职责,无须改变类的设计和实现。本题选B。

单选题


201. 某旅游公司欲开发一套软件系统,要求能根据季节、节假日等推出不同的旅行定价包,如淡季打折、一口价等。实现该要求适合采用(作答此空)模式,该模式的主要意图是( )。

答案:A

解析:

本题考察的是23种设计模式的概念 根据题干描述,在不同情况下,促销的策略不一样,所以选择A策略模式。

单选题


202. 在发布-订阅(Publish-Subscribe)消息模型中,订阅者订阅一个主题后,当该主题有新消息到达时,所有订阅者都会收到通知。( )设计模式最适合这一模型。

答案:D

解析:

本题考查设计模式的基本概念。 适配器(Adapter)模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。观察者(Observer)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,其别名为发布-订阅(Publish-Subscribe)模式。状态(State)模式是使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使这个对象看起来如同修改了它的类。本题选D。

单选题


203. ( )设计模式能使一个对象的状态发生改变时通知所有依赖它的监听者。( )设计模式限制类的实例对象只能有一个。适配器(Adapter)设计模式可以用于( )。用于为一个对象添加更多功能而不使用子类的是(作答此空)设计模式

答案:D

解析:

观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。本题选D。

单选题


204. ( )设计模式能使一个对象的状态发生改变时通知所有依赖它的监听者。( )设计模式限制类的实例对象只能有一个。适配器(Adapter)设计模式可以用于(作答此空)。用于为一个对象添加更多功能而不使用子类的是( )设计模式

答案:A

解析:

观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。本题选A。 装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

单选题


205. ( )设计模式定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。这一模式使得算法可独立于它的客户而变化。

答案:A

解析:

A选项:策略模式(Strategy):定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化。 B选项:抽象工厂模式(Abstract Factory):提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类。 C选项:观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。 D选项:状态模式(State):允许一个对象在其内部状态改变时改变它的行为。

本题题干描述属于策略模式,选A。

单选题


206. ( )将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

答案:A

解析:

本题也是考查设计模式。在做类题时,需要我们对各设计模式有一个正确的理解才能完成。 适配器模式的意图就是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。本题选A。 命令模式的意图是将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 单例模式的意图是确保某个类只有一个实例,且能自行实例化,并向整个系统提供这个实例。 策略模式的意图是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,该模式使得算法可独立于使用它的客户而变化。

单选题


207. 以下关于Singleton(单例)模式的描述中,正确的是( )。

答案:D

解析:

本题考查面向对象设计模式。单例模式的目的是保证类有且仅有一个实例,因此可以限制类的对象数量。本题选D。

单选题


208. 下面的()模式将对象组合成树形结构以表示“部分一整体”的层次结构,并使得用户对单个对象和组合对象的使用具有一致性。

答案:A

解析:

组合模式将被组合的对象和组合对象抽象为同一种对象,使得用户对单个对象和组合对象的使用变得统一。本题选A。

单选题


209. 在设计模式中, ( ) 将一个接口转换成客户希望的另一个接口,从而使接口不兼容的那些类可以一起工作。 ( ) 动态地给一个对象增加功能,这些功能可以再动态地被撤销。 (作答此空) 支持以不同的方式遍历一个聚合对象。

答案:B

解析:

适配器模式将一个接口转换成客户希望的另一个接口,从而使接口不兼容的那些类可以一起工作。 通过装饰模式,可以在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;当需要动态地给一个对象增加功能,这些功能可以再动态地被撤销。 命令模式是一种对象的行为型模式,类似于传统程序设计方法中的回调机制,它将一个请求封装为一个对象,从而使得可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是对命令的封装,将发出命令的责任和执行命令的责任分割开,委派给不同的对象,以实现发送者和接收者完全解耦,提供更大的灵活性和可扩展性。 迭代器模式支持以不同的方式遍历一个聚合对象,复杂的聚合可用多种方法来进行遍历。本题选B。

单选题


210. ( )设计模式定义了对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

答案:D

解析:

本题考查的是设计模式的基本知识,常用的23种设计模式中,观察者模式定义了对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。本题选D。

单选题


211. 如果要表示待开发软件系统中软件组件和硬件之间的物理关系,通常采用UML中的( )。

答案:B

解析:

组件图也就是构件图,描述一组构件之间的组织和依赖,专注于系统的静态实现视图。 部署图描述对运行时的处理节点及在其中生存的构件的配置。部署图给出了架构的静态部署视图,通常一个节点包含一个或多个部署图。 类图描述一组类、接口、协作和它们之间的关系。在面向对象系统的建模中,最常见的图就是类图。类图给出了系统的静态设计视图,活动类的类图给出了系统的静态进程视图。 在UML并没有网络图这种描述。 而本题中描述的是待开发软件系统中软件组件和硬件之间的物理关系,描述的正是软件在硬件中的部署,是部署图。本题选B。

单选题


212. UML中关联的多重度是指()。

答案:B

解析:

本题考查的是UML中关联的多重度概念。 关联表示了对象间的结构关系。在很多建模问题中,说明一个关联的实例中有多少个相互连接的对象是很重要的。这个“多少”被称为关联角色的多重度,把它写成一个表示取值范围的表达式或写成一个具体值。指定关联一端的多重度,就是说明;在关联另一端的类的每个对象要求在本端的类必须有多少个对象。本题选B。

单选题


213. 采用UML进行软件建模过程中,类图是系统的一种静态视图,用( )可明确表示两类事物之间存在的整体/部分形式的关联关系。

答案:B

解析:

类图是描述类的构成以其多个类之间存在的静态关系的一种工具。对于一个系统中的两个类而言,它们要么不存在任何关系,要么存在is-like-a的关系,或has-a的关系.其中is-like-a表示两个类之间的继承关系,has-a表示两个类之间存在的整体与部分形式的组成关系,即其中一个类的数据成员的类型是另外一个类,而这种关系在UML中采用聚合关系表示。本题选B。

单选题


214. 在采用标准UML构建的用例模型(Use-Case Model)中,参与者(Actor)与用例(Use Case)是模型中的主要元素,其中参与者与用例之间可以具有()关系。

答案:C

解析:

本题考查Use-Case模型中基本元素的关系。 在Use-Case模型中,参与者与用例只有一种关联关系。本题选C。

单选题


215. UML 类图中类与类之间的关系有五种:依赖、关联、聚合、组合与继承。若类 A需要使用标准数学函数类库中提供的功能,那么类 A 与标准类库提供的类之间存在( )关系;若类 A 中包含了其它类的实例,且当类 A 的实例消失时,其包含的其它类的实例也消失,则类 A 和它所包含的类之间存在 ( ) 关系;若类 A 的实例消失时,其它类的实例仍然存在并继续工作,那么类 A 和它所包含的类之间存在 (作答此空) 关系。

答案:C

解析:

本题考查UML类图之间类与类之间的关系。 UML类图中类与类之间的关系有五种:依赖、关联、聚合、组合与继承。依赖是几种关系中最弱的一种关系,通常,使用类库就是其中的一种关系。聚合与组合都表示了整体和部分的关系。组合的程度比聚合高,当整体对象消失时,部分对象也随之消失,则属于组合关系,当整体对象消失而部分对象依然可以存在并继续被使用时,则属于聚合关系。本题选C。

单选题


216. UML中的构件是遵从一组接口并提供一组接口的实现,下列说法错误的是()。

答案:B

解析(AI 生成):

构件是系统中可替换的物理部件,遵循并实现一组接口,是部署和复用的实现单元,与类处于不同抽象层次,因此A、C、D正确。把构件说成逻辑模块而非物理模块恰好说反了:逻辑模块通常指类、包等设计元素,构件对应可独立部署的物理实现单元。

单选题


217. UML中有多种类型的图,其中,( )对系统的使用方式进行分类, ( )显示了类及其相互关系,( )显示人或对象的活动,其方式类似于流程图,通信图显示在某种情况下对象之间发送的消息, (作答此空)与通信图类似,但强调的是顺序而不是连接。

答案:B

解析:

本题考查的是UML建模中各种模型的作用。用例图展示了用例模型,从用户使用系统的角度对系统进行了划分;类图显示了类之间的关系;活动图则和流程图类似,用于显示人或对象的活动;顺序图和通信图类似,不同点在于强调的是对象间发送消息的顺序。本题选B。

单选题


218. UML的设计视图包含了类、接口和协作,其中,设计视图的静态方面由(作答此空)和( )表现;动态方面由交互图、( )表现。

答案:B

解析:

通常是用一组视图反映系统的各个方面,以完整地描述系统,每个视图代表系统描述中的一个抽象,显示系统中的一个特定的方面。UML2.0中提供了多种图形,从静态和动态两个方面表现系统视图。 类图展现了一组对象、接口、协作和它们之间的关系。对象图展现了一组对象以及其之间的关系,描述了在类图中所建立的事物的实例的静态快照。序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。通信图和序列图同构,强调收发消息的对象的结构组织。状态图展现了一个状态机,由状态、转换、事件和活动组成,它关注系统的动态视图,强调对象行为的事件顺序。活动图是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程,它专注于系统的动态视图。序列图、通信图、交互图和定时图均被称为交互图,它们用于对系统的动态方面进行建模。本题选B。

单选题


219. 以下关于面向对象设计的叙述中,错误的是( )。

答案:D

解析:

本题考查面向对象设计的基本原则。面向对象设计中存在很多原则,其中高层模块不应该依赖于底层模块就是其中一条。传统的结构化设计中,一般的高层模块需要调用或使用底层模块,导致高层模块必须依赖于底层模块,但借助面向对象中的抽象类、接口等一系列机制,可以使得高层模块仅仅和接口耦合,而和实际的底层模块没有直接关联。本题选D。

单选题


220. 以下关于面向对象分析的叙述中,错误的是( )。

答案:B

解析:

本题考查面向对象分析的基本概念。   面向对象分析主要回答软件系统需要解决什么问题,在面向对象分析阶段,并不考虑系统实现以及系统的测试问题,强调建立独立于系统实现的系统分析模型,其关注点仍然侧重于问题域。本题选B。

单选题


221. 面向对象分析的第一项活动是( );面向对象程序设计语言为面向对象(作答此空)。

答案:D

解析(AI 生成):

面向对象分析的首要活动是需求分析,通过用例建模理解问题域;面向对象程序设计语言则为面向对象的实现提供支持,包括封装、继承、多态等机制及类库。用例设计属于设计阶段的活动,分析是分析阶段的整体工作,都不是语言所支持的目标,故本空选实现。

单选题


222. 面向对象分析的第一项活动是(作答此空);面向对象程序设计语言为面向对象()。

答案:C

解析:

本题考查的是面向对象分析与设计相关内容。 面向对象分析的活动有:认定对象(名词)、组织对象(抽象成类)、对象间的相互作用、基于对象的操作,第一项活动是认定对象,本题选择C选项。

单选题


223. ( )反映了类间的一种层次关系,而(作答此空 ) 反映了一种整体与部分的关系。

答案:B

解析(AI 生成):

继承反映类与类之间的层次关系,子类共享父类的属性和行为,属于一般与特殊的关系。组合以及聚合反映整体与部分关系,整体对象由部分对象构成,部分可随整体的创建与销毁而存亡。多态指同一操作在不同对象上有不同实现,封装指信息隐蔽,均不描述整体与部分。

单选题


224. 以下关于面向对象继承的叙述中,错误的是( )。

答案:D

解析:

本题考査面向对象中继承基本概念。 面向对象技术中,继承是父类和子类之间共享数据和方法的机制。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。可以存在多重继承的概念,但不同的程序设计语言可以有自己的规定。本题选D。

单选题


225. 以下关于封装在软件复用中所充当的角色的叙述,正确的是( )。

答案:A

解析:

封装是面向对象技术的三大特点之一,封装的目的是使对象的定义和实现分离,这样,就能减少耦合。封装可以使得其他开发人员不需要知道一个软件组件内部是如何工作的,只需要使用该组件提供的接口来完成交互即可,如果在另外一个地方需要完成同样的功能,我们就可以将该组件使用在另外一个地方,这样提供了软件的复用性。本题选A。

单选题


226. 在面向对象技术中,( )定义了超类和子类之间的关系,子类中以更具体的方式实现从父类继承来的方法称为(),不同类的对象通过(作答此空)相互通信。

答案:C

解析:

继承:父类和子类之间共享数据的方法的机制。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。 消息:对象之间进行通信的一种构造叫做消息。当一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息。接收到信息的对象经过解释,然后予以响应。这种通信机制叫做消息传递。发送消息的对象不需要知道接收消息的对象如何对请求予以响应。 多态:在收到消息时,对象要予以响应。不同的对象收到同一消息可以产生完全不同的结果,这一现象叫做多态。 覆盖:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override)。 本题选C。

单选题


227. 下面关于面向对象分析与面向对象设计的说法中,不正确的是( )。

答案:D

解析:

本题考查面向对象分析与设计的基本概念。 面向对象分析主要强调理解问题是什么,不考虑问题的解决方案,因此答案A、C是正确的。面向对象设计侧重问题的解决方案,并且需要考虑实现细节问题,因此选项D的说法是不正确的。

单选题


228. 采用面向对象方法开发学生成绩管理系统,学生的姓名、性别、出生日期、期末考试成绩、查看成绩操作均被( )在学生对象中。系统中定义不同类,不同类的对象之间通过(作答此空)进行通信。

答案:C

解析:

对象之间的通信往往是调用方法。在调用方法时,会传递数据,所以放到调用也叫作消息通信,选择C选项。

单选题


229. 采用面向对象方法进行某游戏设计,游戏中有野鸭、红头鸭等各种鸭子边游冰戏水边呱呱叫,不同种类的鸭子具有不同颜色,设计鸭子类负责呱呱叫和游泳方法的实现,显示颜色设计为抽象方法,由野鸭和红头鸭各自具体实现,这一机制称为( )。当给这些类型的一组不同对象发送同一显示颜色消息时,能实现各自显示自己不同颜色的结果,这种现象称为(作答此空 )。

答案:D

解析:

继承是父类和子类之间共享数据和方法定义的机制。在收到消息时,对象要予以响应。不同的对象收到同一消息可以产生完全不同的结果,这一现象称为多态。本题选D。

单选题


230. 在领域类模型中不包含( )。

答案:D

解析:

在领域类模型中会涉及描述类自身情况的属性与操作,还会有描述类之关系的关联,但不会有对象层次的内容。本题选D。

单选题


231. 若类A仅在其方法Method1中定义并使用了类B的一个对象,类A其他部分的代码都不涉及类B,那么类A与类B的关系应为( );若类A的某个属性是类B的一个对象,并且类A对象消失时,类B对象也随之消失,则类A与类B的关系应为(作答此空)。

答案:D

解析:

本题考查类间的关系。 类间关系可分为依赖、关联、聚合、组合和继承5种。按照上述顺序,类间关系依次增强,若类A的方法中仅仅使用了类B的对象,那么类A依赖于类B。如果类A的部分是由类B的对象组成,并且类A控制类B的生命周期,那么类A与类B是组合关系。本题选D。

单选题


232. 一个类是( )。在定义类时,将属性声明为private的目的是(作答此空)。

答案:A

解析:

类与对象的关系是抽象与具体的关系,类是一组对象的抽象,而对象是类的实例。在定义类时,将属性声明为private,即只允许自身对其进行访问、修改等操作,而外界不可见,从而达到实现数据隐藏,以免意外更改的目的。本题选A。

单选题


233. 一个类是(作答此空)。在定义类时,将属性声明为private的目的是( )。

答案:D

解析:

类与对象的关系是抽象与具体的关系,类是一组对象的抽象,而对象是类的实例。在定义类时,将属性声明为private,即只允许自身对其进行访问、修改等操作,而外界不可见,从而达到实现数据隐藏,以免意外更改的目的。本题选D。

单选题


234. 在面向对象程序设计中,常常将接口的定义与接口的实现相分离,可定义不同的类实现相同的接口。在程序运行过程中,对该接口的调用可根据实际的对象类型调用其相应的实现。 为达到上述目的,面向对象语言须提供()机制。

答案:C

解析:

根据题目的描述,根据一个接口调用不同的实现,需要用多态机制支持,多态机制一般和继承机制结合使用,由于子类可以实现接口,通常将接口定义为虚拟函数,这种机制实际上是重置机制的应用。本题选C。

单选题


235. 下面关于面向对象方法中消息的叙述,不正确的是( )。

答案:B

解析:

在面向对象方法中,消息是双向通信的,应用程序可以通过系统调用或消息队列向操作系统发送消息。本题选B。

单选题


236. 下面关于面向对象的描述正确的()。

答案:A

解析:

针对接口编程能够将接口调用代码和接口实现代码相分离,提倡针对接口进行编程。本题选A。

单选题


237. 类是一组具有相同属性的和相同服务的对象的抽象描述,类中的每个对象都是这个类的一个( )。类之间共享属性与服务的机制称为(作答此空)。一个对象通过发送( )来请求另一个对象为其服务。

答案:D

解析:

类是一组具有相同属性和相同操作的对象的集合,类中的每个对象都是这个类的一个实例。 类之间共享属性与服务的机制称为继承。一个对象通过发送消息来请求另一个对象为其服务。本题选D。

单选题


238. 面向对象程序设计语言为()提供支持。

答案:D

解析:

选项A、B、C三个阶段都可以采用建模语言来进行描述,而面向对象程序设计语言主要为面向对象实现阶段提供支持。本题选D。

单选题


239. 面向对象的测试可分为四个层次,按照由低到高的顺序,这四个层次是( )。

答案:B

解析:

面向对象的测试可分为四个层次,按照由低到高的顺序,分别为 算法层—类层—模板层—系统层 ,本题选B。

单选题


240. 在面向对象技术中,类属是一种( )机制。一个类u3属类是关于一组类的一个特性抽象,它强调的是这些类的成员特征中与(作答此空)的那些部分,而用变元来表示与( )的那些部分。 ( )

答案:B

解析:

类属是程序设计语言中普遍注重的一种参数多态机制。类属可以被看做类的模板。一个类属类是关于一组类的一个特性抽象,它强调的是这些类的成员特征中与具体类型无关的那些部分,而与具体类型相关的部分则用变元来表示。这就使得对类的集合也可以按照特性的相似性再次进行划分。本题选B。

单选题


241. 面向对象分析与设计中的(作答此空)是指一个模块在扩展性方面应该是开放的,而在更改性方面应该是封闭的;而()是指子类应当可以替换父类并出现在父类能够出现的任何地方。

答案:A

解析:

本题考查面向对象分析与设计中的原则。 开闭原则是指一个模块在扩展性方面应该是开放的,而在更改性方面应该是封闭的。其含义是模块容易扩展和修改,但不能对其他的模块产生影响。替换原则是指子类可以替换父类并出现在父类能够出现的任何地方。   具体地说,就是凡是使用父类对象的地方都可以使用子类对象。 本题选A。

单选题


242. ( )是把对象的属性和服务结合成一个独立的系统单元,并尽可能隐藏对象的内部细节:( )是指子类可以自动拥有父类的全部属性和服务;( 作答此空 )是对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入信息和应答信息等。

答案:C

解析:

本题考查面向对象的基本概念。 封装的作用是把属性和服务结合成一个独立的系统单元,并隐藏对象的内部细节;而继承则使得子类可以自动拥有父类的全部属性和服务;消息则是对象发出的服务请求;多态是指面向对象中由重载或过载机制实现的结果。

本题选C。

单选题


243. ( ) 是一种最常用的结构化分析工具,它从数据传递和加工的角度,以图形的方式刻画系统内数据的运行情况。通常使用(作答此空)作为该工具的补充说明。

答案:B

解析:

数据流图是一种最常用的结构化分析工具,它从数据传递和加工的角度,以图形的方式刻画系统内数据的运行情况。数据流图是一种能全面描述信息系统逻辑模型的主要工具,它可以用少数集中符号综合地反映出信息在系统中的流动、处理和存储的情况。 通常使用数据字典对数据流图加以补充说明。数据字典是以特定格式记录下来的、对系统的数据流图中各个基本要素的内容和特征所做的完整的定义和说明。 本题选B。

单选题


244. 在结构化分析中,关于数据流图的描述正确的是 ( ) 。当采用数据流图对一个在线交易系统进行分析时, (作答此空) 是一个加工。

答案:D

解析:

本题考查结构化分析的基础知识。 数据流图是结构化分析的一个重要模型,描述数据在系统中如何被传送或变换,以及描 述如何对数据流进行变换的功能,用于功能建模。 数据流图的最上层是顶层图。 IPO图用来表达模块的输入、输出和处理过程。 数据字典用于对数据建模。 数据流图中有四个要素:外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;数据流表示数据沿箭头方向的流动;加工是对数据对象的处理或变换;数据存储在数据流中起到保存数据的作用,可以是数据库文件或者任何形式的数据组织。 根据上述定义和题干说明,客户和安全认证中心是外部实体,待付款信息是数据流,付款是加工。 本题选D。

单选题


245. 在结构化分析中,关于数据流图的描述正确的是 (作答此空) 。当采用数据流图对一个在线交易系统进行分析时, ( ) 是一个加工。

答案:D

解析:

本题考查结构化分析的基础知识。 数据流图是结构化分析的一个重要模型,描述数据在系统中如何被传送或变换,以及描 述如何对数据流进行变换的功能,用于功能建模。 数据流图的最上层是顶层图。 IPO图用来表达模块的输入、输出和处理过程。 数据字典用于对数据建模。 数据流图中有四个要素:外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;数据流表示数据沿箭头方向的流动;加工是对数据对象的处理或变换;数据存储在数据流中起到保存数据的作用,可以是数据库文件或者任何形式的数据组织。 根据上述定义和题干说明,客户和安全认证中心是外部实体,待付款信息是数据流,付款是加工。 本题选D。

单选题


246. () 的开发过程一般是先把系统功能视作一个大的模块,再根据系统分析与设计的要求对其进行进一步的模块分解或组合。 ( ) 认为系统开发是一个螺旋上升的过程,每个周期包括4个步骤,分别是标识类和对象、确定类和对象的含义、标识关系、说明每个类的接口和实现。其开发模型包括静态模型和动态模型,动态模型包括状态图和 (作答此空 ) ,用来描述对象的状态变化和交互过程。

答案:A

解析:

结构化方法属于面向数据流的开发方法,方法的特点是软件功能的分解和抽象。结构化方法的开发过程是先把系统功能视作一个大的模块,再根据系统分析与设计的要求对其进行进一步的模块分解或组合。 Booch认为系统开发是一个螺旋上升的过程,每个周期包括4个步骤,分别是标识类和对象、确定类和对象的含义、标识关系、说明每个类的接口和实现。 Booch的开发模型包括静态模型和动态模型,静态模型分为逻辑模型(类图、对象图)和物理模型(模块图、进程图),用来描述系统的构成和结构。动态模型包括状态图和顺序图,用来描述对象的状态变化和交互过程。 本题选A。

单选题


247. 软件复杂性度量的参数不包括( )。

答案:B

解析:

软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。 软件复杂性度量的参数很多,主要有: (1) 规模,即总共的指令数,或源程序行数。 (2) 难度,通常由程序中出现的操作数的数目所决定的量来表示。 (3) 结构,通常用于程序结构有关的度量来表示。 (4) 智能度,即算法的难易程度。 本题选B。

单选题


248. 软件系统的可维护性评价指标不包括( )。

答案:C

解析:

软件系统的可维护性是指与软件维护的难易程度相关的一组软件属性。它的评价指标有可理解性、可修改性、可测试性及稳定性等。 本题选C。

单选题


249. 根据ISO/IEC 9126软件质量模型中对软件质量特性的定义,可维护性质量特性的( )子特性是指与未确认经修改软件所需努力有关的软件属性。

答案:A

解析:

可维护性质量特性是指与软件维护的难易程度相关的一组软件属性,它包含了易分析性、稳定性、易测试性和易改变性4个子特性。其中: 易分析性是描述诊断缺陷或失效原因、判定待修改程度的难易程度的特性。 稳定性是描述修改造成难以预料的后果的风险程度,风险程度越低,稳定性越好。 易测试性是描述测试已修改软件的难易程度的特性。 易改变性是描述修改、排错或适应环境变化的难易程度。 本题中,是说与为确认经修改软件所需努力有关的软件属性,也就是说要确认修改后的软件是否正确所要付出的努力,这应该是易测试性所描述的内容,因此本题答案选A。

单选题


250. 根据ISO/IEC 9126软件质量度量模型定义,一个软件的时间和资源质量子特性属于( )质量特性。

答案:B

解析:

本题考查ISO/IEC 9126软件质量度量模型中的质量特性。效率质量特性包括时间特性和资源特性两个质量子特性。本题选B。

单选题


251. ( )不属于软件设计质量评审。

答案:A

解析:

(1)评价软件的规格说明是否合乎用户的要求,即总体设计思想和设计方针是否正确,需求规格说明是否得到了用户或单位上级机关的批准;需求规格说明与软件的概要设计规格说明是否一致等。

(2)评审可靠性,即是否能避免输入异常(错误或超载等)、硬件失效及软件失效所产生的失效,一旦发生应能及时采取代替手段或恢复手段。

(3)评审保密措施实现情况,即是否提供对使用系统资格、对特定数据的使用资格及特殊功能的使用资格进行检查,在查出有违反使用资格情况后,能否向系统管理人员报告有关信息,是否提供对系统内重要数据加密的功能。

(4)评审操作特性实施情况,即操作命令和操作信息的恰当性,输入数据与输入控制语句的恰当性,输出数据的恰当性,应答时间的恰当性等。

(5)评审性能实现情况。

(6)评审软件是否具有可修改性、可扩充性、可互换性和可移植性。

(7)评审软件是否具有可测试性。

(8)评审软件是否具有复用性。

因此A选项不属于软件质量评审。

单选题


252. ISO/IEC 9126软件质量模型中,可靠性质量特性包括多个子特性。一软件在故障发生后,要求在90秒内恢复其性能和受影响的数据,与达到此目的有关的软件属性为( )子特性。

答案:C

解析:

本题考查软件质量模型知识。ISO/IEC 9126软件质量模型中可靠性质量特性是指在规定的一段时间内和规定的条件下,软件维护其性能水平有关的能力。包括的子特性有成熟性、容错性和易恢复性。其中易恢复性是与在故障发生后,重新建立其性能水平并恢复直接受影响数据的能力,以及与为达到此目的所需的时间和工作有关的软件属性。软件故障发生后,要在90秒内恢复其性能和受影响的数据,达到这一目的有关的属性即为易恢复性子特性。 本题选C。

单选题


253. McCall软件质量模型从软件产品的运行、修正和转移三个方面确定了11个质量特性,其中( )不属于产品运行方面的质量特性。

答案:D

解析:

McCall软件质量模型从软件产品的运行、修正和转移三个方面确定了11个质量特性,其中运行方面包含了正确性、可靠性、效率、完整性、使用性这些质量特性。修正方面包含了维护性、测试性、灵活性这3个质量特性。转移方面包含了维护性移植性、复用性、共运行性这3个质量特性。本题选D。

单选题


254. 软件的互操作性是指( )。

答案:C

解析(AI 生成):

互操作性衡量不同系统之间交换信息、协同工作的能力,常以连接一个系统与另一个系统所需的工作量来度量,工作量越小互操作性越好。可移植性指软件从一种环境迁移到另一种环境的难易程度;B、D描述的是人机交互或多用户交互,与系统之间的连接无关。

单选题


255. 最主要的软件质量度量指标有正确性、可维护性、完整性和可用性,下面关于这些质量指标的描述中正确的是()。

答案:D

解析:

本题考查软件的质量度量指标。 软件维护的工作量比开发阶段的工作量大,通常的估计是,开发阶段的工作量占软件生命期整个工作量的40%,而维护阶段的工作量则占60%,甚至更多。软件的正确性是指软件完成所需功能的程度,尽管这种程度与每千行代码的故障数有关,但不完全等同。软件完整性是指软件在安全方面抗攻击的能力。软件可用性用来度量软件的“用户友好性”,可以从4个方面来测量可用性:  ·学会操作软件所需的体力/智力  ·对系统的使用达到中等效率所需的时间  ·当系统由一个中等效率的人使用时测量到的生产率增长值  ·用户对系统的主观评价 本题选D。

单选题


256. ISO/IEC 9126 软件质量模型中第一层定义了六个质量特性,并为各质量特性定义了相应的质量子特性,其中易分析子特性属于软件的()质量特性。

答案:C

解析:

ISO/IEC9126软件质量模型是一种评价软件质量的通用模型,包括三个层次:第一层是质量特性,第二层是质量子特性,第三层是度量指标。这种模型定义的质量特性包括功能性、可靠性、易使用性、效率、可维护性和可移植性,其中可维护特性又包括易分析性、易改变性、稳定性和易测试性共4项子特性。 本题选C。

单选题


257. 某软件在应用初期运行在Windows NT环境中。现因某种原因,该软件需要在UNIX环境中运行,而且必须完成相同的功能。为适应这个要求,软件本身需要进行修改,而所需修改的工作量取决于该软件的()。

答案:D

解析:

软件的可扩充性指软件的体系结构、数据设计和过程设计的可扩充程度,可扩充性影响着软件的灵活性和可移植性。 软件可靠性指软件按照设计要求,在规定时间和条件下不出故障,可持续运行的程度,可靠性取决于软件的一致性、安全性、容错性和准确性等.软件复用性指软件或软件的部件能被再次用于其他应用中的程度, 软件复用性取决于其模块独立性、通用性和数据共享性等。 软件可移植性指将软件系统从一个计算机系统或环境移植到另一种计算机系统或环境中运行时所需工作量的大小,可移植性取决于系统中硬件设备的特征、软件系统的特点和开发环境、系统分析与设计中关于通用性、软件独立性和可扩一充性等方面的考虑。 本题选D。

单选题


258. 按照ISO/IEC 9126软件质量度量模型定义,一个软件的可靠性的子特性包括()。

答案:C

解析:

目前已有多种关于软件质量的度量模型,它们都把软件质量特性定义为分层模型,其中最基本的称作基本质量特性(简称质量特性),每个质量特性包括多项质量子特性。在最初的ISO模型中,包括8个基本特性。而1991年发布的ISO/IEC 9126模型中,基本特性减少为6个:功能性、可靠性、易使用性、效率、可维护性和可移植性。其中可靠性包括三个子特性,即成熟性、容错性和易恢复性。而安全性是功能性的子特性,适应性是可移植性的子特性。 本题选C。

单选题


259. 若软件项目组对风险采用主动的控制方法,则( )是最好的风险控制策略。

答案:A

解析:

风险避免即放弃或不进行可能带来损失的活动或工作。例如,为了避免洪水风险,可以把工厂建在地势较高、排水方便的地方,这是一种主动的风险控制方法。 风险监控是指在决策主体的运行过程中,对风险的发展与变化情况进行全程监督,并根据需要进行应对策略的调整。 风险管理是指在一个肯定有风险的环境里把风险减至最低的管理过程。对于风险我们可以转移,可以规避,但不能消除。 本题选A。

单选题


260. 系统中模块的( )不仅意味着作用于系统的小变动将导致行为上的小变化,也意味着规格说明的小变动将影响到一小部分模块。

答案:D

解析:

连续性指模块间逻辑或功能的紧密关联性,小变动会引发行为变化,且规格说明调整仅影响局部模块。本题选D。

单选题


261. 针对“关键职员在项目未完成时就跳槽”的风险,最不合适的风险管理策略是( )。

答案:C

解析:

在IT项目中,临时的新增人员与替换人员,是需要谨慎处理的一件事情。因为新增人员需要与原团队磨合、需要花很多时间了解项目情况、同时增加沟通成本。本题选C。

单选题


262. 软件设计包括4个既独立又相互联系的活动,分别为( ) 、(作答此空)、数据设计和过程设计。

答案:D

解析:

软件设计包括4个既独立又相互联系的活动,分别为体系结构设计 、接口设计 、数据设计和过程设计。设计模型可以表示成金字塔,这种形状的象征意义是重要的,金字塔是极为稳固的物体,它具有宽大的基础和低的重心。象金字塔一样,我们希望构造坚固的软件设计,通过用数据设计建立宽广的基础,用体系结构和接口设计建立坚固的中部,以及应用过程设计构造尖锐的顶部,从而创建出不会被修改之风轻易"吹倒"的设计模型。本题选D

单选题


263. ( ) 中的每个软件配置项的需求到其涉及的系统(或子系统)需求都要具有双向可追踪性。检查设计文档、代码、测试用例等工作成果是否都能在其中找到出处属于 (作答此空) 。

答案:B

解析:

SRS 中的每个软件配置项的需求到其涉及的系统(或子系统)需求都要具有双向可追踪性。双向跟踪包括正向跟踪和反向跟踪,正向跟踪是指检查 SRS 中的每个需求是否都能在后继工作成果中找到对应点;反向跟踪也称为逆向跟踪,是指检查设计文档、代码、测试用例等工作成果是否都能在 SRS 中找到出处。本题选B。

单选题


264. 单元测试中,检查模块接口时,不需要考虑( )。

答案:D

解析:

单元测试的内容包含以下几个方面: (1)模块接口测试 在单元测试的开始,应对通过被测模块的数据流进行测试。如果数据不能正常地输入及输出,那么其他的全部测试都说明不了问题。测试项目包括: 模块输入参数的数目、参数属性、参数类型是否与模块形式参数数目、形参属性、形参类型一致 ;传到被调用模块的实参的数目、实参的属性、实参的类型是否与被调用模块形参的数目、形参的属性、形参的类型相同;全局量的定义在各模块中是否一致;在做内外存交换时要考虑文件属性是否正确;OPEN与CLOSE语句是否正确;缓冲区容量与记录长度是否匹配;在进行读写操作之前是否打开了文件;在结束文件处理时是否关闭了文件;正文书写/输入错误;I/O错误是否检查并做了处理;引用内部函数时,实参的次序和数目是否正确;是否引用了与当前入口无关的参数;用于输入的变量有没有改变。 (2)局部数据结构测试 不正确或不一致的数据类型说明;使用尚未赋值或尚未初始化的变量;错误的初始值或错误的缺省值;变量名拼写错或书写错;不一致的数据类型;全局数据对模块的影响。 (3)路径测试 (4)错误处理测试 (5)边界测试 本题ABC选项属于模块接口测试,D选项属于局部数据结构测试,不属于模块接口测试。

单选题


265. 在系统验收测试中,(作答此空)是在一个模拟的环境下使用模拟数据运行系统;( ) 是在一个实际环境中使用真实数据运行系统。

答案:A

解析:

系统验收测试是最终用户使用真实数据一段时间后进行的最终系统测试;它给最终用户、管理人员和信息系统操作管理人员最后一次机会决定接收或者拒绝系统。系统验收测试是一种详细测试,涉及3个层面的验收测试:验证测试、确认测试和审计测试。 (1)验证测试是在一个模拟环境下使用模拟数据运行系统,它主要寻找错误和遗漏。 (2) 确认测试在一个实际环境中使用真实数据运行系统。在确认测试过程中,可以 测试系统性能、峰值负载处理性能、方法和程序测试、备份和恢复测试等。 (3)审计测试证实系统没有错误并准备好了可以运行。 本题选A。

单选题


266. 软件系统设计的主要目的是为系统制定蓝图,( )并不是软件设计模型所关注的。

答案:D

解析:

本题考查软件系统设计知识。系统设计为系统制定蓝图,软件设计模型关注新系统总体结构、代码设计、处理过程、数据结构和界面模型等。对项目范围的关注在软件设计之前。本题选D。

单选题


267. 极限编程(XP)由价值观、原则、实践和行为四个部分组成,其中价值观包括沟通、简单性、( )。

答案:C

解析:

本题考查敏捷开发方法。   极限编程(XP)是敏捷开发的典型方法之一,是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方法,它由价值观、原则、实践和行为4个部分组成。其中4大价值观为沟通、简单性、反馈和勇气。本题选C。

单选题


268. 在模拟环境下,常采用黑盒测试检验所开发的软件是否与需求规格说明书一致。其中有效性测试属于()中的一个步骤。

答案:C

解析:

本题考查系统测试中的确认测试。确认测试首先要进行有效性测试以及软件配置审查,然后进行验收测试和安装测试。其中有效性测试,就是在模拟环境下,通过黑盒测试检验所开发的软件是否与需求规格说明书一致。本题选C。

单选题


269. 敏捷开发方法XP是一种轻量级、高效、低风险、柔性、可预测的、科学的软件开发方法,其特性包含在12个最佳实践中。系统的设计要能够尽可能早交付,属于( )最佳实践。

答案:C

解析:

12个最佳实践分别是:计划游戏,小型发布,隐喻,简单设计,测试先行,重构,结对编程,集体代码所有制,持续集成,每周工作40小时,现场客户及编码标准。其中系统的设计要能够尽可能早交付属于小型发布。 小型发布可以使得集成更频繁,客户获得的中间结果越频繁,反馈也就越频繁,客户就能够实时地了解项目的进展情况,从而提出更多的意见,以便在下一次迭代中计划进去,以实现更高的客户满意度。本题选C。

单选题


270. 极限编程(eXtreme Programming)是一种轻量级软件开发方法,()不是它强调的准则。

答案:C

解析:

极限编程( eXtreme Programming.XP)是1998年由Kent Beck首先提出的一种轻量级的软件开发方法,同时也是一种非常严谨和周密的方法。这种方法强调交流、简单、反馈和勇气4项原则,也就是说一个软件项目可以从4个方面进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期。通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和可能存在的困难等,并根据实际情况及时地调整开发过程。本题选C。

单选题


271. ( )最不适于采用无主程序员组的开发人员组织形式。

答案:C

解析:

大规模项目最不适于采用无主程序员组的开发人员组织形式,因为大项目需要主程序员来整合各模块程序。本题选C。

单选题


272. 在开发信息系统时,用于系统开发人员与项目管理人员沟通的主要文档是( )。

答案:C

解析:

本题考查开发文档的作用。系统开发人员与项目管理人员在项目期内进行沟通的文档主要有系统开发计划、系统开发月报以及系统开发总结报告等项目管理文件。本题选C。

单选题


273. ( )不是增量式开发的优势。

答案:D

解析:

增量式开发的主要优点包括: 1、由于能够在较短的时间内向用户提交一些有用的工作产品,因此能够解决用户的一些急用功能。 2、由于每次只提交用户部分功能,用户有较充分的时间学习和适应新的产品。 3、对系统的可维护性是一个极大的提高,因为整个系统是由一个个构件集成在一起的,当需求变更时只变更部分部件,而不必影响整个系统。 主要缺点包括: 1、由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。 2、在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。 3、如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。 本题选D。

单选题


274. 喷泉模型是一种适合于面向( )开发方法的软件过程模型。该过程模型的特点不包括(作答此空 )。

答案:D

解析:

本题考查软件工程开发模型的特点。

喷泉模型是一种适合于面向对象开发方法的软件过程模型。 喷泉模型的特点包括: 以用户需求为动力:喷泉模型强调以用户的需求和期望为软件开发的主要驱动力。 支持软件重用:喷泉模型鼓励在软件开发过程中重用已有的代码、设计和其他资源,以提高开发效率和软件质量。 具有迭代性:喷泉模型支持迭代开发,即在软件开发过程中,可以不断地根据用户的反馈和需求变化对软件进行修改和优化。 喷泉模型的特点不包括: 开发活动之间存在明显的界限:喷泉模型认为软件开发过程是一个迭代和无缝的过程,各种活动(如需求分析、设计、编码和测试)之间没有明显的界限,而是相互交织、相互促进的。 综上所述,喷泉模型是一种适合于面向对象开发方法的软件过程模型,其特点不包括开发活动之间存在明显的界限。 所以正确答案为D。

单选题


275. 喷泉模型是一种适合于面向(作答此空)开发方法的软件过程模型。该过程模型的特点不包括( )。

答案:A

解析:

本题考查软件工程开发模型的特点。

喷泉模型是一种适合于面向对象开发方法的软件过程模型。 喷泉模型的特点包括: 以用户需求为动力:喷泉模型强调以用户的需求和期望为软件开发的主要驱动力。 支持软件重用:喷泉模型鼓励在软件开发过程中重用已有的代码、设计和其他资源,以提高开发效率和软件质量。 具有迭代性:喷泉模型支持迭代开发,即在软件开发过程中,可以不断地根据用户的反馈和需求变化对软件进行修改和优化。 喷泉模型的特点不包括: 开发活动之间存在明显的界限:喷泉模型认为软件开发过程是一个迭代和无缝的过程,各种活动(如需求分析、设计、编码和测试)之间没有明显的界限,而是相互交织、相互促进的。 综上所述,喷泉模型是一种适合于面向对象开发方法的软件过程模型,其特点不包括开发活动之间存在明显的界限。 所以正确答案为A。

单选题


276. 关于螺旋模型,下列陈述中不正确的是( )。

答案:C

解析(AI 生成):

螺旋模型把开发与风险分析结合,每轮迭代都做风险分析,要求开发人员具备风险分析能力,并支持需求动态变化;迭代过多会增加成本、推迟交付,A、B、D均正确。该模型每轮都构建原型并做风险分析,成本较高,多用于大型高风险项目,说其开发成本低不正确。

单选题


277. 关于螺旋模型,下列陈述中不正确的是( )。

答案:D

解析(AI 生成):

螺旋模型在瀑布模型上加入风险分析,每轮螺旋都经历制定计划、风险分析、实施工程、客户评估,适合大规模、复杂、高风险项目,A、B、C均成立。D的快速提供初始版本供用户试用是原型模型的特征,螺旋模型强调风险驱动的完整迭代。

单选题


278. 以下活动不属于逆向工程的是 ( ) ,如果只是希望完成代码重构任务,则只需获得 (作答此空) 信息即可。

答案:A

解析:

与逆向工程相关的概念有重构、设计恢复、再工程和正向工程。 对于代码重构任务,通常只需获得实现级信息,即过程的设计模型(实现级,一种底层的抽象),因为这足以支持代码级别的修改和优化。本题选A。

单选题


279. 以下活动不属于逆向工程的是 (作答此空) ,如果只是希望完成代码重构任务,则只需获得 ( ) 信息即可。

答案:D

解析:

与逆向工程相关的概念有重构、设计恢复、再工程和正向工程。 对于代码重构任务,通常只需获得实现级信息,即过程的设计模型(实现级,一种底层的抽象),因为这足以支持代码级别的修改和优化。 本题选D。

单选题


280. 在软件开发中, (作答此空 )不能用来描述项目开发的进度安排。在其他三种图中,可用( )动态地反映项目开发进展情况。

答案:D

解析:

甘特图、PERT(计划评审技术)图及CPM(关键路径法)图是软件项目管理中常用的管理开发进度的工具,鱼骨图是常用来发现问题根源并提出解决问题的有效办法的工具。在这三种开发进度管理工具图中,甘特图能够消晰描述每个任务的开始/结束时间及各任务之间的并行性,也可以动态地反映项目的开发进展情况,但难以反映多个任务之间存在的逻辑关系;PERT利用项目的网络图和各活动所需时间的估计值(通过加权平均得到的)去计算项目总时间,强调任务之间的先后关系,但不能反映任务之间的并行性,以及项目的当前进展情况;CPM借助网络图和各活动所需时间,计算每一活动的最早或最迟开始和结束时间。CPM的关键是计算总时差,这样可决定哪一活动有最小时间弹性。PERT利用项目的网络图和各活动所需时间的估计值(通过加权平均得到)去计算项目总时间。PERT不同于CPM的主要点在于PERT利用期望值而不是最可能的活动所需时间估计(在CPM法中用的)。 本题选D。

单选题


281. UP(统一过程)是用例驱动的、以架构为核心、迭代和增量的软件过程框架,它提供了一种()的特性。

答案:A

解析:

本题考查UP(统一过程)的特性。UP是用例驱动的、以架构为核心、迭代和增量的软件过程框架,它提供了一种演进的特性。敏捷、测试驱动、持续集成是XP(极限编程)的特性。 本题选A。

单选题


282. 在选择开发方法时,有些情况不适合使用原型法,以下选项中不能使用快速原型法的情况是( )。

答案:D

解析:

快速原型法适用于需求不确定性高、需频繁调整的场景,例如: 系统使用范围变化大(可通过原型迭代适应) ‌ 设计方案难以确定(原型可辅助优化设计) ‌ 用户需求模糊不清(原型能帮助明确需求) ‌ 不适用场景 当用户的数据资源缺乏组织和管理时,原型开发缺乏基础数据支持,导致原型验证效果受限, 无法有效推进开发。 ‌ 本题选D。

单选题


283. 软件能力成熟度模型(CMM)的第4级(已管理级)的核心是( )。

答案:C

解析:

本题考查成熟度等级(CMM)知识。在CMM的不同等级有不同的核心。在可重复级,建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性。在已定义级,所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件。在已管理级,收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解与控制。在优化级,过程的量化反馈和先进的新思想、新技术促使过程不断改进。本题选C。

单选题


284. 关于过程改进,以下叙述中不正确的是( )。

答案:D

解析:

软件过程改进的实施对象是软件企业的软件过程,也就是软件产品的生产过程,其中还也包括软件维护之类的维护过程。 在本题各选项的描述中,A、B、C都是正确的,D不正确。 CMMI是Capability Maturity Model Integration的简称,即能力成熟度模型集成,它是在CMM的基础上发展起来的。CMMI是一种过程改进模型,它不仅支持阶段性过程改进,而且还支持连续性过程改进。

单选题


285. 以下关于过程改进的叙述中,错误的是( )。

答案:B

解析:

软件过程改进/过程改进(SPI)帮助软件企业对其软件(制作)过程的改变(进)进行计划、(措施)制定以及实施。它的实施对象就是软件企业的软件过程,也就是软件产品的生产过程,当然也包括软件维护之类的维护过程,而对于其他的过程并不关注。在软件过程改进时,如果发现问题,需转化为软件过程改进计划。软件过程改进不是一次性就能达到最终目标,而是需要反复进行的,每次改进会经历四个步骤:评估、计划、改进和监控。 软件过程改进的框架包括:过程改进基础设施,过程改进线路图,软件过程评估方法和软件过程改进计划。本题选B。

单选题


286. 软件能力成熟度模型将软件能力成熟度自低到高依次划分为初始级、可重复级、定义级、管理级和优化级,并且高级别成熟度一定可以达到低级别成熟度的要求。其中()中的开发过程及相应的管理工作均已标准化、文档化,并已建立完善的培训制度和专家评审制度。

答案:D

解析:

软件能力成熟度模型是美国卡内基·梅隆大学提出的用于评估软件机构的能力成熟度方法和标准,现已被业界广泛重视。该模型将软件机构能力成熟度分为5个级别.从第三级(定义级)到最高级(优化级),都要求软件开发过程及相应的管理工作必须标准化、文档化,并综合为软件机构的标准软件过程:并必须建立完善的培训制度和专家评审制度。本题选D。

单选题


287. CMU/SEI推出的( )将软件组织的过程能力分为五个成熟度级别,每一个级别定义了一组过程能力目标,并描述了要达到这些目标应该具备的实践活动。

答案:A

解析:

CMU/SEI推出的‌软件能力成熟度模型(CMM)‌将软件组织的过程能力分为五个成熟度级别,每个级别定义了一组过程能力目标,并描述了达到这些目标应具备的实践活动‌。本题选A。

单选题


288. 美国卡内基—梅隆大学SEI提出的CMM模型将软件过程的成熟度分为5个等级,以下选项中,属于可管理级的特征是( )。

答案:D

解析:

根据CMM模型的定义,已管理级(Managed Level)的核心特征是‌软件过程中活动的生产率和质量是可度量的‌‌。本题选D。 ‌初始级‌:工作无序,项目常放弃原计划; ‌可重复级‌:建立项目级管理制度; ‌已定义级‌:建立企业级标准化流程。

单选题


289. SEl 能力成熟度模型(SEI CMM)把软件开发企业分为 5 个成熟度级别,其中( )重点关注产品和过程质量。

答案:C

解析:

本题考查软件过程和软件过程改进的基础知识。CMM是指软件开发能力成熟度模型,该模型给出了从混乱的个别的过程达到成熟的规范化过程的一个框架,分成5个等级,从1级到5级成熟度逐步提高。级别1为初始级,特点是混乱和不可预测:级别2为重复级级别,特点是项目得到管理监控和跟踪,有稳定的策划和产品基线:级别3为确定级级别,通过软件过程的定义和制度化确保对产品质量的控制:级别4为管理级级别,特点是产品质量得到策划,软件过程基于度量的跟踪:级别5为优化级,特点是持续的过程能力改进。本题选C。

单选题


290. 以下关于软件系统文档的叙述中,错误的是( )。

答案:C

解析:

软件系统文档既包括有一定格式要求的规范文档,又包括系统建设过程中的各种来往文件、会议纪要、会计单据等资料形成的不规范文档,通过它可以提高软件开发的可见度,提高软件开发的效率以及便于用户理解软件的功能、性能等各项指标。本题选C。

单选题


291. ( )不属于软件配置管理的活动。

答案:C

解析:

本题考查软件配置管理的基础知识。 软件配置管理是一组管理整个软件生存期各阶段中变更的活动,主要包括变更标识、变更控制和版本控制。本题选C。

单选题


292. 系统开发计划用于系统开发人员与项目管理人员在项目期内进行沟通,它包括( )和预算分配表等。

答案:A

解析:

本题考查系统开发计划文档知识。   用于系统开发人员与项目管理人员在项目期内进行沟通的文档主要有系统开发计划,包括工作任务分解表、PERT图、甘特图和预算分配表等。总体规划和开发合同用于与系统分析人员在系统规划和系统分析阶段的沟通。测试计划用于系统测试人员与系统开发人员之间的沟通。本题选A。

单选题


293. 对于一个大型软件来说,不加控制的变更很快就会引起混乱。为有效地实现变更控制,需借助于配置数据库和基线的概念。( )不属于配置数据库。

答案:C

解析:

本题考查软件变更管理和配置管理的基础知识。 软件变更控制是变更管理的重要内容,要有效进行变更控制,需要借助配置数据库和基线的概念。配置数据库一般包括开发库、受控库和产品库。本题选C。

单选题


294. 在结构化分析方法中,( )用于功能建模;( )用于数据建模;(作答此题 )用于行为建模。

答案:C

解析:

在结构化分析方法中,数据流图用于功能建模;E-R图用于数据建模;状态转换图用于行为建模

单选题


295. 关于程序模块优化的启发式规则有若干条,以下规则中不符合优化原则的是( )。如果一个模块调用下层模块时传递一个数据结构,则这种耦合属于(作答此空)。

答案:C

解析:

当模块间传递的是数据结构(而非简单数据值或控制参数)时,称为标记耦合。本题选C。

单选题


296. 关于程序模块优化的启发式规则有若干条,以下规则中不符合优化原则的是(作答此空)。如果一个模块调用下层模块时传递一个数据结构,则这种耦合属于( )。

答案:B

解析:

模块之间的耦合是指模块之间依赖程度的度量,模块内聚是指模块内部各成份之间相互关联程度的度量。与其他模块之间存在强耦合的模块通常内聚性弱,强内聚的模块通常与其他模块之间存在弱耦合。因此,模块设计追求强内聚、弱耦合。 模块扇出数高,通常意味着模块内部的复杂性高,优化规则要求控制扇出数不能太高,所以B不符合优化规则。

单选题


297. 在选择某种面向对象语言进行软件开发时,不需要着重考虑的因素是,该语言()。

答案:D

解析:

现有的面向对象语言有很多已经不再提供全局变量和全局函数的定义,实践也证明了全局变量和函数并不是一种很好的程序设计风格,因此该特点不应作为语言选择需要考虑的因素之一。本题选D。

单选题


298. CVS是一种()工具。

答案:D

解析:

CVS的全称是Concurrent Version System,它是一个免费的协同版本控制工具,主要用于软件源码的维护。此外CVS可以维护任意文档的开发和使用,例如共享文件的编辑修改,而不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS基于客户端朋及务器模式,多个用户可通过网络(或本地)方式同时访问,从而使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。本题选D。

单选题


299. 继承的主要作用是 ( )。

答案:A

解析:

继承的主要作用是子类可以复用父类的属性和方法,减少重复代码。例如,父类 Vehicle 定义 speed 属性和 move() 方法,子类 Car 和 Bike 继承后自动拥有这些成员,避免在每个子类中重复编写 move() 的逻辑,显著提升了开发效率。

单选题


300. 软件再工程的主要作用是( )。

答案:C

解析:

软件再工程是指对现有软件系统进行重新设计、重构和重新实现,以改善其内部结构、可理解性和可维护性,同时保留其原有外部功能。其主要目的是使软件更容易维护和扩展,以应对系统老化、技术债务和不断变化的需求。选项A、B、D可能是再工程的附带效果或特定优化目标,但并非核心作用。

单选题


301. 在面向对象程序设计中,用于描述一组具有相同属性和行为的实体的抽象定义是( )。

答案:B

解析:

类是面向对象编程中的核心概念,它是对具有相同属性(数据成员)和行为(成员方法)的对象的抽象描述,定义了该类对象共有的特征和操作。 对象是类的实例化结果,是具体的实体。 实例与对象同义,指的是根据类创建的具体对象。 方法是类中定义的函数,描述对象的行为。

单选题


302. 在面向对象设计中,“销售员”是一种特殊“用户”,两者的关系是(本题)。“农民”类的某个方法临时使用“订单”对象,两者的关系是( )。

答案:A

解析:

继承表示“is-a”关系,即子类是父类的特殊类型。销售员是用户的一种特殊角色,因此是继承关系。依赖表示一个类临时使用另一个类,如作为方法参数或局部变量。农民类的方法临时使用订单对象,因此是依赖关系。

单选题


303. 在软件模块设计中,内聚程度最低的是( )。

答案:C

解析:

内聚程度从低到高依次为:偶然内聚(又称病态内聚)、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚(即内容内聚)。因此,病态内聚是内聚程度最低的一种,模块内各部分之间几乎没有关联,只是偶然被组合在一起。

单选题


304. 若一个模块内的所有部分协同完成一个单一功能,且这些部分缺一不可,则该模块的内聚类型属于( )。

答案:D

解析:

功能内聚:模块中的各个部分共同完成一个单一的功能,且彼此紧密相关、缺一不可,这是最高程度的内聚。 偶然内聚:模块内各部分之间没有实质联系,只是偶然组合在一起。 逻辑内聚:模块内各部分是逻辑上相似的功能,但彼此关系较弱。 时间内聚:模块内各部分在同一时间段内执行,但功能上可能不相关。

单选题


305. 以下选项中,不属于软件危机典型表现的是( )。

答案:D

解析:

软件危机是指在软件开发和维护过程中遇到的一系列难题和挑战,其核心是软件自身的开发效率、成本、质量和可维护性问题,主要表现为预算超支、进度延误、质量低劣、维护困难等。选项D所述的“硬件资源无法满足需求”属于外部硬件条件或资源配置问题,而非软件工程过程内部固有的危机,因此不属于软件危机的典型表现。

单选题


306. 在软件维护中,修改用户系统操作界面通常属于( )。

答案:C

解析:

软件维护分为四种类型: ① 纠正性维护:修复软件中的错误或缺陷。 ② 适应性维护:使软件适应变化的外部环境(如新操作系统、硬件)。 ③ 完善性维护:改进软件性能、可维护性或增加新功能以满足用户需求,如优化用户界面。 ④ 预防性维护:预先调整软件以利于未来维护。 ⑤ 修改用户操作界面旨在提升用户体验或功能,属于完善性维护。

单选题


307. COCOMO模型的主要目的是( )。

答案:B

解析:

COCOMO(构造性成本模型)是由 Barry Boehm 提出的一种用于估算软件项目工作量、成本和开发时间的经典模型。它基于历史项目数据,通过软件规模(如代码行数)和一系列成本驱动因素进行估算,不属于质量评估、算法优化或进度管理范畴。

单选题


308. 在项目管理中,关键路径法的核心是( )。

答案:B

解析:

关键路径法的核心是通过分析项目活动间的依赖关系,找出工期最长的连续活动序列,这条路径就是关键路径。它决定了项目的最短总工期,是该方法的根本目的。

单选题


309. 软件可维护性的主要影响因素不包括( )。

答案:A

解析:

软件可维护性的主要影响因素包括:可理解性、可测试性、可修改性、可靠性、模块独立性(内聚与耦合)、文档质量、程序复杂度等。代码行数本身并不是可维护性的直接影响因素,一个500行但结构清晰的程序可能比一个200行但混乱的程序更易维护。因此A不属于主要影响因素。

单选题


310. 软件的过程改进是为了( )。

答案:C

解析:

软件过程改进的本质是通过优化开发流程,持续提高软件产品的质量和开发效率,其中"提高质量"是第一目标。

单选题


311. ( )是同一时间段内通过某一网络的数量。

答案:A

解析(AI 生成):

吞吐量指单位时间内通过某一网络的数据量,反映网络实际承载能力,故A正确。带宽是链路单位时间能传输的最大数据量,属理论值;速率多指数据传输速率本身;吞吐率通常指单位时间完成的事务或请求数,均不描述通过网络的数量。

单选题


312. 某平台,需要先登录,验证码,登录日志,跳转首页,需要按照这个时间顺序进行调用,属于什么内聚( )。

答案:C

解析:

偶然内聚是指模块内的元素毫无关系,例如,工资计算和天气预报。 过程内聚指按特定执行流程组织模块,如,先登录→验证码→日志→跳转。 逻辑内聚是指模块内的元素具有逻辑上相似的功能,例如,一个模块叫"输入处理",里面同时包含:键盘输入、鼠标输入、文件读取、网络接收 这些操作逻辑上相似,但功能完全不同,只是因为"都是输入"被放在一个模块里。 时间内聚是指模块内的各处理元素因需要在同一时间段内执行而被组合在一起,但这些元素之间在功能上彼此无关,没有数据传递或逻辑依赖关系。例如,系统启动时的初始化模块,包含:变量赋初值、初始化寄存器、打开文件、加载配置……这些操作都在启动时执行,但彼此之间没有任何逻辑或数据上的联系。

单选题


313. 电商平台,已有支付宝支付类型,现在增加微信支付类型,不改变原有的逻辑,这是什么原则( )。

答案:A

解析:

开放封闭原则是指软件实体应当对扩展开放,对修改封闭。即系统的功能应当允许通过增加新代码来实现扩展,而非通过修改已有代码来适应变化。其核心在于封装变化,依赖接口与抽象,而非依赖具体实现,从而在保持已有功能稳定的前提下,支持系统的平滑演进。 单一职责原则是指一个类应当仅有一个引起其变化的原因,即只承担一项职责。若一个类承担了多项职责,则这些职责被耦合在一起,当其中一项职责发生变化时,可能影响其他职责的正常运作。该原则旨在通过职责分离来降低耦合、增强内聚,使每个类的功能清晰、可维护、可复用。 里氏替换原则是指子类对象必须能够替换其父类对象,且不会导致程序的正确性受到影响。换言之,在程序中凡是使用基类的地方,均可透明地使用其子类对象,程序的行为保持不变。该原则要求子类严格遵守父类的行为契约,包括方法的前置条件、后置条件及异常规范,确保继承关系的正确性与多态机制的可靠运行。 依赖倒置原则是指高层模块不应依赖低层模块,二者均应依赖抽象;抽象不应依赖细节,细节应依赖抽象。其核心思想是面向接口编程,而非面向实现编程。通过将依赖关系从具体实现转移到抽象层,可以有效降低模块间的耦合度,使系统在更换具体实现时无需修改依赖抽象的高层模块,从而提升系统的灵活性与可测试性。

单选题


314. 模块A调用模块B,传递了一个控制标记,模块B根据该标记选择不同的功能执行,两个模块之间的耦合类型是( )。

答案:C

解析:

数据耦合传递的是简单数据值(如整数、浮点数),用于计算。 标记耦合传递的是数据结构(如记录/对象),而非控制信号。 传递参数中包含“控制标记”(如flag/switch),接收方根据标记改变内部逻辑,属于控制耦合,耦合度较高。 公共耦合指多个模块共享全局变量或公共数据区,与传参无关。

单选题


315. 软件工程中,瀑布模型的核心特点不包括( )。

答案:B

解析:

A是瀑布特点:线性顺序是其本质。 B不是瀑布特点:瀑布模型的最大缺点就是难以应对需求变更,不具备灵活性,必须严格按阶段推进。 C是瀑布特点:每个阶段结束需评审(里程碑)。 D是瀑布特点:产出大量文档(需求、设计、测试文档)。

单选题


316. 结构化程序设计的三种基本控制结构是( )。

答案:A

解析:

Böhm-Jacopini定理证明,任何程序只需顺序(Sequence)、选择(Selection/分支)、循环(Iteration) 三种结构即可实现。跳转(goto)破坏了结构化,递归(Recursion)是函数调用形式,不算基本结构。

单选题


317. 以下关于软件测试的描述,错误的是( )。

答案:D

解析:

A正确:单元测试(白盒为主)检查模块内部的逻辑、接口、边界。 集成测试分为渐增式(如自顶向下、自底向上)和非渐增式(一次性集成)。 系统测试验证系统整体是否满足SRS。 验收测试(α测试/β测试)应由用户主导或用户深度参与,开发方配合,目的是让用户确认系统是否满足业务需求。

单选题


318. 在敏捷开发中,产品待办列表(Product Backlog)的主要作用是( )。

答案:B

解析:

站会内容记录是站会纪要,非Backlog。 Product Backlog是Scrum中的核心工件,包含所有用户故事/需求,并由Product Owner按照商业价值排序。 里程碑通常在发布计划(Release Plan)中定义。 具体任务分配在Sprint Backlog中细化。

单选题


319. UML类图中,下列关于聚集和组合的描述,正确的是( )。

答案:A

解析:

A正确:这是UML元模型的核心区分。聚合(Aggregation):空心菱形,语义为“共享”(Shared),部分可独立存在,例如“汽车”和“轮胎”,轮胎拆下后可安装到另一辆车。组合(Composition):实心菱形,语义为“复合”(Composite),部分的生命周期受整体支配,例如“人”和“心脏”,人消亡则心脏无意义。 完全颠倒了聚合和组合的强弱关系。 混淆了二者,且断言“都不能脱离”是错误的(聚合可以脱离)。 聚合和组合都是关联的特化,但具有严格的语义约束(多重性、生命周期),绝非普通关联。

单选题


320. 以下关于UML类图的描述,正确的是( )。

答案:C

解析:

类图(Class Diagram)是UML最核心的结构图,可以描述类的属性(Attributes)、方法(Operations)、可见性(+/-/#)。 关联(Association)是一种强语义关系,代表类之间的结构化连接(如双向、导航性、多重性)。依赖(Dependency)才是表示“使用”的弱关系(虚线箭头)。 泛化(Generalization,实线三角箭头)表示继承,“is-a”关系(子类是父类的一种)。 描述的是组合(Composition),而非聚合(Aggregation)。聚合部分可独立。

单选题


321. 在UML2.x中,用于描述系统与外部参与者之间交互的图是( )。

答案:B

解析:

A(类图):静态结构,描述系统中的类及其关系。 B(用例图)正确:展示系统边界(System Boundary)、参与者(Actor) 和用例(Use Case),用于需求分析阶段。 C(序列图):动态行为图,描述对象间消息交互的时间顺序。 D(组件图):静态实现图,描述软件组件间的依赖关系。

单选题


322. 以下UML图中,用于描述系统动态行为的是( )。

答案:C

解析:

UML图分为结构图(静态)和行为图(动态)。 A/D结构图:类图、包图属于静态结构。 B用例图:属于需求建模,虽涉及交互但更偏功能描述,不描述行为细节。 C顺序图正确:属于交互图(行为图的一种),展示对象间消息发送的顺序,描述系统动态执行流程。

单选题


323. 设计模式中,( )模式允许一个对象在其状态改变时,通知依赖它的对象自动更新。

答案:A

解析:

A(观察者)正确:定义一对多依赖关系,被观察者(Subject)状态变化时,通知所有观察者(Observer)更新。典型应用:MVC架构、事件驱动GUI。 B(策略):封装一组算法,使其可互换,用于算法族的切换(如支付方式选择)。 C(工厂方法):创建型模式,定义创建对象的接口,让子类决定实例化哪个类。 D(单例):确保一个类只有一个实例,并提供一个全局访问点(如连接池)。

单选题


324. 在面向对象设计中,若类A通过接口I调用类B的方法,而类B又通过同一接口I回调类A的方法,这种设计模式最可能是( )。

答案:C

解析:

观察者模式:通常是单向通知(主题→观察者),即使双向也通常不是通过同一接口直接互相调用。 策略模式:上下文持有策略接口,但策略不会回调上下文。 中介者模式:中介者模式(Mediator)封装对象间的交互,对象之间通过中介者通信,中介者协调双方,常表现为A调用中介者,中介者回调B,或通过接口互相转发,符合“双向交互”特征。 访问者模式:用于将操作封装在访问者中,元素接受访问者,通常不涉及双方通过同一接口互调。

单选题


325. 以下关于设计模式的描述,不正确的是( )。

答案:D

解析:

A/B/C均正确,分别为单例、工厂、适配器的标准定义。 D不正确:观察者模式是一对多(一个Subject对应多个Observer),不是一对一。

单选题


326. 在UML2.5规范中,若顺序图里出现“strict”交互运算符,其语义最接近于下列哪种程序结构?( )

答案:A

解析:

顺序图(Sequence Diagram)中的交互片段(Interaction Fragment)运算符: strict:表示交互片段内的消息必须严格按顺序执行,与代码的顺序结构(Sequential)对应。 loop:循环结构。 par:并发/并行结构(Parallel)。 alt:多路选择(Alternative),类似if-else。

单选题


327. 软件工程中,提高软件质量的重要手段是( )。

答案:A

解析:

质量管理的重点在于预防而非检测。 评审(Review/Walkthrough):通过同行检查设计、代码、文档,在早期发现并纠正缺陷,是提高质量最有效的预防手段。 C(测试):属于检测缺陷,虽然必要,但测试只能发现已存在的缺陷,不能“提高”内在质量。 B/D:编码和维护是活动阶段,本身不是提高质量的手段。

单选题


328. 在软件开发过程中,变更控制委员会(CCB)的主要职责是( )。

答案:A

解析:

CCB(Change Control Board) 是配置管理中负责变更控制的决策机构。 A正确:评估变更的成本、进度、技术影响,决定批准或拒绝变更请求。 B(详细设计):开发人员(设计师)职责。 C(单元测试):测试人员/开发人员职责。 D(部署):运维/DevOps职责。

单选题


329. 在CMMI模型(连续式表示法)中,每个过程域的能力等级划分为( )级。

答案:A

解析:

CMMI连续式表示法将每个过程域的能力等级分为0级(未执行)至5级(优化),共6个等级。选项B为阶段式表示法中的成熟度等级(1~5)。选项C缺少5级,选项D不存在6级划分。

单选题


330. 软件项目的功能点估算中,外部输入(EI)是指( )。

答案:B

解析:

外部输入(External Input)指从系统外部进入的数据或控制信息,用于维护或修改系统内部逻辑文件。选项A为外部输出(EO),选项C为外部查询(EQ),选项D描述的是内部逻辑文件(ILF)本身,非加工类型。

单选题


331. 软件集成测试中,自底向上集成需要编写( )。

答案:A

解析:

自底向上集成从底层模块开始,高层模块尚未开发,需编写驱动模块(Driver)来调用被测底层模块。选项B(桩模块)用于自顶向下集成。选项C为混合式(三明治)集成的需求。选项D与集成策略的占位程序无关。

单选题


332. 在McCall质量模型中,产品修改(Product Revision)的质量因素不包括( )。

答案:D

解析:

McCall模型三大类中,产品修改包含可维护性、灵活性、可测试性。可移植性属于产品转移(Product Transition)。选项A、B、C均属产品修改。

单选题


333. 软件配置管理(SCM)中,版本控制的核心功能是( )。

答案:A

解析:

版本控制工具(如Git)的核心机制为追踪文件修改历史并提供版本回退功能。选项B属于变更控制(CCB职责),选项C属于配置项关系追踪,选项D属于项目成本管理。

单选题


334. 软件开发过程中,敏捷方法(如Scrum)与传统瀑布模型的主要区别在于( )。

答案:B

解析:

敏捷以短迭代周期逐步交付可运行增量,瀑布按需求、设计、编码、测试严格线性推进。选项A将二者的文档与代码偏好说反。选项C错误,敏捷每个迭代内均包含测试。选项D人员规模非本质区别。

单选题


335. 在软件估算中,COCOMO II模型的早期设计阶段(Early Design)主要使用( )来估算规模。

答案:B

解析:

COCOMO II模型在不同阶段采用不同的规模估算方法。早期设计阶段(Early Design)属于体系结构设计阶段,此时详细设计尚未完成,无法准确统计代码行数,因此主要采用功能点(FP) 或用例点(UCP) 进行估算。 选项A(代码行数)属于后架构阶段(Post-Architecture) 的估算方法,此时设计已细化到可统计代码行数的程度。 选项C(用例点)虽可用于早期估算,但并非COCOMO II的标准术语,更多用于敏捷场景。 选项D(对象点)属于应用组装模型(Application Composition) 阶段的估算方法,主要用于通过复用已有组件快速构建原型系统的场景。因此,本题正确答案为B。

单选题


336. 软件测试中,回归测试的主要目的是( )。

答案:B

解析:

回归测试在代码变更后重新执行已有测试用例,验证原功能未被破坏,防止引入回归缺陷。选项A混淆了主要目的,选项C为系统测试,选项D为界面测试。

单选题


337. 软件工程中,内聚性(Cohesion)是指( )。

答案:A

解析:

内聚度量模块内部元素功能关联的强度,追求高内聚。选项B为耦合性(Coupling)的定义。选项C与内聚无关,选项D与内聚相关但非其定义。

单选题


338. 面向对象设计中,封装(Encapsulation)的主要目的是( )。

答案:A

解析:

封装将数据与操作绑定,通过访问控制隐藏内部实现,对外提供公共接口,以保护数据完整性并降低耦合。选项B是继承与组合的主要目的,选项C与封装降低耦合的意图相反,选项D与运行速度无直接关系。

单选题


339. UML 2.x中,包图(Package Diagram)的用途是( )。

答案:A

解析:

包图将模型元素分组,表示系统模块划分与层次结构。选项B为部署图,选项C为序列图,选项D为类图。

单选题


340. 在UML用例图中,extend(扩展)关系表示的是( )。

答案:A

解析:

扩展(extend)表示扩展用例在扩展点处满足条件时可选地插入基础用例。选项B为包含(include)关系的定义(必选),选项C与D不存在于用例关系中。

单选题


341. 状态图(Statechart Diagram)中,迁移(Transition)的触发事件(Trigger)可以为空,这种迁移称为( )。

答案:B

解析:

Trigger为空的迁移称为完成迁移,由状态内部do活动的完成自动触发,无需外部事件。选项A(自迁移)通常有事件触发,选项C(内部迁移)不触发状态退出/进入,选项D(条件迁移)可带监护条件但Trigger未必为空。

单选题


342. 以下关于泛化(Generalization)和实现(Realization)关系的说法,正确的是( )。

答案:C

解析:

泛化表示子类与父类的“is-a”关系,实现表示类与接口的“can-do”契约关系。选项A与B倒置,选项D错误:泛化为实线空心三角箭头,实现为虚线空心三角箭头。

单选题


343. 在UML中,对象图(Object Diagram)是类图在某一时刻的实例快照,其目的不包括( )。

答案:D

解析:

对象图展示实例级别的信息(对象名、属性值、对象间链接)。静态方法属于类层次特征,不在对象图中体现。选项A、B、C均为对象图内容。

单选题


344. 以下哪种设计模式允许在不破坏封装的前提下,捕获并外部化一个对象的内部状态,以便在需要时恢复对象?( )

答案:A

解析:

备忘录模式在不破坏封装的前提下保存对象状态(备忘录),用于后续恢复(Undo/Redo)。选项B封装请求,选项C状态改变行为,选项D定义一对多依赖。

单选题


345. 若需要实现一个“游戏关卡”系统,玩家通关后自动进入下一关,且每关的游戏行为(如敌人AI、重力参数)各不相同。适合采用( )模式进行设计。

答案:A

解析:

状态模式允许内部状态切换时改变对象行为,关卡切换即状态自动流转。选项B策略模式需客户端主动选择算法,不适用于状态自动迁移。选项C为请求传递,选项D为对象创建。

单选题


346. 在抽象工厂模式(Abstract Factory)中,其意图是( )。

答案:A

解析:

抽象工厂模式创建产品族,保证产品间一致性。选项B为迭代器模式,选项C为工厂方法模式,选项D为策略模式。

单选题


347. 以下关于装饰器模式(Decorator)的描述,正确的是( )。

答案:A

解析:

装饰器模式通过组合在运行时动态添加功能,避免类爆炸。选项B错误,装饰器可装饰任何实现同一接口的类。选项C错误,装饰器属结构型模式。选项D错误,适配器用于接口转换,装饰器用于功能增强。

单选题


348. 欲设计一个日志记录系统,支持多种输出方式(控制台、文件、远程服务器),且可随时切换。适合采用( )模式。

答案:A

解析:

策略模式封装可互换的输出算法,客户端可随时切换具体实现。选项B仅保证唯一实例,不处理行为切换。选项C为继承骨架,灵活性不足。选项D用于增加对象结构上的新操作。

单选题


349. 在软件生命周期模型中,强调用户参与、通过快速构建原型不断澄清需求的模型是( )。

答案:C

解析:

原型模型(Prototyping Model)通过快速构建原型(可以是低保真原型或可执行原型),让用户试用和反馈,从而不断明确和修正需求,尤其适用于需求不明确的场景。瀑布模型是线性顺序的,缺乏用户中间反馈;螺旋模型强调风险分析;增量模型是分批交付。因此选C。

单选题


350. 在软件维护中,为了适应外部环境(如操作系统升级)而进行的修改属于( )。

答案:B

解析:

适应性维护(Adaptive Maintenance)是指为了适应外部软硬件环境变化(如新操作系统、新数据库版本)而对软件进行的修改。改正性维护是修复缺陷;完善性维护是增加新功能或改进性能;预防性维护是为预防未来可能的问题而主动修改代码。因此选B。

单选题


351. 软件质量保证(SQA)的主要职责是( )。

答案:B

解析:

SQA的职责是确保软件开发过程符合既定标准和规程,通过过程审计、质量度量等手段保证软件质量,其核心是"过程"的监督与改进。编写代码和单元测试是开发人员的职责;设计测试用例是测试人员的职责;管理进度和成本是项目经理的职责。因此选B。

单选题


352. 在CMMI的阶段式表示法中,成熟度等级2(已管理级)的核心特征是( )。

答案:B

解析:

CMMI阶段式表示法有5个成熟度等级: 等级1(初始级):过程无序,成功依赖个人。 等级2(已管理级):建立了基本的项目管理过程,可对成本、进度进行跟踪管理。这是B的描述。 等级3(已定义级):过程已文档化和标准化(C)。 等级4(量化管理级):过程可预测,有定量度量(A)。 等级5(优化级):持续改进(D)。

单选题


353. 在软件项目估算中,功能点(FP)估算法的优势在于( )。

答案:A

解析:

功能点估算是基于系统功能规模(外部输入、外部输出、外部查询、内部逻辑文件、外部接口文件)进行估算,与具体的编程语言、技术平台无关,因此在项目早期(需求分析阶段)即可使用。选项B错误,代码行数是另一种估算方法;选项C错误,功能点适用于多种类型系统;选项D错误,功能点估算必须深入理解系统功能。因此选A。

单选题


354. 在UML用例图中,系统边界(System Boundary)的作用是( )。

答案:A

解析:

用例图中的系统边界是一个矩形框,框内包含所有用例(系统功能),框外是参与者(Actor)。边界明确了系统的功能范围,区分了哪些是系统要完成的功能,哪些是外部交互者。选项B是部署图的功能;选项C/D与用例图无关。因此选A。

单选题


355. 在UML类图中,多重性(Multiplicity)"1..*"表示( )。

答案:D

解析:

在UML中,多重性表示关联中一端的实例数量。"1.."表示"至少一个,最多任意多个",即一个类的实例至少关联另一个类的一个实例,数量上无上限。选项A表述为"至少一个",但缺乏"不限数量"的完整含义;D更准确地描述了"1.."的含义。因此选D。

单选题


356. 在UML状态图中,事件(Event)和动作(Action)的区别是( )。

答案:A

解析:

在状态图中,事件(Event)是触发状态转移的"原因",如信号、调用、时间等;动作(Action)是在转移发生时所执行的可操作行为(如计算、赋值),动作是不可中断的原子操作。两者角色不同:事件是触发器,动作是响应。因此选A。

单选题


357. 【问题2】(3分) 根据[说明]中的描述,使用用例名称列表中的英文名称,给出ORS用例图中U1一 U3所对应的用例。

材料: 阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 在线会议审稿系统(Online Reviewing System,ORS)主要处理会议前期的投稿和审稿事务,其功能描述如下: 1.用户(User)在初始使用系统时,必须在系统中注册(register)成为作者(Author)或审稿人(Reviewer)。 2.作者登录(login)后提交稿件(submit paper)和浏览稿件审阅结果(browse review results)。提交稿件必须在规定提交时间范围内,其过程为先输入标题和摘要(enter title and abstract)、选择稿件所属主题类型(select subject group )、选择稿件所在位置 (存储位置)(select paper location)。上述几步若未完成,则重复;若完成,则上传稿件至数据库中(upload paper ),系统发送通知(send notification )。 3.审稿人登录后可设置兴趣领域(set preferences )、审阅稿件给出意见(enter review )以及罗列录用和(或)拒绝的稿件(List accepted/rejected papers)。 4.会议委员会主席(PCChair)是一个特殊审稿人,可以浏览提交的稿件(browse     submitted papers)、给审稿人分配稿件(assign paper to reviewer )、罗列录用和(或)拒绝的稿件以及关闭审稿过程(close reviewing procss)。其中,关闭审稿过程须包括罗列录用和(或)拒绝的稿件。 系统采用面向对象方法开发,使用UML进行建模。   系统的部分用例图和提交稿件的活动图分别见下图。 图片 11

参考答案:

U1:list accepted/rejiected papers

U2:browse submitted papers U3:assign paper to reviewer(U2、U3可互换)。

解析(AI 生成):

按说明中各参与者能执行的操作,在用例名称列表中选取语义最匹配的英文名填入U1至U3,分别对应查看已录用或退稿稿件、浏览已投稿件、分配稿件给审稿人;U2与U3位置对称,互换同样得分。

问答题


358. 【问题4】(4分) 根据[说明]中的描述,使用用例名称列表和活动名称列表中的英文名称,给出提交稿件过程的活动图中Actionl~Action4对应的活动。

材料: 阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 在线会议审稿系统(Online Reviewing System,ORS)主要处理会议前期的投稿和审稿事务,其功能描述如下: 1.用户(User)在初始使用系统时,必须在系统中注册(register)成为作者(Author)或审稿人(Reviewer)。 2.作者登录(login)后提交稿件(submit paper)和浏览稿件审阅结果(browse review results)。提交稿件必须在规定提交时间范围内,其过程为先输入标题和摘要(enter title and abstract)、选择稿件所属主题类型(select subject group )、选择稿件所在位置 (存储位置)(select paper location)。上述几步若未完成,则重复;若完成,则上传稿件至数据库中(upload paper ),系统发送通知(send notification )。 3.审稿人登录后可设置兴趣领域(set preferences )、审阅稿件给出意见(enter review )以及罗列录用和(或)拒绝的稿件(List accepted/rejected papers)。 4.会议委员会主席(PCChair)是一个特殊审稿人,可以浏览提交的稿件(browse     submitted papers)、给审稿人分配稿件(assign paper to reviewer )、罗列录用和(或)拒绝的稿件以及关闭审稿过程(close reviewing procss)。其中,关闭审稿过程须包括罗列录用和(或)拒绝的稿件。 系统采用面向对象方法开发,使用UML进行建模。   系统的部分用例图和提交稿件的活动图分别见下图。 图片 11

参考答案:

Action1:enter title and abstract Action2:select subject group Action3:select paper location Action4:upload paper

解析(AI 生成):

提交稿件按录入标题摘要、选择学科组、选择论文存放位置、上传论文的顺序进行,四个活动依次对应Action1至Action4,填答时直接引用活动名称列表中的英文原名,注意各Action之间是顺序边。

问答题


359. 【问题1】(6分) 根据[说明]中的描述,写出参与者和用例名称(中文即可)。

材料: 试题三(15分) 某城市拟开发一个基于Web的城市黄页,公开发布该城市重要的组织或机构(以下统称为客户)的基本信息,方便城市生活。该系统的主要功能描述如下: (1)搜索信息:任何使用Internet的网络用户都可以搜索发布在城市黄页中的信息,例如客户的名称、地址、联系电话等。 (2)认证:客户若想在城市黄页上发布信息,需通过系统的认证。认证成功后,该客户成为系统授权用户。 (3)更新信息:授权用户登录系统后,可以更改自己在城市黄页中的相关信息,例如变更联系电话等。 (4)删除客户:对于拒绝继续在城市黄页上发布信息的客户,有系统管理员删除该客户的相关信息。 系统采用面向对象方法进行开发,在开发过程中认定出如下表所示的类。系统的用例图和类图分别如图1和图2所示。 图片 图片 图片

参考答案:

A1:授权用户 A2:系统管理员 U1:搜索信息 U2:登录 U3:认证 U4:删除客户

解析(AI 生成):

按说明中谁使用系统确定参与者:授权用户可搜索信息,系统管理员负责删除客户,故A1为授权用户、A2为系统管理员。用例按功能命名,搜索信息、登录、认证、删除客户依次填入;登录需先通过认证,二者为包含关系,删除客户仅管理员可执行。

问答题


360. 【问题2】(4分) 根据[说明]中的描述,3-2类图中C1-C4所对应的类名(英文)。

材料: 试题三(15分) 某城市拟开发一个基于Web的城市黄页,公开发布该城市重要的组织或机构(以下统称为客户)的基本信息,方便城市生活。该系统的主要功能描述如下: (1)搜索信息:任何使用Internet的网络用户都可以搜索发布在城市黄页中的信息,例如客户的名称、地址、联系电话等。 (2)认证:客户若想在城市黄页上发布信息,需通过系统的认证。认证成功后,该客户成为系统授权用户。 (3)更新信息:授权用户登录系统后,可以更改自己在城市黄页中的相关信息,例如变更联系电话等。 (4)删除客户:对于拒绝继续在城市黄页上发布信息的客户,有系统管理员删除该客户的相关信息。 系统采用面向对象方法进行开发,在开发过程中认定出如下表所示的类。系统的用例图和类图分别如图1和图2所示。 图片 图片 图片

参考答案:

本题要注意题干表格已经给出来了类名。类图中C2和C3 继承了网络用户(InternetClient)这个类。而根据上一道题目的用例图可以看出参与者A1与参与者网络用户也是继承关系,由此可以判断C3是授权客户(RegisteredClient)。C4和C1是聚合关系,多重度是0...*和1,这表示可以有0到多个C4聚合到一个C1里面。因此C1是客户集(CustomerList) ,C4就是客户信息(Customer)。又因为C4和C3是关联关系,再次验证了C3是授权客户(RegisteredClient)。对比类名的表格,剩下的C2就是系统管理员(Administrator)。C2与网络用户的继承关系在用例图里面并没有画出来,算是本题的一个小坑。 C1:CustomerList C2:Administrator C3:RegisteredClient C4:Customer

解析(AI 生成):

C2、C3继承InternetClient,对应授权客户与网络用户的继承,故C3为RegisteredClient;C4与C1是0..*对1聚合,故C1为CustomerList、C4为Customer;C2为Administrator。

问答题


361. 【问题3】(5分) 3-1用例图中的用例之间用的是include关系,为什么不用extend关系?说出你的理由。

材料: 试题三(15分) 某城市拟开发一个基于Web的城市黄页,公开发布该城市重要的组织或机构(以下统称为客户)的基本信息,方便城市生活。该系统的主要功能描述如下: (1)搜索信息:任何使用Internet的网络用户都可以搜索发布在城市黄页中的信息,例如客户的名称、地址、联系电话等。 (2)认证:客户若想在城市黄页上发布信息,需通过系统的认证。认证成功后,该客户成为系统授权用户。 (3)更新信息:授权用户登录系统后,可以更改自己在城市黄页中的相关信息,例如变更联系电话等。 (4)删除客户:对于拒绝继续在城市黄页上发布信息的客户,有系统管理员删除该客户的相关信息。 系统采用面向对象方法进行开发,在开发过程中认定出如下表所示的类。系统的用例图和类图分别如图1和图2所示。 图片 图片 图片

参考答案:

解析(AI 生成):

include抽取多个用例共用的必执行动作,基用例离开子用例不完整,箭头由基用例指向子用例;extend是在完整基用例的扩展点上按条件追加可选行为,箭头由子用例指向基用例。图中被抽出的行为每次都要执行,用extend会变成可选,语义不符。

问答题


362. 试题六(15分) 阅读下列说明和JAVA代码,回答问题,将答案填入相应横线处。 【说明】 某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新现在采用观察者(observer)模式来开发该系统,观察者模式的类图如下图所示。 图片 【Java代码】 import java.util.; interface Observer { public void update(float temp, float humidity, float cleanness); } interface Subject { public void registerObserver(Observer o); //注册对主题感兴趣的观察者 public void removeObserver(Observer o); //删除观察者 (1) ; //当主题发生变化时通知观察者 } class EnvironmentData (2) Subject { private ArrayList observers; private float temperature, humidity, cleanness; public EnvironmentData() { observers = new ArrayList(); } public void registerObserver(Observer o) { observers.add(o); } public void removeObserver(Observer o) { / 代码省略 / } public void notifyObservers() { for (int i = 0; i < observers.size(); i++) { Observer observer = (Observer)observers.get(i); observer.update(temperature,humidity,cleanness); } } public void measurementsChanged() {notifyObservers(); } public void setMeasurements(float temperature, float humidity, float cleanness) { (3) ; (4) ; (5) ; measurementsChanged(); } } class CurrentConditionsDisplay implements Observer { private float temperature; private float humidity; private float cleanness; private Subject envData; public CurrentConditionsDisplay(Subject envData) { this.envData = envData; envData.registerObserver(this); } public void update(float temperature, float humidity, float cleanness) { this.temperature = temperature; this.humidity = humidity; this.cleanness = cleanness; display(); } public void display() {/ 代码省略 */ } } class EnvironmentMonitor{ public static void main(String[] args) { EnvironmentData envData = new EnvironmentData(); CurrentConditionsDisplay currentDisplay = new CnrrentConditionsDisplay(envData); envData.setMeasurements(80, 65, 30.4f); } }

参考答案:

(1)public void notifyObservers() (2)implements (3)this.temperature = temperature (4) this.humidity = humidity (5) this.cleanness = cleanness

解析(AI 生成):

接口只声明方法,故(1)填public void notifyObservers();实现接口用implements;(3)至(5)用this区分成员与同名参数,依次给温度、湿度、洁净度赋值,主题在数据变化时回调各观察者的update。

问答题


363. 【问题1】 请使用说明中的术语,给出图2-26中类Customer和类Person的属性。

材料: 【试题三】(15分)某客户信息管理系统中保存着两类客户的信息: (1)个人客户。对于这类客户,系统保存了其客户标识(由系统生成)和基本信息(包括姓名、住宅电话和E-mail)。 (2)集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识(由系统生成)之外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、E-mail、办公电话以及职位。 该系统除了可以保存客户信息之外,还具有以下功能: (1)向系统中添加客户(addCustomer); (2)根据给定的客户标识,在系统中查找该客户(getCustomer); (3)根据给定的客户标识,从系统中删除该客户(removeCustomer); (4)创建新的联系人(addContact); (5)在系统中查找指定的联系人(getContact); (6)从系统中删除指定的联系人(removeContact)。 该系统采用面向对象方法进行开发。在面向对象分析阶段,根据上述描述,得到如表2-5所示的类。 表2-5 得到的各种类 图片 类名说明 CustomerInformationSystem客户信息管理系统 IndividualCustomer个人客户 InstitutionalCustomer集团客户 Contact联系人 描述该客户信息管理系统的UML类图如图2-26所示。 图片

参考答案:

【问题1】 Customer的属性:客户标识。 Person的属性:姓名、住宅电话、E-mail。

解析:

根据题目描述得知,客户信息管理系统的功能是管理个人用户和集团用户,个人用户和集团用户的区别在于集团用户有自己的联系人,而个人用户没有。 【问题1】 问题1要求考生给出类Customer和Person的属性。在图2-26中,Customer表示客户类,IndividualCustomer和InstitutionalCustomer都是Customer的子类,IndividualCustomer是个人客户,InstitutionalCustomer是集团客户。既然Customer是个人客户类和集团客户类的父类,则它必有两者的共同点。由于集团客户和个人客户都有客户标识,所以Customer的属性为“客户标识”。Contact是联系人,只有集团客户才有联系人。Person类是Contact类的父类,同时又与IndividualCustomer有关联,所以Person类应具有Contact与IndividualCustomer的共同点,它们的共同点就是联系人与个人客户都有自己的基本信息:姓名、住宅电话和E-mail。因此,Person的属性有:姓名、住宅电话和E-mail。

问答题


364. 试题五(共15分) 阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明 】 以下C++代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账,设计如图5-1所示类图。 图片 【C++代码】 using namespace std; class Book; class Visitor { public: virtual void visit(Book* book)=0; //其它物品的visit方法 }; class Item { public:virtual void accept(Visitor* visitor)=0; virtual double getPrice()=0; }; class Book (1){ private: double price; public: Book (double price){ //访问本元素 (2); } void accept(Visitor* visitor) { (3); } double getPrice() { return price; } }; class Cashier(4){ private; double totalForCart; public: //访问Book类型对象的价格并累加 (5){ //假设Book类型的物品价格超过10元打8折 if(book->getPrice()<10.0) { totalForCart+=book->getPrice(); } else totalForCart+=book->getPrice()0.8; } //其它visit方法和折扣策略类似,此处略 double getTotal() { return totalForCart; } }; class ShoppingCart { private: vector<<item*>item>items; public: double calculatePrice() { Cashier* visitor=new Cashier(); for(int i=0;i<items.size();i++) br=""><<item*>items.size();i++) (6); } double total=visitor->getTotal(); return total; } void add(Item*e) { items.push_back(e); } };

参考答案:

解析:

(1):public Item (2)this->price=price (3)visitor->visit(this) (4)public visitor (5)void visit(Book*book) (6)item->accept(visitor)

问答题


365. 试题六(共15分) 阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。 图片 【Java代码】 interface Item{ public void accept(Visitor visitor); public double getPrice(); } class Book (1){ private double price; public Book(double price){(2);} public void accept(Visitor visitor){ //访问本元素 (3); } public double getPrice() { return price; } } //其它物品类略 interface Visitor { public void visit(Book book); //其它物品的visit方法 } class Cashier(4){ private double totalForCart; //访问Book类型对象的价格并累加 (5){ //假设Book类型的物品价格超过10元打8折 if(book.getPrice()<10.0){ totalForCart+=book.getPrice(); } else totalForCart+=book.getPrice()*0.8; } //其它visit方法和折扣策略类似,此处略 public double getTotal() { return totalForCart; } } class ShoppingCart { //normal shopping cart stuff private java.util.ArrayListitems=new java.util.ArrayList<>(); public double calculatePrice() { Cashier visitor=new Cashier(); for(Item item:items) { (6); } double total=visitor.getTotal(); return total; } public void add(Item e) { this.items.add(e); } }

参考答案:

(5)(1)implements Item (2)this.price=price (3)visitor.visit(this) (4)implements Visitor (5)public void visit(Book book) (6)item.accept(visitor)

解析:

这里考察的是访问者模式。其定义如下:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
第一、四空为接口与实现,接口使用Interface,实现使用implements。第二空this表示类实例本身。第三空为访问本元素。第五空实现接口里面的方法。第六空调用accept方法。

问答题


366. 【问题1】(5分) 使用说明中的词语,给出图1-1中的实体E1~E5的名称。

材料: 案例一(15分) 阅读下列说明和图回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】某停车场运营方为了降低运营成本,减员增效,提供良好的停车体验,欲开发无人值守停车系统,该系统的主要功能是: 1、 信息维护。管理人员对车位(总数、空余车位数等)、计费规则等基础信息进行设置。 2、 会员注册。车主提供手机号、车牌号等信息进行注册,提交充值信息(等级、绑定并授权支付系统进行充值或交费的支付账号)不同级别和充值额度享受不同停车折扣点。 3、 车牌识别。当车辆进入停车场时,若有(空余车位数大于1),自动识别车牌号后进行道闸控制,当车主开车离开停车场时,识别车牌号,计费成功后,请求道闸控制。 4、 计费。更新车辆离场时间,根据计费规则计算出停车费用,若车主是会员,提示停车费用:若储存余额够本次停车费用,自动扣费,更新余额,若储值余额不足,自动使用授权缴费账号请求支付系统进行支付,获取支付状态。若非会员临时停车,提示停车费用,车主通过扫描费用信息中的支付码调用支付系统自助交费,获取支付状态。 5、 道闸控制。根据道闸控制请求向道闸控制系统发送若干执行指令和接收道闸执行状态。若道闸执行状态为正常放行时,对入场车辆,将车牌号及其入场时间信息存入停车记录,修改空余车位数;对出厂车辆更新停车状态,修改空余车位数。当因道闸控制系统出现问题(断网断电或是故障为枱杆等情况),而无法在规定的时间内接收到其返回的执行状态正常放行时,系统向管理人员发送异常告警信息,之后管理人员安排故障排查处理,确保车辆有序出入停车场。 现采用结构化方法对无人值守停车系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图片

参考答案:

问题1: E1:车辆;E2:车主;E3:支付系统;E4:管理人员;E5:道闸控制系统

解析(AI 生成):

数据流图的外部实体是系统之外的参与者,按说明中谁提供数据、谁接收结果确定:车辆与车主是服务对象,支付系统完成扣费,管理人员处理异常,道闸控制系统执行抬杆放行,故E1至E5依次为车辆、车主、支付系统、管理人员、道闸控制系统。

问答题


367. 【问题2】(3分) 使用说明中的词语,给出图1-2中的数据存储D1~D3的名称。

材料: 案例一(15分) 阅读下列说明和图回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】某停车场运营方为了降低运营成本,减员增效,提供良好的停车体验,欲开发无人值守停车系统,该系统的主要功能是: 1、 信息维护。管理人员对车位(总数、空余车位数等)、计费规则等基础信息进行设置。 2、 会员注册。车主提供手机号、车牌号等信息进行注册,提交充值信息(等级、绑定并授权支付系统进行充值或交费的支付账号)不同级别和充值额度享受不同停车折扣点。 3、 车牌识别。当车辆进入停车场时,若有(空余车位数大于1),自动识别车牌号后进行道闸控制,当车主开车离开停车场时,识别车牌号,计费成功后,请求道闸控制。 4、 计费。更新车辆离场时间,根据计费规则计算出停车费用,若车主是会员,提示停车费用:若储存余额够本次停车费用,自动扣费,更新余额,若储值余额不足,自动使用授权缴费账号请求支付系统进行支付,获取支付状态。若非会员临时停车,提示停车费用,车主通过扫描费用信息中的支付码调用支付系统自助交费,获取支付状态。 5、 道闸控制。根据道闸控制请求向道闸控制系统发送若干执行指令和接收道闸执行状态。若道闸执行状态为正常放行时,对入场车辆,将车牌号及其入场时间信息存入停车记录,修改空余车位数;对出厂车辆更新停车状态,修改空余车位数。当因道闸控制系统出现问题(断网断电或是故障为枱杆等情况),而无法在规定的时间内接收到其返回的执行状态正常放行时,系统向管理人员发送异常告警信息,之后管理人员安排故障排查处理,确保车辆有序出入停车场。 现采用结构化方法对无人值守停车系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图片

参考答案:

问题2: D1:,停车记录表,,D2:会员信息表,D3:,基础信息

解析(AI 生成):

数据存储按其中保存的数据内容命名:记录每次进出场与缴费信息的为停车记录表,保存会员账户与余额的为会员信息表,保存车位、费率等公共参数的为基础信息。填D1至D3时与说明中的词语保持一致,并注意每个存储至少被一个加工读写。

问答题


368. 【问题3】(4分) 根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点。

材料: 案例一(15分) 阅读下列说明和图回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】某停车场运营方为了降低运营成本,减员增效,提供良好的停车体验,欲开发无人值守停车系统,该系统的主要功能是: 1、 信息维护。管理人员对车位(总数、空余车位数等)、计费规则等基础信息进行设置。 2、 会员注册。车主提供手机号、车牌号等信息进行注册,提交充值信息(等级、绑定并授权支付系统进行充值或交费的支付账号)不同级别和充值额度享受不同停车折扣点。 3、 车牌识别。当车辆进入停车场时,若有(空余车位数大于1),自动识别车牌号后进行道闸控制,当车主开车离开停车场时,识别车牌号,计费成功后,请求道闸控制。 4、 计费。更新车辆离场时间,根据计费规则计算出停车费用,若车主是会员,提示停车费用:若储存余额够本次停车费用,自动扣费,更新余额,若储值余额不足,自动使用授权缴费账号请求支付系统进行支付,获取支付状态。若非会员临时停车,提示停车费用,车主通过扫描费用信息中的支付码调用支付系统自助交费,获取支付状态。 5、 道闸控制。根据道闸控制请求向道闸控制系统发送若干执行指令和接收道闸执行状态。若道闸执行状态为正常放行时,对入场车辆,将车牌号及其入场时间信息存入停车记录,修改空余车位数;对出厂车辆更新停车状态,修改空余车位数。当因道闸控制系统出现问题(断网断电或是故障为枱杆等情况),而无法在规定的时间内接收到其返回的执行状态正常放行时,系统向管理人员发送异常告警信息,之后管理人员安排故障排查处理,确保车辆有序出入停车场。 现采用结构化方法对无人值守停车系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图片

参考答案:

问题3: P3到D2:更新余额 P5到D3:更新车位信息 P1到P5:道闸控制请求, D3到P3,:计费规则

解析(AI 生成):

检查父图与子图的平衡,看每个加工的输出和每个存储的读写是否齐全:收费加工需读取计费规则并把结果写回会员账户,故有D3到P3的计费规则、P3到D2的更新余额;车位管理需P5到D3的更新车位信息;入场识别后由P1向P5发出道闸控制请求。

问答题


369. 【问题4】(3分) 根据说明,采用结构化语言对“道闸控制”的加工逻辑进行描述。

材料: 案例一(15分) 阅读下列说明和图回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】某停车场运营方为了降低运营成本,减员增效,提供良好的停车体验,欲开发无人值守停车系统,该系统的主要功能是: 1、 信息维护。管理人员对车位(总数、空余车位数等)、计费规则等基础信息进行设置。 2、 会员注册。车主提供手机号、车牌号等信息进行注册,提交充值信息(等级、绑定并授权支付系统进行充值或交费的支付账号)不同级别和充值额度享受不同停车折扣点。 3、 车牌识别。当车辆进入停车场时,若有(空余车位数大于1),自动识别车牌号后进行道闸控制,当车主开车离开停车场时,识别车牌号,计费成功后,请求道闸控制。 4、 计费。更新车辆离场时间,根据计费规则计算出停车费用,若车主是会员,提示停车费用:若储存余额够本次停车费用,自动扣费,更新余额,若储值余额不足,自动使用授权缴费账号请求支付系统进行支付,获取支付状态。若非会员临时停车,提示停车费用,车主通过扫描费用信息中的支付码调用支付系统自助交费,获取支付状态。 5、 道闸控制。根据道闸控制请求向道闸控制系统发送若干执行指令和接收道闸执行状态。若道闸执行状态为正常放行时,对入场车辆,将车牌号及其入场时间信息存入停车记录,修改空余车位数;对出厂车辆更新停车状态,修改空余车位数。当因道闸控制系统出现问题(断网断电或是故障为枱杆等情况),而无法在规定的时间内接收到其返回的执行状态正常放行时,系统向管理人员发送异常告警信息,之后管理人员安排故障排查处理,确保车辆有序出入停车场。 现采用结构化方法对无人值守停车系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图片

参考答案:

问题4: if,,道闸执行状态正常 ,,,,,,if,车辆入场,then,,将车牌号及其入场时间信息存入停车记录,修改空余车位数 ,,,,,,else,,if,,,车辆出厂,then,,更新停车状态,修改空余车位数 else,,,,系统向管理人员发送异常告警信息

解析(AI 生成):

先用外层if判断道闸执行状态是否正常;正常时再按车辆入场、出场分支:入场将车牌号与入场时间写入停车记录并修改空余车位数,出场更新停车状态并修改空余车位数;状态异常则向管理人员发送异常告警。得分点在于分支层次完整、动作与数据存储对应。

问答题


370. 【问题1】(7分) 根据说明中的描述,给出图 3-1中 A1A3 所对应的参与者名称和U1U4处所对应的用例名称。

材料: 案例三(15分) 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某中医医院拟开发一套线上抓药APP,允许患者凭借该医院医生开具的处方线上抓药,并提供免费送药上门服务。该系统的主要功能描述如下: (1)注册。患者扫描医院提供的二维码进行注册,注册过程中,患者需提供其病历号,系统根据病历号自动获取患者基本信息。 (2)登录。已注册的患者可以登录系统进行线上抓药,未注册的患者系统拒绝其登陆。 (3)确认处方。患者登录后,可以查看医生开具的所有处方。患者选择需要抓药的处方和数量(需要抓几副药),同时说明是否需要煎制。选择取药方式:自行到店取药或者送药上门,若选择送药上门,患者需要提供提供收货人姓名、联系方式和收货地址。系统自动计算本次抓药的费用,患者可以使用微信或支付宝等支付方式支付费用。支付成功之后,处方被发送给药师进行药品配制。 (4)处理处方。药师根据处方配置好药品。若患者要求煎制,药师对配置好的药品进煎制。煎制完成,药师将该处方设置为已完成。若患者选择的是自行取药,取药后确认已取药。 (5)药品派送。处方完成后,对于选择送药上门的患者,系统将给快递人员发送药品配送信息,等待快递人员取药;并给患者发送收货验证码。 (6)送药上门。快递人员将配制好的药品送到患者指定的收货地址。患者收货时,向快递人员出示收货验证码,快递人员使用该验证码确认药品已送到。 现采用面向对象分析与设计方法开发上述系统,得到如图3-1所示的用例图以及图3-2所示的类图。 图片 图片

参考答案:

【问题1】 A1:患者;A2:快递员;A3:药师 U1:确认处方;U2:支付;U3:微信支付;U4:支付宝支付

解析(AI 生成):

参与者按与系统交互的角色确定:患者提交处方并取药,快递员负责配送,药师审核处方,故A1至A3为患者、快递员、药师。确认处方、支付为基本用例,微信支付与支付宝支付是支付的具体实现,与支付构成泛化关系,故U3、U4分别为微信支付、支付宝支付。

问答题


371. 【问题2】(5分) 根据说明中的描述,给出图 3-2中 C1~C5 所对应的类名。

材料: 案例三(15分) 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某中医医院拟开发一套线上抓药APP,允许患者凭借该医院医生开具的处方线上抓药,并提供免费送药上门服务。该系统的主要功能描述如下: (1)注册。患者扫描医院提供的二维码进行注册,注册过程中,患者需提供其病历号,系统根据病历号自动获取患者基本信息。 (2)登录。已注册的患者可以登录系统进行线上抓药,未注册的患者系统拒绝其登陆。 (3)确认处方。患者登录后,可以查看医生开具的所有处方。患者选择需要抓药的处方和数量(需要抓几副药),同时说明是否需要煎制。选择取药方式:自行到店取药或者送药上门,若选择送药上门,患者需要提供提供收货人姓名、联系方式和收货地址。系统自动计算本次抓药的费用,患者可以使用微信或支付宝等支付方式支付费用。支付成功之后,处方被发送给药师进行药品配制。 (4)处理处方。药师根据处方配置好药品。若患者要求煎制,药师对配置好的药品进煎制。煎制完成,药师将该处方设置为已完成。若患者选择的是自行取药,取药后确认已取药。 (5)药品派送。处方完成后,对于选择送药上门的患者,系统将给快递人员发送药品配送信息,等待快递人员取药;并给患者发送收货验证码。 (6)送药上门。快递人员将配制好的药品送到患者指定的收货地址。患者收货时,向快递人员出示收货验证码,快递人员使用该验证码确认药品已送到。 现采用面向对象分析与设计方法开发上述系统,得到如图3-1所示的用例图以及图3-2所示的类图。 图片 图片

参考答案:

【问题2】 C1:支付方式 C2 :微信支付 C3:支付宝支付 C4 :处方 C5:药品

解析(AI 生成):

由类图关系判断:C2、C3与C1是泛化,二者是两种具体支付渠道,故C1为支付方式、C2为微信支付、C3为支付宝支付;处方包含多条药品明细,C4为处方、C5为药品。填类名时优先用说明中出现的名词,并与用例图中的支付用例相互印证。

问答题


372. 【问题 3】(3 分) 简要解释用例之间的 include, extend 和 generalie 关系的内涵。

材料: 案例三(15分) 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某中医医院拟开发一套线上抓药APP,允许患者凭借该医院医生开具的处方线上抓药,并提供免费送药上门服务。该系统的主要功能描述如下: (1)注册。患者扫描医院提供的二维码进行注册,注册过程中,患者需提供其病历号,系统根据病历号自动获取患者基本信息。 (2)登录。已注册的患者可以登录系统进行线上抓药,未注册的患者系统拒绝其登陆。 (3)确认处方。患者登录后,可以查看医生开具的所有处方。患者选择需要抓药的处方和数量(需要抓几副药),同时说明是否需要煎制。选择取药方式:自行到店取药或者送药上门,若选择送药上门,患者需要提供提供收货人姓名、联系方式和收货地址。系统自动计算本次抓药的费用,患者可以使用微信或支付宝等支付方式支付费用。支付成功之后,处方被发送给药师进行药品配制。 (4)处理处方。药师根据处方配置好药品。若患者要求煎制,药师对配置好的药品进煎制。煎制完成,药师将该处方设置为已完成。若患者选择的是自行取药,取药后确认已取药。 (5)药品派送。处方完成后,对于选择送药上门的患者,系统将给快递人员发送药品配送信息,等待快递人员取药;并给患者发送收货验证码。 (6)送药上门。快递人员将配制好的药品送到患者指定的收货地址。患者收货时,向快递人员出示收货验证码,快递人员使用该验证码确认药品已送到。 现采用面向对象分析与设计方法开发上述系统,得到如图3-1所示的用例图以及图3-2所示的类图。 图片 图片

参考答案:

【问题3】 答案:包含(include): include为包含关系,当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。include关系在用例图中使用带箭头的虚线表示(在线上标注<>),箭头从基用例指向子用例。 扩展(extend): extend关系是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。extend的基用例中将存在一个扩展点,只有当扩展点被激活时,子用例才会被执行。 extend关系在用例图中使用带箭头的虚线表示(在线上标注<>),箭头从子用例指向基用例。 泛化(generalization):泛化关系是一种继承关系,子用例将继承基用例的所有行为,关系和通信关系,也就是说在任何使用基用例的地方都可以用子用例来代替。泛化关系在用例图中使用空心的箭头表示,箭头方向从子用例指向基用例。 图片 图片

解析(AI 生成):

include表示基用例必须与子用例一起执行才完整,箭头由基用例指向子用例;extend在扩展点上按条件追加可选行为,箭头反向;generalization是继承,子用例拥有基用例全部行为并可替代它,箭头由子用例指向基用例。

问答题


373. 案例六(15分) 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 层叠菜单是窗口风格的软件系统中经常采用的一种系统功能组织方式。层叠菜单(如图6-1示例)中包含的可能是一个菜单项(直接对应某个功能),也可能是一个子菜单,现在采用组合(composite)设计模式实现层叠菜单,得到如图6-2所示的类图。 图片 图片 Composite组合模式: 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。 组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象。 图片 Composite组合模式: 图片 图片 图片 图片

材料: 案例六(15分) 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 层叠菜单是窗口风格的软件系统中经常采用的一种系统功能组织方式。层叠菜单(如图6-1示例)中包含的可能是一个菜单项(直接对应某个功能),也可能是一个子菜单,现在采用组合(composite)设计模式实现层叠菜单,得到如图6-2所示的类图。 图片 图片 Composite组合模式: 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。 组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象。 图片 Composite组合模式: 图片 图片 图片 图片

参考答案:

图片

解析(AI 生成):

组合模式中抽象构件声明add、remove、getChild与operation,叶子与容器都实现它;容器维护子构件集合,operation递归调用子构件,使客户一致对待单个与组合对象,填空即抽象方法、子构件增删与递归调用。

问答题


374. 【问题1】4分 使用说明中的词语,给山图l-1中的外部实体E1~E4的名称。

材料: 试题一 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下; 1.每门课程都有3到6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的平时成绩。课程结束后进行期末考试,其成绩作为这门课程的考试成绩。 2.学生的平时成绩和考试成绩均由每门课程的主讲教师上传给成绩管理系统。 3.在记录学生成绩之前,系统需要验证这些成绩是否有效。首先,根据学生信息文件来确认该学生是否选修这门课程,若没有,那么这些成绩是无效的:如果他的确选修了这门课程,再根据课程信息文件和课程单元信息文件来验证平时成绩是否与这门课程所包含的单元相对应,如果是,那么这些成绩是效的,否则无效。 4.对于有效成绩,系统将其保存在课程成绩文件中。对于无效成绩,系统会单独将其保存在无效成绩文件中,并将详细情况提交给教务处。在教务处没有给出具体处理意见之前,系统不会处理这些成绩。 5.若一门课程的所有有效的平时成绩和考试成绩都已经被系统记录,系统会发送课程完成通知给教务处,告知该门课程的成绩已经齐全。教务处根据需要,请求系统生成相应的成绩列表,用来提交考试委员会审查。 6.在生成成绩列表之前,系统会生成一份成绩报告给主讲教师,以便核对是否存在错误。主讲教师须将核对之后的成绩报告返还系统。 7.根据主讲教师核对后的成绩报告,系统生成相应的成绩列表,递交考试委员会进行审查。考试委员会在审查之后,上交一份成绩审查结果给系统。对于所有通过审查的成绩,系统将会生成最终的成绩单,并通知每个选课学生。 现采用结构化方法对这个系统进行分析与设计,得到如图1-1所示的顶层数据流图和图1-2所示的0层数据流图。 图片 图片

参考答案:

问题一: E1:考试委员会;E2:主讲教师;E3:学生或选课学生;E4:教务处

解析:

问题一:顶层数据流图通常用来确定系统边界,其中只包含一个唯一的加工(待开发的系统)、外部实体以及外部实体与系统之间的输入输出数据流,题目要求填充的是外部实体。 在顶层DFD图可以看出,数据流图是完整地,所以根据数据流从题目说明的上下文找出E1~E4对应的外部实体分别是 考试委员会、主讲教师、学生、教务处。

问答题


375. 【问题1】(8分) 根据说明中的描述,给出图3-1中U1~U8所对应的用例名。

材料: 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某软件公司欲设计实现一个虚拟世界仿真系统。系统中的虚拟世界用于模拟现实世界中的不同环境(由用户设置并创建),用户通过操作仿真系统中的1~2个机器人来探索虚拟世界。机器人维护着两个变量b1和b2,用来保存从虚拟世界中读取的字符。 该系统的主要功能描述如下: (1)机器人探索虚拟世界(Run Robots)。用户使用编辑器(Editor)编写文件以设置想要模拟的环境,将文件导入系统(Load File)从而在仿真系统中建立虚拟世界(Setup World)。机器人在虚拟世界中的行为也在文件中进行定义,建立机器人的探索行为程序(Setup Program)。机器人在虚拟世界中探索时(Run Program),有2种运行模式: ①自动控制(Run):事先编排好机器人的动作序列(指令(Instruction)),执行指令,使机器人可以连续动作。若干条指令构成机器人的指令集(Instruction Set)。 ②单步控制(Step):自动控制方式的一种特殊形式,只执行指定指令中的一个动作。 (2)手动控制机器人(Manipulate Robots)。选定1个机器人后(Select Robot),可以采用手动方式控制它。手动控制有4种方式: ①Move:机器人朝着正前方移动一个交叉点。 ②Left:机器人原地沿逆时针方向旋转90度。 ③Read:机器人读取其所在位置的字符,并将这个字符的值赋给b1;如果这个位置上没有字符,则不改变b1的当前值。 ④Write:将b1中的字符写入机器人当前所在的位置,如果这个位置上已经有字符,该字符的值将会被b1的值替代。如果这时b1没有值,即在执行Write动作之前没有执行过任何Read动作,那么需要提示用户相应的错误信息(Show Errors)。 手动控制与单步控制的区别在于,单步控制时执行的是指令中的动作,只有一种控制方式,即执行下个动作;而手动控制时有4种动作。 现采用面向对象方法设计并实现该仿真系统,得到如图3-1所示的用例图和图3-2所示的初始类图。图3-2中的类“Interpreter”和“Parser”用于解析描述虚拟世界的文件以及机器人行为文件中的指令集。 图片 图片

参考答案:

问题一 U1、U2、U3、U4、U5、U6、U7、U8分别为: Run Robots 、Manipulate Robots、Run、Step、Write、Move、Left、Read

解析(AI 生成):

用例图中上层是抽象父用例,下层是具体动作:运行机器人与操纵机器人是两类高层用例,Run、Step、Write、Move、Left、Read是具体操作,通过泛化或包含关系挂在其下。按说明中各操作的对象与粒度,由粗到细依次填入U1至U8即可。

问答题


376. 【问题3】(5分) 根据说明中的描述,给出图3-2中C1~C5所对应的类名。

材料: 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某软件公司欲设计实现一个虚拟世界仿真系统。系统中的虚拟世界用于模拟现实世界中的不同环境(由用户设置并创建),用户通过操作仿真系统中的1~2个机器人来探索虚拟世界。机器人维护着两个变量b1和b2,用来保存从虚拟世界中读取的字符。 该系统的主要功能描述如下: (1)机器人探索虚拟世界(Run Robots)。用户使用编辑器(Editor)编写文件以设置想要模拟的环境,将文件导入系统(Load File)从而在仿真系统中建立虚拟世界(Setup World)。机器人在虚拟世界中的行为也在文件中进行定义,建立机器人的探索行为程序(Setup Program)。机器人在虚拟世界中探索时(Run Program),有2种运行模式: ①自动控制(Run):事先编排好机器人的动作序列(指令(Instruction)),执行指令,使机器人可以连续动作。若干条指令构成机器人的指令集(Instruction Set)。 ②单步控制(Step):自动控制方式的一种特殊形式,只执行指定指令中的一个动作。 (2)手动控制机器人(Manipulate Robots)。选定1个机器人后(Select Robot),可以采用手动方式控制它。手动控制有4种方式: ①Move:机器人朝着正前方移动一个交叉点。 ②Left:机器人原地沿逆时针方向旋转90度。 ③Read:机器人读取其所在位置的字符,并将这个字符的值赋给b1;如果这个位置上没有字符,则不改变b1的当前值。 ④Write:将b1中的字符写入机器人当前所在的位置,如果这个位置上已经有字符,该字符的值将会被b1的值替代。如果这时b1没有值,即在执行Write动作之前没有执行过任何Read动作,那么需要提示用户相应的错误信息(Show Errors)。 手动控制与单步控制的区别在于,单步控制时执行的是指令中的动作,只有一种控制方式,即执行下个动作;而手动控制时有4种动作。 现采用面向对象方法设计并实现该仿真系统,得到如图3-1所示的用例图和图3-2所示的初始类图。图3-2中的类“Interpreter”和“Parser”用于解析描述虚拟世界的文件以及机器人行为文件中的指令集。 图片 图片

参考答案:

问题三 C1:文件 C2:机器人在虚拟世界的行为 C3:Instruction C4:InstructionSet C5:Editor

解析(AI 生成):

按类图关系定名:编辑器操作指令集合,指令集合聚合多条指令,指令作用于机器人行为,最终可保存为文件,故C5为Editor、C4为InstructionSet、C3为Instruction、C2为机器人在虚拟世界的行为、C1为文件。

问答题


377. 试题五 阅读下列说明和C++代码,回答问题,将解答填入答题纸的对应栏内。 【说明】 某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如下图所示。 图片 【C++代码】 class Light { public: Light(string name) { /* 代码省略 / } void on() { / 代码省略 / } // 开灯 void off() { / 代码省略 / } // 关灯 }; class Command { public: (1) ; }; class LightOnCommand:public Command { // 开灯命令 private: Light light; public: LightOnCommand(Light* light) { (2) ; } void execute() { light->on() ; } }; class LightOffCommand:public Command { // 关灯命令 private: Light light; public: LightOffCommand(Light light) { this->light=light; } void execute() { light->off() ; } }; class RemoteControl{ // 遥控器 private: Command* onCommands[7]; Command* offCommands[7]; public: RemoteControl() { /* 代码省略 / } void setCommand(int slot, Command onCommand, Command* offCommand) { onCommands[slot] = (3) ; offCommands[slot] = (4) ; } void onButtonWasPushed(int slot) { onCommands[slot]->execute() ; } void offButtonWasPushed(int slot) { offCommands[slot]->execute() ; } }; int main() { (5) ; Light* livingRoomLight=new Light("Living Room"); LightkitchenLight=new Light("kitchen"); LightOnCommandlivingRoomLightOn=newLightOnCommand(livingRoomLight); LightOffCommand* livingRoomLightOff=newLightOffCommand(livingRoomLight); LightOnCommandkitchenLightOn=new LightOnCommand(kitchenLight); LightOffCommand kitchenLightOff=new LightOffCommand(kitchenLight); remoteControl->setCommand(0, livingRoomLightOn, livingRoomLightOff); remoteControl->setCommand(1, kitchenLightOn, kitchenLightOff); remoteControl->onButtonWasPushed(0); remoteControl->offButtonWasPushed(0); remoteControl->onButtonWasPushed(1); remoteControl->offButtonWasPushed(1); /* 其余代码省略 */ return 0; }

材料: 试题五 阅读下列说明和C++代码,回答问题,将解答填入答题纸的对应栏内。 【说明】 某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如下图所示。 图片 【C++代码】 class Light { public: Light(string name) { /* 代码省略 / } void on() { / 代码省略 / } // 开灯 void off() { / 代码省略 / } // 关灯 }; class Command { public: (1) ; }; class LightOnCommand:public Command { // 开灯命令 private: Light light; public: LightOnCommand(Light* light) { (2) ; } void execute() { light->on() ; } }; class LightOffCommand:public Command { // 关灯命令 private: Light light; public: LightOffCommand(Light light) { this->light=light; } void execute() { light->off() ; } }; class RemoteControl{ // 遥控器 private: Command* onCommands[7]; Command* offCommands[7]; public: RemoteControl() { /* 代码省略 / } void setCommand(int slot, Command onCommand, Command* offCommand) { onCommands[slot] = (3) ; offCommands[slot] = (4) ; } void onButtonWasPushed(int slot) { onCommands[slot]->execute() ; } void offButtonWasPushed(int slot) { offCommands[slot]->execute() ; } }; int main() { (5) ; Light* livingRoomLight=new Light("Living Room"); LightkitchenLight=new Light("kitchen"); LightOnCommandlivingRoomLightOn=newLightOnCommand(livingRoomLight); LightOffCommand* livingRoomLightOff=newLightOffCommand(livingRoomLight); LightOnCommandkitchenLightOn=new LightOnCommand(kitchenLight); LightOffCommand kitchenLightOff=new LightOffCommand(kitchenLight); remoteControl->setCommand(0, livingRoomLightOn, livingRoomLightOff); remoteControl->setCommand(1, kitchenLightOn, kitchenLightOff); remoteControl->onButtonWasPushed(0); remoteControl->offButtonWasPushed(0); remoteControl->onButtonWasPushed(1); remoteControl->offButtonWasPushed(1); /* 其余代码省略 */ return 0; }

参考答案:

试题五 (1)virtual void execute()=0 (2)this->light=light (3)onCommand (4)offCommand (5)RemoteControl* remoteControl=new RemoteControl()

解析(AI 生成):

Command为抽象基类,(1)声明virtual void execute()=0;构造时存接收者,(2)为this->light=light;遥控器用数组存命令,(3)(4)为onCommand、offCommand;(5)创建遥控器。

问答题


378. 试题六 阅读下列说明和JAVA代码,回答问题,将解答填入答题纸的对应栏内。 【说明】 某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如下图所示。 图片 Command模式的类图 【Java代码】 class Light { public Light() {} public Light(String name) { /代码省略 / } public void on() { / 代码省略/ } // 开灯 public void off() { /* 代码省略*/ } // 关灯 // 其余代码省略 } interface Command { (1) ; } class LightOnCommand implements Command { // 开灯命令 Light light; public LightOnCommand(Light light) { (2) ; } public void execute() { light.on(); } } class LightOffCommand implements Command { // 关灯命令 Light light; public LightOffCommand(Light light) { this.light=light; } public void execute(){light.off(); } } class RemoteControl { // 遥控器 Command[] onCommands=new Command[7]; Command[] offCommands=new Command[7]; public RemoteControl() { /* 代码省略*/ } public void setCommand(int slot, Command onCommand, Command offCommand) { onCommands[slot]= (3) ; offCommands[slot]= (4) ; } public void onButtonWasPushed(int slot) { onCommands[slot].execute(); } public void offlButtonWasPushed(int slot){ offCommands[slot].execute() ; } } class RemoteLoader { public static void main(String[] args) { (5) ; Light livingRoomLight=new Light("Living Room"); Light kitchenLight=new Light("kitchen"); LightOnCommand livingRoomLightOn=new LightOnCommand(livingRoomLight); LightOffCommand livingRoomLightOff=new LightOffCommand(livingRoomLight); LightOnCommand kitchenLightOn=new LightOnCommand(kitchenLight); LightOffCommand kitchenLightOff=new LightOffCommand(kitchenLight); remoteControl.setCommand(0, livingRoomLightOn, livingRoomLightOff); remoteControl.setCommand(1, kitchenLightOn, kitchenLightOff); remoteControl.onButtonWasPushed(0); remoteControl.offButtonWasPushed(0); remoteControl.onButtonWasPushed(1); remoteControl.offButtonWasPushed(1); } }

参考答案:

试题六 (1)public void execute() (2)this.light=light (3)onCommand (4)offCommand (5)RemoteControl remoteControl=new RemoteControl()

解析(AI 生成):

Command为接口,(1)声明public void execute();构造器(2)为this.light=light;遥控器用命令数组,(3)(4)为onCommand、offCommand;(5)new出RemoteControl。

问答题


379. 【问题1】 使用说明中的词语,给出图1-7所示的外部实体E1-E4的名称。

材料: 试题一(共15分) 某营销企业拟开发一个销售管理系统,其主要动能描述如下。 (1)接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理,即修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理,即将缺货记录单存入缺货记录文件。 (2)根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门。 (3)根据采购部门提供的进货通知单进行进货处理,即修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。 (4)根据保留的客户订单进行销售统计,打印统计报表给经理。 现采用结构化方法对销售管理系统进行分析与设计,获得如图1-7所示的顶层数据流图和如图1-8所示的0层数据流图。 图片

参考答案:

【问题1】 E1:客户 E2:库房 E3:采购部门 E4:经理

解析(AI 生成):

数据流图的外部实体是系统之外与系统交换数据的角色。按说明的业务分工,提交订单并接收回执的是客户E1,负责出入库与库存核对的是库房E2,提出采购需求的是采购部门E3,查询统计报表的是经理E4,名称须照抄说明原词。

问答题


380. 【问题2】 使用说明中的词语,给出图1-8所示的数据存储D1-D3的名称。

材料: 试题一(共15分) 某营销企业拟开发一个销售管理系统,其主要动能描述如下。 (1)接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理,即修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理,即将缺货记录单存入缺货记录文件。 (2)根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门。 (3)根据采购部门提供的进货通知单进行进货处理,即修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。 (4)根据保留的客户订单进行销售统计,打印统计报表给经理。 现采用结构化方法对销售管理系统进行分析与设计,获得如图1-7所示的顶层数据流图和如图1-8所示的0层数据流图。 图片

参考答案:

【问题2】 D1:缺货记录文件 D2:库存记录文件 D3:订单记录文件

解析(AI 生成):

数据存储是系统需长期保存的数据集合,命名取自说明原词。订单受理后要留档,故D3为订单记录文件;出入库引起库存变化,D2为库存记录文件;库存不足需另行登记待补,D1为缺货记录文件,按业务发生顺序区分即可。

问答题


381. [问题1] (6分) 根据[说明]中的描述,给出图3-1中A1和A2所对应的参与者,U1至U3所对应的用 例,以及该图中空  (1) 所对应的关系。(U1至U3的可选用例包括:Session、Transaction、 Insert Card、Invalid PIN Process和Transfer) 。

材料: 试题三(18分) [说明]  某银行计划开发一个自动存提款机模拟系统(ATM System)。系统通过读卡(CardReader) 读取ATM卡;系统与客户(Customer)的交互由客户控制台(Customer-Console)实现;银 行操作员(Operator)可控制系统的启动(System Startup)和停止(System Shutdown):系统 通过网络和银行系统(Bank)实现通信。  当读卡器判断用户已将ATM卡插入后,创建会话(Session)。会话开始后,读卡器进行读卡,并要求客户输入个人验证码(PIN)。系统将卡号和个人验证码信息送到银行系统进行验证。验证通过后,客户可从菜单选择如下事务(Transaction):  1.从ATM卡账户取款(Withdraw);    2.向ATM卡账尸存款(Deposit);      3.进行转账(Transfer):  4.查询(Inquire)ATM卡账户信息。  一次会话可以包含多个事务,每个事务处理也会将卡号和个人验证码信息送到银行系统 进行验证。若个人验证码错误,则转个人验证码错误处理(Invalid PIN Process)。每个事务完成后,客户可选择继续上述事务或退卡。选择退卡时,系统弹出ATM卡,会话结束。     系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图如图3-1所示,一次会话的序列图(不考虑验证)如图3-2所示。 图片 图片

参考答案:

[问题1]  A1:Customer    A2:Bank     U1:Session     U2:Invalid PIN Process    U3:Transaction     (1):<<extend>>

解析(AI 生成):

取款机前操作的角色是Customer(A1),提供账户验证的是Bank(A2);插卡后建立Session,密码错误时扩展出Invalid PIN Process,取款转账执行Transaction,空(1)为扩展关系>。

问答题


382. 【问题2】(8分) 根据[说明]中的描述,使用消息名称列表中的英文名称,给出图3-2中6~9对应的消息。 消息名称参见下表。 图片

材料: 试题三(18分) [说明]  某银行计划开发一个自动存提款机模拟系统(ATM System)。系统通过读卡(CardReader) 读取ATM卡;系统与客户(Customer)的交互由客户控制台(Customer-Console)实现;银 行操作员(Operator)可控制系统的启动(System Startup)和停止(System Shutdown):系统 通过网络和银行系统(Bank)实现通信。  当读卡器判断用户已将ATM卡插入后,创建会话(Session)。会话开始后,读卡器进行读卡,并要求客户输入个人验证码(PIN)。系统将卡号和个人验证码信息送到银行系统进行验证。验证通过后,客户可从菜单选择如下事务(Transaction):  1.从ATM卡账户取款(Withdraw);    2.向ATM卡账尸存款(Deposit);      3.进行转账(Transfer):  4.查询(Inquire)ATM卡账户信息。  一次会话可以包含多个事务,每个事务处理也会将卡号和个人验证码信息送到银行系统 进行验证。若个人验证码错误,则转个人验证码错误处理(Invalid PIN Process)。每个事务完成后,客户可选择继续上述事务或退卡。选择退卡时,系统弹出ATM卡,会话结束。     系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图如图3-1所示,一次会话的序列图(不考虑验证)如图3-2所示。 图片 图片

参考答案:

【问题2】   6:readPIN()            7:PIN  8:creat(atm,this,card,pin)   9:preformTransaction()

解析(AI 生成):

读卡后ATM向卡读取密码,6为readPIN(),返回的密码值7即PIN;随后创建会话对象,8为creat(atm,this,card,pin);会话建立后发起交易,9为preformTransaction(),消息按调用方向与参数填写。

问答题


383. 【问题3】(6分) 请写出include与extends之间的区别。

材料: 试题三(18分) [说明]  某银行计划开发一个自动存提款机模拟系统(ATM System)。系统通过读卡(CardReader) 读取ATM卡;系统与客户(Customer)的交互由客户控制台(Customer-Console)实现;银 行操作员(Operator)可控制系统的启动(System Startup)和停止(System Shutdown):系统 通过网络和银行系统(Bank)实现通信。  当读卡器判断用户已将ATM卡插入后,创建会话(Session)。会话开始后,读卡器进行读卡,并要求客户输入个人验证码(PIN)。系统将卡号和个人验证码信息送到银行系统进行验证。验证通过后,客户可从菜单选择如下事务(Transaction):  1.从ATM卡账户取款(Withdraw);    2.向ATM卡账尸存款(Deposit);      3.进行转账(Transfer):  4.查询(Inquire)ATM卡账户信息。  一次会话可以包含多个事务,每个事务处理也会将卡号和个人验证码信息送到银行系统 进行验证。若个人验证码错误,则转个人验证码错误处理(Invalid PIN Process)。每个事务完成后,客户可选择继续上述事务或退卡。选择退卡时,系统弹出ATM卡,会话结束。     系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图如图3-1所示,一次会话的序列图(不考虑验证)如图3-2所示。 图片 图片

参考答案:

【问题3】 当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个 独立的子用例,供多个基用例所共享。因为子用例被抽出,基用例并非一个完整的用例, 所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行 include关系在用例图中使用带箭头的虚线表示(在线上标注<>),箭头从基用例 指向子用例。 是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一 个完整的功能。 extend关系在用例图中使用带箭头的虚线表示(在线上标<>), 箭头从子用例指向基用例。

解析(AI 生成):

include把多个用例中相同的动作抽出为公共子用例,基用例不完整、必须执行子用例,箭头由基用例指向子用例;extend在完整基用例上按条件增加可选行为,箭头由扩展用例指向基用例。子用例是否必被执行是区分关键。

问答题


384. 试题五 【说明】 球类比赛记分系统中,每场有两支球队(Team)进行比赛(Game),分别记录各自的得分。图5-1所示为记分系统的类图。 图片 【Java 代码】 class Team { private String name; private(1); public Team(String name){ (2)= name; } voidincreamentGoal(){ (3); } intgetGoals(){ return goals; } String getName(){ return name; } }; class Game { private Team a,b; //两支比赛球队 public Game(Team tl,Team t2){ a = tl; b = t2; } void getResults(){ //输出比分 System.out.print(a.getName() + ":" + b.getName() + "= "); System.out.println(a.getGoals() + ":" + b.getGoals()); } void incrementGoal((4)t){ //球队t进1球 t.increamentGoal (); } void incrementGoal((4)t){ //球队t进1球 t.increamentGoal (); } public static void main(String...args){ Team tl = new Team("TA"); Team t2 = new Team("TB"); Game football =(5); football.incrementGoal(t1); football.incrementGoal(t2); football.getResults(); //输出为∶TA∶TB = 1∶1 football.incrementGoal(t2); football.getResults(); //输出为∶TA∶TB = 1∶2 } };

参考答案:

(1)int goals=0或int goals (2)this.name (3)goals++或++goals 或等价表示 (4)Team (5)new Game(t1,t2)

解析(AI 生成):

(1)按getGoals返回int,属性写int goals并置0;(2)参数与成员同名,构造中用this.name赋值;(3)进球即goals自增;(4)形参为Team;(5)创建对局用new Game(t1,t2)。

问答题


385. 试题六 【说明】 球类比赛记分系统中,每场有两支球队(Team)进行比赛(Game),分别记录各自的得分。图6-1所示为记分系统的类图。 图片 【C++ 代码】 图片 #include #include using namespace std; class Team { private : string name; (1); public : Team(String name){ (2)= name;goals=0; } void increamentGoal(){ (3); } intgetGoals(){ return goals; } string getName(){ return name; } }; class Game { private: Team *a,*b; //两支比赛球队 public : Game(Team tl,Team t2){ a = tl; b = t2; } void getResults(){ //输出比分 cout<< a->getName () << ":" << b->getName () <<" = " cout<< a->getGoals() << ":" <getGoals() <<endl; } void incrementGoal((4)t){ //球队t进1球 t->increamentGoal (); } }; public static void main(String...args){ Team *tl = new Team("TA"); Team *t2 = new Team("TB"); Game *football =(5); football->incrementGoal(t1); football->incrementGoal(t2); football->getResults(); //输出为∶TA∶TB = 1∶1 football->incrementGoal(t2); football->getResults(); //输出为∶TA∶TB = 1∶2 return 0; }

参考答案:

(1)int goals或int goals=0 (2)this->name (3)goals++或++goals或等价表示 (4)Team * (5)new Game(t1,t2)

解析(AI 生成):

C++版差别在指针与this。成员写int goals;参数同名用this->name区分;进球即goals自增;形参须为Team*,故用t->increamentGoal();创建对局为new Game(t1,t2)。

问答题


386. 【问题一】根据题意,给出类“传阅记录”的主要属性。(5分)

材料: 试题三(16分) 阅读下列说明和图,回答下面问题。 [说明] 公司IT部门决定开发一个计算机管理系统以记录期刊的传阅情况。 期刊在公司内部传阅,员工可以要求加入传阅队列。图书室登记公司收到的期刊,交给名单中的第一名员工。员工应在三个工作日内完成阅读,员工阅读完毕后通知系统,系统提醒下一位阅读者取书,下一个员工必须确认己收到期刊。当传阅名单中“下一位”员工出差在外时将无法进行传阅,此时将期刊传给再下一位,而将该员工作标记,再次传递此书时优先考虑该员工。最后一位员工阅读完毕后,将期刊交还图书室以便共用。系统能在员工忘记传递期刊时发出提醒信息。系统详细记录期刊传阅情况,当员工阅读完后通知系统,系统记录该员工员工号及日期,并在备注栏注明是传出;同样,当员工收到期刊后给系统确认,系统记录该员工员工号及日期,并在备注栏注明是收到。 公司的员工都有一个唯一的员工号。公司订阅了多种期刊,为每一本期刊(有唯一期刊流水号)产生一份传阅名单,并详细记录传阅情况。员工的出差情况存储在系统主机中。 该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图1是该系统的类图的一部分,图2描述了成功传递期刊的序列图。 图片 图片

参考答案:

解析:

根据期刊传阅描述,传阅时需记录员工号、日期以及传入/传出。故“传阅记录”应有属性:员工号、日期、备注。 每一本“期刊”有一份“传阅记录”,因此“传阅记录”还应有属性:期刊流水号。

问答题


387. 【问题二】根据题意,将图2中的(1)~(5)处补充完整。(5分)

材料: 试题三(16分) 阅读下列说明和图,回答下面问题。 [说明] 公司IT部门决定开发一个计算机管理系统以记录期刊的传阅情况。 期刊在公司内部传阅,员工可以要求加入传阅队列。图书室登记公司收到的期刊,交给名单中的第一名员工。员工应在三个工作日内完成阅读,员工阅读完毕后通知系统,系统提醒下一位阅读者取书,下一个员工必须确认己收到期刊。当传阅名单中“下一位”员工出差在外时将无法进行传阅,此时将期刊传给再下一位,而将该员工作标记,再次传递此书时优先考虑该员工。最后一位员工阅读完毕后,将期刊交还图书室以便共用。系统能在员工忘记传递期刊时发出提醒信息。系统详细记录期刊传阅情况,当员工阅读完后通知系统,系统记录该员工员工号及日期,并在备注栏注明是传出;同样,当员工收到期刊后给系统确认,系统记录该员工员工号及日期,并在备注栏注明是收到。 公司的员工都有一个唯一的员工号。公司订阅了多种期刊,为每一本期刊(有唯一期刊流水号)产生一份传阅名单,并详细记录传阅情况。员工的出差情况存储在系统主机中。 该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图1是该系统的类图的一部分,图2描述了成功传递期刊的序列图。 图片 图片

参考答案:

解析:

根据期刊传阅过程的描述,员工阅读完毕“通知系统”,系统“添加传阅记录”,并从“传阅名单”中“读取下一位阅读者”,然后“读取员工状态”,若该员工可传,“提醒取书”,员工收到期刊后向系统确认,系统“添加传阅记录”。

问答题


388. 试题五(选做题,二选一) 5、阅读以下说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 [说明] 在股票交易中,股票代理根据客户发出的股票操作指示进行股票的买卖操作。其类图如下图所示,相应的C++代码附后。 图片 类图 [C++代码] #include<iostream> #include<string> #include<vector> using namespace std; class Stock { private: string name; int quantity; public: Stock(string name,int quantity) {this->name=name; this->quantity =quantity;} void buy() {cout<<"[买进]股票名称:"<<name<<",数量:"<<quantity<< endl;} void sell() {cout<<"[卖出]股票名称:"<<name<<",数量:"<<quantity <<endl;} }; clasS order{ public: virtual void execute()=0; }; class BuyStock:(1) { private: Stock* stock; public: BuyStock(Stock* stock){(2) =stock; } void execute(){ stock一>buy(); } }; //类SellStock的实现与BuyStock类似,此处略 class Broker{ private: vector<Order*> orderList; public: void takeOrder((3)__ order)( orderLiSt.push back(order);} void placeorders() { for(int i=0;i<orderList.Size(); i++){(4) ->execute();} 0rderLiSt.clear(); } }; class StockCommand{ public: VOid main(){ Stock* aStock=new Stock("股票A",10); StockbStock=new Stock("股票B",20); OrderbuyStockOrder=new BuyStock(aStock); Order* sellStockOrder=new SellStock(bStock); Broker* broker=new Broker(); broker->takeOrder(buyStockorder); broker->takeOrder(sellStockOrder); broker-> (5) (); } }; int main(){ StockCommand* stockCommand=new StockCommand(); StockCommand->main(); delete StoCkCommand; }

参考答案:

(1)publicOrder (2) this->stock 或(this).stock (3)Order (4) orderList[i] 或 *(orderList+i) (5) placeOrders

解析(AI 生成):

BuyStock继承Order,(1)为public Order;构造时股票指针存入成员,(2)写this->stock;容器存基类指针,(3)为Order*;取元素(4)orderList[i];下单调用(5)placeOrders。

问答题


389. 试题六(选做题,二选一) 阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 [说明] 在股票交易中,股票代理根据客户发出的股票操作指示进行股票的买卖操作。其类图如下图所示。相应的Java代码附后。 图片 [Java代码] import Java.util.ArrayList; import java.util.List; Class Stock{ private String name; private int quantity; public Stock(String name,int quantity){ this.name=name;this.quantity=quantity; } public void buy(){ System.out.println("[买进]:"+name+",数量:" +quantity);} public void sell() {System.out.println("[卖出]:"+name+",数量:" +quantity);} } interface Order { void execute(); } class BuyStock (1)__ Order { private Stock Stock; public BuyStock(Stock stock){(2)=stock; } public void execute(){ stock.buy(); } } //类SellStock实现和BuyStock类似,略 class Broker{ private List<Order>orderList=new ArrayList<Order>(); Dublic void takeOrder((3)_ Order){ orderList.add(order); } public void placeorders(){ for {(4) order:orderList) {order.execute(); } orderList.clear(); } } public class StockCommand { public static void main(String[]args){ Stock aStock:new Stock("股票A",10); Stock bStock=new Stock("股票B",20); Order buyStockorder=new BuyStock(aStock); Order sellStockOrder=new SellSt0Ck(bStoCk); Broker broker=new Broker(); broker.takeOrder(buyStockorder); broker.takeOrder(sellStockOrder); broker.(5); } }

参考答案:

(1)implements (2) this.stock (3)Order (4)Order (5)placeOrders()

解析(AI 生成):

Java以接口实现多态:BuyStock实现Order接口,(1)填implements;参数与成员同名,(2)写this.stock;List元素与数组元素类型均为Order,即(3)(4);代理最后调用(5)placeOrders()。

问答题


390. 【问题1】 (4分) 使用说明中的词语,给出图1-1中的实体E1~E4的名称。

材料: 试题一(共15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】某现代农业种植基地为进一步提升农作物种植过程的智能化,欲开发智慧农业平台,集管理和销售于一体,该平台的主要功能有: 1. 信息维护。农业专家对农作物、环境等监测数据的监控处理规则进行维护。 2. 数据采集。获取传感器上传的农作物长势、土壤详情、气候等连续监测数据,解析后将监测信息进行数据处理、可视化和存储等操作。 3. 数据处理。对实时监测信息根据监控处理规则进行监测分析,将分析结果进行可视化并进行存储、远程控制;对历史监测信息进行综合统计和预测,将预测信息进行可视化和存储。 4. 远程控制。根据监控处理规则对分析结果进行判定,依据判定结果自动对控制器进行远程控制。平台也可以根据农业人员提供的控制信息对控制器进行远程控制。 5. 可视化。实时向农业人员展示监测信息;实时给农业专家展示统计分析结果和预测信息或根据农业专家请求进行展示。 现采用结构化方法对智慧农业平台进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图1-1上下文数据流图 图片 图1-2 0层数据流图

参考答案:

E1: 传感器; E2:农业专家;E3:农业人员;E4:控制器

解析(AI 生成):

外部实体按数据来源与去向判断:采集环境数据送入系统的是传感器E1,提供种植知识与规则的是农业专家E2,接收提示并执行农事的是农业人员E3,接收控制指令驱动设备的是控制器E4,名称与说明一致。

问答题


391. 【问题1】(3分) 根据说明中的描述,给出图3-1中U1~U3所对应的用例名。

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某游戏公司欲开发一款吃金币游戏。 游戏的背景为一种回廊式迷宫 (Maze), 在迷宫的不同位置上设置有墙。迷宫中有两种类型的机器人(Robos):小精灵(PacMan)和幽灵(Ghost)。游戏的目的就是控制小精灵在迷宫内游走,吞吃迷宫路径上的金币,且不能被幽灵抓到。幽灵在迷宫中游走,并会吃掉遇到的小精灵。机器人游走时,以单位距离的倍数计算游走路径的长度。当迷宫中至少存在一个小精灵和一个幽灵时,游戏开始。 机器人上有两种传感器,使机器人具有一定的感知能力。这两种传感器分别是: (1)前向传感器(FrontSensor), 探测在机器人当前位置的左边、右边和前方是否有墙(机器人遇到墙时,必须改变游走方向)。机器人根据前向传感器的探测结果,决定朝哪个方向运动。 (2)近距离传感器(ProxiSesor), 探测在机器人的视线范围内(正前方)是否存在隐藏的金币或幽灵。近距离传感器并不报告探测到的对象是否正在移动以及朝哪个方向移动。但是如果近距离传感器的连续两次探测结果表明被探测对象处于不同的位置,则可以推导出该对象在移动。 另外,每个机器人都设置有一个计时器(Timer), 用于支持执行预先定义好的定时事件。 机器人的动作包括:原地向左或向右旋转90°;向前或向后移动。 建立迷宫:用户可以使用编辑器(Editor) 编写迷宫文件,建立用户自定义的迷宫。将迷宫文件导入游戏系统建立用户自定义的迷宫。 现采用面对家分析与设计方法开发该游戏,得到如图3-1所示的用例图以及图3-2所示的初始类图。 图片 图3-1用例图 图片 图3-2初始类图

参考答案:

U1 编写迷宫文件 U2导入迷宫文件; U3 设置计时器

解析(AI 生成):

用例名取自说明中的功能描述。与建立迷宫相关的是编写迷宫文件U1和导入迷宫文件U2,二者为迷宫提供布局数据;与操作机器人相关的是设置计时器U3,用于控制游戏节奏。

问答题


392. 【问题2】(4分) 图3-1中用例U1~U3分别与哪个(哪些)用例之间有关系,是何种关系?

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某游戏公司欲开发一款吃金币游戏。 游戏的背景为一种回廊式迷宫 (Maze), 在迷宫的不同位置上设置有墙。迷宫中有两种类型的机器人(Robos):小精灵(PacMan)和幽灵(Ghost)。游戏的目的就是控制小精灵在迷宫内游走,吞吃迷宫路径上的金币,且不能被幽灵抓到。幽灵在迷宫中游走,并会吃掉遇到的小精灵。机器人游走时,以单位距离的倍数计算游走路径的长度。当迷宫中至少存在一个小精灵和一个幽灵时,游戏开始。 机器人上有两种传感器,使机器人具有一定的感知能力。这两种传感器分别是: (1)前向传感器(FrontSensor), 探测在机器人当前位置的左边、右边和前方是否有墙(机器人遇到墙时,必须改变游走方向)。机器人根据前向传感器的探测结果,决定朝哪个方向运动。 (2)近距离传感器(ProxiSesor), 探测在机器人的视线范围内(正前方)是否存在隐藏的金币或幽灵。近距离传感器并不报告探测到的对象是否正在移动以及朝哪个方向移动。但是如果近距离传感器的连续两次探测结果表明被探测对象处于不同的位置,则可以推导出该对象在移动。 另外,每个机器人都设置有一个计时器(Timer), 用于支持执行预先定义好的定时事件。 机器人的动作包括:原地向左或向右旋转90°;向前或向后移动。 建立迷宫:用户可以使用编辑器(Editor) 编写迷宫文件,建立用户自定义的迷宫。将迷宫文件导入游戏系统建立用户自定义的迷宫。 现采用面对家分析与设计方法开发该游戏,得到如图3-1所示的用例图以及图3-2所示的初始类图。 图片 图3-1用例图 图片 图3-2初始类图

参考答案:

U1和U2与建立迷宫用例是包含关系; U3与操作机器人是包含关系

解析(AI 生成):

包含关系表示基用例必然执行被抽出的公共子用例。建立迷宫要先取得迷宫数据,故U1、U2被建立迷宫包含;操作机器人要先有时限控制,故U3被操作机器人包含。图中为带箭头的虚线并标注>。

问答题


393. 【问题3】 (8分) 根据说明中的描述,给出图3-2中C1~C8所对应的类名。

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某游戏公司欲开发一款吃金币游戏。 游戏的背景为一种回廊式迷宫 (Maze), 在迷宫的不同位置上设置有墙。迷宫中有两种类型的机器人(Robos):小精灵(PacMan)和幽灵(Ghost)。游戏的目的就是控制小精灵在迷宫内游走,吞吃迷宫路径上的金币,且不能被幽灵抓到。幽灵在迷宫中游走,并会吃掉遇到的小精灵。机器人游走时,以单位距离的倍数计算游走路径的长度。当迷宫中至少存在一个小精灵和一个幽灵时,游戏开始。 机器人上有两种传感器,使机器人具有一定的感知能力。这两种传感器分别是: (1)前向传感器(FrontSensor), 探测在机器人当前位置的左边、右边和前方是否有墙(机器人遇到墙时,必须改变游走方向)。机器人根据前向传感器的探测结果,决定朝哪个方向运动。 (2)近距离传感器(ProxiSesor), 探测在机器人的视线范围内(正前方)是否存在隐藏的金币或幽灵。近距离传感器并不报告探测到的对象是否正在移动以及朝哪个方向移动。但是如果近距离传感器的连续两次探测结果表明被探测对象处于不同的位置,则可以推导出该对象在移动。 另外,每个机器人都设置有一个计时器(Timer), 用于支持执行预先定义好的定时事件。 机器人的动作包括:原地向左或向右旋转90°;向前或向后移动。 建立迷宫:用户可以使用编辑器(Editor) 编写迷宫文件,建立用户自定义的迷宫。将迷宫文件导入游戏系统建立用户自定义的迷宫。 现采用面对家分析与设计方法开发该游戏,得到如图3-1所示的用例图以及图3-2所示的初始类图。 图片 图3-1用例图 图片 图3-2初始类图

参考答案:

C1 机器人(Robos) ;C2 计时器(Timer);C3 小精灵(PacMan);C4 幽灵(Ghost) C5 传感器 C6 前向传感器(FrontSensor) C7 近距离传感器(ProxiSesor) C8 迷宫 (Maze) 其中 C3与C4 可换; C6与C7可换

解析(AI 生成):

类名按继承与组合层次确定:Robot是主体并聚合Timer计时;PacMan与Ghost都是可移动角色,位置可互换;Sensor为父类,FrontSensor与ProxiSensor是其子类,可互换;Maze提供通道信息。

问答题


394. 试题五(共15分) 阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 享元(flyweight)模式主要用于减少创建对象的数量,以降低内存占用,提高性能。现要开发一个网络围棋程序,允许多个玩家联机下棋。由于只有一台服务器,为节省内存空间,采用享元模式实现该程序,得到如图5-1所示的类图。 图片 图片

材料: 试题五(共15分) 阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 享元(flyweight)模式主要用于减少创建对象的数量,以降低内存占用,提高性能。现要开发一个网络围棋程序,允许多个玩家联机下棋。由于只有一台服务器,为节省内存空间,采用享元模式实现该程序,得到如图5-1所示的类图。 图片

参考答案:

(1) virtual void Draw(){} (2) Piece* (3)Piece* (4) piece->Draw() (5) piece->Draw()

解析(AI 生成):

享元模式把内部状态共享、外部状态外传。Piece定义虚函数Draw供子类重写,(1)为virtual void Draw(){};工厂与容器以Piece保存对象,(2)(3)为Piece;绘制用(4)(5)piece->Draw()。

问答题


395. 【问题1】2分 图(a)中只有一个外部实体E1。使用【说明】中的词语,给出E1的名称。

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某音像制品出租商店欲开发一个音像管理信息系统,管理音像制品的租借业务。需求如下: 1.系统中的客户信息文件保存了该商店的所有客户的用户名、密码等信息。对于首次来租借的客户,系统会为其生成用户名和初始密码。 2.系统中音像制品信息文件记录了商店中所有音像制品的详细信息及其库存数量。 3.根据客户所租借的音像制品的品种,会按天收取相应的费用。音像制品的最长租借周期为1周,每位客户每次最多只能租借6件音像制品。 4.客户租借某种音像制品的具体流程如下。 1根据客户提供的用户名和密码,验证客户身份。 2若该客户是合法客户,查询音像制品信息文件,查看商店中是否还有这种音像制品。 3若还有该音像制品,且客户所要租借的音像制品数小于等于6个,就可以将该音像制品租借给客户。这时,系统给出相应的租借确认信息,生成一条新的租借记录并将其保存在租借记录文件中。 4系统计算租借费用,将费用信息保存在租借记录文件中并告知客户。 5客户付清租借费用之后,系统接收客户付款信息,将音像制品租借给该客户。 5.当库存中某音像制品数量不能满足客户的租借请求数量时,系统可以接受客户网上预约租借某种音像制品。系统接收到预约请求后,检查库存信息,验证用户身份,创建相应的预约记录,生成预约流水号给该客户,并将信息保存在预约记录文件中。 6.客户归还到期的音像制品,系统修改租借记录文件,并查询预约记录文件和客户信息文件,判定是否有客户预约了这些音像制品。若有,则生成预约提示信息,通知系统履行预约服务,系统查询客户信息文件和预约记录文件,通知相关客户前来租借音像制品。 图片

参考答案:

E1:客户

解析:

本题考查数据流图的设计和应用。 根据题目说明,本系统的外部实体仅仅涉及到客户,因此系统的顶层数据流图中E1应该对应为客户。

问答题


396. 【问题1】(8分) 根据说明中的描述,给出图3-1中C1-C4所对应的类名(类名使用说明中给出的 英文词汇)。

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3.将解答填入答题纸的对应栏内。 【说明】 某公司欲开发一个管理选民信息的软件系统。系统的基本需求描述如下: (1)每个人(Person)可以是一个合法选民(Eligible)或者无效的选民(Ineligible)。 (2)每个合法选民必须通过该系统对其投票所在区域(即选区,Riding)进行注册 (Registration)。每个合法选民仅能注册一个选区。 (3)选民所属选区由其居住地址(Address)决定。假设每个人只有一个地址,地址 可以是镇(Town)或者城市(City)。 (4)某些选区可能包含多个镇,而某些较大的城市也可能包含多个选区。 现采用面向对象方法对该系统进行分析与设计,得到如图3-1所示的初始类图。 图片

参考答案:

C1:Address ; C2:Riding ;C3:Ineligible ;C4:Eligible。

解析:

本题考察在面向对象分析与设计过程中,如何利用类图描述系统需求模型及设计模型。考试需要理解面向对象方法的相关概念和思想,并熟悉UML的语法及应用。类图及用例图是考试题中最多出现的两种UML模型。 1.由需求1可知,Person下面只有Ineligible和Eligible,C3是孤立点,C4还与其他类有关系,所以C3是Ineligible,C4是Eligible。Person与C1 的关系是livesAt,所以C1是Address,C2是Riding。

问答题


397. 试题五(共15分) 阅读下列说明和C++代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新。 现在采用观察者(Observer)模式来开发该系统。观察者模式的类图如图5-1所示。 图片 【C++代码】 include <iostream> include <vector> using namespace std; class Observer { public: virtual void update(float temp, float humidity, float cleanness)=0; }; class Subject { public: virtual void registerObserver(Observer* o) = 0; //注册对主题感兴趣的观察者 virtual void removeObserver(Observer* o) = 0; //删除观察者 virtual void notifyObservers() = 0;//当主题发生变化时通知观察者 }; class EnvironmentData : public (1) { private: vector<Observer*> observers; float temperature, humidity, cleanness; public: void registerObserver(Observer* o) { observers.push_back(o); } void removeObserver(Observer* o) { /* 代码省略 / } void notifyObservers() { for(vector<Observer>::const_iterator it = observers.begin(); it != observers.end(); it++) { (2) ; } } Void measurementsChanged() { (3) ; } void setMeasurements(float temperature, float humidity, float cleanness) { this->temperature = temperature; this->humidity = humidity; this->cleanness = cleanness; (4) ; } }; class CurrentConditionsDisplay : public Observer { private: float temperature, humidity, cleanness; Subject* envData; public: CurrentConditionsDisplay(Subject* envData) { this->envData = envData; (6) ; } void update(float temperature, float humidity, float cleanness) { this->temperature = temperature; this->humidity = humidity; this->cleanness = cleanness; display(); } void display() { /* 代码省略 / } }; int main() { EnvironmentData envData = new EnvironmentData(); CurrentConditionsDisplay* currentDisplay = new CurrentConditionsDisplay(envData); envData->setMeasurements(80, 65, 30.4f); return 0;

材料: 试题五(共15分) 阅读下列说明和C++代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新。 现在采用观察者(Observer)模式来开发该系统。观察者模式的类图如图5-1所示。 图片

参考答案:

(1)Subject (2)(*it)->update(remperature,humidity,cleanness) (3)notifyObservesers() (4) mesasurementsChanged() (5) envData->regisiterObserver(this)

解析:

本题考察观察者(Observer)模式的概念及应用。 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 Observer模式适用于: ①当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这两者封装在独立地对象中以使它们可以各自独立地改变和复用。 ②当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时。 ③当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即:不希望这些对象是紧耦合的。 观察者模式的结构如下图所示,其中: 图片 Subject (主题)知道它的观察者,可以有任意多个观察者观察同一个目标;提供注册和删除观察者对象的接口。 Observer (观察者)为那些在目标发生改变时需获得通知的对象定义一个更新接口。 ConcreteSubject (具体主题)将有关状态存入一个ConcreteObserver对象;当它的状态发生改变时,向它的各个观察者发出通知。 ConcreteObserver (具体观察者)维护一个指向ConcreteSubject对象的引用;存储有关状态,这些状态应与主题的状态保持一致;实现Observer的更新接口以使自身状态与主题的状态保持一致。 在本题的说明中,给出了观察者模式的结构图,答题时需要首先确定程序中的类与观察者模式结构的对应关系,也就是要找到哪些是ConcreteSubject,哪些是 ConcreteObserver。由程序上下文可以判断出,类EnvironmentData对应的是ConcreteSubject,类CurrentConditionsDisplay 对应的是ConcreteObserver。根据类图,它们分别为Subject和Observer的子类。由此可以,空(1) Subject。 空(2)要求给出方法notifyObservers的实现,其功能是在主题发生变化时通知观察者。通知的实现是通过向对该主题感兴趣的所有观察者发送update消息实现的。对主题EnvironmentData感兴趣的观察者由向量observers表示,所以在notifyObservers方法中,就是对向量observers中的每个成员发送update消息,因此空(2)应填写 (*it)->update(temperature, humidity, cleanness)。 方法measurementsChanged表示主题发生了变化,这时应该通知对应的观察者,所以空(3)处应填写notifyObservers()。 方法setMeasurements用于设置发生变化后的主题内容,所以空(4)处应填写measurementsChanged()。 CurrentConditionsDisplay是对主题EnvironmentData感兴趣的一个观察者,要能够获得主题的变化,需要首先将自己注册为该主题的观察者,这个注册行为在其构造函数中完成。因此空(5)处应填写envData->registerObserver(this)。

问答题


398. 试题六(共15分) 阅读下列说明和Java代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新。 现在采用观察者(Observer)模式来开发该系统。观察者模式的类图如图6-1所示。 图片 【Java代码】 import java.util.; interface Observer { public void update(float temp, float humidity, float cleanness); } interface Subject { public void registerObserver(Observer o); //注册对主题感兴趣的观察者 public void removeObserver(Observer o); //删除观察者 public void notifyObservers(); //当主题发生变化时通知观察者 } class EnvironmentData implements (1) { private ArrayList observers; private float temperature, humidity, cleanness; public EnvironmentData() { observers = new ArrayList(); } public void registerObserver(Observer o) { observers.add(o); } public void removeObserver(Observer o) { / 代码省略 / } public void notifyObservers() { for (int i = 0; i < observers.size(); i++) { Observer observer = (Observer)observers.get(i); (2) ; } } public void measurementsChanged() { (3) ; } public void setMeasurements(float temperature, float humidity, float cleanness) { this.temperature = temperature; this.humidity = humidity; this.cleanness = cleanness; (4) ; } } class CurrentConditionsDisplay implements Observer { private float temperature; private float humidity; private float cleanness; private Subject envData; public CurrentConditionsDisplay(Subject envData) { this.envData = envData; (6) ; } public void update(float temperature, float humidity, float cleanness) { this.temperature = temperature; this.humidity = humidity; this.cleanness = cleanness; display(); } public void display() {/ 代码省略 */ } } class EnvironmentMonitor{ public static void main(String[] args) { EnvironmentData envData = new EnvironmentData(); CurrentConditionsDisplay currentDisplay = new CnrrentConditionsDisplay(envData); envData.setMeasurements(80, 65, 30.4f); }

参考答案:

(1)Subject (2)observer.update( temperature,humidity,cleanness ) (3)notifyObservesers() (4)mesasurementsChanged() (5)envData.regisiterObserver(this)

解析:

本题考察观察者(Observer)模式的概念及应用。 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 Observer模式适用于: ①当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这两者封装在独立地对象中以使它们可以各自独立地改变和复用。 ②当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时。 ③当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即:不希望这些对象是紧耦合的。 观察者模式的结构如下图所示,其中: 图片 Subject (主题)知道它的观察者,可以有任意多个观察者观察同一个目标;提供注册和删除观察者对象的接口。 Observer (观察者)为那些在目标发生改变时需获得通知的对象定义一个更新接口。 ConcreteSubject (具体主题)将有关状态存入一个ConcreteObserver对象;当它的状态发生改变时,向它的各个观察者发出通知。 ConcreteObserver (具体观察者)维护一个指向ConcreteSubject对象的引用;存储有关状态,这些状态应与主题的状态保持一致;实现Observer的更新接口以使自身状态与主题的状态保持一致。 在本题的说明中,给出了观察者模式的结构图,答题时需要首先确定程序中的类与观察者模式结构的对应关系,也就是要找到哪些是ConcreteSubject,哪些是 ConcreteObserver。由程序上下文可以判断出,类EnvironmentData对应的是ConcreteSubject,类CurrentConditionsDisplay 对应的是ConcreteObserver。根据类图,它们分别为Subject和Observer的子类。由此可以,空(1) Subject。 空(2)要求给出方法notifyObservers的实现,其功能是在主题发生变化时通知观察者。通知的实现是通过向对该主题感兴趣的所有观察者发送update消息实现的。对主题EnvironmentData感兴趣的观察者由向量observers表示,所以在notifyObservers方法中,就是对向量observers中的每个成员发送update消息,因此空(2)应填写 observer.update( temperature,humidity,cleanness )。 方法measurementsChanged表示主题发生了变化,这时应该通知对应的观察者,所以空(3)处应填写notifyObservers()。 方法setMeasurements用于设置发生变化后的主题内容,所以空(4)处应填写measurementsChanged()。 CurrentConditionsDisplay是对主题EnvironmentData感兴趣的一个观察者,要能够获得主题的变化,需要首先将自己注册为该主题的观察者,这个注册行为在其构造函数中完成。因此空(5)处应填写envData.regisiterObserver(this)。

问答题


399. 【问题1】 数据流图1-2中有两条数据流是错误的,请指出这两条数据流的起点和终点。

材料: 试题一(15分) 阅读下列说明和数据流图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某图书管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位、地址等)一起写入读者文件。 系统的图书管理功能分为四个方面∶购入新书、读者借书、读者还书以及图书注销。 1.购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。 2.读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过5本),若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。 3.读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中,若图书逾期,则处以相应的罚款。 4.注销图书时,需填写注销单并修改图书目录文件中的库存总量。系统的信息查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息以及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。图书管理系统的顶层图如图1-1所示;图书管理系统的第0层DFD图如图1-2所示,其中,加工2的细化图如图1-3所示。 图片 图片 图片

参考答案:

【问题1】 起点∶读者文件 终点∶登记读者信息 或3, 起点∶处理查询请求或2 终点∶读者文件

解析(AI 生成):

数据流应沿外部实体或存储经加工再流向存储或外部实体的方向,不能由存储直接送给加工当输入。读者文件不能向登记读者信息提供数据,应由读者输入;处理查询请求也不能把结果写回读者文件,查询只读不写。

问答题


400. 【问题2】 数据流图1-3中缺少三条数据流,请指出这三条数据流的起点和终点。 图片 图片

材料: 试题一(15分) 阅读下列说明和数据流图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某图书管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位、地址等)一起写入读者文件。 系统的图书管理功能分为四个方面∶购入新书、读者借书、读者还书以及图书注销。 1.购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。 2.读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过5本),若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。 3.读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中,若图书逾期,则处以相应的罚款。 4.注销图书时,需填写注销单并修改图书目录文件中的库存总量。系统的信息查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息以及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。图书管理系统的顶层图如图1-1所示;图书管理系统的第0层DFD图如图1-2所示,其中,加工2的细化图如图1-3所示。 图片 图片 图片

参考答案:

【问题2】 起点∶ 图书目录文件 终点∶图书信息查询 或 2.2, 起点∶借书文件 终点∶读者信息查询 或 2.1, 起点∶借书文件 终点∶图书信息查询 或 2.2,

解析(AI 生成):

查询类加工必须从数据存储读取数据。图书信息查询需要书目数据,故补图书目录文件到2.2;读者信息查询要判断借阅情况,需借书文件到2.1;图书信息查询也要判断该书是否在借,需借书文件到2.2。

问答题


401. 【问题3】 根据系统功能和数据流图填充下列数据字典条目中的(1)和(2)∶ 查询请求信息=【查询读者请求信息| 查询图书请求信息】 读者情况=读者号+姓名+所在单位+{借书情况} 管理工作请求单= (1) 入库单= (2)

材料: 试题一(15分) 阅读下列说明和数据流图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某图书管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位、地址等)一起写入读者文件。 系统的图书管理功能分为四个方面∶购入新书、读者借书、读者还书以及图书注销。 1.购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。 2.读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过5本),若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。 3.读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中,若图书逾期,则处以相应的罚款。 4.注销图书时,需填写注销单并修改图书目录文件中的库存总量。系统的信息查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息以及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。图书管理系统的顶层图如图1-1所示;图书管理系统的第0层DFD图如图1-2所示,其中,加工2的细化图如图1-3所示。 图片 图片 图片

参考答案:

(1)【入库单|借书单|还书单|注销单】 (2)分类目录号+书名+作者+价格+数量+购书日期

解析(AI 生成):

数据字典用等号定义条目,方括号表示选择,加号表示顺序连接。管理工作请求单是多种单据之一,写成(1)【入库单|借书单|还书单|注销单】;入库单由具体数据项顺序组成,(2)为分类目录号+书名+作者+价格+数量+购书日期。

问答题


402. 试题五(15分) 阅读以下说明和C++代码,将应填入_(n)_处的字句写在答题纸的对应栏内。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete 和 timeout三种。事件与其相应的状态转换如下图所示。 图片 下面的C++代码1与C++代码2分别用两种不同的设计思路对传输门进行状态模拟,,请填补代码中的空缺。 【C++代码1】 const int CLOSED = l; const int OPENING = 2; const int OPEN = 3; const int CLOSING = 4; const int STAYOPEN = 5; //定义状态变量,用不同整数表示不同状态 class Door { private: int state; //传输门当前状态 void setState(int state){ this->state = state;} //设置当前状态 public: Door ():state (CLOSED){}; void getState (){ //根据当前状态输出相应的字符串 switch (state){ case OPENING: cout<<"OPENING"<< endl;break; case CLOSED: cout << "CLOSED"<< endl; break; case OPEN: cout << "OPEN"<< endl; break; case CLOSING: cout << "CLOSING" << endl; break; case STAYOPEN:cout<<"STAYOPEN"<< endl;break; } } void click () { //发生 click 事件时进行状态转换 if( 1 ) setState (OPENING); else if ( 2 ) setState (CLOSING); else if ( 3 ) setState (STAYOPEN); } void timeout (){ //发生timeout事件时进行状态转换 if (state == OPEN) setState(CLOSING); } void complete () { /发生 complete 事件时进行状态转换 if (state == OPENING) setState (OPEN); else if(state == CLOSING) setState(CLOSED); } }; int main() { Door aDoor; aDoor.getState (); aDoor.click(); aDoor.getState (); aDoor.complete(); aDoor.getState(); aDoor.click(); aDoor.getState (); aDoor.click(); aDoor.getState(); return 0 【C++代码2】 class Door { public: DoorState *CLOSED,*OPENING,*OPEN,*CLOSING,*STAYOPEN,*state; Door(); virtual ~Door(){……//释放申请的内存,此处代码省略}; void setState (DoorState *state){this->state = state;} void getState (){ //此处代码省略,本方法输出状态字符串, //例如,当前状态为CLOSED时,输出字符串为"CLOSED" }; void click (); void timeout (); void complete (); }; Door::Door (){ CLOSED = new DoorClosed (this); OPENING= new DoorOpening (this); OPEN = new DoorOpen(this); CLOSING=new DoorClosing(this); STAYOPEN = new DoorStayOpen(this); state = CLOSED; } void Door::click(){ (4); } void Door::timeout (){ (5); } void Door::complete () { (6); } class DoorState //定义一个抽象的状态,它是所有状态类的基类 { protected:Door *door; public: DoorState(Door *door){ this->door = door;} virtual ~DoorState (void); virtual void click(){} virtual void complete(){} virtual void timeout (){} }; class DoorClosed ∶public DoorState{//定义一个基本的Closed状态 public: DoorClosed (Door *door):DoorState (door){} virtual ~ DoorClosed (){} void click (); }; void DoorClosed::click(){(7);} // 其他状态类的定义与实现代码省略 int main(){ Door aDoor; aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.complete(); aDoor.getState(); aDoor.timeout(); aDoor.getState();return 0; }

参考答案:

(1)state =-CLOSED||state = CLOSING (2)state = OPENING||tate ==STAYOPEN (3)state == OPEN (4) state->click() (5)state->timeout() (6)state->complete() (7)door->setState(door->OPENING)

解析(AI 生成):

click在CLOSED或CLOSING时可开,(1)判这两态;timeout使OPENING或STAYOPEN保持打开,(2);complete仅在OPEN时关闭,(3)。代码2委托状态对象,(4)(5)(6)为委托调用,(7)回写状态。

问答题


403. 试题六(15分) 阅读以下说明和java代码,将应填入_(n)_处的字句写在答题纸的对应栏内。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete 和 timeout三种。事件与其相应的状态转换如下图所示。 图片 下面的java代码1与java代码2分别用两种不同的设计思路对传输门进行状态模拟,,请填补代码中的空缺。 【java代码1】 public class Door { public static final int CLOSED= 1; public static final int OPENING =2; public static final int OPEN = 3; public static final int CLOSING = 4; public static final int STAYOPEN = 5; private int state = CLOSED; //定义状态变量,用不同的整数表示不同状态 private void setState(int state){this.state =state;} //设置传输门当前状态 public void getState (){ //此处代码省略,本方法输出状态字符串, //例如,当前状态为 CLOSED时,输出字符串为"CLOSED" } public void click(){//发生click事件时进行状态转换 if( 1 ) setState (OPENING); else if ( 2 ) setState (CLOSING);) else if ( 3 ) setState (STAYOPEN); } //发生 timeout事件时进行状态转换 public void timeout(){ if(state == OPEN) setState(CLOSING);} public void complete(){//发生 complete事件时进行状态转换 if(state == OPENING) setState (OPEN); else if (state == CLOSING) setState(CLOSED); } public static void main(String [] args){ Door aDoor = new Door (); aDoor,getState();aDoor.click();aDoor.getState(); aDoor.complete(); aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.click(); aDoor.getState (); return;; } } 【Java 代码2】 public class Door { public final DoorState CLOSED = new DoorClosed(this); public final DoorState OPENING = new DoorOpening(this); public final DoorState OPEN = new DoorOpen(this); public final DoorState CLOSING = new DoorClosing(this); public final DoorState STAYOPEN = new DoorStayOpen(this); private DoorState state = CLOSED; //设置传输门当前状态 public void setState(DoorState state){ this.state = state;) public void getState(){//根据当前状态输出对应的状态字符串 System.out.println(state.getClass ().getName ()); } public void click(){ (4) ;}//发生 click 事件时进行状态转换 public void timeout (){ (5) ;}//发生 timeout 事件时进行状态转换 public void complete (){ (6) ;}//发生 complete事件时进行状态转换 public static void main(String[] args){ Door aDoor = new Door (); aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete(); aDoor.getState(); aDoor.timeout(); aDoor.getState();return; } } public abstract class DoorState {//定义所有状态类的基类 protected Door door ; public DoorState(Door door){ this.door = door;} public void click(){} public void complete (){} public void timeout (){} } class DoorClosed extends DoorState{//定义一个基本的 Closed状态 public DoorClosed(Door door){ super(door);} public void click(){ (7) ;} //该类定义的其余代码省略 } //其余代码省略

参考答案:

解析:

(1)state==CLOSED或state == CLOSING (2)state==OPENING或state==STAYOPEN (3) state ==OPEN (4) state.click() (5)state.timeout() (6)state.complete() (7) door.setState(door.OPENING)

问答题


404. 【问题1】3分 使用说明中的词语,给出图1-1中的实体E1~E3的名称。

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某时装邮购提供商拟开发订单处理系统,用于处理客户通过电话、传真、邮件或Web站点所下订单。其主要功能如下: (1)增加客户记录。将新客户信息添加到客户文件,并分配一个客户号以备后续使用。 (2)查询商品信息。接收客户提交的商品信息请求,从商品文件中查询商品的价格和可订购数量等商品信息,返回给客户。 (3)增加订单记录。根据客户的订购请求及该客户记录的相关信息,产生订单并添加到订单文件中。 (4)产生配货单。根据订单记录产生配货单,并将配货单发送给仓库进行备货;备好货后,发送备货就绪通知。如果现货不足,则需向供应商订货。 (5)准备发货单。从订单文件中获取订单记录,从客户文件中获取客户记录,并产生发货单。 (6)发货。当收到仓库发送的备货就绪通知后,根据发货单给客户发货;产生装运单并发送给客户。 (7)创建客户账单。根据订单文件中的订单记录和客户文件中的客户记录,产生并发送客户账单,同时更新商品文件中的商品数量和订单文件中的订单状态。 (8)产生应收账户。根据客户记录和订单文件中的订单信息,产生并发送给财务部门应收账户报表。 现采用结构化方法对订单处理系统进行分析与设计,获得如图1-1所示的顶层数据流图和图1-2所示的0层数据流图。 图片 图片

参考答案:

E1:客户 E2:财务部门 E3:仓库

解析:

本题考查采用结构化方法进行系统分析与设计的知识,是比较传统的题目,要求考生细心分析题目中所描述的内容。 数据流图(DFD)是一种便于用户理解、分析系统数据流程的图形化建模工具,是系统逻辑模型的重要组成部分。 本问题考查顶层DFD。顶层DFD一般用来确定系统边界,将待开发系统看作一个加工,因此图中只有唯一的一个处理和一些外部实体,以及这两者之间的输入输出数据流。题目要求根据描述确定图中的外部实体。根据题目中的描述,并结合已经在项层数据流图中给出的数据流进行分析。从题目的说明中可以看出:客户提交商品信息请求、订购请求等;将配货单发送给仓库、仓库向系统发送备货就绪通知;发送给财务部门应收账户报表。由此可知该订单系统有客户、仓库和财务部门三个外部实体。对应图1-1中数据流和实体的对应关系,可知E1为客户,E2为财务部门,E3为仓库。本题中需注意说明(4)中向供应商订货是系统外部的行为,因此,供应商并非本系统的外部实体。

问答题


405. 【问题1】(4分)根据说明中的描述,给出图3-1中U1和U2所对应的用例,以及(1)和(2)处所对应的关系。

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。 【说明】 一个简单的图形编辑器提供给用户的基本操作包括:创建图形、创建元素、选择元素以及删除图形。图形编辑器的组成及其基本功能描述如下: (1)图形由文本元素和图元元素构成,图元元素包括线条、矩形和椭圆。 (2)图形显示在工作空间中,一次只能显示一张图形(即当前图形,current)。 (3)编辑器提供了两种操作图形的工具:选择工具和创建工具。对图形进行操作时,一次只能使用一种工具(即当前活动工具,accive)。 创建工具用于创建文本元素和图元元素。 ②对于显示在工作空间中的图形,使用选择工具能够选定其中所包含的元素,可以选择一个元素,也可以同时选择多个元素。被选择的元素称为当前选中元素(selected)。 ③每种元素都具有对应的控制点。拖拽选定元素的控制点,可以移动元素或者调整元素的大小。 现采用面向对象方法开发该图形编辑器,使用UML进行建模。构建出的用例图和类图分别如图3-1和图3-2所示。 图片 图片

参考答案:

U1:移动元素 U2:调整元素大小(U1和U2的答案可以互换) (1)<<extend>> (2)<<extend>>

解析:

本题主要考查在面向对象分析与设计过程中,如何利用用例图和类图描述系统需求模型及设计模型。考生需要理解面向对象方法的相关概念和思想,并熟悉UML的语法及应用。用例图和类图是考试题中出现次数最多的两种UML模型。 本问题主要考查用例之间的关系。在UML中,用例之间有3种关系:包含(include)、概括(generalize)和扩展(extend)。 如果多个用例中都含有相同的事件流,那么可以将其抽取出来放在一个单独的用例中,其他用例都可以通过包含(include)这个用例来使用其中的事件流。包含关系可以避免在多个用例的描述中重复拷贝相同的事件流。 概括关系是指子用例(child use case)继承父用例(parent use case)的行为,而子用例本身还可以增加新的行为或重置父类的某些行为。这种关系与面向对象程序设计中的“继承”很类似。 一个用例(基础用例,base use case)中加入一些新的动作后则构成了另外一个用例(扩展用例,extending use case),那么这两个用例之间的关系就是扩展关系。扩展关系与概括关系有相似之处,但是比概括关系更为严格。基础用例必须声明特定的扩展点,而扩展用例只能在这些扩展点上添加新行为。 由说明可知,图形编辑器的基本操作为创建图形、创建元素、选择元素和删除图形。对照图3-1,可知这些最终都被确定为用例。除此之外,用例“创建图元”、“创建文本”与用例“创建元素”之间是概括关系,即能创建的元素分别是图元和文本。图3-1中缺少了两个用例,而这两个用例都是与“选择元素”相关的。因此需要仔细阅读说明中关于“选择元素”的描述,其中最关键的一句描述为“拖拽选定元素的控制点,可以移动元素或者调整元素的大小”。这句话中出现了两个动词短语“移动元素”、“调整元素大小”,这两个动作都是要先选择对应元素之后,才能实施的。因此,可以推出,U1和U2应对应“移动元素”和“调整元素大小”。 下一步就是确定“移动元素”、“调整元素大小”与“选择元素”之间的关系。由说明可知,必须先选择元素才能通过拖拽控制点来对元素进行相应的操作。因此,“移动元素”和“调整元素大小”是对“选择元素”的扩展,因此这三个用例之间应该是扩展关系。(1)和(2)处应填写extend。

问答题


406. 试题五(共15分,每空3分) 阅读下列说明和C++代码,回答下列问题。 【说明】 现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQL Server和Access两种数据库以及系统中的数据库表Department为例,其类图如图5所示。 图片 [C++代码] #include<iostream> using namespace std; class Department{/代码省略/}; class IDepartment{ public: (1)=0; (2)=0; }; class SqlserverDepartment: (3){ public: void Insert(Department* department){ cout<<"Insert a record into Department in SQL Server!\n"; //其余代码省略 } Department GetDepartment(int id){ } }; class AccessDepartment: public IDepartment { public: void Insert(Department* department){ cout<<"Insert a record into Department in ACCESS!\n"; //其余代码省略 } Department GetDepartment(int id){ /代码省略/ } }; (4){ public: _(5)___=0; }; class SqlServerFactory: public IFactory{ public: IDepartment* CreateDepartment() {return new SqlserverDepartment(); } }; class AccessFactory:public IFactory{ public: IDepartment* CreateDepartment() { return new AccessDepartment() ; } //其余代码省略 };

材料: 试题五(共15分,每空3分) 阅读下列说明和C++代码,回答下列问题。 【说明】 现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQL Server和Access两种数据库以及系统中的数据库表Department为例,其类图如图5所示。 图片

参考答案:

(1)virtual void Insert(Department* department) (2)virtual Department GetDepartment(int id) (3)public IDepartment (4)class IFactory (5)virtual IDepartment* CreateDepartment()

解析:

这道题考查抽象工厂模式的实现,难度很小,根据类图和已有代码很容易就能写出空缺的代码,在抽象产品IDepartment中声明了具体产品类的业务方法,在抽象工厂类IFactory中声明了抽象工厂方法,具体工厂类创建对应的具体产品对象。

问答题


407. 试题六 (共15分,每空3分) 阅读下列说明和Java代码,回答下列问题。 【说明】 现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQLServer和Access两种数据库以及系统中的数据库表Department为例,其类图如图6所示。 图片 【Java代码】 import java.util.*; class Department{ /代码省略 / } interface IDepartment{ (1); (2); } class SqlserverDepartment _(3)___{ public void Insert(Department department){ System.out.println("Insert a record into Department in SQL Server!"); //其余代码省略 } public Department GetDepartment(int id){ } } class AccessDepartment implements IDepartment { public void Insert(Department department){ System.out.println("Insert a record into Department in ACCESS!"); //其余代码省略 } public Department GetDepartment(int id){ } } class SqlServerFactory implements IFactory{ public Department CreateDepartment(){ return new SqlserverDepartment(); } //其余代码省略 } class AccessFactory implements IFactory{ _(4){ (5)_; } //其余代码省略 }

参考答案:

(1)void Insert(Department department) (2)Department GetDepartment(int id) (3)implements IDepartment (4)public Department CreateDepartment()     (5)return new AccessDepartment();

解析:

这道题考查抽象工厂模式的实现,难度很小,根据类图和已有代码很容易就能写出空缺的代码,在抽象产品IDepartment中声明了具体产品类的业务方法,在抽象工厂类IFactory中声明了抽象工厂方法,具体工厂类创建对应的具体产品对象。

问答题


408. 【问题1】(2分) 使用说明中的词语,给出图1-1中的实体E1~E2的名称。

材料: 试题一(15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】 某会议中心提供举办会议的场地设施和各种设备,供公司与各类组织机构租用。场地包括一个大型报告厅、一个小型报告厅以及诸多会议室。这些报告厅和会议室可提供的设备有投影仪、白板、视频播放/回放设备、计算机等。为了加强管理,该中心欲开发一会议预订系统,系统的主要功能如下。 (1)检查可用性。客户提交预订请求后,检查预订表,判定所申请的场地是否在申请日期内可用;如果不可用,返回不可用信息。 (2)临时预订。会议中心管理员收到客户预订请求的通知之后,提交确认。系统生成新临时预订存入预订表,并对新客户创建一条客户信息记录加以保存。根据客户记录给客户发送临时预订确认信息和支付定金要求。 (3)分配设施与设备。根据临时预订或变更预订的设备和设施需求,分配所需设备(均能满足用户要求)和设施,更新相应的表和预订表。 (4)确认预订。管理员收到客户支付定金的通知后,检查确认,更新预订表,根据客户记录给客户发送预订确认信息。 (5)变更预订。客户还可以在支付余款前提交变更预订请求,对变更的预订请求检查可用性,如果可用,分配设施和设备;如果不可用,返回不可用信息。管理员确认变更后,根据客户记录给客户发送确认信息。 (6)要求付款。管理员从预订表中查询距预订的会议时间两周内的预订,根据客户记录给满足条件的客户发送支付余款要求。 (7)支付余款。管理员收到客户余款支付的通知后,检查确认,更新预订表中的已支付余款信息。 现采用结构化方法对会议预订系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图(不完整)。 图片 图1-1 上下文数据流图 图片 图1-2 0层数据流图

参考答案:

E1:客户 E2:管理员

解析(AI 生成):

外部实体是系统之外与系统交换数据的人或角色。说明中提交预订申请、查询可用场地的是客户,故E1为客户;负责维护场地设施与设备信息、处理预订的是管理员,故E2为管理员,作答沿用说明原词。

问答题


409. 【问题2】(4分) 使用说明中的词语,给出图1-2中的数据存储D1~D4的名称。

材料: 试题一(15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】 某会议中心提供举办会议的场地设施和各种设备,供公司与各类组织机构租用。场地包括一个大型报告厅、一个小型报告厅以及诸多会议室。这些报告厅和会议室可提供的设备有投影仪、白板、视频播放/回放设备、计算机等。为了加强管理,该中心欲开发一会议预订系统,系统的主要功能如下。 (1)检查可用性。客户提交预订请求后,检查预订表,判定所申请的场地是否在申请日期内可用;如果不可用,返回不可用信息。 (2)临时预订。会议中心管理员收到客户预订请求的通知之后,提交确认。系统生成新临时预订存入预订表,并对新客户创建一条客户信息记录加以保存。根据客户记录给客户发送临时预订确认信息和支付定金要求。 (3)分配设施与设备。根据临时预订或变更预订的设备和设施需求,分配所需设备(均能满足用户要求)和设施,更新相应的表和预订表。 (4)确认预订。管理员收到客户支付定金的通知后,检查确认,更新预订表,根据客户记录给客户发送预订确认信息。 (5)变更预订。客户还可以在支付余款前提交变更预订请求,对变更的预订请求检查可用性,如果可用,分配设施和设备;如果不可用,返回不可用信息。管理员确认变更后,根据客户记录给客户发送确认信息。 (6)要求付款。管理员从预订表中查询距预订的会议时间两周内的预订,根据客户记录给满足条件的客户发送支付余款要求。 (7)支付余款。管理员收到客户余款支付的通知后,检查确认,更新预订表中的已支付余款信息。 现采用结构化方法对会议预订系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图(不完整)。 图片 图1-1 上下文数据流图 图片 图1-2 0层数据流图

参考答案:

D1:预订表 D2:客户信息记录表 D3:场地表、设施表或场地设施表 D4:设备表 注:D3、D4可互换

解析(AI 生成):

数据存储按保存对象命名:预订业务产生的记录存入预订表D1,客户资料存入客户信息记录表D2,场地及其设施、设备分别建表,D3为场地表或设施表,D4为设备表,二者可互换,名称取自说明用词。

问答题


410. 【问题3】(6分) 根据说明和图中术语,补充图1-2之中缺失的数据流及其起点和终点。

材料: 试题一(15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】 某会议中心提供举办会议的场地设施和各种设备,供公司与各类组织机构租用。场地包括一个大型报告厅、一个小型报告厅以及诸多会议室。这些报告厅和会议室可提供的设备有投影仪、白板、视频播放/回放设备、计算机等。为了加强管理,该中心欲开发一会议预订系统,系统的主要功能如下。 (1)检查可用性。客户提交预订请求后,检查预订表,判定所申请的场地是否在申请日期内可用;如果不可用,返回不可用信息。 (2)临时预订。会议中心管理员收到客户预订请求的通知之后,提交确认。系统生成新临时预订存入预订表,并对新客户创建一条客户信息记录加以保存。根据客户记录给客户发送临时预订确认信息和支付定金要求。 (3)分配设施与设备。根据临时预订或变更预订的设备和设施需求,分配所需设备(均能满足用户要求)和设施,更新相应的表和预订表。 (4)确认预订。管理员收到客户支付定金的通知后,检查确认,更新预订表,根据客户记录给客户发送预订确认信息。 (5)变更预订。客户还可以在支付余款前提交变更预订请求,对变更的预订请求检查可用性,如果可用,分配设施和设备;如果不可用,返回不可用信息。管理员确认变更后,根据客户记录给客户发送确认信息。 (6)要求付款。管理员从预订表中查询距预订的会议时间两周内的预订,根据客户记录给满足条件的客户发送支付余款要求。 (7)支付余款。管理员收到客户余款支付的通知后,检查确认,更新预订表中的已支付余款信息。 现采用结构化方法对会议预订系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图(不完整)。 图片 图1-1 上下文数据流图 图片 图1-2 0层数据流图

参考答案:

预订确认信息 起点:4或确认预订 终点:E1或客户 预订信息起点:D1 终点:1 或检查可用性 客户记录起点:D2 终点:4 或确认预订 客户记录起点:D2 终点:5 或变更预订 预订信息起点:D1 终点:6 或要求付款 客户记录起点:D2 终点:6 或要求付款 注:上述6 条数据流无顺序要求。

解析(AI 生成):

补数据流先看加工与数据存储的读写是否成对:确认预订要读D2客户记录、写D1预订信息,并向E1客户输出预订确认信息;检查可用性读D1,变更预订与要求付款分别读写D1、D2。按此逐一补齐起点与终点即可,六条顺序不限。

问答题


411. 【问题4】(3分) 如果发送给客户的确认信息是通过Email系统向客户信息中的电子邮件地址进行发送的,那么需要对图1-1和1-2进行哪些修改?用150字以内文字加以说明。

材料: 试题一(15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】 某会议中心提供举办会议的场地设施和各种设备,供公司与各类组织机构租用。场地包括一个大型报告厅、一个小型报告厅以及诸多会议室。这些报告厅和会议室可提供的设备有投影仪、白板、视频播放/回放设备、计算机等。为了加强管理,该中心欲开发一会议预订系统,系统的主要功能如下。 (1)检查可用性。客户提交预订请求后,检查预订表,判定所申请的场地是否在申请日期内可用;如果不可用,返回不可用信息。 (2)临时预订。会议中心管理员收到客户预订请求的通知之后,提交确认。系统生成新临时预订存入预订表,并对新客户创建一条客户信息记录加以保存。根据客户记录给客户发送临时预订确认信息和支付定金要求。 (3)分配设施与设备。根据临时预订或变更预订的设备和设施需求,分配所需设备(均能满足用户要求)和设施,更新相应的表和预订表。 (4)确认预订。管理员收到客户支付定金的通知后,检查确认,更新预订表,根据客户记录给客户发送预订确认信息。 (5)变更预订。客户还可以在支付余款前提交变更预订请求,对变更的预订请求检查可用性,如果可用,分配设施和设备;如果不可用,返回不可用信息。管理员确认变更后,根据客户记录给客户发送确认信息。 (6)要求付款。管理员从预订表中查询距预订的会议时间两周内的预订,根据客户记录给满足条件的客户发送支付余款要求。 (7)支付余款。管理员收到客户余款支付的通知后,检查确认,更新预订表中的已支付余款信息。 现采用结构化方法对会议预订系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图(不完整)。 图片 图1-1 上下文数据流图 图片 图1-2 0层数据流图

参考答案:

图1-1中:增加外部实体“第三方Email系统”,将临时预订/预订/变更确认信息终点均修改至“第三方Email系统”。 图1-2中:增加外部实体“第三方Email系统”,增加加工“发送邮件”,将临时预订/预订/变更确认信息终点均修改至“发送邮件”加工,并增加从D2到“发送邮件”加工的数据流“电子邮件地址”,再从发送邮件加工引出数据流,临时预订/预订/变更确认信息,终点为第三方Email系统。

解析(AI 生成):

确认信息改由Email发送,等于把发送动作交给外部系统:图1-1增加外部实体“第三方Email系统”,三类确认信息终点改指它;图1-2同样增加该实体与“发送邮件”加工,由D2提供电子邮件地址,加工输出确认信息给Email系统。

问答题


412. 试题五(15分) 阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某软件系统中,已设计并实现了用于显示地址信息的类Address(如图5-1所示),现要求提供基于Dutch语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器(Adapter)模式实现该要求,得到如图5-1所示的类图。 图片 图5-1 适配器模式类图 【C++代码】 #include using namespace std; class Address{ public: void street() { /* 实现代码省略 / } void zip() { / 实现代码省略 / } void city() { / 实现代码省略 */ } ∥其他成员省略 }; class DutchAddress { public: virtual void straat()=0; virtual void postcode()=0; virtual void plaats()=0; //其他成员省略 }; class DutchAddressAdapter : public DutchAddress { private: (1) ; public: DutchAddressAdapter(Address *addr) { address = addr; } void straat() { (2) ; } void postcode(){ (3) ; } void plaat(){ (4) ; } //其他成员省略 }; void testDutch(DutchAddress addr){ addr->straat(); addr->postcode(); addr->plaats(); } int main(){ Addressaddr = new Address(); (5) ; cout << "\n The DutchAddress\n" << endl; testDutch(addrAdapter); return 0; }

材料: 试题五(15分) 阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某软件系统中,已设计并实现了用于显示地址信息的类Address(如图5-1所示),现要求提供基于Dutch语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器(Adapter)模式实现该要求,得到如图5-1所示的类图。 图片 图5-1 适配器模式类图 【C++代码】 #include using namespace std; class Address{ public: void street() { /* 实现代码省略 / } void zip() { / 实现代码省略 / } void city() { / 实现代码省略 */ } ∥其他成员省略 }; class DutchAddress { public: virtual void straat()=0; virtual void postcode()=0; virtual void plaats()=0; //其他成员省略 }; class DutchAddressAdapter : public DutchAddress { private: (1) ; public: DutchAddressAdapter(Address *addr) { address = addr; } void straat() { (2) ; } void postcode(){ (3) ; } void plaat(){ (4) ; } //其他成员省略 }; void testDutch(DutchAddress addr){ addr->straat(); addr->postcode(); addr->plaats(); } int main(){ Addressaddr = new Address(); (5) ; cout << "\n The DutchAddress\n" << endl; testDutch(addrAdapter); return 0; }

参考答案:

(1)Address* address; (2)address->street(); (3)address->zip(); (4)address->city(); (5)DutchAddress *addr=new DutchAddressAdaptor(addr);

解析(AI 生成):

对象适配器让适配器持有被适配者:私有成员声明Address* address,构造函数保存传入指针;straat、postcode、plaats分别委托address->street()、zip()、city();(5)用new创建适配器实例并赋给DutchAddress指针,从而按目标接口调用。

问答题


413. 试题六(15分) 阅读下列说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某软件系统中,已设计并实现了用于显示地址信息的类Address(如图6-1所示),现要求提供基于Dutch语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器(Adapter)模式实现该要求,得到如图6-1所示的类图。 图片 图6-1 适配器模式类图 【Java代码】 import java.util.*; Class Address{ public void street() { //实现代码省略 } public void zip() { //实现代码省略 } public void city() { //实现代码省略 } ∥其他成员省略 } class DutchAddress{ public void straat() { //实现代码省略 } public void postcode() { //实现代码省略 } public void plaats() { //实现代码省略 } //其他成员省略 } class DutchAddressAdapter extends DutchAddress { private (1) ; public DutchAddressAdapter (Address addr){ address= addr; } public void straat() { (2) ; } public void postcode() { (3) ; } public void plaats(){ (4) ; } //其他成员省略 } class Test { public static void main(String[] args) { Address addr = new Address(); (5) ; System.out.println("\n The DutchAddress\n"); testDutch(addrAdapter); } Static void testDutch(DutchAddress addr){ addr.straat(); addr.postcode(); addr.plaats(); } }

参考答案:

(1)Address address; (2)address.street(); (3)address.zip(); (4)address.city(); (5)DutchAddress addrAdapter=new DutchAddressAdaptor(addr);

解析(AI 生成):

Java单继承,宜用对象适配器:私有成员为Address address,构造方法保存传入对象;straat、postcode、plaats分别调用address.street()、address.zip()、address.city()完成委托;(5)用new创建适配器实例并赋给DutchAddress类型变量。

问答题


414. 【问题1】(8分)    在需求分析阶段,采用UML的用例图(use case diagram)描述系统功能需求,如图所示。请指出图中的A、B、C和D分别是哪个用例?  图片

材料: 试题三(16分) 【说明】 某电话公司决定开发一个管理所有客户信息的交互式网络系统。系统功能如下。 (1)浏览客户信息:任何使用Internet的网络用户都可以浏览电话公司所有的客户信息(包括姓名、住址、电话号码等)。 (2)登录:电话公司授予每个客户一个帐号。拥有授权帐号的客户,可以使用系统提供的页面设置个人密码,并使用该帐号和密码向系统注册。 (3)修改个人信息:客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人信息进行修改。 (4)删除客户信息:只有公司的管理人员才能删除不再接受公司服务的客户的信息。系统采用面向对象方法进行开发,在开发过程中认定出的类见下表。 图片

参考答案:

A:浏览客户信息 ,,,,,,,,,,,B:修改个人信息 C:登录 ,,,,,,,,,,,,,,,,,,,D:删除客户信息

解析(AI 生成):

用例图按参与者与用例的连线及包含、扩展关系定名:登录是各角色进入系统的公共用例,故C为登录;客户信息类用例中,浏览、修改个人信息面向客户自身,删除客户信息属管理权限,故A浏览、B修改、D删除。

问答题


415. 【问题2】8分 (1)在面向对象建模中,类的关系有几种?分别是什么? (2)用例的关系有几种?分别是什么?

材料: 试题三(16分) 【说明】 某电话公司决定开发一个管理所有客户信息的交互式网络系统。系统功能如下。 (1)浏览客户信息:任何使用Internet的网络用户都可以浏览电话公司所有的客户信息(包括姓名、住址、电话号码等)。 (2)登录:电话公司授予每个客户一个帐号。拥有授权帐号的客户,可以使用系统提供的页面设置个人密码,并使用该帐号和密码向系统注册。 (3)修改个人信息:客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人信息进行修改。 (4)删除客户信息:只有公司的管理人员才能删除不再接受公司服务的客户的信息。系统采用面向对象方法进行开发,在开发过程中认定出的类见下表。 图片

参考答案:

(1)4种。关联、依赖、泛化、实现 (2)3种。包含、扩展、泛化

解析(AI 生成):

类之间为关联、依赖、泛化、实现四种:关联表结构上的联系,依赖表使用引起的弱耦合,泛化即继承,实现是类对接口的兑现。用例之间为包含、扩展、泛化三种:包含抽取公共行为,扩展在特定条件下增补,泛化表父子用例。

问答题


416. 【问题1】(5分) 使用说明中的词语,给出图1-1中的实体E1~E5。

材料: 试题一(15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】 某医疗器械公司作为复杂医疗产品的集成商,必须保持高质量部件的及时供应。为了实现这一目标,该公司欲开发一采购系统。系统的主要功能如下。 1. 检查库存水平。采购部门每天检查部件库存量,当特定部件的库存量降至其订货点时,返回低存量部件及库存量。 2. 下达采购订单。采购部门针对低存量部件及库存量提交采购请求,向其供应商(通过供应商文件访问供应商数据)下达采购订单,并存储于采购订单文件中。 3. 交运部件。当供应商提交提单并交运部件时,运输和接收(S/R)部门通过执行以下三步过程接收货物: (1)验证装运部件。通过访问采购订单并将其与提单进行比较来验证装运的部件,并将提单信息发给S/R职员。如果收货部件项目出现在采购订单和提单上,则已验证的提单和收货部件项目将被送去检验。否则,将S/R职员提交的装运错误信息生成装运错误通知发送给供应商。 (2)检验部件质量。通过访问质量标准来检查装运部件的质量,并将已验证的提单发给检验员。如果部件满足所有质量标准,则将其添加到接受的部件列表用于更新部件库存。如果部件未通过检查,则将检验员创建的缺陷装运信息生成缺陷装运通知发送给供应商。 (3)更新部件库存。库管员根据收到的接受的部件列表添加本次采购数量,与原有库存量累加来更新库存部件中的库存量。标记订单采购完成。 现采用结构化方法对该采购系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图1-1 上下文数据流图 图片 图1-2 0层数据流图

参考答案:

E1:供应商 E2:采购部门 E3:检验员 E4:库管员 E5:S/R职员

解析(AI 生成):

外部实体取自说明中的角色与外部单位:供货方为供应商E1,发起采购的是采购部门E2,负责到货检验的是检验员E3,负责入库与库存的是库管员E4,办理收发货业务的为S/R职员E5,按数据流方向对应即可。

问答题


417. 【问题2】(4分) 使用说明中的词语,给出图1-2中的数据存储D1~D4的名称。

材料: 试题一(15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】 某医疗器械公司作为复杂医疗产品的集成商,必须保持高质量部件的及时供应。为了实现这一目标,该公司欲开发一采购系统。系统的主要功能如下。 1. 检查库存水平。采购部门每天检查部件库存量,当特定部件的库存量降至其订货点时,返回低存量部件及库存量。 2. 下达采购订单。采购部门针对低存量部件及库存量提交采购请求,向其供应商(通过供应商文件访问供应商数据)下达采购订单,并存储于采购订单文件中。 3. 交运部件。当供应商提交提单并交运部件时,运输和接收(S/R)部门通过执行以下三步过程接收货物: (1)验证装运部件。通过访问采购订单并将其与提单进行比较来验证装运的部件,并将提单信息发给S/R职员。如果收货部件项目出现在采购订单和提单上,则已验证的提单和收货部件项目将被送去检验。否则,将S/R职员提交的装运错误信息生成装运错误通知发送给供应商。 (2)检验部件质量。通过访问质量标准来检查装运部件的质量,并将已验证的提单发给检验员。如果部件满足所有质量标准,则将其添加到接受的部件列表用于更新部件库存。如果部件未通过检查,则将检验员创建的缺陷装运信息生成缺陷装运通知发送给供应商。 (3)更新部件库存。库管员根据收到的接受的部件列表添加本次采购数量,与原有库存量累加来更新库存部件中的库存量。标记订单采购完成。 现采用结构化方法对该采购系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图1-1 上下文数据流图 图片 图1-2 0层数据流图

参考答案:

D1:库存表 D2:采购订单表 D3:质量标准表 D4:供应商表

解析(AI 生成):

数据存储按数据流所载信息命名:记录部件库存量与库存水平的是库存表D1,承载订货信息的是采购订单表D2,校验质量的依据是质量标准表D3,供应商档案为供应商表D4,与各加工的读写方向一一对应。

问答题


418. 【问题3】(4分) 根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点。

材料: 试题一(15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】 某医疗器械公司作为复杂医疗产品的集成商,必须保持高质量部件的及时供应。为了实现这一目标,该公司欲开发一采购系统。系统的主要功能如下。 1. 检查库存水平。采购部门每天检查部件库存量,当特定部件的库存量降至其订货点时,返回低存量部件及库存量。 2. 下达采购订单。采购部门针对低存量部件及库存量提交采购请求,向其供应商(通过供应商文件访问供应商数据)下达采购订单,并存储于采购订单文件中。 3. 交运部件。当供应商提交提单并交运部件时,运输和接收(S/R)部门通过执行以下三步过程接收货物: (1)验证装运部件。通过访问采购订单并将其与提单进行比较来验证装运的部件,并将提单信息发给S/R职员。如果收货部件项目出现在采购订单和提单上,则已验证的提单和收货部件项目将被送去检验。否则,将S/R职员提交的装运错误信息生成装运错误通知发送给供应商。 (2)检验部件质量。通过访问质量标准来检查装运部件的质量,并将已验证的提单发给检验员。如果部件满足所有质量标准,则将其添加到接受的部件列表用于更新部件库存。如果部件未通过检查,则将检验员创建的缺陷装运信息生成缺陷装运通知发送给供应商。 (3)更新部件库存。库管员根据收到的接受的部件列表添加本次采购数量,与原有库存量累加来更新库存部件中的库存量。标记订单采购完成。 现采用结构化方法对该采购系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图1-1 上下文数据流图 图片 图1-2 0层数据流图

参考答案:

原有部件库存量:D1(检查库存水平)——P5(更新部件库存) 产品送检: P3(验证装运部件)——P4(校验部件质量) 装运错误通知:P3(验证装运部件)——E1(供应商) 缺陷装运通知:P4(校验部件质量)——E1(供应商)

解析(AI 生成):

缺流多因加工输入输出不全:更新库存前需从D1取原有部件库存量,验证后的部件要送P4校验质量,装运有误或质量有缺陷时须向E1供应商发出通知,故补库存量、送检、装运错误通知、缺陷装运通知四条。

问答题


419. 【问题4】(2分) 用200字以内文字,说明建模图1-1和图1-2时如何保持数据流图平衡。

材料: 试题一(15分) 阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 【说明】 某医疗器械公司作为复杂医疗产品的集成商,必须保持高质量部件的及时供应。为了实现这一目标,该公司欲开发一采购系统。系统的主要功能如下。 1. 检查库存水平。采购部门每天检查部件库存量,当特定部件的库存量降至其订货点时,返回低存量部件及库存量。 2. 下达采购订单。采购部门针对低存量部件及库存量提交采购请求,向其供应商(通过供应商文件访问供应商数据)下达采购订单,并存储于采购订单文件中。 3. 交运部件。当供应商提交提单并交运部件时,运输和接收(S/R)部门通过执行以下三步过程接收货物: (1)验证装运部件。通过访问采购订单并将其与提单进行比较来验证装运的部件,并将提单信息发给S/R职员。如果收货部件项目出现在采购订单和提单上,则已验证的提单和收货部件项目将被送去检验。否则,将S/R职员提交的装运错误信息生成装运错误通知发送给供应商。 (2)检验部件质量。通过访问质量标准来检查装运部件的质量,并将已验证的提单发给检验员。如果部件满足所有质量标准,则将其添加到接受的部件列表用于更新部件库存。如果部件未通过检查,则将检验员创建的缺陷装运信息生成缺陷装运通知发送给供应商。 (3)更新部件库存。库管员根据收到的接受的部件列表添加本次采购数量,与原有库存量累加来更新库存部件中的库存量。标记订单采购完成。 现采用结构化方法对该采购系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。 图片 图1-1 上下文数据流图 图片 图1-2 0层数据流图

参考答案:

父图(图1-1)中某个加工的输入输出数据流必须与其子图(图1-2)的输入输出数据流在数量上和内容上保持一致。父图的一个输入(或输出)数据流对应子图中几个输入(或输出)数据流,而子图中组成的这些数据流的数据项全体正好是父图中的这一个数据流。

解析(AI 生成):

平衡即父图与子图数据流一致:父图中某加工的输入输出,必须与对应子图的输入输出在数量与内容上相符;父图一条数据流可由子图数条数据流分解承担,但这些数据流的数据项全体应正好等于父图那一条。

问答题


420. 试题五(15分) 阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某文件管理系统中定义了类 OfficeDoc 和 DocExplorer。当类 OfficeDoc 发生变化时,类DocExplorer 的所有对象都要更新其自身的状态。现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图 5-1 所示。 图片 【C++代码】 #include #include #include using namespace std; class Observer{ public: (1) ; }; class Subject { protected: vector< (2) >myObs; public: virtual void Attach(Observer *obs) {myObs.push_back(obs);} virtual void Detach(Observer *obs) { for (vector<Observer*>::iterator iter = myObs.begin(); iter != myObs.end(); iter++) { if (*iter == obs) {myObs.erase(iter); return;} } } virtual void Notify() { for (vector<Observer*>::iterator iter = myObs.begin(); iter != myObs.end(); iter++) { (3) ; } } virtual int getStatus() = 0; virtual void setStatus(int status) = 0; }; class OfficeDoc: public Subject { private: string mySubjectName; int m_status; public: officeDoc(string name): mySubjectName(name), m_status (0) {} void setStatus (int status) {m_status = status;} int getStatus() {return m_status;} }; class DocExplorer: public Observer{ private: string myObsName; public: DocExplorer(string name, (4) sub): myObsName(name){sub-> (5) ;} void update(){cout<< "update observer:" <<myObsName<<endl;} }; int main() { Subject *subjectA = new OfficeDoc("subject A"); Observer *observerA = new DocExplorer("observerA", subjectA); subjectA->setStatus(1); subjectA->Notify(); return 0; }

材料: 试题五(15分) 阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 某文件管理系统中定义了类 OfficeDoc 和 DocExplorer。当类 OfficeDoc 发生变化时,类DocExplorer 的所有对象都要更新其自身的状态。现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图 5-1 所示。 图片 图片 图片 图片 图片

参考答案:

(1)virtual void update() = 0 (2)Observer* (3)(iter)->update() (4)Subject (5)Attach(this)

解析(AI 生成):

观察者模式中抽象观察者声明纯虚接口update供具体观察者实现,主题用vector保存观察者指针;Notify遍历容器逐个调用(iter)->update();具体主题以Subject指向自身,注册时调用Attach(this)加入列表。

问答题


421. 【问题1】4分 使用说明中的词语,给出顶层数据流图中的实体E1~E4的名称。

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某电子商务系统采用以数据库为中心的集成方式改进购物车的功能,详细需求如下。 1.加入购物车。顾客浏览商品,点击加入购物车,根据商品标识从商品表中读取商品信息,并更新购物车表。 2.浏览购物车。顾客提交浏览购物车请求后,显示出购物车表中的商品信息。 3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表,将购物车表中的商品状态改为待付款,显示订单详情。若商家改变价格,则刷新后可看到更改后的价格。 4.改变价格。商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格。 5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进行转账;然后根据转账结果返回支付状态并更改购物车表中商品的状态。 6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息。 7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方服务Crystal Reports生成相关报表。 8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息。 现采用结构化方法实现上述需求,在系统分析阶段得到如图1-9所示的顶层数据流图和图1-10所示的0层数据流图。 图片 图片

参考答案:

1.E1:商家 E2:支付系统 E3:物流系统 E4:Crystal Reports或第三方服务

解析:

本题考查数据流图的设计和应用。 1、E1:商家 E2:支付系统 E3:物流系统 E4:Crystal Reports或第三方服务 由题干中的关键信息“3.提交订单。……若商家改变价格,则刷新后可看到更改后的价格”、“4.改变价格。商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格”,结合如图1-10所示的0层数据流图中与外部实体E1相关的输入数据流“商家订单信息”、输出数据流“订单新价格”和处理“改变价格”,可知图1-9中实体E1的名称是“商家”。 根据题干中的关键信息“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,……”,结合图1-10中与外部实体E1相关的输入数据流“商家订单物流信息”、输出数据流“商家订单物流标识”和“商家订单物流查询请求”,以及处理“物流跟踪”,也可知实体E1的名称是“商家”。 由题干中“5.付款。顾客点击付款后,……将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进行转账;然后根据转账结果返回支付状态……”等关键信息,结合图1-10中与外部实体E2相关的输入数据流“转账请求”、输出数据流“转账结果”和处理“付款”,可知图1-9中实体E2的名称是“支付系统”。 根据题干中“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);……并从相应物流系统查询物流信息”等关键信息,结合图1-10中与外部实体E3相关的输入数据流“运单号”、输出数据流“物流信息”和处理“物流跟踪”,可知图1-9中实体E3的名称是“物流系统”。 由题干中的关键信息“7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方服务Crystal Report生成相关报表”等关键信息,结合图1-10中与外部实体E4相关的输入数据流“报表数据”、输出数据流“报表”和处理“生成报表”,可知图1-9中实体E4的名称是“第三方服务(或Crystal Reports)”。 2、D1:订单表 D2:商品表 D3:商品分类表 D4:购物车表 基于问题1的分析结果,根据题干中“3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表……”、“4.改变价格。……更新订单表中的商品价格”、“6.物流跟踪。……查询订单表中的物流标识,……”等关键信息,结合图1-10中与数据存储D1相关的处理“提交订单”、“改变价格”、“物流跟踪”,可知数据存储D1的名称是“订单表”。 由题干中的关键信息“1.加入购物车。……根据商品标识从商品表中读取商品信息……”、“7.生成报表。……从订单表、商品表以及商品分类表中读取数据,……”、“8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息”等,结合图1-10中与数据存储D2相关的处理“加入购物车”、“生成报表”、“维护信息”,可知数据存储D2的名称是“商品表”。 根据题干中的关键信息“7.生成报表。……从订单表、商品表以及商品分类表中读取数据,……”、“8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息”等,结合图1-10中与数据存储D3相关的处理“生成报表”、“维护信息”,可知数据存储D3的名称是“商品分类表”。 由题干中“1.加入购物车。……并更新购物车表”、“2.浏览购物车。……显示出购物车表中的商品信息”、“3.提交订单。……将购物车表,中的商品状态改为待付款,……”等关键信息,结合图1-10中与数据存储D4相关的处理“加入购物车”、“浏览购物车”、“提交订单”,可知数据存储D4的名称是“购物车表”。 3、起点 终点 D4或购物车表 提交订单 顾客表 付款 付款 D4或购物车表 D1或订单表 生成报表 基于问题1和问题2的分析结果,由题干中“3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表……”等关键信息,结合图1-10中外部实体“顾客”、处理“提交订单”和数据存储“D1(或订单表)”之间的逻辑关系,可知图1-lO中缺失了一条起点为“D4(或购物车表)”、终点为“提交订单”的数据流“商品价格”。 根据题干中“5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户……”等关键信息,结合图1-10中外部实体“顾客”、处理“付款”和数据存储“顾客表”之间的逻辑关系,可知图1-10中缺失了一条起点为“顾客表”、终点为“付款”的数据流“支付账户”。 由题干中的关键信息“5.付款。顾客点击付款后,……然后根据转账结果返回支付状态并更改购物车表中商品的状态”等,结合图1-10中外部实体“顾客”、处理“付款”和数据存储“D4(或购物车表)”之间的逻辑关系,可知图1-10中缺失了一条起点为“付款”、终点为“D4(或购物车表)”的数据流“商品状态”。 根据题干中的关键信息“7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据……”等,结合图1-10中外部实体“管理员”和“E1(或商家)”、处理“生成报表”、数据存储“D1(或订单表)”、“D2(或商品表)”和“D3(或商品分类表)”之间的逻辑关系,可知图1-10中缺失了一条起点为“D1(或订单表)”、终点为“生成报表”的数据流“订单信息”。 4、转账请求=验证码+价格+账号信息 顾客订单物流查询请求=顾客标识+订单标识 商家订单物流查询请求=商家标识+(订单标识) 基于问题1~问题3的分析结果,根据题干中“5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统……”等关键信息,可知数据流“转账请求”至少包含的数据项有:账号信息、验证码、价格。 由题干中关键信息“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息”等,可知数据流“顾客订单物流查询请求”至少包含的数据项有:顾客标识、订单标识;数据流“商家订单物流查询请求”至少包含的数据项有:商家标识、订单标识。

问答题


422. 【问题2】4分 使用说明中的词语,给出0层数据流图中的数据存储D1~D4的名称。

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某电子商务系统采用以数据库为中心的集成方式改进购物车的功能,详细需求如下。 1.加入购物车。顾客浏览商品,点击加入购物车,根据商品标识从商品表中读取商品信息,并更新购物车表。 2.浏览购物车。顾客提交浏览购物车请求后,显示出购物车表中的商品信息。 3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表,将购物车表中的商品状态改为待付款,显示订单详情。若商家改变价格,则刷新后可看到更改后的价格。 4.改变价格。商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格。 5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进行转账;然后根据转账结果返回支付状态并更改购物车表中商品的状态。 6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息。 7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方服务Crystal Reports生成相关报表。 8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息。 现采用结构化方法实现上述需求,在系统分析阶段得到如图1-9所示的顶层数据流图和图1-10所示的0层数据流图。 图片 图片

参考答案:

2.D1:订单表 D2:商品表 D3:商品分类表 D4:购物车表

解析:

本题考查数据流图的设计和应用。 1、E1:商家 E2:支付系统 E3:物流系统 E4:Crystal Reports或第三方服务 由题干中的关键信息“3.提交订单。……若商家改变价格,则刷新后可看到更改后的价格”、“4.改变价格。商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格”,结合如图1-10所示的0层数据流图中与外部实体E1相关的输入数据流“商家订单信息”、输出数据流“订单新价格”和处理“改变价格”,可知图1-9中实体E1的名称是“商家”。 根据题干中的关键信息“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,……”,结合图1-10中与外部实体E1相关的输入数据流“商家订单物流信息”、输出数据流“商家订单物流标识”和“商家订单物流查询请求”,以及处理“物流跟踪”,也可知实体E1的名称是“商家”。 由题干中“5.付款。顾客点击付款后,……将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进行转账;然后根据转账结果返回支付状态……”等关键信息,结合图1-10中与外部实体E2相关的输入数据流“转账请求”、输出数据流“转账结果”和处理“付款”,可知图1-9中实体E2的名称是“支付系统”。 根据题干中“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);……并从相应物流系统查询物流信息”等关键信息,结合图1-10中与外部实体E3相关的输入数据流“运单号”、输出数据流“物流信息”和处理“物流跟踪”,可知图1-9中实体E3的名称是“物流系统”。 由题干中的关键信息“7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方服务Crystal Report生成相关报表”等关键信息,结合图1-10中与外部实体E4相关的输入数据流“报表数据”、输出数据流“报表”和处理“生成报表”,可知图1-9中实体E4的名称是“第三方服务(或Crystal Reports)”。 2、D1:订单表 D2:商品表 D3:商品分类表 D4:购物车表 基于问题1的分析结果,根据题干中“3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表……”、“4.改变价格。……更新订单表中的商品价格”、“6.物流跟踪。……查询订单表中的物流标识,……”等关键信息,结合图1-10中与数据存储D1相关的处理“提交订单”、“改变价格”、“物流跟踪”,可知数据存储D1的名称是“订单表”。 由题干中的关键信息“1.加入购物车。……根据商品标识从商品表中读取商品信息……”、“7.生成报表。……从订单表、商品表以及商品分类表中读取数据,……”、“8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息”等,结合图1-10中与数据存储D2相关的处理“加入购物车”、“生成报表”、“维护信息”,可知数据存储D2的名称是“商品表”。 根据题干中的关键信息“7.生成报表。……从订单表、商品表以及商品分类表中读取数据,……”、“8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息”等,结合图1-10中与数据存储D3相关的处理“生成报表”、“维护信息”,可知数据存储D3的名称是“商品分类表”。 由题干中“1.加入购物车。……并更新购物车表”、“2.浏览购物车。……显示出购物车表中的商品信息”、“3.提交订单。……将购物车表,中的商品状态改为待付款,……”等关键信息,结合图1-10中与数据存储D4相关的处理“加入购物车”、“浏览购物车”、“提交订单”,可知数据存储D4的名称是“购物车表”。 3、起点 终点 D4或购物车表 提交订单 顾客表 付款 付款 D4或购物车表 D1或订单表 生成报表 基于问题1和问题2的分析结果,由题干中“3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表……”等关键信息,结合图1-10中外部实体“顾客”、处理“提交订单”和数据存储“D1(或订单表)”之间的逻辑关系,可知图1-lO中缺失了一条起点为“D4(或购物车表)”、终点为“提交订单”的数据流“商品价格”。 根据题干中“5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户……”等关键信息,结合图1-10中外部实体“顾客”、处理“付款”和数据存储“顾客表”之间的逻辑关系,可知图1-10中缺失了一条起点为“顾客表”、终点为“付款”的数据流“支付账户”。 由题干中的关键信息“5.付款。顾客点击付款后,……然后根据转账结果返回支付状态并更改购物车表中商品的状态”等,结合图1-10中外部实体“顾客”、处理“付款”和数据存储“D4(或购物车表)”之间的逻辑关系,可知图1-10中缺失了一条起点为“付款”、终点为“D4(或购物车表)”的数据流“商品状态”。 根据题干中的关键信息“7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据……”等,结合图1-10中外部实体“管理员”和“E1(或商家)”、处理“生成报表”、数据存储“D1(或订单表)”、“D2(或商品表)”和“D3(或商品分类表)”之间的逻辑关系,可知图1-10中缺失了一条起点为“D1(或订单表)”、终点为“生成报表”的数据流“订单信息”。 4、转账请求=验证码+价格+账号信息 顾客订单物流查询请求=顾客标识+订单标识 商家订单物流查询请求=商家标识+(订单标识) 基于问题1~问题3的分析结果,根据题干中“5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统……”等关键信息,可知数据流“转账请求”至少包含的数据项有:账号信息、验证码、价格。 由题干中关键信息“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息”等,可知数据流“顾客订单物流查询请求”至少包含的数据项有:顾客标识、订单标识;数据流“商家订单物流查询请求”至少包含的数据项有:商家标识、订单标识。

问答题


423. 【问题3】4分 0层数据流图中缺失了数据流,请用说明或0层数据流图中的词语,给出其起点和终点。 图片

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某电子商务系统采用以数据库为中心的集成方式改进购物车的功能,详细需求如下。 1.加入购物车。顾客浏览商品,点击加入购物车,根据商品标识从商品表中读取商品信息,并更新购物车表。 2.浏览购物车。顾客提交浏览购物车请求后,显示出购物车表中的商品信息。 3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表,将购物车表中的商品状态改为待付款,显示订单详情。若商家改变价格,则刷新后可看到更改后的价格。 4.改变价格。商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格。 5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进行转账;然后根据转账结果返回支付状态并更改购物车表中商品的状态。 6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息。 7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方服务Crystal Reports生成相关报表。 8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息。 现采用结构化方法实现上述需求,在系统分析阶段得到如图1-9所示的顶层数据流图和图1-10所示的0层数据流图。 图片 图片

参考答案:

图片

解析:

本题考查数据流图的设计和应用。 1、E1:商家 E2:支付系统 E3:物流系统 E4:Crystal Reports或第三方服务 由题干中的关键信息“3.提交订单。……若商家改变价格,则刷新后可看到更改后的价格”、“4.改变价格。商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格”,结合如图1-10所示的0层数据流图中与外部实体E1相关的输入数据流“商家订单信息”、输出数据流“订单新价格”和处理“改变价格”,可知图1-9中实体E1的名称是“商家”。 根据题干中的关键信息“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,……”,结合图1-10中与外部实体E1相关的输入数据流“商家订单物流信息”、输出数据流“商家订单物流标识”和“商家订单物流查询请求”,以及处理“物流跟踪”,也可知实体E1的名称是“商家”。 由题干中“5.付款。顾客点击付款后,……将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进行转账;然后根据转账结果返回支付状态……”等关键信息,结合图1-10中与外部实体E2相关的输入数据流“转账请求”、输出数据流“转账结果”和处理“付款”,可知图1-9中实体E2的名称是“支付系统”。 根据题干中“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);……并从相应物流系统查询物流信息”等关键信息,结合图1-10中与外部实体E3相关的输入数据流“运单号”、输出数据流“物流信息”和处理“物流跟踪”,可知图1-9中实体E3的名称是“物流系统”。 由题干中的关键信息“7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方服务Crystal Report生成相关报表”等关键信息,结合图1-10中与外部实体E4相关的输入数据流“报表数据”、输出数据流“报表”和处理“生成报表”,可知图1-9中实体E4的名称是“第三方服务(或Crystal Reports)”。 2、D1:订单表 D2:商品表 D3:商品分类表 D4:购物车表 基于问题1的分析结果,根据题干中“3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表……”、“4.改变价格。……更新订单表中的商品价格”、“6.物流跟踪。……查询订单表中的物流标识,……”等关键信息,结合图1-10中与数据存储D1相关的处理“提交订单”、“改变价格”、“物流跟踪”,可知数据存储D1的名称是“订单表”。 由题干中的关键信息“1.加入购物车。……根据商品标识从商品表中读取商品信息……”、“7.生成报表。……从订单表、商品表以及商品分类表中读取数据,……”、“8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息”等,结合图1-10中与数据存储D2相关的处理“加入购物车”、“生成报表”、“维护信息”,可知数据存储D2的名称是“商品表”。 根据题干中的关键信息“7.生成报表。……从订单表、商品表以及商品分类表中读取数据,……”、“8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息”等,结合图1-10中与数据存储D3相关的处理“生成报表”、“维护信息”,可知数据存储D3的名称是“商品分类表”。 由题干中“1.加入购物车。……并更新购物车表”、“2.浏览购物车。……显示出购物车表中的商品信息”、“3.提交订单。……将购物车表,中的商品状态改为待付款,……”等关键信息,结合图1-10中与数据存储D4相关的处理“加入购物车”、“浏览购物车”、“提交订单”,可知数据存储D4的名称是“购物车表”。 3、起点 终点 D4或购物车表 提交订单 顾客表 付款 付款 D4或购物车表 D1或订单表 生成报表 基于问题1和问题2的分析结果,由题干中“3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表……”等关键信息,结合图1-10中外部实体“顾客”、处理“提交订单”和数据存储“D1(或订单表)”之间的逻辑关系,可知图1-lO中缺失了一条起点为“D4(或购物车表)”、终点为“提交订单”的数据流“商品价格”。 根据题干中“5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户……”等关键信息,结合图1-10中外部实体“顾客”、处理“付款”和数据存储“顾客表”之间的逻辑关系,可知图1-10中缺失了一条起点为“顾客表”、终点为“付款”的数据流“支付账户”。 由题干中的关键信息“5.付款。顾客点击付款后,……然后根据转账结果返回支付状态并更改购物车表中商品的状态”等,结合图1-10中外部实体“顾客”、处理“付款”和数据存储“D4(或购物车表)”之间的逻辑关系,可知图1-10中缺失了一条起点为“付款”、终点为“D4(或购物车表)”的数据流“商品状态”。 根据题干中的关键信息“7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据……”等,结合图1-10中外部实体“管理员”和“E1(或商家)”、处理“生成报表”、数据存储“D1(或订单表)”、“D2(或商品表)”和“D3(或商品分类表)”之间的逻辑关系,可知图1-10中缺失了一条起点为“D1(或订单表)”、终点为“生成报表”的数据流“订单信息”。 4、转账请求=验证码+价格+账号信息 顾客订单物流查询请求=顾客标识+订单标识 商家订单物流查询请求=商家标识+(订单标识) 基于问题1~问题3的分析结果,根据题干中“5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统……”等关键信息,可知数据流“转账请求”至少包含的数据项有:账号信息、验证码、价格。 由题干中关键信息“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息”等,可知数据流“顾客订单物流查询请求”至少包含的数据项有:顾客标识、订单标识;数据流“商家订单物流查询请求”至少包含的数据项有:商家标识、订单标识。

问答题


424. 【问题4】3分 根据说明,给出数据流“转账请求”、“顾客订单物流查询请求”和“商家订单物流查询请求”的各组成数据项。

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某电子商务系统采用以数据库为中心的集成方式改进购物车的功能,详细需求如下。 1.加入购物车。顾客浏览商品,点击加入购物车,根据商品标识从商品表中读取商品信息,并更新购物车表。 2.浏览购物车。顾客提交浏览购物车请求后,显示出购物车表中的商品信息。 3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表,将购物车表中的商品状态改为待付款,显示订单详情。若商家改变价格,则刷新后可看到更改后的价格。 4.改变价格。商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格。 5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进行转账;然后根据转账结果返回支付状态并更改购物车表中商品的状态。 6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息。 7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方服务Crystal Reports生成相关报表。 8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息。 现采用结构化方法实现上述需求,在系统分析阶段得到如图1-9所示的顶层数据流图和图1-10所示的0层数据流图。 图片 图片

参考答案:

4.转账请求=验证码+价格+账号信息 顾客订单物流查询请求=顾客标识+订单标识 商家订单物流查询请求=商家标识+(订单标识)

解析:

本题考查数据流图的设计和应用。 1、E1:商家 E2:支付系统 E3:物流系统 E4:Crystal Reports或第三方服务 由题干中的关键信息“3.提交订单。……若商家改变价格,则刷新后可看到更改后的价格”、“4.改变价格。商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格”,结合如图1-10所示的0层数据流图中与外部实体E1相关的输入数据流“商家订单信息”、输出数据流“订单新价格”和处理“改变价格”,可知图1-9中实体E1的名称是“商家”。 根据题干中的关键信息“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,……”,结合图1-10中与外部实体E1相关的输入数据流“商家订单物流信息”、输出数据流“商家订单物流标识”和“商家订单物流查询请求”,以及处理“物流跟踪”,也可知实体E1的名称是“商家”。 由题干中“5.付款。顾客点击付款后,……将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进行转账;然后根据转账结果返回支付状态……”等关键信息,结合图1-10中与外部实体E2相关的输入数据流“转账请求”、输出数据流“转账结果”和处理“付款”,可知图1-9中实体E2的名称是“支付系统”。 根据题干中“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);……并从相应物流系统查询物流信息”等关键信息,结合图1-10中与外部实体E3相关的输入数据流“运单号”、输出数据流“物流信息”和处理“物流跟踪”,可知图1-9中实体E3的名称是“物流系统”。 由题干中的关键信息“7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方服务Crystal Report生成相关报表”等关键信息,结合图1-10中与外部实体E4相关的输入数据流“报表数据”、输出数据流“报表”和处理“生成报表”,可知图1-9中实体E4的名称是“第三方服务(或Crystal Reports)”。 2、D1:订单表 D2:商品表 D3:商品分类表 D4:购物车表 基于问题1的分析结果,根据题干中“3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表……”、“4.改变价格。……更新订单表中的商品价格”、“6.物流跟踪。……查询订单表中的物流标识,……”等关键信息,结合图1-10中与数据存储D1相关的处理“提交订单”、“改变价格”、“物流跟踪”,可知数据存储D1的名称是“订单表”。 由题干中的关键信息“1.加入购物车。……根据商品标识从商品表中读取商品信息……”、“7.生成报表。……从订单表、商品表以及商品分类表中读取数据,……”、“8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息”等,结合图1-10中与数据存储D2相关的处理“加入购物车”、“生成报表”、“维护信息”,可知数据存储D2的名称是“商品表”。 根据题干中的关键信息“7.生成报表。……从订单表、商品表以及商品分类表中读取数据,……”、“8.维护信息。管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息”等,结合图1-10中与数据存储D3相关的处理“生成报表”、“维护信息”,可知数据存储D3的名称是“商品分类表”。 由题干中“1.加入购物车。……并更新购物车表”、“2.浏览购物车。……显示出购物车表中的商品信息”、“3.提交订单。……将购物车表,中的商品状态改为待付款,……”等关键信息,结合图1-10中与数据存储D4相关的处理“加入购物车”、“浏览购物车”、“提交订单”,可知数据存储D4的名称是“购物车表”。 3、起点 终点 D4或购物车表 提交订单 顾客表 付款 付款 D4或购物车表 D1或订单表 生成报表 基于问题1和问题2的分析结果,由题干中“3.提交订单。顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)加入订单表……”等关键信息,结合图1-10中外部实体“顾客”、处理“提交订单”和数据存储“D1(或订单表)”之间的逻辑关系,可知图1-lO中缺失了一条起点为“D4(或购物车表)”、终点为“提交订单”的数据流“商品价格”。 根据题干中“5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户……”等关键信息,结合图1-10中外部实体“顾客”、处理“付款”和数据存储“顾客表”之间的逻辑关系,可知图1-10中缺失了一条起点为“顾客表”、终点为“付款”的数据流“支付账户”。 由题干中的关键信息“5.付款。顾客点击付款后,……然后根据转账结果返回支付状态并更改购物车表中商品的状态”等,结合图1-10中外部实体“顾客”、处理“付款”和数据存储“D4(或购物车表)”之间的逻辑关系,可知图1-10中缺失了一条起点为“付款”、终点为“D4(或购物车表)”的数据流“商品状态”。 根据题干中的关键信息“7.生成报表。根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据……”等,结合图1-10中外部实体“管理员”和“E1(或商家)”、处理“生成报表”、数据存储“D1(或订单表)”、“D2(或商品表)”和“D3(或商品分类表)”之间的逻辑关系,可知图1-10中缺失了一条起点为“D1(或订单表)”、终点为“生成报表”的数据流“订单信息”。 4、转账请求=验证码+价格+账号信息 顾客订单物流查询请求=顾客标识+订单标识 商家订单物流查询请求=商家标识+(订单标识) 基于问题1~问题3的分析结果,根据题干中“5.付款。顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统……”等关键信息,可知数据流“转账请求”至少包含的数据项有:账号信息、验证码、价格。 由题干中关键信息“6.物流跟踪。商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息”等,可知数据流“顾客订单物流查询请求”至少包含的数据项有:顾客标识、订单标识;数据流“商家订单物流查询请求”至少包含的数据项有:商家标识、订单标识。

问答题


425. 【问题1】(6分) 根据说明中的描述与表1,给出图1用例图中UC1~UC6处所对应的用例名称。

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3.将解答填入答题纸的对应栏内。 【说明】 某城市的各国家公园周边建造了许多供游客租用的小木屋和营地,为此,该城市设置了一个中心售票处和若干个区域售票处。游客若想租用小木屋或营地,必须前往中心售票处进行预定并用现金支付全额费用。所有的预定操作全部由售票处的工作人员手工完成。现欲开发一信息系统,实现小木屋和营地的预定及管理功能,以取代手工操作。该系统的主要功能描述如下。 1.管理预定申请。游客可以前往任何一个售票处提出预定申请。系统对来自各个售票处的预定申请进行统一管理。 2.预定。预定操作包含登记游客预定信息、计算租赁费用、付费等步骤。 3.支付管理。游客付费时可以选择现金和信用卡付款两种方式。使用信用卡支付可以享受3%的折扣,现金支付没有折扣。 4.游客取消预定。预定成功之后,游客可以在任何时间取消预定,但需支付赔偿金,剩余部分则退还给游客。赔偿金的计算规则是,在预定入住时间之前的48小时内取消,支付租赁费用10%的赔偿金;在预定入住时间之后取消,则支付租赁费用50%的赔偿金。 5.自动取消预定。如果遇到恶劣天气(如暴雨、山洪等),系统会自动取消所有的预定,发布取消预定消息,全额退款。 6.信息查询。售票处工作人员查询小木屋和营地的预定情况和使用情况,以判断是否能够批准游客的预定申请。 现采用面向对象方法开发上述系统,得到如表1所示的用例列表和表2所示的类列表。对应的用例图和类图分别如图1和图2所示。 表1 用例列表 图片 表2 类列表 图片 图片 图片

参考答案:

【问题1】 UC1:CheckAvailability UC2:MakeReservation UC3:GetDiscount UC4:ManageCashPayment UC5:ManageCrCardPayment UC6:CalculateRefund UC4 和UC5可以互换

解析:

【问题1】 UC1:CheckAvailability UC2:MakeReservation UC3:GetDiscount UC4:ManageCashPayment UC5:ManageCrCardPayment UC6:CalculateRefund 依题意,在如用例图所示的“小木屋和营地的预定及管理系统”用例图中共有1个参与者——TicketingOfficer(售票处)、11个用例。图用例图中已给出了表1中的5个用例“ManageInquiries(管理预定申请)”、“ManagePayment(支付管理)”、“CancelReservation(游客取消预定)”、“AutoCancelReservation(系统自动取消预定)”、“PublishMessage(发布取消预定消息)”。而用例图中用例UC1~UC6与表1中剩余的6个用例相关。 基于题干给出的说明信息“游客若想租用小木屋或营地,必须前往中心售票处进行预定……。所有的预定操作全部由售票处的工作人员手工完成。现欲开发一信息系统,实现小木屋和营地的预定及管理功能,以取代手工操作。”、“2.预定。预定操作包含登记游客预定信息、计算租赁费用、付费等步骤”等,结合表1可知,TicketingOfficer(售票处)直接参与的用例UC2的名称为“MakeReservation(预定)”。 根据题干给出的“6.信息查询。售票处工作人员查询小木屋和营地的预定情况和使用情况,以判断是否能够批准游客的预定申请”等关键信息,结合用例图中用例UC1与ManageInquiries(管理预定申请)、UC2 MakeReservation(预定)之间都存在的<<include>>包含关系,可知用例UC1的名称为“CheckAvailability(信息查询)”。 基于题干给出的“3.支付管理。游客付费时可以选择现金和信用卡付款两种方式。使用信用卡支付可以享受3%的折扣,现金支付没有折扣。”等关键信息,结合用例图中用例UC4、UC5与ManagePayment(支付管理)之间都存在的泛化(generalization)关系,即用例图中“ 图片 ”表示其相联的两个用例之间存在“一般一特殊”的泛化关系,可知用例UC4、UC5的名称分别为“ManageCashPayment(现金支付)”、“ManageCrCardPayment(信用卡支付)”;结合用例UC3与ManagePayment(支付管理)之间都存在的<<include>>包含关系,可知用例UC3的名称为“GetDiscount(计算付款折扣)”。 由题干给出的“4.游客取消预定。预定成功之后,游客可以在任何时间取消预定,但需支付赔偿金,……赔偿金的计算规则是……”、“5.自动取消预定。如果遇到恶劣天气(如暴雨、山洪等),系统会自动取消所有的预定,发布取消预定消息,全额退款。”等关键信息,结合用例图中用例UC6与CancelReservation(游客取消预定)、AutoCancelReservation(系统自动取消预定)之间都存在的<<incktde>>包含关系,可知用例UC6的名称为“CalculateRefund(计算取消预定的赔偿金)”。

问答题


426. 【问题2】(7分) 根据说明中的描述与表2,给出图2类图中C1~C7处所对应的类名。

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3.将解答填入答题纸的对应栏内。 【说明】 某城市的各国家公园周边建造了许多供游客租用的小木屋和营地,为此,该城市设置了一个中心售票处和若干个区域售票处。游客若想租用小木屋或营地,必须前往中心售票处进行预定并用现金支付全额费用。所有的预定操作全部由售票处的工作人员手工完成。现欲开发一信息系统,实现小木屋和营地的预定及管理功能,以取代手工操作。该系统的主要功能描述如下。 1.管理预定申请。游客可以前往任何一个售票处提出预定申请。系统对来自各个售票处的预定申请进行统一管理。 2.预定。预定操作包含登记游客预定信息、计算租赁费用、付费等步骤。 3.支付管理。游客付费时可以选择现金和信用卡付款两种方式。使用信用卡支付可以享受3%的折扣,现金支付没有折扣。 4.游客取消预定。预定成功之后,游客可以在任何时间取消预定,但需支付赔偿金,剩余部分则退还给游客。赔偿金的计算规则是,在预定入住时间之前的48小时内取消,支付租赁费用10%的赔偿金;在预定入住时间之后取消,则支付租赁费用50%的赔偿金。 5.自动取消预定。如果遇到恶劣天气(如暴雨、山洪等),系统会自动取消所有的预定,发布取消预定消息,全额退款。 6.信息查询。售票处工作人员查询小木屋和营地的预定情况和使用情况,以判断是否能够批准游客的预定申请。 现采用面向对象方法开发上述系统,得到如表1所示的用例列表和表2所示的类列表。对应的用例图和类图分别如图1和图2所示。 表1 用例列表 图片 表2 类列表 图片 图片 图片

参考答案:

【问题2】 C1:NationalPark C2:Rate C3:TicketingOfficer C4:Payment C5:Discount C6:CashPayment C7:CreditCardPayment C6 和C7可以互换

解析:

【问题2】 C1:NationalPark C2:Rate C3:TicketingOfficer C4:Payment C5:Discount C6:CashPayment C7:CreditCardPayment 依题意,在如类图所示的“小木屋和营地的预定及管理系统”类图中共有12个类。类图中已给出了表2中的5个类“ReservationItem(预定申请内容)”、“CampSite(营地)”、“Bungalow(小木屋)”、“Reservation(预定申请)”、“Customer(游客)”。而类图中类C1~C7的名称与表2中剩余的7个类名相关。 在UML类图中,“ 图片 ”表示其相联的两个类之间存在聚合关系。它代表两个类之间的整体/局部关系,其显著的特点是不能包含循环的联系(即局部中不能包含整体)。在类图中,类C2与类ReservationItem(预定申请内容)之间存在着一个聚合关系,C2是构成ReservationItem的部分对象;并且类ReservationItem、类C2两端所对应的多重度分别为1、1..;基于题干给出的关键信息“2.预定。预定操作包含登记游客预定信息、计算租赁费用、付费等步骤”等,结合常识可知,一份预定申请内容至少应包含一项租赁费用,也可以包含多项租赁费用;而一项特定的租赁费用只能出现在一份预定申请内容中;因此C2的类名是Rate(租赁费用)。 在UML类图中,“ 图片 ”表示其相联的两个类之间存在组合关系。它是聚合关系的一种特例。聚合是概念性的,只是区分整体与部分;组合具有很强的归属关系,而且整体与部分的对象生存周期是一致的。当整体对象不存在时,部分对象也不存在。在类图中,类ReservationItem(预定申请内容)与类C1之间存在组合关系;并且类C1、类ReservationItem两端所对应的多重度分别为1、0..;基于题干给出的关键信息“某城市的各国家公园周边建造了许多供游客租用的小木屋和营地……”等,结合常识可知,一家国家公园可以出现在一份或多份预定申请内容中,也可能没有任何顾客预定它;而一份特定的预定申请内容只能出现在一家国家公园中;因此C1的类名是NationalPark(国家公园)。 “ 图片 ”表示其相联的两个类之间存在继承关系(即“一般/特殊”关系)。子类继承父类的结构和行为,子类还可以增加或者覆盖父类的行为。子类可以出现在父类出现的任何位置。类C6、C7与类C4之间存在继承关系。C4表示一般类,C6和C7是C1的两个具体类。在题干说明中“游客付费时可以选择现金和信用卡付款两种方式。”出现的所有名词词汇中,具有明显的“一般/特殊”关系的就是“付款”、“现金支付”和“信用卡支付”。“现金支付”和“信用卡支付”是具体的付款形式,当游客在该管理系统支付预定钱款时,需要选择二者中的一个。而且每一次付款都与一个特定的预定申请(即类Reservation的一个实例)相关,而每一份预定申请又与一个特定的游客(即类Customer的一个实例)相关,没有游客就不会发生付款行为。所以C4的类名是“付款”,C6和C7的类名分别是“现金支付”、“信用卡支付”。 基于问题1的分析结果,结合题干给出的关键信息“游客付费时……使用信用卡支付可以享受3%的折扣,现金支付没有折扣”等,每一次付款还与其对应的付款折扣关联,没有付款行为就不需要使用付款折扣的相关参数。所以类图中与类C4关联的类C5的类名是“Discount(付款折扣)”。 由题干给出的关键信息“1.管理预定申请……系统对来自各个售票处的预定申请进行统一管理”等,每一份预定申请还与其对应的售票处关联。因此类图中与类Reservation(预定申请)关联的类C3的类名是“TicketingOfficer(售票处)”。

问答题


427. 【问题3】(2分) 对于某些需求量非常大的小木屋或营地,说明中功能4的赔偿金计算规则,不足以弥补取消预定所带来的损失。如果要根据预定的时段以及所预定场地的需求量,设计不同层次的赔偿金计算规则,需要对图2进行怎样的修改?(请用文字说明)。

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3.将解答填入答题纸的对应栏内。 【说明】 某城市的各国家公园周边建造了许多供游客租用的小木屋和营地,为此,该城市设置了一个中心售票处和若干个区域售票处。游客若想租用小木屋或营地,必须前往中心售票处进行预定并用现金支付全额费用。所有的预定操作全部由售票处的工作人员手工完成。现欲开发一信息系统,实现小木屋和营地的预定及管理功能,以取代手工操作。该系统的主要功能描述如下。 1.管理预定申请。游客可以前往任何一个售票处提出预定申请。系统对来自各个售票处的预定申请进行统一管理。 2.预定。预定操作包含登记游客预定信息、计算租赁费用、付费等步骤。 3.支付管理。游客付费时可以选择现金和信用卡付款两种方式。使用信用卡支付可以享受3%的折扣,现金支付没有折扣。 4.游客取消预定。预定成功之后,游客可以在任何时间取消预定,但需支付赔偿金,剩余部分则退还给游客。赔偿金的计算规则是,在预定入住时间之前的48小时内取消,支付租赁费用10%的赔偿金;在预定入住时间之后取消,则支付租赁费用50%的赔偿金。 5.自动取消预定。如果遇到恶劣天气(如暴雨、山洪等),系统会自动取消所有的预定,发布取消预定消息,全额退款。 6.信息查询。售票处工作人员查询小木屋和营地的预定情况和使用情况,以判断是否能够批准游客的预定申请。 现采用面向对象方法开发上述系统,得到如表1所示的用例列表和表2所示的类列表。对应的用例图和类图分别如图1和图2所示。 表1 用例列表 图片 表2 类列表 图片 图片 图片

参考答案:

【问题3】 解答1:增加一个新的类,该类与类Reservationltem之间有关联关系。 或解答2:修改Rate类,使其具有计算赔偿金的功能。

解析:

【问题3】 解答1:增加一个新的类,该类与类ReservationItem之间有关联关系; 或解答2:修改类Rate,使其具有计算赔偿金的功能 依题意,若需要根据预定的时段以及所预定场地的需求量,设计不同层次的赔偿金计算规则,则在类图中可以增加一个与此相对应的新类,且使该新类与类ReservationItem(预定申请内容)之间存在关联关系;或者是修改类Rate(租赁费用),使其具有计算赔偿金的功能。

问答题


428. 试题五(共15分) 阅读下列说明和C++代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQL Server和Access两种数据库以及系统中的数据库表Department为例,其类图如图所示。 图片 【C++代码】 #include<iostream> using namespace std; class Department{/代码省略/}; class IDepartment{ public: (1)=0; (2)____=0; }; class SqlserverDepartment: (3){ public: void Insert(Department* department){ cout<<"Insert a record into Department in SQL Server!\n"; //其余代码省略 } Department GetDepartment(int id){ } }; class AccessDepartment: public IDepartment { public: void Insert(Department* department){ cout<<"Insert a record into Department in ACCESS!\n"; //其余代码省略 } Department GetDepartment(int id){ /代码省略/ } }; (4) { public: _(5)___=0; }; class SqlServerFactory: public IFactory{ public: IDepartment* CreateDepartment() {return new SqlserverDepartment(); } }; class AccessFactory:public IFactory{ public: IDepartment* CreateDepartment() { return new AccessDepartment() ; } //其余代码省略 };

参考答案:

(1)virtual void Insert(Department* department) (2)virtual Department GetDepartment(int id) (3)public IDepartment (4)class IFactory (5)virtual IDepartment* CreateDepartment()

解析(AI 生成):

抽象产品接口用纯虚函数声明:Insert与GetDepartment后加=0;具体产品SqlserverDepartment须public继承IDepartment并实现这两个方法;抽象工厂IFactory中声明虚函数CreateDepartment返回IDepartment*,由具体工厂创建产品。

问答题


429. 试题六(共15分) 阅读下列说明和Java代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SOLServer和Access两种数据库以及系统中的数据库表Department为例,其类图如图所示。 图片 【Java代码】 import java.util.*; class Department{ /代码省略 / } interface IDepartment{ (1); _(2)___; } class SqlserverDepartment (3){ public void Insert(Department department){ System.out.println("Insert a record into Department in SQL Server!"); //其余代码省略 } public Department GetDepartment(int id){ } } class AccessDepartment implements IDepartment { public void Insert(Department department){ System.out.println("Insert a record into Department in ACCESS!"); //其余代码省略 } public Department GetDepartment(int id){ } } __(4){ __(5); } class SqlServerFactory implements IFactory{ public Department CreateDepartment(){ return new SqlserverDepartment(); } //其余代码省略 } class AccessFactory implements IFactory{ public Department CreateDepartment(){ return new AccessDepartment(); } //其余代码省略 }

参考答案:

(1)void Insert(Department department) (2) Department GetDepartment(int id) (3) implements IDepartment (4) interface IFactory (5) Department CreateDepartment()

解析(AI 生成):

Java用接口替代纯虚类:IDepartment中声明void Insert(Department)与Department GetDepartment(int),方法不带方法体;具体产品用implements IDepartment;抽象工厂声明为interface IFactory,其中Department CreateDepartment()由具体工厂实现。

问答题


430. 【问题1】4分 使用说明中的词语,给出图1中的实体E1~E4的名称。

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某学校欲开发图书管理系统,以记录图书馆所藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。主要功能的具体描述如下: 1处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID.进行检查。通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验证借阅者ID是否合法。若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,并将借阅的图书存入借出图书表。借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,若是,执行“处理逾期”操作;最后,更新图书表,删除借出图书表中的相应记录。 2维护图书。图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丢失或损坏严重时,从图书表中删除该图书记录。 3处理逾期。系统在每周一统计逾期未还图书,逾期未还的图书按规则计算罚金,并记入罚金表,并给有逾期未还图书的借阅者发送提醒消息。借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度。 现采用结构化方法对该图书管理系统进行分析与设计,获得如图1所示的顶层数据流图和图2所示的0层数据流图。 图片 图片

参考答案:

1.E1: 借阅者 E2: 图书管理员 E3/E4:学生数据库/职工数据库

解析:

1、E1:借阅者 E2:图书管理员 E3/E4:学生数据库/职工数据库 由题干中的关键信息“(1)处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID)进行检查”、“(3)处理逾期。系统在每周一统计逾期未还图书,……并给有逾期未还图书的借阅者发送提醒消息”,结合如图2-10所示的0层数据流图中与外部实体E1相关的输出数据流“借阅者ID”和处理“处理借阅”、输入数据流“逾期未还提醒”和处理“处理逾期”等,可知图1和图2中实体E1的名称是“借阅者”。 根据题干中给出的关键信息“(1)处理借阅。……借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表”,结合图2中与外部实体E2相关的输出数据流“损坏罚金”和处理“处理借阅”;关键信息“(2)维护图书。图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丢失或损坏严重时,从图书表中删除该图书记录”,结合图2中与外部实体E2相关的输入数据流“查询到的图书”、输出数据流“待删除的图书”“待添加的图书”和处理“维护图书”;关键信息“(3)处理逾期。……借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度”,结合图2中与外部实体E2相关的输出数据流“交罚金额”和处理“处理借阅”等,可知图1和图2中实体E2的名称是“图书管理员(或图书馆管理员)”。 基于题干中给出的“(1)处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID)进行检查。通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验证借阅者ID是否合法……”等关键信息,结合图2中与外部实体E3/E4相关的输入数据流“借阅者ID”、输出数据流“验证结果”和处理“处理借阅”等,可知图1和图2中实体E3、E4的名称分别是“学生数据库”、“职工数据库”。

问答题


431. 【问题2】4分 使用说明中的词语,给出图2中的数据存储D1~D4的名称。

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某学校欲开发图书管理系统,以记录图书馆所藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。主要功能的具体描述如下: 1处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID.进行检查。通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验证借阅者ID是否合法。若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,并将借阅的图书存入借出图书表。借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,若是,执行“处理逾期”操作;最后,更新图书表,删除借出图书表中的相应记录。 2维护图书。图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丢失或损坏严重时,从图书表中删除该图书记录。 3处理逾期。系统在每周一统计逾期未还图书,逾期未还的图书按规则计算罚金,并记入罚金表,并给有逾期未还图书的借阅者发送提醒消息。借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度。 现采用结构化方法对该图书管理系统进行分析与设计,获得如图1所示的顶层数据流图和图2所示的0层数据流图。 图片 图片

参考答案:

  1. D1:图书表 D2:借出图书表 D3:逾期未还图书表 D4:罚金表

解析:

2、D1:图书表 D2:借出图书表 D3:逾期未还图书表 D4:罚金表 结合问题1的分析结果,基于题干中给出的关键信息“(1)处理借阅。……如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,……借阅者归还所借图书时,……最后,更新图书表,删除借出图书表中的相应记录”,结合图2中与数据存储D1相关的输入数据流“借阅的图书”、“归还的图书”和处理“处理借阅”;关键信息“(2)维护图书。……在新进图书时录入图书信息,存入图书表;在图书丢失或损坏严重时,从图书表中删除该图书记录”,结合图2中与数据存储D1相关的输入数据流“新书信息”、“待删除图书ID”和处理“维护图书”等,可知图1和图2中数据存储D1的名称是“图书表”。 由题干中给出的“(1)处理借阅。……如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,并将借阅的图书存入借出图书表。借阅者归还所借图书时,……最后,更新图书表,删除借出图书表中的相应记录”等关键信息,结合图2中与数据存储D2相关的输入数据流“借阅的图书”、“归还的图书”和处理“处理借阅”等,可知数据存储D2的名称是“借出图书表”。 根据题干中的关键信息“(1)处理借阅。借阅者要借阅图书时,……若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书……”等,结合图2中与数据存储D3相关的输出数据流“逾期未还图书”和处理“处理借阅”等,可知数据存储D3的名称是“逾期未还图书表”。 基于题干中给出的关键信息“(1)处理借阅。借阅者要借阅图书时,……检查借阅者……罚金表中的罚金是否超过限额。……借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;……”,结合图2中与数据存储D4相关的输入数据流“损坏/丢失罚金额”、输出数据流“罚金额”和处理“处理借阅”等;关键信息“(3)处理逾期。……逾期未还的图书按规则计算罚金,并记入罚金表,……借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度”,结合图2中与数据存储D4相关的输入数据流“交罚金额/逾期罚金额”和处理“处理逾期”等,可知数据存储D4的名称是“罚金表”。

问答题


432. 【问题3】5分 在DFD建模时,需要对有些复杂加工(处理)进行进一步精化,绘制下层数据流图。针对图2中的加工“处理借阅”,在1层数据流图中应分解为哪些加工?(使用说明中的术语)

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某学校欲开发图书管理系统,以记录图书馆所藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。主要功能的具体描述如下: 1处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID.进行检查。通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验证借阅者ID是否合法。若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,并将借阅的图书存入借出图书表。借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,若是,执行“处理逾期”操作;最后,更新图书表,删除借出图书表中的相应记录。 2维护图书。图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丢失或损坏严重时,从图书表中删除该图书记录。 3处理逾期。系统在每周一统计逾期未还图书,逾期未还的图书按规则计算罚金,并记入罚金表,并给有逾期未还图书的借阅者发送提醒消息。借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度。 现采用结构化方法对该图书管理系统进行分析与设计,获得如图1所示的顶层数据流图和图2所示的0层数据流图。 图片 图片

参考答案:

检查借阅者身份或检查借阅者ID; 检查逾期未还图书; 检查罚金是否超过限额; 借阅图书; 计算图书损坏或丢失罚金额;

解析:

3、检查借阅者身份或检查借阅者ID; 检查逾期未还图书; 检查罚金是否超过限额; 借阅图书; 计算图书损坏或丢失罚金额; 根据题干中给出的关键信息“(1)处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID)进行检查。……若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。……则允许借阅图书,更新图书表,……借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,若是,执行“处理逾期”操作;……”等,图2中加工“处理借阅”在1层数据流图中应分解为“检查借阅者身份(或检查借阅者ID)”、“检查逾期未还图书”、“检查罚金是否超过限额”、“借阅图书”、“计算图书损坏或丢失罚金额”、“归还图书”等加工。题干中已明确说明“处理逾期”是一个操作,而且在描述“(3)处理逾期”中单独描述,图2中已经建模为单独一个处理,因此在本问题中不需要进一步分解。

问答题


433. 【问题4】2分 说明[问题3]中绘制1层数据流图时要注意的问题。

材料: 试题一(共15分) 阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。 【说明】 某学校欲开发图书管理系统,以记录图书馆所藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。主要功能的具体描述如下: 1处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID.进行检查。通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验证借阅者ID是否合法。若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,并将借阅的图书存入借出图书表。借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,若是,执行“处理逾期”操作;最后,更新图书表,删除借出图书表中的相应记录。 2维护图书。图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丢失或损坏严重时,从图书表中删除该图书记录。 3处理逾期。系统在每周一统计逾期未还图书,逾期未还的图书按规则计算罚金,并记入罚金表,并给有逾期未还图书的借阅者发送提醒消息。借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度。 现采用结构化方法对该图书管理系统进行分析与设计,获得如图1所示的顶层数据流图和图2所示的0层数据流图。 图片 图片

参考答案:

  1. 保持父图与子图平衡 基于0层数据流图绘制1层数据流图时,需要注意保持父图与子图平衡。

解析:

4、保持父图与子图平衡 父图中某加工的输入输出数据流必须与它的子图的输入输出数据流在数量和名字上相同。如果父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的 基于0层数据流图绘制1层数据流图时,需要注意保持父图与子图平衡。具体而言,父图中某加工的输入输出数据流必须与它的子图的输入输出数据流在数量和名字上相同。如果父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。

问答题


434. 【问题3】(5分)认定类是面向对象分析中非常关键的一个步骤。一般首先从问题域中得到候选类集合,在根据相应的原则从该集合中删除不作为类的,剩余的就是从问题域中认定出来的类。简要说明选择候选类的原则,以及对候选类集合进行删除的原则。

材料: 试题三(共15分) 阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。 【说明】 某城市拟开发一个基于Web的城市黄页,公开发布该城市重要的组织或机构(一下统称为客户)的基本信息,方便城市生活。该系统的主要功能描述如下: 搜索信息:任何使用Internet的网络用户都可以搜索发布在城市黄页中的信息,例如客户的名称、地址、联系电话等。 认证:客户若想在城市黄页上发布信息,需通过系统的认证。认证成功后,该客户成为系统授权用户。 更新信息:授权用户登录系统后,可以更改自己在城市黄页中的相关信息,例如变更联系电话等。 删除客户:对于拒绝继续在城市黄页上发布信息的客户,有系统管理员删除该客户的相关信息。 系统采用面向对象方法进行开发,在开发过程中认定出如下表所示的类。系统的用例图和类图分别如图1和图2所示。 图片 图片

参考答案:

  1. 候选类的选择运用了良性依赖原则“不会在实际中造成危害的依赖关系,都是良性依赖”和接口隔离原则(ISP)

解析:

3、候选类的选择运用了良性依赖原则“不会在实际中造成危害的依赖关系,都是良性依赖”和接口隔离原则(ISP)。 [解析] 候选类的选择运用了良性依赖原则“不会在实际中造成危害的依赖关系,都是良性依赖”。通过分析不难发现,本原则的核心思想是“务实”,很好地揭示了极限编程(Extreme Programming)中“简单设计”和“重构”的理论基础。本原则可以帮助我们抵御“面向对象设计五大原则”以及设计模式的诱惑,以免陷入过度设计( Overengineering)的尴尬境地,带来不必要的复杂候选类的删除使用的是接口离原则候选类的删除运用了接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。这个说得很明白了,再通俗点说不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。

问答题


435. 试题五(共15分,每空3分) 阅读下列说明和C++代码,回答下列问题。 【说明】 现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。 现采用原型模式(Prototype)来实现上述要求,得到如图1所示的类图。 图片 图片 [C++代码] # include<string> Using namespace std; Class Clonealole{ Public: __(1) , Class WorkExperience:public Cloneable{ //经历 Private: String workDate; String company; Public: CloneableClone(){ __(2) Obj->workDate=this->workDate; Obj->company=this->company; Return obj; } //其余代码省略 }; Class Resume:public Cloneable{ //简历 Private: String name; string sex; string age; WorkExperiencework; Resume(WorkExperience*work){ This->work=__(3) Public: Resume(string name){ /实现省略/ } Void SetPersonallnfo(string sex, string age){ /实现省略/ } Void setWorkExperience(string workDate,string company) { /实现省略/ } CloneableClone(){ ___(4); Obj->name=this->name; Obj->sex=this->sex; Obj->age=this->age; Return obj; } }; Int main(){ Resumea=new Resrune("张三"); A->SetPersonalInfo("男", "29"); A->SetWorkExperience("1998~2000", "XXX公司"); Resume*b=___(5)_; B->SetWorkExperience("2001~2006","YYY公司"); Return 0; }

材料: 试题五(共15分,每空3分) 阅读下列说明和C++代码,回答下列问题。 【说明】 现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。 现采用原型模式(Prototype)来实现上述要求,得到如图1所示的类图。

参考答案:

(1)virtual CloneableClone()=0 (2)WorkExperienceobj (3)Work (4)Resume*obj (5)a->Clone()

解析:

本题考查原型模式的概念及应用,原型模型是一种对象创建模型,用原型实体指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模型允许一个对象再创建另一个可定制的对象,无须知道任何创建的细节。 Prototype模式其实就是常说的“虚拟构造函数”一个实现,C++的实现机制中并没有支持这个特性,但是通过不同派生类实现的Clone接口函数可以完成与“虚拟构造函数”同样的效果.

问答题


436. 试题六 (共15分,每空3分) 阅读下列说明和Java代码,回答下列问题。 【说明】 现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。 现采用原型模式(Prototype)来实现上述要求,得到如图所示的类图。 图片 【Java代码】 Class WorkExperience __(1) oneable{ //工作简历 Private String workDate; Private String company; Public Object Clone(){ (2); obj.workDate=this.workDate; Obj.company-this.company; Return obj; } } Class Resume implements Cloneable{ //简历 Private String name; Private String sex; Private String age; Private WorkExperience work ; Public Resume(String name){ This.name=name; work=new WorkExperience(); } Private Resume(WorkExperience work){ This.work=(3); } Public void SetPersonallnfo( String sex , String age) { /代码略/ } Public void SetWorkExperience(String workDate, String company) { /代码省略/ } Public Object Clone( ){ Resume obj=(4); //其余代码省略 Return obj; } } Class WorkResume{ Public static void main(String[] args){ Resume a=new Resume("张三"); a.SetPersonallnfo("男", "29"); a.SetWorkExperience("1998~2000","XXX公司"); Resume b= _(5); b.SetWorkExperience("2001~2006","YYY公司"); } }

参考答案:

(1)implements (2)WorkExperience obj=newWorkExperience() (3)(WorkExperence)work.Clone() (4)new Resume(this.work) (5)(Resume)a.Clone()

解析:

本题考查原型模式的概念及应用,原型模型是一种对象创建模型,用原型实体指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模型允许一个对象再创建另一个可定制的对象,无需知道任何创建的细节。 所有的Java类都继承自java.lang.Object,而object类提供一个Clone()方法,可以将一个Java对象复制一份。因此在Java中可以直接使用Object提供的Clone()方法来实现对象的克隆。能够实现克隆的Java类必须实现一个标识接口Cloneable,表示这个Java类支持复制。

问答题