单选题
回调(Callback)函数是面向过程的程序设计语言中常用的一种机制,而设计模式中的______模式就是回调机制的一个面向对象的替代品。该模式的意图是______。
单选题
- A.Strategy(策略)
- B.Adapter(适配器)
- C.Command(命令)
- D.Observer(观察者)
单选题
- A.使原本由于接口不兼容而不能一起工作的那些类可以一起工作
- B.将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作
- C.定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
- D.使算法可独立于使用它的客户而变化
【正确答案】
B
【答案解析】[解析] Command(命令)模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或记录请求目志,以及支持可撤销的操作。
Command模式抽象出待执行的动作以参数化某对象,我们可用面向过程语言中的回调函数表达这种参数化机制。所谓回调函数,是指函数先在某处注册,而在稍后某个需要的时候被调用。Command模式是回调机制的一个面向对象的替代品。
Command模式在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可将负责该请求的命令对象传送给另一个不同的进程并在那儿实现该请求。
Command模式支持取消操作。Command模式的Execute操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command接口必须添加一个Unexecute操作,该操作取消上一次Execute调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用Unexecute和Execute来实现重数不限的“取消”和“重做”。
Command模式支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。在Command接口中添加装载操作和存储操作,可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用Execute操作重新执行它们。
Command模式用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务的信息系统中很常见。一个事务封装了对数据的一组变动。Command模式提供了对事务进行建模的方法。Command模式有一个公共的接口,可以用同一种方式调用所有的事务。同时,使用该模式也易于添加新事务以扩展系统。
单选题
对OO系统的技术度量的识别特征,Berard定义了导致特殊度量的特征。其中______抑制程序构件的操作细节,只有对访问构件必需的信息被提供给其他希望访问的构件。
【正确答案】
C
【答案解析】[解析] 面向对象的软件和用传统方法开发的软件有本质性不同,为此,对OO系统的技术度量必须调整以适应那些区别OO和传统软件的特征。Berard定义了5个导致特殊度量的特征,分别是局部化、封装、信息隐蔽、继承和对象抽象技术。
(1)局部化。局部化是软件的一个特征,指明了信息在程序中被集中的方式,例如,针对功能分解的传统方法围绕功能局部化信息,它们典型地以过程模块来实现。数据驱动方法围绕特定的数据结构局部化信息。在OO语境中,信息是通过封装数据和处理在类或对象的边界内而集中的。因为传统软件强调函数为局部化机制,软件度量着重于函数的内部结构或复杂性(例如,模块长度、内聚性或环路复杂性等)或函数间相互连接的方式(例如,模块耦合)。因为类是OO系统的基本单位,所以,局部化是基于对象的,因此,度量应该应用于作为一个完全实体的类(对象)。此外,在操作(函数、方法)和类间的关系不必是一对一的。因此,反应类协作方式的度量必须能够适应一对多和多对一的关系。
(2)封装。Berard定义封装为“一组项的包装(或捆绑在一起),(对传统软件的)低层封装例子包括记录和数组,而子程序(例如,过程、函数、子例程和段落)是封装的中层机制”。
对OO系统,封装包含了类的责任,包括其属性(和针对聚合对象的其他类)和操作,以及由特定的属性值定义的类的状态。封装通过将测度的焦点从单个模块改变到数据(属性)和处理模块(操作)包而影响度量。此外,封装鼓励在高抽象层的测度。将此层次的抽象同传统的度量相比较,传统度量着重于布尔条件的计数或代码行数。
(3)信息隐蔽。信息隐蔽隐瞒(或隐藏)了程序构件的操作细节,只将对访问该构件必需的信息提供给那些希望访问它的其他构件。良好设计的OO系统应该鼓励信息隐蔽,因此,指明隐蔽所达到程度的度量应该提供对OO设计质量的一个指标。
(4)继承。继承是使某对象的责任能够传播到其他对象的机制,出现在类层次的所有层面上。通常,传统的软件不支持该特征。因为继承是很多OO系统的关键特征,所以很多OO度量是关注于它的。
(5)抽象。抽象是使设计者能够关注程序构件(数据或过程)的本质性细节而不需要考虑低层细节的机制。如Berard所说,抽象是一个相对概念,当我们移向更高的抽象级别时,我们忽略了越来越多的细节,即我们提供了对概念或项的更一般化的视图;当我们移向抽象的低层时,我们引入了更多的细节,即我们提供了概念或项的更特定的视图。
因为类是一种抽象,它可以在很多不同的细节级别上并以一系列不同的方式(例如,作为一个操作列表、作为一个状态序列、作为一系列协作)来观察,所以OO度量用类的测度(例如,每个应用的每个类的实例数、每个应用的参数化类数,以及参数化类和非参数化类的比率)来表示抽象。
单选题
用例从用户角度描述系统的行为。用例之间可以存在一定的关系。在“某图书馆管理系统”用例模型中,所有用户使用系统之前必须通过“身份验证”,“身份验证”有“密码验证”和“智能卡验证”两种方式,则“身份验证”与“密码验证”和“智能卡验证”之间是______关系。
【正确答案】
D
【答案解析】[解析] 用例是在系统中执行的一系列动作,这些动作将生成特定参与者可见的价值结果。它确定了一个和系统参与者进行交互并可由系统执行的动作序列。用例模型描述的是外部执行者(actor)所理解的系统功能。用例模型用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成的共识。
两个用例之间的关系可以概括为两种情况。一种是用于重用的包含关系,用include表示(在UML 1.x版本中用use表示);另一种是用于分离出不同行为的扩展,用extend表示(在UML 1.x版本中用extends表示)。
(1)包含关系。当可以从两个或两个以上的原始用例中提取公共行为,或者发现能够使用一个构件来实现某一个用例的部分功能很重要时,我们应该使用包含关系来表示它们。
(2)扩展关系。如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种事情,则将这个用例分为一个主用例和一个或多个辅用例描述可能更加清晰。
另外,用例之间还存在一种泛化关系。用例可以被特别列举为一个或多个子用例,这被称为用例泛化。当父用例能够被使用时,任何子用例也可以被使用。例如,我们购买飞机票,既可以是电话订票,也可以是网上订票,则订票用例就是电话订票和网上订票的抽象。
在本题中,由于“身份验证”可以有“密码验证”和“智能卡验证”两种方式,所以“身份验证”与“密码验证”和“智能卡验证”之间是泛化关系。
单选题
在UML的动态建模机制中,______描述了对象之间动态的交互关系,还描述了交互的对象之间的静态链接关系,即同时反映系统的动态和静态性。
【正确答案】
C
【答案解析】[解析] UML2.0包括14种图,分别列举如下:
(1)类图(class diagram)。类图描述一组类、接口、协作和它们之间的关系。在OO系统的建模中,最常见的图就是类图。类图给出了系统的静态设计视图,活动类的类图给出了系统的静态进程视图。
(2)对象图(object diagram)。对象图描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图一样,这些图给出系统的静态设计视图或静态进程视图,但它们是从真实案例或原型案例的角度建立的。
(3)构件图(component diagram)。构件图描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。构件图用于表示系统的静态设计实现视图。对于由小的部件构建大的系统来说,构件图是很重要的。构件图是类图的变体。
(4)组合结构图(composite structure diagram)。组合结构图描述结构化类(例如,构件或类)的内部结构,包括结构化类与系统其余部分的交互点。组合结构图用于画出结构化类的内部内容。
(5)用例图(use case diagram)。用例图描述一组用例、参与者及它们之间的关系。用例图给出系统的静态用例视图。这些图在对系统的行为进行组织和建模时是非常重要的。
(6)顺序图(sequence diagram,序列图)。顺序图是一种交互图(interaction diagram),交互图展现了一种交互,它由一组对象或参与者以及它们之间可能发送的消息构成。交互图专注于系统的动态视图。顺序图是强调消息的时间次序的交互图。
(7)通信图(communication diagram)。通信图也是一种交互图,它强调收发消息的对象或参与者的结构组织。顺序图和通信图表达了类似的基本概念,但它们所强调的概念不同,顺序图强调的是时序,通信图强调的是对象之间的组织结构(关系)。在UML 1.x版本中,通信图称为协作图(collaboration diagram)。
(8)定时图(timing diagram,计时图)。定时图也是一种交互图,它强调消息跨越不同对象或参与者的实际时间,而不仅仅关心消息的相对顺序。
(9)状态图(state diagram)。状态图描述一个状态机,它由状态、转移、事件和活动组成。状态图给出了对象的动态视图。它对于接口、类或协作的行为建模尤为重要,而且它强调事件导致的对象行为,这非常有助于对反应式系统建模。
(10)活动图(activity diagram)。活动图将进程或其他计算结构展示为计算内部一步步的控制流和数据流。活动图专注于系统的动态视图。它对系统的功能建模和业务流程建模特别重要,并强调对象间的控制流程。
(11)部署图(deployment diagram)。部署图描述对运行时的处理节点及在其中生存的构件的配置。部署图给出了架构的静态部署视图,通常一个节点包含一个或多个部署图。
(12)制品图(artifact diagram)。制品图描述计算机中一个系统的物理结构。制品包括文件、数据库和类似的物理比特集合。制品图通常与部署图一起使用。制品也给出了它们实现的类和构件。
(13)包图(package diagram)。包图描述由模型本身分解而成的组织单元,以及它们之间的依赖关系。
(14)交互概览图(interaction overview diagram)。交互概览图是活动图和顺序图的混合物。
从以上定义可以看出本题所描述的是协作图。
单选题
采用UML分析用户需求时,用例UC1可以出现在用例UC2出现的任何位置,那么UC1和UC2之间的关系是______。
- A.include
- B.extend
- C.generalize
- D.call
【正确答案】
C
【答案解析】[解析] 在UML的用例中,用例之间有三种关系,分别是include(包含)、extend(扩展)和generalize(泛化)。当两个用例之间具有继承关系时,意味着子用例可以继承父用例的行为,并可以在此基础上添加新的行为或重置父用例的行为,子用例可以出现在父用例出现的任何位置上。因此,UC1和UC2之间的关系应该是泛化关系。
单选题
关于UML中的状态图和活动图的叙述中,______是错误的。
- A.状态图和活动图都是对系统的动态方面进行建模的图
- B.活动图是状态图的一种特殊情况,其中所有或大多数状态是活动状态
- C.状态图显示从状态到状态的控制流,活动图显示的是从活动到活动的控制流
- D.在对一个对象的生存期建模时,只能使用状态图
【正确答案】
D
【答案解析】[解析] 状态图和活动图都是UML用于对系统动态方面进行建模的行为图,其中状态图注重于由事件驱动的系统的变化状态;而活动图注重于从活动到活动的控制流。一个活动是一个状态机中进行的非原子的执行单元。活动图是状态机的一种特殊情况,其中全部或大多数状态是活动状态,并且全部或大多数转换是通过源状态中活动的完成来触发的。因为活动图是一种状态机,所以它可以适应状态机的全部特性。活动图和状态图在对一个对象的生命周期建模时都是有用的。