单选题 ______设计模式将抽象部分与它的实现部分相分离,使它们都可以独立地变化。图为该设计模式的类图,其中,______用于定义实现部分的接口。
单选题
  • A.Singleton(单件)
  • B.Bridge(桥接)
  • C.Composite(组合)
  • D.Facade(外观)
【正确答案】 B
【答案解析】
单选题
  • A.Abstraction
  • B.ConcreteImplementorA
  • C.ConcreteImplementorB
  • D.Implementor
【正确答案】 D
【答案解析】[解析] 本题主要考查设计模式的知识,这种题型是考试中常见的题型。 桥接模式的意图是将抽象部分与它的实现部分分离,使它们都可以独立地变化。 桥接模式的适用性如下: (1)避免抽象方法和实现方法绑定在一起。 (2)类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。 (3)对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。 (4)想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。 桥接模式是把继承关系变成合成/聚合关系。手机可以按照品牌来分类,则有手机品牌M,手机品牌N之分,现在的每个手机都有很多软件,如通信录,手机游戏等。运用桥接模式,可把手机系统划分为品牌和软件,使它们可以独立的变化。 而本题中给出的类图就是桥接模式的结构图。其中: Abstraction:抽象类定义抽象类的接口。维护一个Implementor(实现抽象类)的对象。 RefinedAbstraction:扩充的抽象类,扩充由Abstraction定义的接口。 Implementor:实现类接口,定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般地讲Implementor接口仅仅给出基本操作,而Abstraction接口则会给出很多更复杂的操作。 ConcreteImplementor:具体实现类,实现Implementor定义的接口并且具体实现它。 桥接模式可以从接口中分离实现功能,使得设计更具有扩展性,这样,客户调用方法时根本不需要知道实现的细节。桥接模式的缺陷是抽象类和实现类的双向连接使得运行速度减慢。 单例(Singleton)模式确保其一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自选创建这个实例;三是它必须自行向整个系统提供这个实例。 组合(Composite)设计模式组合多个对象形成树形结构以表示整体一部分的结构层次。合成模式对单个对象和合成对象的使用具有一致性。 外观(Facade)模式,有称为门面模式,其提供了一个统一的接口去访问多个子系统的多个不同的接口。外观模式定义了一个高层次的接口,使得子系统更容易被使用。
单选题 有两个类X和Y,那么以下描述中,不正确的是______。
  • 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中,使用带箭头的虚线表示依赖关系,如图1所示。
[*]
图1 依赖关系的图示

在类中,依赖由各种原因引起,例如,一个类向另一个类发消息;一个类是另一个类的数据成员;一个类是另一个类的某个操作参数。如果一个类的接口改变,它发出的任何消息可能不再合法。
(2)泛化关系。
泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说,子类是从父类继承的,而父类则是子类的泛化。在UML中,使用带空心箭头的实线表示泛化关系,箭头指向父类,如图2所示。
[*]
图2 泛化关系的图示

在UML中,对泛化关系有3个要求。
·子类应与父类完全一致,父类所具有的关联、属性和操作,子类都应具有;
·子类中除了有与父类一致的信息外,还包括额外的信息;
·可以使用父类实例的地方,也可以使用子类实例。
(3)聚合关系。
聚合(Aggregation)是一种特殊形式的关联,是传递和反对称的。聚合表示类之间的关系是整体与部分的关系。例如,一辆轿车包含4个车轮、一个方向盘、一个发动机和一个底盘,就是聚合的一个例子。在UML中,使用一个带空心菱形的实线表示聚合关系,空心菱形指向的是代表“整体”的类,如图3所示。
[*]
图3 聚合关系的图示

(4)组合关系。
如果聚合关系中表示“部分”的类的存在与否,与表示“整体”的类有着紧密的关系,例如“公司”与“部门”之间的关系,那么就应该使用“组合”关系来表示这种关系。在UML中,使用带有实心菱形的实线表示组合关系,如图4所示。
[*]
图4 组合关系的图示

由于题目指出“类A由类B的一个实例和类C的一个或多个实例构成”,所以类A与类B、类C的关系应为聚合或者组合关系,其示意图如图5所示。
[*]
图5 聚合、组合示意图

