您好,欢迎来到暴趣科技网。
搜索
您的当前位置:首页软件水平考试(中级)软件设计师上午(基础知识)试题模拟试卷81(

软件水平考试(中级)软件设计师上午(基础知识)试题模拟试卷81(

来源:暴趣科技网


软件水平考试(中级)软件设计师上午(基础知识)试题模拟试卷

81 (题后含答案及解析)

题型有:1. 选择题

选择题(每小题1分,共75分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将此选项涂写在答题卡相应位置上,答在试卷上不得分。

1. 在面向对象技术中,有多种不同的多态形式,其中参数多态和(1)称为通用多态。

A.重置多态 B.过载多态 C.隐含多态 D.包含多态

正确答案:D

解析:在面向对象技术中,对象在收到消息后要予以响应,不同的对象收到同一消息可产生完全不同的结果,这一现象称为多态。多态有多种不同的形式,其中参数多态和包含多态称为通用多态,过载多态和强制多态成为特定多态。 参数多态应用比较广泛,被称为最纯的多态。这是因为同一对象、函数或过程能以一致的形式用于不同的类型。包含多态最常见的例子就是子类型化,即一个类型是另一类型的子类型。过载多态是同一变量被用来表示不同的功能,通过上下文以决定一个类所代表的功能。即通过语法对不同语义的对象使用相同的名,编译能够消除这一模糊。强制多态是通过语义操作把一个变元的类型加以变换,以符合一个函数的要求,如果不做这一强制性变换将出现类型错误。类型的变换可在编译时完成,通常是隐式地进行,当然也可以在动态运行时来做。 知识模块:面向对象方法

2. 以下描述中,不正确的是(2)。 A.类是对象的抽象,对象是类的实例

B.类是一组具有相同属性和方法的对象的集合 C.每个类都可以被实例化

D.对象是指一组属性及这组属性上的专用操作的封装体

正确答案:C

解析:本题主要考查类和对象的概念。 在计算机系统中,对象是指一组属性及这组属性上的专用操作的封装体,它由对象标识(名称)、属性(状态、数据、成员变量,也可以是另一个对象)和服务(操作、行为、方法)三个要素组成。对象是系统中用来描述客观事物的一个实体,它们被封装为一个整体,以接口的形式对外提供服务。 而类是一组具有相同属性和方法的对象抽象。一个类中的每个对象都是这个类的一个实例。在系统分析和设计时,通常要把注意力集中在类

上,而不是具体的对象上。每个类一般都有实例,没有实例的类是抽象类。抽象类不能被实例化(不能用new关键字去产生对象),抽象方法只需声明,而无须实现。是否建立了丰富的类库是衡量一个OO程序设计语言成熟与否的重要标志之一。 知识模块:面向对象方法

3. 在UML的通用机制中,(3)是系统中遵从一组接口规范且付诸实现的物理、司替换的软件模块。

A.包 B.类 C.接口 D.构件

正确答案:D

解析:在UML中,把组织模型的组块称为包。包是用于把元素组织成组的通用机制,有助于组织模型中的元素,使得对它们的理解变得更容易,也使得用户能够控制对包的内容的访问,从而控制系统体系结构中的接缝。 接口是描述某个类或构件的一个服务操作集。也就是说,接口是类或构件对其他类或构件提供的功能、操作、行为。 构件是系统中遵从一组接口且提供实现的物理、可替换的部分。可以利用构件为可能存在于结点上的物理事物(如可执行体、库、表、文件及文档等)进行建模。一般情况下,构件表示将类、接口和协作等逻辑元素打包而形成的物理模块。好的构件应采用定义良好的接口来定义灵活的抽象,以便将来可以用更新且接口兼容的构件来替换较旧的构件。 知识模块:面向对象方法

4. UML的事物是对模型中最具有代表性的成分的抽象,(4)是模型的动态部分,描述了跨越时间和空间的行为。

A.结构事物 B.分组事物 C.行为事物 D.注释事物

正确答案:C

解析:本题考查面向对象建模语言中的事物概念。 在UML中,有4种事物: (1)结构事物是UML模型中的名词。它们通常是模型的静态部分,描述概念或物理元素。 (2)行为事物是UML模型的动态部分。它们是模型中的动词,描述了跨越时间和空间的行为。 (3)分组事物是UML模型的组织部分。它们是一些由模型分解成的“盒子”。 (4)注释事物是UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。 知识模块:面向对象方法

5. 下列有关面向对象方面的描述,不正确的是(5)。 A.面向对象要求针对接口编程,而不要针对实现编程 B.接口与实现不可分割 C.设计职责单一的类

D.尽量使用已有的类库

正确答案:B

解析:本题主要考查面向对象的基本知识。 “针对接口编程,而不是针对实现编程”是面向对象设计的7大原则之一,遵循此原则有以下几个方面的好处。 (1)使用者不必知道其使用对象的具体所属类。 (2)使用者无须知道特定类,只需知道它们所期望的接口。 (3)一个对象可以很容易地被(实现了相同接口的)另一个对象所替换。 (4)对象间的连接不必硬绑定到一个具体类的对象上,因此增加了灵活性。 另外,在这种方式下,接口与实现是可以分割的,这样利于变化,也符合面向对象的根本意图(便于需求的改变)。 设计职责单一的类也是7大设计原则中的一个,因为如果一个类有一个以上的职责,这些职责就耦合在了一起,这会导致脆弱的设计。比如,当一个职责发生变化时,就可能会影响其他的职责。另外,多个职责耦合在一起,也会影响程序的复用性。 类库,简单地说,就是很多类的集合,而这些类都是已经定义好的了,在编程时,可以直接使用,使用类库的好处主要有两个:一个是可以减少出差的概率;另外一个是可以节省大量的时间和经历。因此,如果有类库可供使用,肯定是要尽量使用已有的类库。 知识模块:面向对象方法

6. 已知两个类O、P,类O中定义了一个私有方法F1和一个公有方法F2;类P中定义了一个公有方法F3,类P为类O的派生类。它们的继承方式如下所示。 class P:private O{...}; 在关于类P的描述中正确的是(6)。

A.类P的对象可以访问F1,但不能访问F2 B.类P的对象可以访问F2,但不能访问F1 C.类P的对象既可以访问F1,也可以访问F2 D.类P的对象既不能访问F1,也不能访问F2

正确答案:D

解析:本题主要考查继承中的一些基本知识。 在C++中,类的继承主要有如下3种方式: (1)公有继承(public)。公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的。因此在公有继承时,派生类的对象可以访问基类中的公有成员,派生类的成员函数可以访问基类中的公有成员和保护成员。 (2)私有继承(private)。私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。 (3)保护继承(protected)。保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。 总的来说,基类成员对派生类的对象来说,是否能被访问,就要看基类的成员在派生类中变成了什么类型的成员。例如,私有继承时,基类的公有成员和私有成员都变成了派生类中的私有成员,因此对于派生类中的对象来说基类的公有成员和私有成员就是不可见的。 在本题中,由于类P是对类O的私有继承,因此将类O的公有成员和私有成员都变成了派生类中的私有成员,因此类P的对象无法访问F1,也无法访问F2。 知识模块:面向对象方法

7. 下列关于面向对象

A.组织并确定对象关系是面向对象设计阶段的活动 B.发现并确定业务对象是面向对象分析阶段的活动 C.建模系统功能是面向对象分析阶段的活动

D.确定对象间的通信方式是面向对象设计阶段的活动

正确答案:A 解析:本题考查面向对象分析与设计的活动。 面向对象分析基于用例模型,通过对象建模记录确定的对象、对象封装的数据和行为以及对象之间的关系。面向对象分析包括3个活动:建模系统功能,发现并且确定业务对象,组织对象并确定其关系。面向对象设计是在分析对象模型的基础上,设计各个对象、对象之间的关系(如层次关系、继承关系等)和通信方式(如消息模式)等,其主要作用是对OOA的结果作进一步的规范化整理。 知识模块:面向对象方法

8. 已知f1,f2是同一个类的两个成员函数,但f1不能调用f2,说明(8)。 A.f1、f2都是静态成员函数

B.f1是静态成员函数,f2不是静态成员函数 C.f1不是静态成员函数,f2是静态成员函数 D.f1、f2都不是静态成员函数

正确答案:B 解析:本题主要考查静态数据成员的内容。 类的静态成员与一般的类成员不同,静态成员与对象的实例无关,只与类本身有关。它们一般用来实现类要封装的功能和数据,但不包括特定对象的功能和数据。静态成员和普通数据成员区别较大,体现在下面几点: (1)普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存。静态数据成员属于整个类,即使没有任何对象创建,类的静态数据成员变量也存在。 (2)外部访问类的静态成员只能通过类名来访问。 (3)类的静态成员函数无法直接访问普通数据成员(可以通过类的指针等作为参数间接访问),而类的任何成员函数都可以访问类的静态数据成员。 (4)类的静态方法只能访问该类的静态数据成员。 另外,静态成员和类的普通成员一样,也具有public、protected、private3种访问级别,也可以具有返回值及被修改等性质。 而在本题中,虽然f1和f2都是同一个类的成员函数,但f1不能调用f2,如果它们都是普通成员函数,那么肯定是可以调用;如果它们都是静态成员函数,也可以调用;如果f1是静态成员函数,而f2不是的话,那么这种情况下,f1不能调用f2;如果f1不是静态成员函数,而f2是的话,那么这种情况下,f1也能调用f2。 综上所述,可知本题的答案选B。 知识模块:面向对象方法

9. 在UML的5大系统视图中,(9)是可执行线程和进程作为活动类的建模。 A.逻辑视图 B.进程视图 C.部署视图 D.用例视图

正确答案:B

解析:UML对系统架构的定义是系统的组织结构,包括系统分解的组成部分,以及它们的关联性、交互机制和指导原则等提供系统设计的信息。具体来说,就是指以下5个系统视图: (1)逻辑视图。逻辑视图也称为设计视图,表示设计模型中在架构方面具有重要意义的部分,即类、子系统、包和用例实现的子集。 (2)进程视图。进程视图是可执行线程和进程作为活动类的建模,是逻辑视图的一次执行实例,描述了并发与同步结构。 (3)实现视图。实现视图对组成基于系统的物理代码的文件和构件进行建模。 (4)部署视图。部署视图把构件部署到一组物理结点上,表示软件到硬件的映射和分布结构。 (5)用例视图。用例视图是最基本的需求分析模型。 知识模块:面向对象方法

10. 以下关于C++中构造函数和析构函数的描述中,错误的是(10)。 A.构造函数的函数名必须与类名相同 B.构造函数的返回类型是void类型 C.析构函数无形参,也不可被重载

D.一个类只能有一个析构函数,但可以有多个构造函数

正确答案:B 解析:在定义一个对象的同时,希望能给它的数据成员赋初值——对象的初始化。在特定对象使用结束时,还经常需要进行一些清理工作。C++程序中的初始化和清理工作分别由两个特殊的成员函数来完成,它们就是构造函数和析构函数。 构造函数是与类名相同的,在建立对象时自动调用的函数。如果在定义类时,没有为类定义构造函数,编译系统就生成一个默认形式的隐含的构造函数,这个构造函数的函数体是空的,因此默认构造函数不具备任何功能。构造函数是类的一个成员函数,除了具有一般成员函数的特征之外,还归纳出如下特殊的性质: (1)构造函数的函数名必须与定义它的类同名。 (2)构造函数没有返回值。如果在构造函数前加void是错误的。 (3)构造函数被声明定义为公有函数。 (4)构造函数在建立对象时由系统自动调用。 析构函数也译作拆构函数,是在对象消失之前的瞬间自动调用的函数,析构函数具有以下特点: (1)析构函数没有任何参数,不能被重载,但可以是虚函数,一个类只有一个析构函数。 (2)析构函数没有返回值。 (3)析构函数名与类名相同,但在类名前加上一个逻辑非运算符“~”,以示与构造函数对比区别。 (4)析构函数一般由用户自己定义,在对象消失时由系统自动调用,如果用户没有定义析构函数,系统将自动生成一个不做任何事的默认析构函数。 知识模块:面向对象方法

11. 某ATM自动取款机系统中,“查询余额”和“取现”两个用例都需要检查用户的验证码是否正确,为此定义一个通用的用例“核查验证码”。那么用例“查询余额”和“取现”与用例“核查验证码”之间是(11)。

A.包含关系 B.扩展关系 C.泛化关系 D.关联关系

正确答案:A

解析:本题考查用例之间的基本关系。 用例之间存在3种关系,分别是包含关系、扩展关系和泛化关系。 包含关系。当可以从两个或两个以上的用例中提取公共行为时,应该使用包含关系来表示它们。其中这个提取出来的公共用例称为抽象用例,而把原始用例称为基本用例或基础用例。包含关系的一个重要特征,就是被抽象出来的用例是基础用例必须的部分,不能或缺。本题的描述就是一个包含关系。 扩展关系。如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰。扩展关系的一个重要特征,就是抽取的用例相对于基础用例来说不是必须的。 泛化关系。当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系。例如,某学员进行课程注册时,假设既可以通过现场注册,也可以通过网上注册,则“注册课程”用例就是“现场注册”用例和“网上注册”用例的泛化。 知识模块:面向对象方法

12. 在UML的建模机制中,(12)描述了对象之间动态的交互关系,还描述了交互的对象之间的静态链接关系,即同时反映系统的动态和静态牲。

A.活动图 B.顺序图 C.状态图 D.协作图

正确答案:D

解析:本题主要考查UML中的图,是考试中的一个重要知识点,这里重点要理解各种图的作用和特点。 在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)。交互概览图是活动图和顺序图的混合物。 综上所述,可知本题的答案选D。 知识模块:面向对象方法

13. 在常见的UML图中,下列属于结构性视图的是(13)。 ①对象图 ②用例图 ③包图 ④定时图 ⑤构件图 ⑥部署图 ⑦类图 ⑧状态图

A.①②③⑤⑦ B.①③④⑤⑥⑦ C.①③⑤⑥⑦ D.①③④⑥⑦⑧

正确答案:C

解析:本题主要考查UML图的分类。UML2.0中的14种视图可以分为结构性视图(静态)和行为性视图(动态)两种。结构领域主要是对系统中的结构成员及其相互关系进行描述;而行为领域则描述了系统随时间变化的行为。 结构性视图包括类图、对象图、包图、组合结构图、构件图、部署图和制品图,而行为性视图包括用例图、顺序图、通信图、定时图、状态图、活动图、交互概览图。其中顺序图、通信图、定时图和交互概览图又统称为交互图。 综上所述,可知本题答案选C。 知识模块:面向对象方法

14. 遵守面向对象设计原则可以有效地提高系统的复用性和可维护性。应用(14)原则可扩展已有的系统,并为之提供新的行为。

A.开闭 B.里氏替换 C.依赖倒置 D.接口隔离

正确答案:A

解析:本题考查面向对象设计的设计原则。 面向对象设计有七大原则,分别是:单一职责原则、开放封闭原则、李氏替换原则、依赖倒置原则、接口隔离原则、组合重用原则和迪米特原则。下面我们分别简单介绍一下这些原则。 (1)单一职责原则(SRP):就一个类来说,应该仅有一个引起它变化的原因。也就是说,一个类应该只有一个职责。如果有多个职责,那么就相当于把这些指责耦合在一起,一个职责的变化就可能削弱或抑制了这个类完成其他职责的能力,引起类的变化的原因就会有多个。所以在构造一个类时,将类的不同职责分离至两个或多个类中(或者接口中),确保引起该类变化的原因只有一个。 (2)开闭原则(OCP):软件组成实体应该是可扩展的,但是不可修改。开放-封闭原则认为应该试图设计永远也不需要改变的模块。可以添加新代码来扩展系统的行为,不能对已有的代码进行修改。这个原则很好的实现了面向对象的封装性和可重用性。 (3)替换原则(LSP):子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer的DBC(Design by Contract)的概念推出。以圆和椭圆为例,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。 运用替换原则时,尽量把类B设计为抽象类或者接口,让C类继承类B(接口B)并实现操作A和操作B,运行时,类C实例替换B,这样即可进行新类的扩展(继承类B或接口B),同时无须对类A进行修改。 (4)依赖倒置原则(DIP):在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。在结构化设计中,可以看到底层的模块是对高层抽象模块的实现,这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个“硬伤”。面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。为此,在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。 (5)接口分离原则(ISP):采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。这个原则的本质相当简单。如果拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。 (6)组合重用原则:就是能用组合实现的地方,尽量用组合来实现,而不要使用继承来扩展功能,因为组合能更好地实现封装,比继承具有更大的灵活性和更稳定的结构。 (7)迪米特原则:指一个对象应该对于其他对象有最少的了解,这样做的好处就是可以有效地降低类之间的耦合要求。 知识模块:面向对象方法

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

A.使用设计模式的主要目的是复用成功的设计和体系结构 B.设计模式具有适应需求变化的优点

C.设计模式可以改善代码的平台可移植性 D.设计模式可以减少方案出错的可能性

正确答案:C 解析:此题考的是设计模式基本概念,要求考生清楚设计模式的作用和特点。 模式是一种问题的解决思路,已经适用于一个实践环境,并且可以适用于其他环境。设计模式通常是对于某一类软件设计问题的可重用的解决方案,将设计模式引入软件设计和开发过程,其目的就在于要重用软件开发经验。 设计模式主要有以下几个方面的作用: (1)重用设计,重用设计比重用代码更有意义,它会自动带来代码重用。 (2)为设计提供共同的词汇,每个模式名就是一个设计词汇,其概念是的程序员间的交流更加方便。 (3)在开发文档中采用模式词汇可以让其他人更容易理解你的想法和做法,编写开发文档也更加容易。 (4)应用设计模式可以让重构系统变得容易,可确保开发正确的代码,并降低在设计或实现中出现错误的可能。 (5)支持变化,可以为重写其他应用程序提供很好的系统架构。 (6)正确使用设计模式,可以节省大量时间。 另外,设计模式还有适应需求变化的优点,如职责链模式,当系统业务流程有变化时,只需要很少的调整即可达到目的。 知识模块:面向对象方法

16. (16)主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为。

A.边界类 B.存储类 C.抽象类 D.实体类

正确答案:A

解析:本题主要考查类的分类。根据不同的作用,类可以分为边界类、抽象类、实体类三种,其中: 边界类描述的是系统外部环境和系统内部运作之间的交互,它工作在参与者和系统之间,而边界对象表示的为一个交互接口。 实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关,实体类于系统外部环境(Actor)。 控制类描述的是特定用例的控制行为,与特定的用例实现密切相关,可以说它就是在执行用例实现,控制类可以有效地降低边界类和实体类之间的耦合,使系统对于外部环境的变化具有良好的适应性。 知识模块:面向对象方法

17. (17)使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 A.Adapter(适配器) B.Iterator(迭代器) C.Prototype(原型) D.Observer(观察者)

正确答案:A 解析:本题主要考查各设计模式的基本概念和作用。 (1)Adapter(适配器)设计模式的意图是将一个类的接口转换成客户希望的另外一个接口。Ad印ter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适用性:想使用一个已经存在的类,而它的接口不符合需求。 想创建一个可以复

用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。(仅适用于对象Adapter)想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 (2)Prototype(原型)设计模式的意图是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 适用性:当要实例化的类是在运行时刻指定时。例如,通过动态装载;或为了避免创建一个与产品类层次平行的工厂类层次时;或当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。 (3)Iterator(迭代器)设计模式的意图是提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。 适用性:访问一个聚合对象的内容而无须暴露它的内部表示。迭代器模式支持对聚合对象的多种遍历。也为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代)。 (4)Observer(观察者)设计模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性:当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这两者封装在的对象中以使它们可以各自地改变和复用。 以下两种情况比较适合观察者模式:一个是当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变;另一个是当一个对象必须通知其他对象,而它又不能假定其他对象是谁。换言之,你不希望这些对象是紧密耦合的。 知识模块:面向对象方法

18. (18)是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。

A.封装 B.泛化 C.继承 D.多态

正确答案:D

解析:本题考查面向对象的方法学知识,是常考的知识点。面向对象的三大特点就是封装、继承和多态。 封装性是一种信息隐蔽技术,使系统分析员能够清晰地标明他们所提供的服务界面,用户和应用程序员则只看得见对象提供的操作功能(即封装面上的信息),看不到其中的数据或操作代码细节。封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。 多态性是指一般类中定义的属性或服务被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,通常是使用重载和改写两项技术来实现的。简单地说,就是同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。 继承是指在某个类的层次关联中,不同的类共享属性和操作的一种机制。一个父类可以有多个子类。父类描述了这些子类的公共属性和操作,子类中还可以定义其自己的属性和操作。如果一个子类只有唯一的一个父类,这种继承称为单一继承。如果一个子类有多个父类,可以从多个父类中继承特性,这种继承称为多重继承。 泛化与继承是类似的,只是方向相反,继承用来说明特殊类(子类)与一般类(父类)的关系,而泛化则用来说明一般类与特殊类之间的关系。 知识模块:面向对象方法

19. 有两个类X和Y,那么以下描述中,不正确的是(21)。 A.修改X会引起Y的变化,那么X和Y是一种依赖关系 B.X表示一般,而Y表示特殊,那么X和Y是一种泛化关系

C.X是整体,Y是部分,且X和Y同生命周期,那么它们是组合关系 D.X是整体,Y是部分,且X和Y同生命周期,那么它们是聚合关系

正确答案:D

解析:本题主要考查类与类之间的关系,也是考试中的一个重要知识点。类与类之间的关系,常见的有依赖关系、泛化关系(继承关系)、组合关系、聚合关系、实现关系等。 (1)依赖关系。 有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,则称元素Y依赖(Dependency)于元素X。在UML中,使用带箭头的虚线表示依赖关系,如图5-4所示。 在类中,依赖由各种原因引起,例如,一个类向另一个类发消息;一个类是另一个类的数据成员;一个类是另一个类的某个操作参数。如果一个类的接口改变,它发出的任何消息可能不再合法。 (2)泛化关系。 泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说,子类是从父类继承的,而父类则是子类的泛化。在UML中,使用带空心箭头的实线表示泛化关系,箭头指向父类,如图5-5所示。 在UML中,对泛化关系有3个要求。 ①子类应与父类完全一致,父类所具有的关联、属性和操作,子类都应具有; ②子类中除了有与父类一致的信息外,还包括额外的信息; ③可以使用父类实例的地方,也可以使用子类实例。 (3)聚合关系。 聚合(Aggregation)是一种特殊形式的关联,是传递和反对称的。聚合表示类之间的关系是整体与部分的关系。例如,一辆轿车包含4个车轮、一个方向盘、一个发动机和一个底盘,就是聚合的一个例子。在UML中,使用一个带空心菱形的实线表示聚合关系,空心菱形指向的是代表“整体”的类,如图5-6所示。 (4)组合关系。 如果聚合关系中表示“部分”的类的存在与否,与表示“整体”的类有着紧密的关系,例如“公司”与“部门”之间的关系,那么就应该使用“组合”关系来表示这种关系。在UML中,使用带有实心菱形的实线表示组合关系,如图5-7所示。 由于题目指出“类A由类B的一个实例和类C的一个或多个实例构成”,所以类A与类B、类C的关系应为聚合或者组合关系,其示意图如图5-8所示。 虽然组合和聚合都是表示整体和部分的关系,但组合中整体和部分的生命周期一样,而聚合中整体和部分的生命周期不一样。 (5)实现关系。 实现关系将说明和实现联系起来。接口是对行为而非实现的说明,而类中则包含了实现的结构。一个或多个类可以实现一个接口,而每个类分别实现接口中的操作。 综上所述,可知本题的答案选D。 知识模块:面向对象方法

20. (22)除了提供可被应用程序调用的类以外,还基本实现了一个可执行的架构。

A.框架 B.标准库 C.函数库 D.类库

正确答案:A 解析:本题考查面向对象方法学的类库及框架知识。 大量的程序员都尽可能多地利用现有的代码。程序员经常购买那些包装成库的代码。当C语言流行时,代码库就是函数库。例如,可以购买一个数学库,该库含有完成微积分和代数运算的函数。通常,可以在程序代码中使用一个包含文件来指定一个函数库,可以静态或动态地链接这个函数库。静态链接意味着库代码直接集成到程序中。在这种情况下,程序不依赖于其他文件,但文件的大小可能很大。动态链接意味着程序有库的版本信息,其代码存放于一个单独的文件中,这个文件称为动态链接库(DLL)。只有程序运行期间调用DLL中的函数时,才加载DLL到内存。DLL作为一个的实体存在于内存中,可以同时被多个程序访问。 出现C++后,函数库转变为类库。两者的区别在于函数库只包含一系列函数,而类库是用面向对象编程的原理设计的。例如,可以为数据结构做一个类库,该库包括一个链接列表的类。如果使用一个函数库代替,那么链接列表会于操作它的函数。另一方面,使用类库时,链接列表和操作它的函数存在于同一个文件的同一个类中。然而,正如使用函数库一样,使用类库涉及包含文件和链接一个静态库。最近,已经从类库发展到模板库。其原因是C++编译器现在已经能够处理C++模板。模板库提供了一系列优于类库的优点。要使用模板库,只要在程序中加入包含文件即可,不用链接到库,因为所有的库代码已经包含在该包含文件中了。Visual C有三个供开发者使用的库:一个类库(MFC),两个模板库(ATL和STL)。 框架是对于那些试图在所关心的领域构造一个复杂软件系统的用户而言的。因为它是处于特定领域中,所以应用系统的体系结构在许多不同的方面具有一定的相似性。框架利用一系列的对象和它们之间的接口来对应静态和恒定结构的端口,并保留友好界面使用户能够很容易完成变化的、不稳定的剩余部分而得到一个新应用程序。任何框架都是特定领域的框架,一个框架可以包含一个或多个模式。 框架是一种软件重用技术,是一个应用软件系统的部分或整体的可重用设计。框架的具体表现为一组抽象类以及其实例(对象)之间的相互作用方式。它是对于一个软件系统的全部或部分的可复用设计。 在一个专用领域内构造框架时,把握框架的共同点是关键因素。框架一旦被建立,其适应性和可扩展性就被提到了首要地位。框架的直接目的是被复用,以减少建立一个新应用系统的工作量。只有当理解一个框架的代价少于建立一个新系统的代价时,框架的复用才成为可能。构造框架是一个逐渐积累的过程,就是说不断有新发现的共同点和新的构件被加入,同时那些老的、不必要的部件被删除,以此来保证整个应用系统的性能,这样新旧构件之间的接口直接影响框架的适应性和可扩展性。任何框架都不能被直接复用,除非要建立的应用系统非常简单或与框架极为相似,除此之外,都要对框架进行或多或少的修改和扩展才能被复用。 框架和类库的一些主要区别与联系如下: ①在类库中是由用户实例化抽象类,类库构件被单独使用;而在框架中要有抽象类的一些具体子类,应用软件开发者通过修改现存的类或定义新的子类以扩展现存的类来使用框架。 ②在类库中是用户在需要的时候调用函数,不预定义控制流;而框架使用了与用户之间的反向控制流,使用框架时,通常只是实现一些回调函数或使一些类适用于上下文,然后调用一个单一的方法或过程,框架将完成其余的工作,在适当的时候和地点调用必要的函数或方法。这就是框架的Hollywood法则(“Don’t call us,w’ll call you”)。 ③使用类库只需要了解类的外部接口,但必须要定义应用软件的整体结构;而框架的使

用者要了解框架的抽象设计和类的内部结构来进行修改和扩展,因此学习框架要比类库更加困难,同时有被错误使用的危险,但框架被复用的潜力大大超过了类库。 ④在类库中没有定义缺省行为,而在框架中提供缺省行为。 知识模块:面向对象方法

21. 当(23)时,用例是捕获系统需求最好的选择。 A.系统具有很少的用户 B.系统具有很少的接口 C.系统算法复杂,功能单一 D.系统有很多参与者

正确答案:D 解析:本题主要考查用例的基本知识。 用例描述的是用户与系统的交互,是开发者与用户交流的工具,可用来很好地定义系统的边界。 参与者(角色、动作者、执行者)是指存在于系统外部并与系统进行交互的任何事物,既可以是使用系统的用户,也可以是其他外部系统和设备等外部实体。 当系统参与者较多时候,用例图能很好地描述出各参与者与系统的交换关系,其实就是系统应该要完成的功能。因此,在系统有很多参与者时,采用用例能够较好地捕获系统需求。 知识模块:面向对象方法

22. UML中接口可用于(24)。

A.提供构造型(stereotype)名称为《tefface》的具体类 B.Java和C++程序设计中,而C#程序设计中不支持 C.定义可以在多个类中重用的可执行逻辑 D.声明对象类所需要的服务

正确答案:D 解析:本题主要考查对接口的理解。 接口是描述某个类或构件的一个服务操作集,在接口中可以声明对象类所需要的服务。而接口不仅可以在Java和C++程序设计中,也可以在C#等各种程序设计中使用。 知识模块:面向对象方法

23. 下列模式中,属于行为模式的是(25)。 A.原型模式 B.访问者模式 C.桥接模式 D.以上都不是

正确答案:B

解析:设计模式可以分为创建型、结构型和行为型模式。其中,创建型模式对类的实例化过程进行了抽象,能够使软件模块做到与对象的创建和组织无关;结构型模式描述类和对象之间如何进行有效的组织,以形成良好的软件体系结构,主要的方法是使用继承关系来组织各个类,一个最容易的例子就是如何用多个继承组织两个以上的类,结果产生的类结合了父类所有的属性,结构型模式特

别适用于和的类库一起工作;行为型设计模式描述类和对象之间如何交互以及如何分配职责,实际上它所牵涉的不仅仅是类或对象的设计模式,还有它们之间的通信模式。 常见的创建型模式主要有工厂方法(Factory Method)、抽象工厂(Abstract Factory)、单例(Singleton)、构建(Builder)、原型(Prototype)模式;结构型模式有适配器(Adapter)、合成(Composite)、装饰(Decorator)、代理(Proxy)、享元(Flyweight)、门面(Facade)、桥接(Bridge)模式;行为型模式有策略(Strategy)、模板方法(Template Method)、迭代器(Iterator)、责任链(Chain of Responsibility)、命令(Command)、备忘录(Memento)、状态(State)、访问者(Visitor)、解释器((Interpreter)、调停者(Mediator)、观察者(Observer) 模式。 知识模块:面向对象方法

24. 对于场景:一个公司负责多个项目,每个项目(Project)由一个员工(Employee)团队(Team)来开发。下列UML概念图中,(26)最适合描述这一场景。

A.图A B.图B C.图C D.图D

正确答案:B

解析:本题主要考查类图和多重度的知识。 在UML中,关联的多重度是指一个类的实例能够与另一个类的多少个实例相关联。它又称为重复度。多重度表示为一个整数范围n..m,整数n定义所连接的最少对象的数目,而m则为最多对象数(当不知道确切的最大数时,最大数用*号表示)。最常见的多重性有0..1、0..*、1和1..*。 在本题中,根据题目的描述,不难看出有4个类,而且由描述“一个公司负责多个项目”可知,公司和项目两个类之间的关联是一种一对多的关联,即项目端是多端,这样就可以排除答案C,另外公司和项目之间并不是一种继承的关系,这样就可以排除答案D。 而在A和B选项间,它们的区别就在于A的关联牵涉了3个类,但其实这种表达方式是不存在的,而B选项中很好地表明了题目的意思,即一个项目由一个团队来开发而团队中的成员个数至少是一个,或者是多个。 知识模块:面向对象方法

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

A.②④ B.①②③④ C.①②④ D.①②

正确答案:C

解析:对象是一组属性及这组属性上的专用操作的封装体,由对象标识、属性和服务三个要素组成。它是系统用来描述客观事物的一个实体,所以对象肯定是定义好了相关行为和边界的,另外对象还应该具有可扩展性的特点,这样就可以方便地为对象添加一些新的功能,继承和组合都可以实现其可扩展性。 知识模块:面向对象方法

26. UML序列图是一种交互图,描述了系统中对象之间传递消息的时间次序。其中,异步消息与同步消息不同,异步消息并不引起调用者终止执行而等待控制权的返回。图5-2中(28)分别表示一条同步消息和一条异步消息。

A.1和4 B.2和3 C.1和3 D.2和4

正确答案:C

解析:在本题中,首先要理解同步消息与异步消息的区别。如果一个对象发送了一个同步消息,那么它要等待对方对消息的应答,收到应答后才能继续自己的操作。发送异步消息的对象不需要等待对方对消息的应答便可以继续自己的操作。 在本题中,1表示的是同步消息,而2表示的是返回消息,3表示的是异步消息。一般情况下,在顺序图中,同步消息、异步消息、返回消息都是用本题图中的箭头表示,请注意它们的区别。 知识模块:面向对象方法

(19)设计模式将抽象部分与它的实现部分相分离,使它们都可以地变化。图5-1为该设计模式的类图,其中,(20)用于定义实现部分的接口。

27. (19)

A.Singleton(单件) B.Bridge(桥接) C.Composite(组合) D.Facade(外观)

正确答案:B 涉及知识点:面向对象方法

28. (20) A.Abstraction

B.ConcretelmplementorA C.ConcretelmplementorB D.Implementor

正确答案:D 解析:本题主要考查设计模式的知识,这种题型是考试中常见的题型。 桥接模式的意图是将抽象部分与它的实现部分分离,使它们都可以地变化。 桥接模式的适用性如下: (1)避免抽象方法和实现方法绑定在一起。 (2)类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。 (3)对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。 (4)想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。 桥接模式是把继承关系变成合成/聚合关系。手机可以按照品牌来分类,

则有手机品牌M,手机品牌N之分,现在的每个手机都有很多软件,如通信录,手机游戏等。运用桥接模式,可把手机系统划分为品牌和软件,使它们可以的变化。 而本题中给出的类图就是桥接模式的结构图。其中: Abstraction:抽象类定义抽象类的接口。维护一个Implementor(实现抽象类)的对象。 RefinedAbstraction:扩充的抽象类,扩充由Abstraction定义的接口。 Implementor:实现类接口,定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般地讲Implementor接口仅仅给出基本操作,而Abstraction接口则会给出很多更复杂的操作。 Concretelmplementor:具体实现类,实现Implementor定义的接口并且具体实现它。 桥接模式可以从接口中分离实现功能,使得设计更具有扩展性,这样,客户调用方法时根本不需要知道实现的细节。桥接模式的缺陷是抽象类和实现类的双向连接使得运行速度减慢。 单例(Singleton)模式确保其一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自选创建这个实例;三是它必须自行向整个系统提供这个实例。 组合(Composite)设计模式组合多个对象形成树形结构以表示整体一部分的结构层次。合成模式对单个对象和合成对象的使用具有一致性。 外观(Facade)模式,有称为门面模式,其提供了一个统一的接口去访问多个子系统的多个不同的接口。外观模式定义了一个高层次的接口,使得子系统更容易被使用。 知识模块:面向对象方法

(29)设计模式可以动态地给一个对象增加其他职责,而且这种方式比生成子类实现更为灵活。图5-3所示为该设计模式的类图,其中,(30)是装饰抽象类,维护一个内有的Component。

29. (29)

A.Flyweight(享元) B.Proxy(代理) C.Strategy(策略) D.Decorator(装饰)

正确答案:D 涉及知识点:面向对象方法

30. (30) A.Component

B.Concrete Component C.Decorator

D.Concrete DecoratorA

正确答案:C 解析:装饰模式的意图是动态的给一个对象增加职责,即在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式的适用性如下: (1)在不影响

其他对象的情况下,以动态、透明的方式给单个对象添加职责。处理那些可以撤销的职责。 (2)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。 本题中所给出的类图就是装饰模式的类图,其中: Component:部件,定义对象的接口,可以给这些对象动态的增加职责(方法)。 Concrete Component:具体部件,定义具体的对象,Decorator可以为它增加额外的职责(方法)。 Decorator:装饰抽象类,维护一个内有的Component,并且定义一个与Component接口一致的接口。 Concrete Decorator:具体装饰对象,给内在的具体部件对象增加具体的职责(方法)。 享元模式(轻量级模式)的意图是运用共享技术有效地支持大量细粒度的对象。系统只是用少量的对象,而这些对象都相近,状态变化很小,对象使用次数增多。 代理模式的意图是为其他对象提供一个代理或地方以控制对这个对象的访问。当客户向Proxy对象第一次提出请求时,Proxy实例化真实的对象,并且将请求传给它,以后所有客户的请求都由Proxy传递给封装了的对象。 策略模式的意图是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可于使用它的客户而变化。 另外需要注意的是,除了试题中出现的设计模式外,23种设计模式中其余的设计模式也是需要理解的内容。 知识模块:面向对象方法

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoquwan.com 版权所有 湘ICP备2024080961号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务