第一章
- 下列说法中正确的是(B)。
- 20世纪50年代提出了软件工程的概念
计算机软件的早期阶段,软件开发由个人或小团队完成,还未出现"软件危机"。
- 20世纪60年代提出了软件工程的概念
为通过工程化方法解决"软件危机",在德国召开的NATO软件会议上首次提出了"软件工程"的概念。
- 20世纪70年代出现了客户机/服务器技术
客户机/服务器(C/S)技术是是在20世纪80年代后期至90年代随着个人计算机和局域网的普及兴起的。70年代的主流设计模式是"主机/终端"。
- 20世纪80年代软件工程学科达到成熟
20世纪80年代是软件工程的快速发展期,出现了结构化开发方法、数据库技术等,真正走向成熟是在20世纪90年代,随着面向对象、敏捷开发、软件过程改进等理论和时间的完善,猜形成了完整的知识体系。
- 产生软件危机的主要原因是(D)。
-
软件工具落后(技术层面的表象问题)
-
软件生产能力不足(非核心问题)
-
实施严格的版本控制(解决问题手法之一)
-
软件本身的特点及开发方法不足(软件的复杂度+开发方法的落后)
-
软件工程的三要素是(C)。
- 技术、方法和工具
- 方法、对象和类
- 方法、工具和过程
- 过程、模型和方法
方法(软件开发各项任务的技术方法和步骤)、工具(支持软件工程方法的软件或硬件)、过程(将方法和工具结合起来,定义软件开发中各项活动的流程、顺序和协作方式)。
- 在下列选项中,(A)不属于软件工程学科所要研究的基本内容。
- 软件工程材料(软件工程的"材料"本质上是代码、数据、文档等信息制品,属于加工的东西,不是软件工程要规范化的东西)
- 软件工程方法(技术手段)
- 软件工程原理(指导思想)
- 软件工程过程(组织流程)
- 软件就是程序,编写软件就是编写程序(B)。
- 对
- 错
软件 = 程序 + 数据 + 文档
- 软件危机的主要表现是软件需求增加,软件价格上升(B)。
- 对
- 错
"软件需求增加"是软件行业发展的动力,"软件价格上升"价格受成本、市场供需影响,合理的价格上升是正常的,危机的核心是"成本失控"。
主要危机为"软件质量"与"开发效率"无法满足实际需求。
- 软件工程科学出现的主要原因是软件危机出现(A)。
- 对
- 错
软件危机直接催生了软件工程。
20世纪60年代至70年代,随着计算机应用普及,软件规模和复杂度激增,但开发方式仍停留在"作坊式"阶段,导致开发效率低、质量差、成本失控、维修困难等一系列严重问题,此时,人们意识到:必须用"工程化"的方法来管理软件生产,才能解决危机。
- 软件工程的作用是为了延长软件产品的寿命(B)。
- 对
- 错
软件工程的本质是"提升开发效率与质量",软件工程的核心作用是"支持软件开发生命周期中的各个活动,提高开发效率、保证软件质量、降低成本",而"延长软件寿命"是这些作用带来的间接结果,而非直接的目标。
- 软件危机是指人们在___和___过程中遇到的一系列问题。
-
软件开发,维护
-
忽略软件开发前期的___是造成软件危机的一大原因。
-
需求分析
-
开发出来的软件产品不能满足用户的需求,即产品的功能或特性与___并不符合。
-
需求
-
软件工程分为工具层、方法层、过程层___。
-
质量保证层
-
软件工程第一次提出是在___举办的学术会议上。
- 北大西洋公约组织
第二章
- 增量模型本质上是一种(C)。
- 线性顺序模型(阶段划分和顺序执行,与增量模型的迭代、逐步增量特性不同)
- 整体开发模型(一次性规划和开发整个软件系统)
- 非整体开发模型
- 螺旋模型(多次循环来逐步完善,比增量模型更强调风险驱动)
增量模型的核心思想是把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个增量构件由多个相互作用的模块构成,并且能够完成特定的功能。它是逐步交付的,先提交一个满足基本需求的版本,然后随着时间推移,不断添加功能和完善现有功能来构建后续版本。
- 软件过程是(C)。
-
特定的开发模型(软件过程的具体实现方式)
-
一种软件求解的计算逻辑(算法或程序设计的范畴)
-
软件开发活动的集合(为了开发出高质量软件所需要完成的一系列有序的软件开发活动的集合)
-
软件生命周期模型(是对软件从诞生到消亡的整个生命周期阶段的划分和管理)
-
软件生命周期模型不包括(B)。
- 瀑布模型(线性顺序开发,阶段分明,需求分析、设计、编码、测试、维护)
- 用例模型(描述系统的功能需求)
- 增量模型(拆分为多个"增量模块",逐步开发交付)
- 螺旋模型(含四个阶段,多次循环)
生命周期:项目如何一步步从需求到交付
- 包含风险分析的软件过程模型是(A)。
-
螺旋模型(以风险驱动为核心,整个开发过程通过多次循环推进)
-
瀑布模型(线性顺序开发,阶段分明,无迭代和风险评估环节)
-
增量模型(核心目标是快速交付可用产品,其风险控制依赖于模块划分的合理性)
-
喷泉模型(面向对象开发的典型模型,强调迭代和无缝衔接)
-
软件工程中描述生命周期的瀑布模型一般包括需求分析、设计、编码、(D)、维护等几个阶段。
-
产品发布(交付环节)
-
版本更新(维护阶段的具体工作)
-
可行性分析(项目启动前的准备工作)
-
测试
-
软件开发的瀑布模型中,一般认为可能占用开发人员最多的阶段是(C)。
-
分析阶段(人员少,以"需求梳理"为主)
-
设计阶段(人员专业,以"方案设计"为主)
-
编码阶段(人员密集,以"代码实现"为核心)
-
测试阶段(人员专业,以"验证代码"为主)
-
螺旋模型综合了(B)的优点,并增加了风险分析。
- 增量模型和喷泉模型
- 瀑布模型和快速原型模型
- 瀑布模型和喷泉模型
- 快速原型模型和喷泉模型
快速原型模型:通过构建可运行的原型,提前验证需求或技术可行性,降低后期返工风险。
螺旋模型分为多个螺旋周期,每个周期实现过程类似于瀑布模型;即保留了瀑布模型的"阶段化、文档驱动"特点,又融入了原型模型的"快速迭代、风险验证"思路,同时用"风险分析"贯穿始终。
- 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰(B)。
- 对
- 错
"阶段划分清晰"是特点,不是最大优点。最大优点是"文档驱动+过程可控"。
- 螺旋模型在瀑布模型和增量模型的基础上增加了风险分析(B)。
- 对
- 错
螺旋模型并非直接"叠加"瀑布与增量模型,而是以风险分析为核心驱动力的全新框架;且骆训模型的"风险分析"不是"附加功能",而是"核心骨架"。
- 软件工程过程应该以软件设计为中心,关键是编写程序(B)。
- 对
- 错
软件工程的核心是"用户需求",而非"设计"或"编程"。
- 极限编程属于增量模型(B)。
- 对
- 错
增量模型的核心是"线性增量",通常是先完成核心功能,然后逐步添加新功能,各个增量之间相对独立,整体架构在早期就比较稳定。
极限编程属于敏捷开发中的一种,它更强调"迭代式+增量式"的结合,并且有其独特的实践。它的迭代周期通常很短,每次迭代都会交付一个可运行的版本,并且非常注重客户反馈和团队协作,允许在开发过程中频繁调整需求和设计,这与传统意义上的增量模型有明显区别。
- 螺旋模型是__模型和__模型的结合。
-
瀑布;快速模型
-
基于组件的开发模型充分体现了__的思想。
-
软件重用
-
统一软件开发过程模型是基于__思想的软件开发模型。
-
迭代思想
-
喷泉模型是典型的__模型,具有较好的可移植性。
-
面向对象
-
采用RUP,可以从初始开始不断__,可以多次执行各个工作流程。
- 迭代
第三章
- 可行性研究也称为(D)。
- 技术可行性研究
- 操作可行性研究
- 经济可行性研究
- 项目论证
A、B、C都只是可行性研究的具体内容,可行性还包含:法律/社会可行性
- (A)研究往往是系统开发过程中难度最大的工作,也是可行性研究的关键。
-
技术可行性(前提和基础,很多时候直接决定了项目能不能做)
-
操作可行性(系统完成开发后,用户和组织能否能够有效的使用和维护)
-
经济可行性(项目的成本和收益,判断投入产出是否合理)
-
风险可行性(虽然不是最核心的常规分类,但是会涉及对项目各类风险的识别和评估)
-
研究软硬件资源的有效性是进行(A)研究的一方面。
-
技术可行性(同上)
-
经济可行性(同上)
-
社会可行性(通常指项目是否合法律法规、社会伦理、文化风俗等因素,与软硬件资源无关)
-
操作可行性(同上)
-
软件开发计划是软件工程的一种(B)性文档。
-
技术(侧重于"如何做"的技术层面)
-
管理(软件开发计划的核心目标是规划整个软件开发过程的管理要素)
-
检索(便于信息查找,不是软件开发技术的属性)
-
文献(学术研究或参考的资料,是开发项目中指导性的文件)
-
软件开发计划是软件工程中的一种技术性文档(B)。
- 对
- 错
开发计划属于"管理性文档"
- 可行性研究过程也称为项目论证过程(A)。
- 对
- 错
二者核心目标一致------通过系统的分析,论证项目是否值得投资和实施。
- 投资回收期越长,获得利润就越快,项目就越值得开发(B)。
- 对
- 错
低投资,短时间,高回报。
- 代码行技术是成本估计技术的一种(A)。
- 对
- 错
代码行:源代码的行数
代码行技术是一种经典的基于规模的成本估算方法。
第四章
- 在需求分析之前有必要进行(B)工作。
- 程序设计(编码前的设计阶段)
- 可行性研究
- E-R分析(数据库设计的一种方法)
- 行为建模(是需求分析的一部分)
可行性研究->需求分析->概要设计->详细设计->编码->测试->部署与维护。
- 需求分析是一个(D),它应该贯穿于系统的整个生命周期中,而不是仅仅属于软件生命周期的一项工作。
- 概念(静态的)
- 工具(辅助完成某项任务的手段)
- 方法(完成某项任务的方式、手段或策略,是进行需求分析时采用的具体技术)
- 过程
过程:强调的是一系列相互关联的活动或步骤的集合,这些活动会随着时间推移而进行,并具有持续性和迭代性。
- 软件需求规格说明书的内容不应该包括(B)。
- 对重要功能的描述
- 对算法的详细过程描述
- 对数据的要求
- 软件的性能
软件需求规格说明书的核心目标是"做什么"而不是"怎么做"。
- 软件需求分析阶段的工作可以分为一下5个方面:对问题的识别、分析、综合、编写需求分析文档以及(C)。
-
总结(各个阶段都需要总结,总结是个宽泛的说法)
-
阶段性报告(偏向过程性文档,而非需求分析阶段的核心输出或必须完成的收尾工作)
-
需求分析评审(需求分析阶段的收尾工作)
-
以上答案都不正确
-
进行需求分析可使用多种工具,但(B)是不适用的。
-
数据流图(展现数据的流动过程)
-
PAD(问题分析图:是一种详细阶段的工具,主要用于描述程序的控制流程和逻辑结构)
-
状态转换图(描述系统或对象在不同状态下的行为以及状态之间的转换条件)
-
数据字典(对系统中的所有数据元素进行详细定义和解释)
-
结构化分析方法的基本思想是(B)。
- 自底向上、逐步分解
- 自顶向下、逐步分解
- 自底向上、逐步抽象
- 自顶向下、逐步抽象
面向数据流的需求分析方法,从最顶(最抽象的整体功能)开始分析;将复杂的系统功能逐层拆分成更简单、;更具体的子功能。
- 在E-R图中,包含以下基本要素(D)。
- 数据、对象、实体
- 控制、关系、对象
- 实体、关系、控制
- 实体、属性、关系
E-R图是用来描述现实世界中实体之间联系的图形化工具,其基本要素可以概括为"两实体一联系",再加上描述实体特征的属性。
- 用于需求分析的软件工具,应该能够保证需求的正确性,即验证需求的一致性、完整性、现实性和有效性(A)。
-
对
-
错
-
需求分析是开发方的工作,用户的参与度不大(B)。
- 对
- 错
需求分析的核心原则之一为"用户驱动"。
- 需求规格说明书在软件开发中具有重要的作用,它也可以作为软件可行性研究的依据(B)。
- 对
- 错
可行性研究是早期阶段的工作,而需求规格说明书是在可行性研究之后、需求分析阶段之前产出的文档。
- 需求分析的主要目的是制订软件开发的具体方案(B)。
- 对
- 错
需求分析制定的为具体目标
- 需求规格说明书描述了每个系统每个功能的具体实现(B)。
- 对
- 错
只说做什么,不说怎么做
- 非功能性需求是从各个角度对系统的约束和限制,反应了应用对软件系统质量和特性的额外要求(A)。
- 对
- 错
非功能性需求的本质就是"对系统整体质量和运行条件的约束与限制",而非直接描述具体功能。
- 需求分析阶段的主要成果是需求规格说明书,但该成果与软件设计、编码、测试以及维护关系不大(B)。
- 对
- 错
需求规格说明书是整个软件开发过程的"源头"和"依据",后续所有阶段都必须严格以它为基准。
- 分层的DFD可以用于可行性研究阶段,描述系统的物理结构(B)。
- 对
- 错
DFD数据流图,主要描述"逻辑结构"而不是"物理结构"
- 信息建模方法是从数据的角度来建立信息模型的, 最常用的描述方法是E-R图(A)。
- 对
- 错
信息建模="数据视角"的建模,E-R图专注于描述数据的静态结构和关系,是数据库设计和信息系统分析中最核心的工具
- 在需求分析阶段主要采用图形工具来描述的原因是图形的信息量大,便于描述规模大的软件系统(B)。
- 对
- 错
使用图形工具的核心是:直观易懂,便于沟通
- 设计数据流图时只需要考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地怎样实现这些功能(A)。
- 对
- 错
DFD本质是"抽象的逻辑模型",只说做什么,不说怎么做
第五章
- 面向数据流的软件设计方法可将(C)映射成软件结构。
A. 控制结构(面向过程或结构化编程的概念)
B. 模块(是映射的结果而非来源)
C. 数据流
D. 事务流(是数据流的一种)
- 模块的独立性是由内聚性和耦合性来度量的,其中内聚性表示的是(C)。
A. 模块间的联系程度(耦合性)
B. 信息隐藏程度(模块化设计的一个原则)
C. 模块的功能强度
D. 接口的复杂程度(主要影响模块间的交互难度,更多与耦合性相关)
内聚性是指一个模块内部各个元素之间彼此结合的紧密程度。
- 一个模块把一个数值作为参数传递给另一个模块,这两个模块之间的耦合是( B)。
A. 公共耦合(多个模块通过一个公共数据环境交换信息)
B. 数据耦合(两个模块之间通过参数传递数据信息)
C. 控制耦合(一个模块向另一个模块传递的参数是控制信息)
D. 内容耦合(一个模块直接访问另一个模块的内部数据或通过非法入口进入另一个模块)
- 为了提高模块的独立性,模块之间最好是( C)。
A. 公共耦合(多个模块通过一个公共数据环境交换信息)
B. 控制耦合(一个模块向另一个模块传递的参数是控制信息)
C. 数据耦合(两个模块之间通过参数传递数据信息)
D. 特征耦合(一个模块给传递另一个模块的是数据结构的一部分)
- 在面向数据流的软件设计方法中,一般将数据流分为( D)。
A. 数据流和控制流
B. 变换流和控制流
C. 事务流和控制流
D. 变换流和事务流
数据流分为交换流(输入流、变换中心、输出流)和事物流(数据流以事物为核心,由一个输入数据流触发多个处理路径,根据输入数据的特征选择其中一条路径执行)。
- 总体设计(概要设计)不包括( D)。
A. 体系结构设计(确定系统由那些模块/子系统组成,以及模块之间的关系)
B. 接口设计(定义模块/子系统之间的交互方式)
C. 数据设计(规划系统的整体组织,如数据库结构、文件系统设计等)
D. 数据结构设计(是详细设计阶段的任务。详细设计关注每个模块内部的具体实现,例如某个函数用什么数据结构来存储和处理数据)
总体设计是软件设计的早期阶段,主要解决的"系统整体如何实现"的问题,关注宏观结构而非具体细节。
- Jackson方法根据(C )来导出程序结构。
A. 数据流图(结构化设计的依据,关注数据在系统中的流动和处理过程)
B. 数据间的控制结构(控制结构是程序设计的结果,不是Jackson方法的输入依据)
C. 数据结构(Jackson方法的本质是"数据结构驱动"通过分析输入/输出数据的结构来设计程序)
D. IPO图(主要用于描述模块的功能,不是设计方法的核心)
8.划分模块时,一个模块的(A )。
A. 作用范围应在其控制(作用)范围内
B. 控制范围应在其作用范围内
C. 作用范围和控制范围互不包含
D. 作用范围和控制范围不受任何限制
控制范围:一个模块本身以及所有直接或间接从属于它的模块的集合。
作用范围:指受模块内一个判定逻辑影响的所有模块的集合。
正确原则"作用范围应在控制范围内"为什么这样设计?
-
如果作用范围超出控制范围,意味着模块的判定逻辑影响了它无法直接控制的模块,会导致模块间出现"控制耦合",破坏模块独立性,增加维护难度。
-
只有作用范围被控制范围包含,才能保证模块的判定逻辑仅影响它能直接管理的模块,符合"高内聚,低耦合"的设计目标。
-
详细设计的任务是定义每个模块的(C )。
A. 外部特征(概要设计)
B. 内部特征(内部特征是一个较宽泛的概念;而详细设计的核心任务是用规范的工具精确描述"算法"和"数据结构",这两个是可落地、可编码的关键细节)
C. 算法和数据格式(算法:明确模块内部的具体执行步骤;数据格式:定义模块内部使用的数据结构)
D. 功能和输入输出数据(需求分析)
- 下面不是结构化方法的基本原理的是(A )。
A. 自底向上功能分解(通常用于面向对象方法中的"构建组装"或某些具体是现阶段,不属于结构化方法的基本原理。结构化方法强调的是从整体到局部的分解,而非从局部到整体的拼凑)
B. 数据抽象(结构化方法中对数据的处理原则)
C. 功能抽象(每个模块的内部实现对其他模块透明)
D. 模块化(结构化方法的基础)
结构化方法核心:"自顶向下,逐步求精"
- 数据耦合是高耦合。(B )
A. 对
B. 错
数据耦合是低耦合,两个模块之间通过传递数据参数进行交互,且传递的是基本数据类型或简单的数据结构,模块之间不共享内部数据,也不依赖对方的内部实现。
- 面向数据结构的设计方法一般都包括下列任务:确定数据结构特征;用顺序型、选择型和循环型3种基本形式表示数据。(A )
A. 对
B. 错
软件工程是一种聚焦数据结构与程序结构映射的设计思想,期核心目标是将数据的逻辑结构直接转化为程序的控制结构,从而简化设计过程、提高代码与数据的一致性。
无论数据结构多么复杂,其逻辑结构都可由3种基本形式组合而成,面向数据结构读么复杂,其逻辑结构都可由3种基本形式组合而成。
- 模块独立性要求高耦合、低内聚。( B)
A. 对
B. 错
低耦合、高内聚(避免代码臃肿,难以理解和维护,修改查询逻辑时可能影响节约功能)
- 软件设计说明书是软件概要设计的主要成果。(B )
A. 对
B. 错
"软件设计说明书"是一个统称,而概要设计的主要成果有其特定名称----《概要设计说明书》
- 软件设计中设计详审和设计本身一样重要,其主要作用是避免后期付出高昂的代价。( A)
A. 对 对的无话可说
B. 错
- 划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。( B)
A. 对
B. 错
合理即可,过小问题:接口多,链接复杂,开销增加。失去独立意义,降低代码可读性和可维护性。"碎片式设计"导致整体架构混乱。
- 结构化设计方法是一种面向数据结构的设计方法,强调程序结构与问题结构相对应。( B)
A. 对
B. 错
结构化设计方法实际是"面向数据流"的设计方法,而非"面向数据结构"。
结构化设计方法的本质是软件工程中经典的面向过程设计方法,它以数据流图为基础,将系统功能分解为模块,强调程序设计与数据结构相对应。
- 所有的数据流图都可以看作变换型数据流图。(B )
A. 对
B. 错
数据流图根据数据处理的逻辑结构,可分为变换型数据流图和事务型数据流图,两者的核心区别在于数据的触发方式和流程结构。
- 文件一般用于长期存储,数据库一般用于临时存储。( B)
A. 对
B. 错
文件:临时存储,文件虽然可以长期存储,但是缺乏数据库的系统管理性功能
数据库:长期存储
第六章
1.面向对象技术中,对象是类的实例。类有3种成分:( C)、属性和方法(或操作)。
A. 标识(标识更多是对象的特征)
B. 继承(面向对象的三大特征之一)
C. 封装(是类的核心,也是类的基本成分)
D. 消息(对象之间通信的方式)
- 汽车有一个发动机,那么汽车与发动机之间的关系是( B)关系。
A. 组装(非关系术语)
B. 整体--部分(一个对象是另一个对象的组成部分)
C. 分类(分类关系,描述的是父类与子类的继承关系)
D. 一般--具体(分类关系,描述的是父类与子类的继承关系)
- (D )是把对象的属性与操作结合在一起,构成一个独立的对象,其内部信息对外界是隐藏的,外界只能通过有限的接口与对象发生联系。
A. 多态(同一操作作用于不同的对象产生不同的结果)
B. 继承(子类继承父类特性并扩展)
C. 消息(对象间通信的方式)
D. 封装(核心思想是信息隐藏)
- 关联是建立(B )之间关系的一种手段。
A. 操作(类的行为,操作之间的关系通常用"依赖"表示,而非关联)
B. 类(描述两个或多个类之间的静态关系)
C. 功能(是系统或类的职责,功能之间的关系属于业务逻辑层面,不直接对应类图中的关联)
D. 属性(属性是类的静态特征,属性之间的关系通常通过类的关联间接体现)
5.面向对象软件技术的许多强有力的功能和突出的优点都来源于把类组织成一个层次结构的系统。一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是(B ),一个子类可以获得其父类的全部描述(数据和操作)。
A. 兼容性(通常指接口或数据格式的匹配性,与类层次结构中属性的操作的传递无关)
B. 继承性
C. 复用性(继承确实能实现复用,但复用性是继承带来的结果,而非题目描述的"层次结构的重要性质"本身)
D. 多态性(指同一操作作用于不同对象结果,强调的是行为的多样性,而非属性和操作本身)
- 所有的对象都可以成为各种对象类,每个对象类都定义了一组(D )。
A. 说明(类的说明通常是指注释或文档,而非类定义的核心内容)
B. 类型(类本身是一种数据类型,所以"定义一组类型"不符合逻辑)
C. 过程(在面向过程编程中常用过程,表示独立函数,但在面向对象中,操作本封装为"方法",属于类的成员,与独立的过程有本质区别)
D. 方法(本质是:类中封装的行为逻辑,是对象可以执行的操作。类通常包含两部分---属性和方法,而方法可执行)
7.UML是软件开发中的一个重要工具,它主要应用于( D)。
A. 基于螺旋模型的结构化方法(是一种开发过程模型,而UML是建模工具)
B. 基于需求动态定义的原型化方法(原型法关注快速构建可运行版本,UML可辅助原型设计,但并非其"主要应用")
C. 基于数据的数据流开发方法(这是面向过程的开发方法,UML虽然可描述流程,但核心仍是服务于"对象"而非"数据流程")
D. 基于对象的面向对象的方法
UML(统一建模语言)是一种可视化建模语言,它的核心设计目标就是为面向对象软件开发提供一套标准化的图形化描述工具。
- ( C)是从用户使用系统的角度来描述系统功能的图形表达方法。(UML这块的)
A. 类图(描述类、属性、方法及类之间的关系,是开发者视角的"系统静态结构设计图",和用户使用场景无关)
B. 活动图(展示流程步骤,是过程视角的"流程图",关注"怎么做",而非"用户要做什么")
C. 用例图(从用户如何使用系统的角度描述功能需求)
D. 状态图(描述对象的生命周期中的状态变化,是对象视角的"状态变化图",不直接对应用户功能)
- ( B)描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这些对象之间传递消息的时间顺序。
A. 类图(静态图,描述类的属性、方法和类之间的关系,完全淑射)
B. 顺序图(UML中最常用的动态交互图之一,它的核心作用是通过时间顺序清晰的展示多个对象之间如何通过消息传递完成一个功能或业务流程。一眼识别的要素:对象、消息、时间顺序)
C. 状态图(描述单个对象在不同状态下的行为和状态转换,聚焦于单个对象而非多个对象的协作)
D. 协作图(虽然也描述对象间的协作,但更侧重象间的结构关系,时间顺序通过消息编号表示,不如顺序图直观)
- UML是一种建模语言,是一种标准的表示,是一种方法。( B )
A. 对
B. 错
UML是一种标准化的建模语言但不是方法
语言:描述工具
方法:使用工具的完整流程
- 类图用来表示系统中类与类之间的关系,它是对系统动态结构的描述。(B )
A. 对
B. 错
类图是静态
- 在面向对象的软件开发方法中,每个类都存在其相应的对象,类是对象的实例,对象是生成类的模板。(B )
A. 对
B. 错
类是对象的模板,对象是类的实例
13.顺序图用于描述对象是如何交互的且将重点放在消息序列上。(A )
A. 对
B. 错
主要作用就是描述对象之间如何进行交互的,特别侧重于对象之间的消息传递的先后顺序,也就是消息序列
- 继承性是父类与子类之间共享数据结构和消息的机制,这是类之间的一种关系。(B )
A. 对
B. 错
继承性的核心是父类与子类之间共享属性和方法的机制,共享消息是不准确的,"消息"在面向对象概念中通常指对象间的交互指令,这是对象动态交互的过程,并非继承所共享的内容
- 多态性增强了软件的灵活性和复用性,允许用更为明确、易懂的方式去建立通用软件,多态性和继承性相结合使软件具有更广泛的复用性和可扩充性。( B)
A. 对
B. 错
多态机制的优势在于"抽象性"而非"明确性"
- 类封装比对象封装更具体、更细致。(B )
A. 对
B. 错
封装是"类"的设计行为,对象只是封装规则的执行者
- 用例之间有扩展、使用、组合等几种关系。( B)
A. 对
B. 错
不存在组合关系,用例之间有扩展、包含、泛华关系
- 活动图显示动作及其结果,着重描述操作实现中所完成的工作,以及用例实例或类中的活动。(B )
A. 对
B. 错
活动图是一种用于描述动态行为的图,它关注的是"流程如何一步步执行",而不是"操作实现的具体细节"或"动作的结果"
- UML支持面向对象的主要概念,并与具体的开发过程相关。(B )
A. 对
B. 错
UML是一种通用的可视化建模语言,它的作用是描述软件系统的结构和行为,但它不绑定任何特定的开发过程或方法论
- 部署图用于描述系统硬件的物理拓扑结构以及在此结构上执行的软件。(A )
A. 对
B. 错
部署图本质:"硬件+软件"的物理布局图,它的核心作用就是展示两个关键要素:硬件设备和软件元素。
"硬件的物理结构"对应部署图中的"节点","在此结构上执行的软件"对应部署图中"节点内部的软件元素"。
部署图的典型作用:1.运维与部署知道 2.系统架构沟通 3.性能与可靠性分析
第八章
- 面向对象设计阶段的主要任务是系统设计和(D)。
A. 结构化设计(结构化方法的设计阶段)
B. 数据设计(数据设计包含在对象设计中)
C. 面向对象程序设计(属于是现阶段,任务是用具体的编程语言将设计阶段的类和对象模型编码)
D. 对象设计
面向对象的软件开发过程通常包括分析、设计、实现阶段
设计阶段两大核心任务:1、系统设计 2、对象设计
- ( B)是表达系统类及其相互联系的图示,它是面向对象设计的核心,是建立状态图、协作图和其他图的基础。
A. 部署图
B. 类图
C. 组件图
D. 配置图
类图定义了系统的骨架,其他图则是在这个骨架上"填充血肉"
- 下面所列的性质中,( D)不属于面向对象设计的特性。
A. 继承性(面向对象的核心特征之一,允许子类继承父类,实现代码复用和层次化设计)
B. 复用性(虽然不是三大基本特性,但它是面向对象的重要目标和优势)
C. 封装性(三大基本特性之一,将数据和操作数据的方法捆绑在一起,通过访问控制隐藏内部实现细节,只暴露必要的接口,提高代码的安全性和可维护性)
D. 可视化(是设计工具或表达方式,而非面向对象设计本身的特性)
- 下列是面向对象设计方法中有关对象的叙述,其中( B)是正确的。
A. 对象在内存中没有它的存储区(对象是类的实例化,当我们创建一个对象时,系统会在内存中为其分配存储空间,用于存储对象的属性值)
B. 对象的属性集合是它的特征表示(对象是由属性和方法组成的属性是对象的静态特征,方法是对象的动态行为)
C. 对象的定义与程序中类型的概念相当("类型"在面对对象中通常指类,而对象是类的实例)
D. 对象之间不能相互通信(对象之间通过消息传递进行通信,这是面向对象设计的核心机制之一)
- 面向对象设计,基于父类创建的子类有父类的所有特性(属性和方法),这一特点称为类的( C)。
A. 多态性(指的是同一个接口在不同对象上有不同的实现)
B. 封装性(指的是将对象的属性和方法捆绑在一起,对外隐藏内部实现细节,只暴露必要的接口)
C. 继承性
D. 复用性(面向对象的设计目的之一,但它不是面向对象的三大特征之一)
- 下列哪项不是面向对象设计的启发规则?(C )
A. 设计结果应该清晰易懂(所有设计的基本要求)
B. 类等级深度应该适当(类的继承层并非越深越好)
C. 尽量添加设计的变动(与面对对象设计的目标完全相反)
D. 使用简单的协议("协议"在这里可以理解为类之间的交互接口。简单的协议能降低耦合度减少理解成本和错误概率)
- 下面哪项不是系统分解的好处?( D)
A. 降低设计的难度
B. 有利于软件开发人员分工协作
C. 有利于维护人员理解并维护系统
D. 有利于增加系统依赖性(系统分解的核心目标之一是降低依赖性)
- 不属于任务管理子系统的( A)。
A. 人机交互所需输入(用户与系统的直接交互过程)
B. 任务的定义(确定人任务的属性,是任务创建的前提)
C. 任务的通信(多个任务/进程之间需要协作,任务管理子系统需要提供任务通信机制)
D. 硬件分配(任务运行需要硬件资源的支持,任务管理子系统需要根据任务需求和系统运行状态进行硬件资源分配)
- 以下哪个是人机交互子系统设计的原因?( D)
A. 系统与外界的接口是容易变动的(接口设计需要灵活性)
B. 系统的服务容易变动(内部功能迭代)
C. 鉴别、定界、追踪和评估变动产生的影响(系统变动如何控制风险)
D. 强调人如何命令系统(优化人与系统的交互方式)
- 在软件系统中,由于需求的变化,一些对象的实现可能会发生变化。为了应对这种"易变对象"的变化,人们提出了( A)。
A. 工厂模式(将对象的创建过程封装在工厂类中,客户端不能直接创建对象,而是通过工厂获取。好处:1、隔离对象创建的细节 2、降低耦合度)
B. 外观模式(解决"接口复杂性",而非"对象现实变化 ",目的是为复杂子系统提供一个简化的同一接口)
C. 观察者模式(解决"状态变化通知",而非"对象实现变化")
D. 以上都不是
11.在面向对象的设计中,应遵循的设计准则除了模块化、抽象、低耦合、高内聚以外,还有信息隐藏。(A )
A. 对
B. 错
面向对象设计目标是创建可维护、可复用、可扩展的软件系统。模块化、抽象、低耦合、高内聚这四个准则已经为系统结构提供了基础,而信息隐藏则进一步从"内部实现保护"的角度,增强了系统的稳定性和安全性
- 面向对象分析和设计活动是一个多次反复迭代的过程。(A )
A. 对
B. 错
面向对象的分析与设计(OOAD)需要不断反馈、调整和优化,最终收敛到合理的解决方案。
- 关系数据库可以完全支持面向对象的概念,面向对象设计中的类可以直接对应到关系数据库中的表。(B )
A. 对
B. 错
关系数据库无法"完全支持"面向对象的感念,因为它基于关系模型,而面向对象基于类、对象、继承、多态等概念。两者的设计思想存在本质差异,导致类无法直接映射为表,具体表现为:1、继承关系无法直接映射 2、对象的复杂数据类型无法直接存储 3、封装与表结构的矛盾 4、多态无法在关系模型中直接表达
- 面向对象设计是在分析模型的基础上,运用面向对象技术生成软件实现环境下的设计模型。( A)
A. 对
B. 错
"需求分析--面向对象分析--面向对象设计--面向对象实现"其中分析模型和设计模型是承上启下的关键阶段
设计模型不是凭空产生的,必须以分析模型为依据设计模型必须考虑实际开发环境的约束。
分析模型是设计模型的"地基",设计模型则是分析模型的"技术落地"
莫暗想对象的本质是将分析模型转化为可实现的技术方案。
- 常见的任务有事件驱动型任务、时钟驱动型任务、优先任务、关键任务和协调任务等。(A )
A. 对
B. 错
- 设计任务管理子系统时,当系统中存在 3 个或 3 个以上的任务时,就应该增加一个任务,用它作为协调任务。( A)
A. 对
B. 错
协调任务在3到3个以上时才会用到,任务到3个是会出现1、任务依赖关系复杂化 2、竞争资源问题凸显 3、系统状态一致性难以保证 4、错误处理变得复杂
协调任务的典型设计模式:1、中央协调模式 2、分层协调模式 3、事件驱动协调模式
协调任务的主要职责:1、任务生命周期管理 2、数据路由与转换 3、系统监控与诊断 4、动态冲配置
设计协调任务的注意事项:1、避免成为单点故障 2、保持轻量级 3、接口标准化 4、可配置型
- 用指针可以方便地实现单向关联。( D)
A. 对
B. 错
"单向关联"是数据结构中一种基础的元素关联,指两个或多个元素之间仅存在单一方向的引用关系。
指针的核心功能是存储另一个变量的内存地址,这恰好完美匹配单向关联的需求
- 如果某个关联包含链属性,不同关联重数的实现方法相同。( B)
A. 对
B. 错
关联重数指关联两端的类之间的数量对应关系,常见有三种:一对一、一对多、多对多
链属性:指关联关系本身具有的属性,而不是关联两端的类自身的属性。
- 不可以用独立的关联对象实现双向关联。(B )
A. 对
B. 错
双向关联指关联的两端类都能访问到对方的实例
独立的关联对象指关联关系本身被抽象为一个独立的类,用于存储关联特有的属性、操作或其他特征。
关联类不仅能实现刚双向关联,而且在需要存储关联自身信息时,是实现双向关联的重要方式。
- 增加冗余关联可以提高访问效率。( A)
A. 对
B. 错
冗余关联通过增加额外关联缩短访问路径,从而提升访问效率
冗余关联指的是:在已有的关联关系基础上,为了简化访问路径、减少间接查询步骤,额外添加的"非必须但实用"的关联。
- 在面向对象分析过程中,可以忽略对象模型中存在的冗余关联。( B)
A. 对
B. 错
面向对象分析阶段对关联关系的处理原则:全面捕捉问题域中的关联关系,而非过早剔除所谓"冗余"关联。
为什么?1、"看似冗余"的关联可能承载独立的业务语义 2、分析阶段的"冗余"可能是设计阶段的"必要优化" 3、忽略关联可能破坏模型的"完整性"和"可追溯性"
- 设计模式是从大量或成功实践中总结出来并被公认的实践和知识。(A )
A. 对
B. 错
设计模式的起源:从"经验总结"到"公识知识":1、基于实践而非理论空想 2、被行业广泛的认可,形成"共通语言" 3、解决"特定场景下的共性问题"