单选题 某软件项目的活动图如图所示。图中顶点表示项目里程碑,连接顶点的边表示包含的活动,则该活动图的关键路径是______,活动FG的松弛时间为______。
单选题
  • A.A-D-F-G-J
  • B.A-C-F-H-J
  • C.A-D-F-H-J
  • D.A-D-F-I-H-J
【正确答案】 C
【答案解析】
单选题
  • A.19
  • B.20
  • C.32
  • D.24
【正确答案】 B
【答案解析】[解析] 本题主要考查项目活动图。这类题目是考试中常考的知识点,大家一定要掌握。而对于这类题目的考查,主要会考查关键路径、关键路径长度、某结点最早或最晚开始时间,以及某活动的松弛时间。 关键路径是图中从起点到终点长度最长的那条路径,而关键路径的长度则是整个项目的工期。对于关键路径的求解,可以用观察法,比如在本题中,我们通过看图不难发现,路径A-D-F-H-J的长度为48,是最长的一条路径,因此它就是关键路径。 如果对观察法不熟练的话,也可以用计算的方法来求解,这样就要求出每个结点的最早开始时间和最晚开始时间,然后最早开始时间和最晚开始时间相等的结点就是关键路径上的点,这样也能求出关键路径及关键路径长度。 求每个结点最早开始时间时,采用顺推,从起点出发,起点的最早开始时间为0,那么要求B的最早开始时间,用0+3=3即可,另外要注意,如果要求F点的最早开始时间,因为有两个箭头指向了它,那么就要分别将这两条路径的最早开始时间都计算出来,然后取较大的一个,从C到F的最早开始时间是10,而从D到F的最早开始时间是18,因此F的最早开始时间是18。 而要求每个结点最晚开始时间时,则采用逆推,从终点出发,终点的最晚开始时间为关键路径长度,那么要求G的最早开始时间,用48-7=41即可,另外要注意,如果要求I结点的最晚开始时间,因为有两个箭头从它出发,那么就要分别将这两条路径的最晚开始时间都计算出来,然后取较小的一个,从J到I的最晚开始时间是48-12=36,而从H到I的最晚开始时间是48-10-1=37,因此I的最晚开始时间是36,否则就会影响整个项目的工期。 而要求活动的松弛时间,就要求出活动的最早开始时间和最晚开始时间,其最晚开始时间减去最早开始时间,就是活动的松弛时间。对于活动FG,其最早开始时间是10+8=18,而最晚开始时间48-7-3=38,因此该活动的松弛时间是20。
单选题 在面向对象技术中,有多种不同的多态形式,其中参数多态和______称为通用多态。
  • A.重置多态
  • B.过载多态
  • C.隐含多态
  • D.包含多态
【正确答案】 D
【答案解析】[解析] 在面向对象技术中,对象在收到消息后要予以响应,不同的对象收到同一消息可产生完全不同的结果,这一现象称为多态。多态有多种不同的形式,其中参数多态和包含多态称为通用多态,过载多态和强制多态成为特定多态。 参数多态应用比较广泛,被称为最纯的多态。这是因为同一对象、函数或过程能以一致的形式用于不同的类型。包含多态最常见的例子就是子类型化,即一个类型是另一类型的子类型。过载多态是同一变量被用来表示不同的功能,通过上下文以决定一个类所代表的功能。即通过语法对不同语义的对象使用相同的名,编译能够消除这一模糊。强制多态是通过语义操作把一个变元的类型加以变换,以符合一个函数的要求,如果不做这一强制性变换将出现类型错误。类型的变换可在编译时完成,通常是隐式地进行,当然也可以在动态运行时来做。
单选题 以下描述中,不正确的是______。
  • A.类是对象的抽象,对象是类的实例
  • B.类是一组具有相同属性和方法的对象的集合
  • C.每个类都可以被实例化
  • D.对象是指一组属性及这组属性上的专用操作的封装体
【正确答案】 C
【答案解析】[解析] 本题主要考查类和对象的概念。 在计算机系统中,对象是指一组属性及这组属性上的专用操作的封装体,它由对象标识(名称)、属性(状态、数据、成员变量,也可以是另一个对象)和服务(操作、行为、方法)三个要素组成。对象是系统中用来描述客观事物的一个实体,它们被封装为一个整体,以接口的形式对外提供服务。 而类是一组具有相同属性和方法的对象抽象。一个类中的每个对象都是这个类的一个实例。在系统分析和设计时,通常要把注意力集中在类上,而不是具体的对象上。每个类一般都有实例,没有实例的类是抽象类。抽象类不能被实例化(不能用new关键字去产生对象),抽象方法只需声明,而无须实现。是否建立了丰富的类库是衡量一个OO程序设计语言成熟与否的重要标志之一。
单选题 在UML的通用机制中,______是系统中遵从一组接口规范且付诸实现的物理、可替换的软件模块。
  • A.包
  • B.类
  • C.接口
  • D.构件
