单选题
回调(Callback)函数是面向过程的程序设计语言中常用的一种机制,而设计模式中的{{U}}
{{U}} 39 {{/U}} {{/U}}模式就是回调机制的一个面向对象的替代品。该模式的意图是{{U}} {{U}}
40 {{/U}} {{/U}}。
单选题
- 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定义了导致特殊度量的特征。其中{{U}} {{U}}
{{/U}} {{/U}}抑制程序构件的操作细节,只有对访问构件必需的信息被提供给其他希望访问的构件。
【正确答案】
C
【答案解析】[解析] 面向对象的软件和用传统方法开发的软件有本质性不同,为此,对OO系统的技术度量必须调整以适应那些区别OO和传统软件的特征。Berard定义了5个导致特殊度量的特征,分别是局部化、封装、信息隐蔽、继承和对象抽象技术。
(1)局部化。局部化是软件的一个特征,指明了信息在程序中被集中的方式,例如,针对功能分解的传统方法围绕功能局部化信息,它们典型地以过程模块来实现。数据驱动方法围绕特定的数据结构局部化信息。在OO语境中,信息是通过封装数据和处理在类或对象的边界内而集中的。因为传统软件强调函数为局部化机制,软件度量着重于函数的内部结构或复杂性(例如,模块长度、内聚性或环路复杂性等)或函数间相互连接的方式(例如,模块耦合)。因为类是OO系统的基本单位,所以,局部化是基于对象的,因此,度量应该应用于作为一个完全实体的类(对象)。此外,在操作(函数、方法)和类间的关系不必是一对一的。因此,反应类协作方式的度量必须能够适应一对多和多对一的关系。
(2)封装。Berard定义封装为“一组项的包装(或捆绑在一起),(对传统软件的)低层封装例子包括记录和数组,而子程序(例如,过程、函数、子例程和段落)是封装的中层机制”。
对OO系统,封装包含了类的责任,包括其属性(和针对聚合对象的其他类)和操作,以及由特定的属性值定义的类的状态。封装通过将测度的焦点从单个模块改变到数据(属性)和处理模块(操作)包而影响度量。此外,封装鼓励在高抽象层的测度。将此层次的抽象同传统的度量相比较,传统度量着重于布尔条件的计数或代码行数。
(3)信息隐蔽。信息隐蔽隐瞒(或隐藏)了程序构件的操作细节,只将对访问该构件必需的信息提供给那些希望访问它的其他构件。良好设计的OO系统应该鼓励信息隐蔽,因此,指明隐蔽所达到程度的度量应该提供对OO设计质量的一个指标。
(4)继承。继承是使某对象的责任能够传播到其他对象的机制,出现在类层次的所有层面上。通常,传统的软件不支持该特征。因为继承是很多OO系统的关键特征,所以很多OO度量是关注于它的。
(5)抽象。抽象是使设计者能够关注程序构件(数据或过程)的本质性细节而不需要考虑低层细节的机制。如Berard所说,抽象是一个相对概念,当我们移向更高的抽象级别时,我们忽略了越来越多的细节,即我们提供了对概念或项的更一般化的视图;当我们移向抽象的低层时,我们引入了更多的细节,即我们提供了概念或项的更特定的视图。
因为类是一种抽象,它可以在很多不同的细节级别上并以一系列不同的方式(例如,作为一个操作列表、作为一个状态序列、作为一系列协作)来观察,所以OO度量用类的测度(例如,每个应用的每个类的实例数、每个应用的参数化类数,以及参数化类和非参数化类的比率)来表示抽象。
单选题
用例从用户角度描述系统的行为。用例之间可以存在一定的关系。在“某图书馆管理系统”用例模型中,所有用户使用系统之前必须通过“身份验证”,“身份验证”有“密码验证”和“智能卡验证”两种方式,则“身份验证”与“密码验证”和“智能卡验证”之间是{{U}}
{{U}} {{/U}} {{/U}}关系。
【正确答案】
D
【答案解析】[解析] 请参考试题2的分析。