虽然组合和聚合都是表示整体和部分的关系,但组合中整体和部分的生命周期一样,而聚合中整体和部分的生命周期不一样。
(5)实现关系。
实现关系将说明和实现联系起来。接口是对行为而非实现的说明,而类中则包含了实现的结构。一个或多个类可以实现一个接口,而每个类分别实现接口中的操作。
综上所述,可知本题的答案选D。
单选题 ______除了提供可被应用程序调用的类以外,还基本实现了一个可执行的架构。
  • 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”)。 ③使用类库只需要了解类的外部接口,但必须要定义应用软件的整体结构;而框架的使用者要了解框架的抽象设计和类的内部结构来进行修改和扩展,因此学习框架要比类库更加困难,同时有被错误使用的危险,但框架被复用的潜力大大超过了类库。 ④在类库中没有定义缺省行为,而在框架中提供缺省行为。
单选题 当______时,用例是捕获系统需求最好的选择。
  • A.系统具有很少的用户
  • B.系统具有很少的接口
  • C.系统算法复杂,功能单一
  • D.系统有很多参与者
【正确答案】 D
【答案解析】[解析] 本题主要考查用例的基本知识。 用例描述的是用户与系统的交互,是开发者与用户交流的工具,可用来很好地定义系统的边界。 参与者(角色、动作者、执行者)是指存在于系统外部并与系统进行交互的任何事物,既可以是使用系统的用户,也可以是其他外部系统和设备等外部实体。 当系统参与者较多时候,用例图能很好地描述出各参与者与系统的交换关系,其实就是系统应该要完成的功能。因此,在系统有很多参与者时,采用用例能够较好地捕获系统需求。
单选题 UML中接口可用于______。
  • A.提供构造型(stereotype)名称为《terface》的具体类
  • B.Java和C++程序设计中,而C#程序设计中不支持
  • C.定义可以在多个类中重用的可执行逻辑
  • D.声明对象类所需要的服务
【正确答案】 D
【答案解析】[解析] 本题主要考查对接口的理解。 接口是描述某个类或构件的一个服务操作集,在接口中可以声明对象类所需要的服务。而接口不仅可以在Java和C++程序设计中,也可以在C#等各种程序设计中使用。
单选题 下列模式中,属于行为模式的是______。
  • 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)、观察者(Obseiver)模式。
单选题 对于场景:一个公司负责多个项目,每个项目(Project)由一个员工(Employee)团队(Team)来开发。下列UML概念图中,______最适合描述这一场景。
【正确答案】 B
【答案解析】[解析] 本题主要考查类图和多重度的知识。 在UML中,关联的多重度是指一个类的实例能够与另一个类的多少个实例相关联。它又称为重复度。多重度表示为一个整数范围n..m,整数n定义所连接的最少对象的数目,而m则为最多对象数(当不知道确切的最大数时,最大数用*号表示)。最常见的多重性有0..1、0..*、1和1..*。 在本题中,根据题目的描述,不难看出有4个类,而且由描述“一个公司负责多个项目”可知,公司和项目两个类之间的关联是一种一对多的关联,即项目端是多端,这样就可以排除答案C,另外公司和项目之间并不是一种继承的关系,这样就可以排除答案D。 而在A和B选项间,它们的区别就在于A的关联牵涉了3个类,但其实这种表达方式是不存在的,而B选项中很好地表明了题目的意思,即一个项目由一个团队来开发,而团队中的成员个数至少是一个,或者是多个。
单选题 在面向对象技术中,对象具有以下特性:______。
①清晰的边界 ②良好定义的行为 ③确定的位置和数量 ④可扩展性
  • A.②④
  • B.①②③④
  • C.①②④
  • D.①②
【正确答案】 C
【答案解析】[解析] 对象是一组属性及这组属性上的专用操作的封装体,由对象标识、属性和服务三个要素组成。它是系统用来描述客观事物的一个实体,所以对象肯定是定义好了相关行为和边界的,另外对象还应该具有可扩展性的特点,这样就可以方便地为对象添加一些新的功能,继承和组合都可以实现其可扩展性。
单选题 UML序列图是一种交互图,描述了系统中对象之间传递消息的时间次序。其中,异步消息与同步消息不同,异步消息并不引起调用者终止执行而等待控制权的返回。图中______分别表示一条同步消息和一条异步消息。
【正确答案】 C
【答案解析】[解析] 在本题中,首先要理解同步消息与异步消息的区别。如果一个对象发送了一个同步消息,那么它要等待对方对消息的应答,收到应答后才能继续自己的操作。发送异步消息的对象不需要等待对方对消息的应答便可以继续自己的操作。 在本题中,1表示的是同步消息,而2表示的是返回消息,3表示的是异步消息。一般情况下,在顺序图中,同步消息、异步消息、返回消息都是用本题图中的箭头表示,请注意它们的区别。