【正确答案】 D
【答案解析】[解析] 在UML中,把组织模型的组块称为包。包是用于把元素组织成组的通用机制,有助于组织模型中的元素,使得对它们的理解变得更容易,也使得用户能够控制对包的内容的访问,从而控制系统体系结构中的接缝。 接口是描述某个类或构件的一个服务操作集。也就是说,接口是类或构件对其他类或构件提供的功能、操作、行为。 构件是系统中遵从一组接口且提供实现的物理、可替换的部分。可以利用构件为可能存在于结点上的物理事物(如可执行体、库、表、文件及文档等)进行建模。一般情况下,构件表示将类、接口和协作等逻辑元素打包而形成的物理模块。好的构件应采用定义良好的接口来定义灵活的抽象,以便将来可以用更新且接口兼容的构件来替换较旧的构件。
单选题 UML的事物是对模型中最具有代表性的成分的抽象,______是模型的动态部分,描述了跨越时间和空间的行为。
  • A.结构事物
  • B.分组事物
  • C.行为事物
  • D.注释事物
【正确答案】 C
【答案解析】[解析] 本题考查面向对象建模语言中的事物概念。 在UML中,有4种事物: (1)结构事物是UML模型中的名词。它们通常是模型的静态部分,描述概念或物理元素。 (2)行为事物是UML模型的动态部分。它们是模型中的动词,描述了跨越时间和空间的行为。 (3)分组事物是UML模型的组织部分。它们是一些由模型分解成的“盒子”。 (4)注释事物是UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。
单选题 下列有关面向对象方面的描述,不正确的是______。
  • A.面向对象要求针对接口编程,而不要针对实现编程
  • B.接口与实现不可分割
  • C.设计职责单一的类
  • D.尽量使用已有的类库
【正确答案】 B
【答案解析】[解析] 本题主要考查面向对象的基本知识。 “针对接口编程,而不是针对实现编程”是面向对象设计的7大原则之一,遵循此原则有以下几个方面的好处。 (1)使用者不必知道其使用对象的具体所属类。 (2)使用者无须知道特定类,只需知道它们所期望的接口。 (3)一个对象可以很容易地被(实现了相同接口的)另一个对象所替换。 (4)对象间的连接不必硬绑定到一个具体类的对象上,因此增加了灵活性。 另外,在这种方式下,接口与实现是可以分割的,这样利于变化,也符合面向对象的根本意图(便于需求的改变)。 设计职责单一的类也是7大设计原则中的一个,因为如果一个类有一个以上的职责,这些职责就耦合在了一起,这会导致脆弱的设计。比如,当一个职责发生变化时,就可能会影响其他的职责。另外,多个职责耦合在一起,也会影响程序的复用性。 类库,简单地说,就是很多类的集合,而这些类都是已经定义好的了,在编程时,可以直接使用,使用类库的好处主要有两个:一个是可以减少出差的概率;另外一个是可以节省大量的时间和经历。因此,如果有类库可供使用,肯定是要尽量使用已有的类库。
单选题 已知两个类O、P,类O中定义了一个私有方法F1和一个公有方法F2;类P中定义了一个公有方法F3,类P为类O的派生类。它们的继承方式如下所示。
class P:private O{...};
在关于类P的描述中正确的是______。
  • 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
单选题 下来关于面向对象分析和设计的描述中,错误的是______。
  • A.组织并确定对象关系是面向对象设计阶段的活动
  • B.发现并确定业务对象是面向对象分析阶段的活动
  • C.建模系统功能是面向对象分析阶段的活动
  • D.确定对象间的通信方式是面向对象设计阶段的活动
【正确答案】 A
【答案解析】[解析] 本题考查面向对象分析与设计的活动。 面向对象分析基于用例模型,通过对象建模记录确定的对象、对象封装的数据和行为以及对象之间的关系。面向对象分析包括3个活动:建模系统功能,发现并且确定业务对象,组织对象并确定其关系。 面向对象设计是在分析对象模型的基础上,设计各个对象、对象之间的关系(如层次关系、继承关系等)和通信方式(如消息模式)等,其主要作用是对OOA的结果作进一步的规范化整理。
单选题 已知f1,f2是同一个类的两个成员函数,但f1不能调用f2,说明______。
  • 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。
单选题 在UML的5大系统视图中,______是可执行线程和进程作为活动类的建模。
  • A.逻辑视图
  • B.进程视图
  • C.部署视图
  • D.用例视图
【正确答案】 B
【答案解析】[解析] UML对系统架构的定义是系统的组织结构,包括系统分解的组成部分,以及它们的关联性、交互机制和指导原则等提供系统设计的信息。具体来说,就是指以下5个系统视图: (1)逻辑视图。逻辑视图也称为设计视图,表示设计模型中在架构方面具有重要意义的部分,即类、子系统、包和用例实现的子集。 (2)进程视图。进程视图是可执行线程和进程作为活动类的建模,是逻辑视图的一次执行实例,描述了并发与同步结构。 (3)实现视图。实现视图对组成基于系统的物理代码的文件和构件进行建模。 (4)部署视图。部署视图把构件部署到一组物理结点上,表示软件到硬件的映射和分布结构。 (5)用例视图。用例视图是最基本的需求分析模型。
单选题 以下关于C++中构造函数和析构函数的描述中,错误的是______。
  • A.构造函数的函数名必须与类名相同
  • B.构造函数的返回类型是void类型
  • C.析构函数无形参,也不可被重载
  • D.一个类只能有一个析构函数,但可以有多个构造函数
【正确答案】 B
【答案解析】[解析] 在定义一个对象的同时,希望能给它的数据成员赋初值——对象的初始化。在特定对象使用结束时,还经常需要进行一些清理工作。C++程序中的初始化和清理工作分别由两个特殊的成员函数来完成,它们就是构造函数和析构函数。 构造函数是与类名相同的,在建立对象时自动调用的函数。如果在定义类时,没有为类定义构造函数,编译系统就生成一个默认形式的隐含的构造函数,这个构造函数的函数体是空的,因此默认构造函数不具备任何功能。构造函数是类的一个成员函数,除了具有一般成员函数的特征之外,还归纳出如下特殊的性质: (1)构造函数的函数名必须与定义它的类同名。 (2)构造函数没有返回值。如果在构造函数前加void是错误的。 (3)构造函数被声明定义为公有函数。 (4)构造函数在建立对象时由系统自动调用。 析构函数也译作拆构函数,是在对象消失之前的瞬间自动调用的函数,析构函数具有以下特点: (1)析构函数没有任何参数,不能被重载,但可以是虚函数,一个类只有一个析构函数。 (2)析构函数没有返回值。 (3)析构函数名与类名相同,但在类名前加上一个逻辑非运算符“~”,以示与构造函数对比区别。 (4)析构函数一般由用户自己定义,在对象消失时由系统自动调用,如果用户没有定义析构函数,系统将自动生成一个不做任何事的默认析构函数。
单选题 某ATM自动取款机系统中,“查询余额”和“取现”两个用例都需要检查用户的验证码是否正确,为此定义一个通用的用例“核查验证码”。那么用例“查询余额”和“取现”与用例“核查验证码”之间是______。
  • A.包含关系
  • B.扩展关系
  • C.泛化关系
  • D.关联关系
【正确答案】 A
【答案解析】[解析] 本题考查用例之间的基本关系。 用例之间存在3种关系,分别是包含关系、扩展关系和泛化关系。 包含关系。当可以从两个或两个以上的用例中提取公共行为时,应该使用包含关系来表示它们。其中这个提取出来的公共用例称为抽象用例,而把原始用例称为基本用例或基础用例。包含关系的一个重要特征,就是被抽象出来的用例是基础用例必须的部分,不能或缺。本题的描述就是一个包含关系。 扩展关系。如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰。扩展关系的一个重要特征,就是抽取的用例相对于基础用例来说不是必须的。 泛化关系。当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系。例如,某学员进行课程注册时,假设既可以通过现场注册,也可以通过网上注册,则“注册课程”用例就是“现场注册”用例和“网上注册”用例的泛化。
单选题 在UML的建模机制中,______描述了对象之间动态的交互关系,还描述了交互的对象之间的静态链接关系,即同时反映系统的动态和静态牲。
  • 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。
单选题 在常见的UML图中,下列属于结构性视图的是______。
①对象图 ③用例图 ③包图 ④定时图
⑤构件图 ⑥部署图 ⑦类图 ⑧状态图
  • A.①②③⑤⑦
  • B.①③④⑤⑥⑦
  • C.①③⑤⑥⑦
  • D.①③④⑥⑦⑧
【正确答案】 C
【答案解析】[解析] 本题主要考查UML图的分类。UML2.0中的14种视图可以分为结构性视图(静态)和行为性视图(动态)两种。结构领域主要是对系统中的结构成员及其相互关系进行描述;而行为领域则描述了系统随时间变化的行为。 结构性视图包括类图、对象图、包图、组合结构图、构件图、部署图和制品图,而行为性视图包括用例图、顺序图、通信图、定时图、状态图、活动图、交互概览图。其中顺序图、通信图、定时图和交互概览图又统称为交互图。 综上所述,可知本题答案选C。
单选题 遵守面向对象设计原则可以有效地提高系统的复用性和可维护性。应用______原则可扩展已有的系统,并为之提供新的行为。
  • 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)迪米特原则:指一个对象应该对于其他对象有最少的了解,这样做的好处就是可以有效地降低类之间的耦合要求。
单选题 以下关于设计模式的描述中,不正确的是______。
  • A.使用设计模式的主要目的是复用成功的设计和体系结构
  • B.设计模式具有适应需求变化的优点
  • C.设计模式可以改善代码的平台可移植性
  • D.设计模式可以减少方案出错的可能性
【正确答案】 C
【答案解析】[解析] 此题考的是设计模式基本概念,要求考生清楚设计模式的作用和特点。 模式是一种问题的解决思路,已经适用于一个实践环境,并且可以适用于其他环境。设计模式通常是对于某一类软件设计问题的可重用的解决方案,将设计模式引入软件设计和开发过程,其目的就在于要重用软件开发经验。 设计模式主要有以下几个方面的作用: (1)重用设计,重用设计比重用代码更有意义,它会自动带来代码重用。 (2)为设计提供共同的词汇,每个模式名就是一个设计词汇,其概念是的程序员间的交流更加方便。 (3)在开发文档中采用模式词汇可以让其他人更容易理解你的想法和做法,编写开发文档也更加容易。 (4)应用设计模式可以让重构系统变得容易,可确保开发正确的代码,并降低在设计或实现中出现错误的可能。 (5)支持变化,可以为重写其他应用程序提供很好的系统架构。 (6)正确使用设计模式,可以节省大量时间。 另外,设计模式还有适应需求变化的优点,如职责链模式,当系统业务流程有变化时,只需要很少的调整即可达到目的。
单选题 ______主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为。
  • A.边界类
  • B.存储类
  • C.抽象类
  • D.实体类
【正确答案】 A
【答案解析】[解析] 本题主要考查类的分类。根据不同的作用,类可以分为边界类、抽象类、实体类三种,其中: 边界类描述的是系统外部环境和系统内部运作之间的交互,它工作在参与者和系统之间,而边界对象表示的为一个交互接口。 实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关,实体类独立于系统外部环境(Actor)。 控制类描述的是特定用例的控制行为,与特定的用例实现密切相关,可以说它就是在执行用例实现,控制类可以有效地降低边界类和实体类之间的耦合,使系统对于外部环境的变化具有良好的适应性。
单选题 ______使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  • A.Adapter(适配器)
  • B.Iterator(迭代器)
  • C.Prototype(原型)
  • D.Observer(观察者)
【正确答案】 A
【答案解析】[解析] 本题主要考查各设计模式的基本概念和作用。 (1)Adapter(适配器)设计模式的意图是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适用性:想使用一个已经存在的类,而它的接口不符合需求。 想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。(仅适用于对象Adapter)想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 (2)Prototype(原型)设计模式的意图是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 适用性:当要实例化的类是在运行时刻指定时。例如,通过动态装载;或为了避免创建一个与产品类层次平行的工厂类层次时;或当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。 (3)Iterator(迭代器)设计模式的意图是提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。 适用性:访问一个聚合对象的内容而无须暴露它的内部表示。迭代器模式支持对聚合对象的多种遍历。也为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代)。 (4)Observer(观察者)设计模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性:当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这两者封装在独立的对象中以使它们可以各自独立地改变和复用。以下两种情况比较适合观察者模式:一个是当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变;另一个是当一个对象必须通知其他对象,而它又不能假定其他对象是谁。换言之,你不希望这些对象是紧密耦合的。
单选题 ______是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。
  • A.封装
  • B.泛化
  • C.继承
  • D.多态
【正确答案】 D
【答案解析】[解析] 本题考查面向对象的方法学知识,是常考的知识点。面向对象的三大特点就是封装、继承和多态。 封装性是一种信息隐蔽技术,使系统分析员能够清晰地标明他们所提供的服务界面,用户和应用程序员则只看得见对象提供的操作功能(即封装面上的信息),看不到其中的数据或操作代码细节。封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。 多态性是指一般类中定义的属性或服务被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,通常是使用重载和改写两项技术来实现的。简单地说,就是同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。 继承是指在某个类的层次关联中,不同的类共享属性和操作的一种机制。一个父类可以有多个子类。父类描述了这些子类的公共属性和操作,子类中还可以定义其自己的属性和操作。如果一个子类只有唯一的一个父类,这种继承称为单一继承。如果一个子类有多个父类,可以从多个父类中继承特性,这种继承称为多重继承。 泛化与继承是类似的,只是方向相反,继承用来说明特殊类(子类)与一般类(父类)的关系,而泛化则用来说明一般类与特殊类之间的关系。