1、软件设计师-面向对象技术(二)及答案解析(总分:29.00,做题时间:90 分钟)1.面向对象程序设计语言中提供的继承机制可将类组织成一个_结构,以支持可重用性和可扩充性。(分数:1.00)A.栈B.星形C.层次D.总线2.在 C+语言中,若类 C 中定义了一个方法 intf(int a,int b),那么方法不能与该方法同时存在于类 C中。(分数:1.00)A.int f(int x,int y)B.int f(float a,int b)C.float f(int x,float y)D.int f(int x,float y)3.下面关于面向对象的描述正确的是_。(分数:1.00)A.针
2、对接口编程,而不是针对实现编程B.针对实现编程,而不是针对接口编程C.接口与实现不可分割D.优先使用继承而非组合4.面向对象技术中,对象是类的实例。对象有三种成分:_、属性和方法(或操作)。(分数:1.00)A.标识B.规则C.封装D.消息5.已知 3 个类 A、B 和 C,其中类 A 由类 B 的一个实例和类 C 的 1 个或多个实例构成。能够正确表示类A、B 和 C 之间关系的 UML 类图是_。(分数:1.00)A.B.C.D.6.面向对象的测试可分四个层次,按照由低到高的顺序,这四个层次是_。(分数:1.00)A.类层模板层系统层算法层B.算法层类层模板层系统层C.算法层模板层类层系统
3、层D.类层系统层模板层算法层7.在 UML 中,_用于描述系统与外部系统及用户之间的交互。(分数:1.00)A.类图B.用例图C.交互图D.协作图8.以下关于单身模式(Singleton)的描述中,正确的是_。(分数:1.00)A.它描述了只有一个方法的类的集合B.它能够保证一个类只产生唯一的一个实例C.它描述了只有一个属性的类的集合D.它能够保证一个类的方法只能被唯一一个类调用9.类的实例化过程是一种合成过程,而不仅仅是根据单个类型进行的空间分配、初始化和绑定。指导编译程序进行这种合成的是_。(分数:1.00)A.类层次结构B.实例的个数C.多态的种类D.每个实例的初始状态10.下列是关于虚
4、函数的描述,正确的是_。(分数:1.00)A.虚函数是一个 static 类型的成员函数B.虚函数是一个非成员函数C.基类中采用 virtual 说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual 说明D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型11.关于面向对象技术及其优点,有下述说法:采用面向对象技术开发软件系统,提高了软件的重用性,进而提高了软件开发的生产率。根据面向对象的观点,可以将目标系统分割成各种对象,这比传统的自顶向下进行的功能分解的分析及设计方法更符合人们的思维习惯。面向对象技术中一个重要原则是封装,它有两层含义:第一,对象是其全部属
5、性和全部服务紧密结合而形成的一个不可分割的整体;第二,对象是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码都被封装在黑盒子里面。使用一个对象的时候,只需知道它向外界提供的接口形式,无需知道它的数据结构细节和实现操作的算法。从外面看不见,也就更不可能从外面直接修改对象的私有属性了。这种封装的原则使得对象的使用者只关注其外界接口而不必关心其内部实现,对象之间的关系也清楚了许多,修改和维护软件也变得容易起来。面向对象技术只适合开发大型的软件系统。其中说法正确的有_。(分数:1.00)A.B.C.D.在面向对象技术中,多态有多种不同的形式,其中 (1) 和 (2) 称为通用多态, (3) 和强
6、制多态称为特定多态。(分数:3.00)(1).(1)(分数:1.00)A.参数多态B.过载多态C.隐含多态D.重置多态(2).(2)(分数:1.00)A.重置多态B.过载多态C.隐含多态D.包含多态(3).(3)(分数:1.00)A.参数多态B.隐含多态C.过载多态D.包含多态12.类的构造函数被自动调用执行的情况发生在定义该类的_时。(分数:1.00)A.成员函数B.数据成员C.对象D.友元函数(1) 反映了类间的一种层次关系,而 (2) 反映了一种整体与部分的关系。(分数:2.00)(1).(1)(分数:1.00)A.继承B.组合C.封装D.多态(2).(2)(分数:1.00)A.继承B.
7、组合C.封装D.多态13.面向对象程序设计语言为_提供支持。(分数:1.00)A.面向对象用例设计阶段B.面向对象分析阶段C.面向对象需求分析阶段D.面向对象实现阶段14.在公有继承的情况下,基类的成员在派生类中的访问权限为_。(分数:1.00)A.公有B.私有C.保持不变D.受保护15.若对象 A 可以给对象 B 发送消息,那么_。(分数:1.00)A.对象 B 可以看见对象 AB.对象 A 可看见对象 BC.对象 A、B 相互不可见D.对象 A、B 相互可见16.下列叙述中正确的是_。(分数:1.00)A.面向对象程序设计语言都不支持过程化的程序设计B.面向对象系统只可采用面向对象程序设计
8、语言实现C.某些过程化程序设计语言也可实现面向对象系统D.面向对象程序设计语言不支持对成员变量的直接访问17._不是面向对象程序设计的主要特征。(分数:1.00)A.封装B.多态C.继承D.结构在面向对象的方法学中,对象可看成是属性及对于这些属性的专用服务的封装体。封装是一种 (1) 技术,封装的目的是使对象的 (2) 分离。类是一组具有相同属性和相同服务的对象的抽象描述,类中的每个对象都是这个类的一个 (3) 。类之间共享属性与服务的机制称为 (4) 。一个对象通过发送 (5) 来请求另一个对象为其服务。(分数:5.00)(1).(1)(分数:1.00)A.组装B.产品化C.固化D.信息隐蔽
9、(2).(2)(分数:1.00)A.定义和实现B.设计和测试C.设计和实现D.分析和定义(3).(3)(分数:1.00)A.例证(illustration)B.用例(use case)C.实例(instance)D.例外(exception)(4).(4)(分数:1.00)A.多态性B.动态绑定C.静态绑定D.继承(5).(5)(分数:1.00)A.调用语句B.消息C.命令D.口令18.下面关于面向对象方法中消息的叙述,不正确的是_。(分数:1.00)A.键盘、鼠标、通信端口、网络等设备一有变化,就会产生消息B.操作系统不断向应用程序发送消息,但应用程序不能向操作系统发送消息C.应用程序之间可
10、以相互发送消息D.发送与接收消息的通信机制与传统的子程序调用机制不同19.下列是关于继承的说法,正确的是_。(分数:1.00)A.子类继承父类,子类就拥有了父类的全部成员,包括基类的构造函数和析构函数B.当子类继承父类后,子类可以访问父类的全部成员C.抽象类不能被继承D.派生类可能含有与基类同名的数据成员或同名同参数的成员函数,因此可能产生二义性。C+采用将当前类作为默认作用域的方法来消除二义性。若要在派生类中访问基类的成员,则必须使用作用域运算符“:”指定所使用的成员的类名软件设计师-面向对象技术(二)答案解析(总分:29.00,做题时间:90 分钟)1.面向对象程序设计语言中提供的继承机制
11、可将类组织成一个_结构,以支持可重用性和可扩充性。(分数:1.00)A.栈B.星形C.层次 D.总线解析:面向对象程序设计语言中提供的继承机制可将类组织成一个层次结构,以支持可重用性和可扩充性。父类和子类便是一种层次关系,子类继承了父类的方法和属性以达到代码重用的目的,另一方面,子类可以有自己的不同于父类的属性和方法便于扩充。2.在 C+语言中,若类 C 中定义了一个方法 intf(int a,int b),那么方法不能与该方法同时存在于类 C中。(分数:1.00)A.int f(int x,int y) B.int f(float a,int b)C.float f(int x,float
12、y)D.int f(int x,float y)解析:该题其实考查的是形参和函数重载。编译器视函数“int f(int a,int b)”和“int f(int x,int y)”为同一个函数,尽管两者的形参名称不一样,编译器只管形参的类型是不是一样。在 VC 6.0 中,若在同一个类中定义这两个函数,编译错误信息中会提示“member function already defined or declared”,即成员函数已定义或声明了。对于在同一可访问区内(如同一个类中)被声明的几个具有不同参数列(参数的类型、个数、顺序不同)的同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制
13、叫重载,重载不关心函数的返回值类型。这里,“重载”的“重”的意思不同于“轻重”的“重”,它是“重复”、“重叠”的意思。可见,B、C、D 均与“int f(int a,int b)”构成重载。另外,值得特别强调的是,重载不关心函数的返回值类型,在同一个类中,也不允许“int f(int a,int b)”、“float f(int a,int b)”两者同时存在,这两者不构成重载,编译器无法识别。3.下面关于面向对象的描述正确的是_。(分数:1.00)A.针对接口编程,而不是针对实现编程 B.针对实现编程,而不是针对接口编程C.接口与实现不可分割D.优先使用继承而非组合解析:“针对接口编程,而不
14、是针对实现编程”这是面向对象程序设计的一条重要准则,遵循此原则有以下好处:使用者不必知道其使用对象的具体所属类;使用者无需知道特定类,只需知道它们所期望的接口;一个对象可以很容易地被(实现了相同接口的)另一个对象所替换;对象间的连接不必硬绑定到一个具体类的对象上,因此增加了灵活性。4.面向对象技术中,对象是类的实例。对象有三种成分:_、属性和方法(或操作)。(分数:1.00)A.标识 B.规则C.封装D.消息解析:对象有三种成分:标识、属性和方法(或操作)。标识就是对象的名称。5.已知 3 个类 A、B 和 C,其中类 A 由类 B 的一个实例和类 C 的 1 个或多个实例构成。能够正确表示类
15、A、B 和 C 之间关系的 UML 类图是_。(分数:1.00)A. B.C.D.解析:类 A 由类 B 的一个实例和类 C 伪 1 个或多个实例构成,可见这是整体与部分的关系。在 UML 中,用聚集来表示“整体与部分”这种关联,在整体一端连接个空心菱形。再根据上题中重复度的解释,显然选择 A。选项 B 是普通关联,不能准确描述题目要求。6.面向对象的测试可分四个层次,按照由低到高的顺序,这四个层次是_。(分数:1.00)A.类层模板层系统层算法层B.算法层类层模板层系统层 C.算法层模板层类层系统层D.类层系统层模板层算法层解析:模板是面向对象语言所提供的一种特殊机制,通过模板可以定义一种特
16、殊的类 (称为模板类)。在类的定义中可以包含待定的类型参数,在声明类的实例时,系统会自动根据传递的类型生成用户想要生成的类实例。面向对象的测试可以分成的四个层次是:测试与对象关联的单个操作,即算法层。测试单个对象类,即类层。测试对象集群。测试面向对象系统,即系统层。因此,本题的正确答案为 B。7.在 UML 中,_用于描述系统与外部系统及用户之间的交互。(分数:1.00)A.类图B.用例图 C.交互图D.协作图解析:在 UML 中,用例图用于描述系统与外部系统及用户之间的交互,在交互过程中,系统表现出相应的逻辑功能。类图用于描述系统的静态结构。顺序图和协作图统称为交互图,在 UML 2.0 中
17、,已将协作图更名为通信图。顺序图和协作图用于描述系统内对象之间的交互,但是它们的侧重点有所不同。顺序图清楚地表示了交互中的时间顺序,但没有明确表示对象之间的关系;协作图清楚地描述了对象之间的关系,但时间顺序必须从一系列序号中获得。顺序图常用于展示交互的场景,而协作图常用于展示过程的详细设计。8.以下关于单身模式(Singleton)的描述中,正确的是_。(分数:1.00)A.它描述了只有一个方法的类的集合B.它能够保证一个类只产生唯一的一个实例 C.它描述了只有一个属性的类的集合D.它能够保证一个类的方法只能被唯一一个类调用解析:单身模式是一种创建型设计模式,所谓“创建型设计模式”,指的是在创
18、建实例或其它实体时遵循的一些规则、约定。在单身模式当中,所谓的“单身”,指的是它能够保证一个类只产生唯一的一个实例,这在某些系统中非常有用。例如一些应用系统在启动时首先要将配置文件加载到内存中,为保持系统一致,要求这些内存中的配置信息有且仅有一份,此时便可用单身模式来解决这个问题。9.类的实例化过程是一种合成过程,而不仅仅是根据单个类型进行的空间分配、初始化和绑定。指导编译程序进行这种合成的是_。(分数:1.00)A.类层次结构 B.实例的个数C.多态的种类D.每个实例的初始状态解析:类的实例化过程是一种合成过程,而不仅仅是根据单个类型进行的空间分配、初始化和绑定。指导编译程序进行这种合成的是
19、类层次结构。10.下列是关于虚函数的描述,正确的是_。(分数:1.00)A.虚函数是一个 static 类型的成员函数B.虚函数是一个非成员函数C.基类中采用 virtual 说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual 说明 D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型解析:根据 C+语法规定,虚函数在继承层次结构中总是自动从基类传播下去,因此,基类中采用virtual 说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual 说明。11.关于面向对象技术及其优点,有下述说法:采用面向对象技术开发软件系统,提高了软件的重用性,进
20、而提高了软件开发的生产率。根据面向对象的观点,可以将目标系统分割成各种对象,这比传统的自顶向下进行的功能分解的分析及设计方法更符合人们的思维习惯。面向对象技术中一个重要原则是封装,它有两层含义:第一,对象是其全部属性和全部服务紧密结合而形成的一个不可分割的整体;第二,对象是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码都被封装在黑盒子里面。使用一个对象的时候,只需知道它向外界提供的接口形式,无需知道它的数据结构细节和实现操作的算法。从外面看不见,也就更不可能从外面直接修改对象的私有属性了。这种封装的原则使得对象的使用者只关注其外界接口而不必关心其内部实现,对象之间的关系也清楚了许多,修
21、改和维护软件也变得容易起来。面向对象技术只适合开发大型的软件系统。其中说法正确的有_。(分数:1.00)A. B.C.D.解析:面向对象技术有如下五个突出的优点:与人类习惯的思维方法一致。面向对象方法学的出发点和基本原则是,尽可能模拟人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的“问题域”与解决问题的“解域”在结构上尽可能一致。稳定性好。传统的软件开发方法基于功能分析与功能分解,软件结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。而用户需求变化大部分是针对功能的,因此这样的系统是不稳定的。面向对象的方法用
22、对象模拟问题域中的实体,以对象为中心构造软件系统,系统的功能需求变化时并不会引起软件结构的整体变化。由于现实世界中的实体是相对稳定的,因此以对象为中心构造的软件系统也是比较稳定的。可重用性好。面向对象方法学在利用可重用的软件成分构造新的软件系统时有很大的灵活性。继承机制与多态性使得子类不仅可以重用其父类的数据结构与程序代码,并且可以方便地修改和扩充,而这种修改并不影响对原有类的使用。较易开发大型软件产品。用面向对象方法开发软件时,构成软件系统的每个对象相对独立。因此,可以把一个大型软件产品分解成一系列相互独立的小产品来处理。这不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易多了。可
23、维护性好。面向对象的软件比较容易理解,容易修改,容易测试。说法之一的“面向对象技术只适合开发大型的软件系统”显然是不对的,一些中小型软件系统也适合用面向对象技术来开发。实际上,目前绝大部分软件系统都采用面向对象技术开发。在面向对象技术中,多态有多种不同的形式,其中 (1) 和 (2) 称为通用多态, (3) 和强制多态称为特定多态。(分数:3.00)(1).(1)(分数:1.00)A.参数多态 B.过载多态C.隐含多态D.重置多态解析:(2).(2)(分数:1.00)A.重置多态B.过载多态C.隐含多态D.包含多态 解析:(3).(3)(分数:1.00)A.参数多态B.隐含多态C.过载多态 D
24、.包含多态解析:(1)-(3)在面向对象技术中,对象在收到信息后要予以响应,不同的对象收到同一消息可产生完全不同的结果,这一现象称为多态。在使用多态技术时,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定,这样同一消息就可以调用不同的方法。多态有多种不同的形式,其中参数多态和包含多态称为通用多态,过载多态和强制多态称为特定多态。12.类的构造函数被自动调用执行的情况发生在定义该类的_时。(分数:1.00)A.成员函数B.数据成员C.对象 D.友元函数解析:在定义类的对象时,类的构造函数被自动调用执行以创建对象。(1) 反映了类间的一种层次关系,而 (2) 反映了一种整体与部分的关系
25、。(分数:2.00)(1).(1)(分数:1.00)A.继承 B.组合C.封装D.多态解析:(2).(2)(分数:1.00)A.继承B.组合 C.封装D.多态解析:略。13.面向对象程序设计语言为_提供支持。(分数:1.00)A.面向对象用例设计阶段B.面向对象分析阶段C.面向对象需求分析阶段D.面向对象实现阶段 解析:程序设计语言是实施阶段用到的工具,故是为面向对象实现阶段提供技术。所谓“实现”,就是将图形化、文档化的设计变成实际的程序代码。14.在公有继承的情况下,基类的成员在派生类中的访问权限为_。(分数:1.00)A.公有B.私有C.保持不变 D.受保护解析:略。15.若对象 A 可以
26、给对象 B 发送消息,那么_。(分数:1.00)A.对象 B 可以看见对象 AB.对象 A 可看见对象 B C.对象 A、B 相互不可见D.对象 A、B 相互可见解析:此题考查面向对象基础知识可见性。由于 A 可以给对象 B 发送消息,因此对象 A 必然可看见B。16.下列叙述中正确的是_。(分数:1.00)A.面向对象程序设计语言都不支持过程化的程序设计B.面向对象系统只可采用面向对象程序设计语言实现C.某些过程化程序设计语言也可实现面向对象系统 D.面向对象程序设计语言不支持对成员变量的直接访问解析:某些面向对象程序设计语言支持过程化的程序设计,比如 C+;某些过程化程序设计语言也可实现面
27、向对象系统,如 2005 年 11 月软件设计师考试下午试题七就用 C 语言实现了观察者模式。17._不是面向对象程序设计的主要特征。(分数:1.00)A.封装B.多态C.继承D.结构 解析:面向对象程序设计的主要特征有被封装的类、对象、多态性、继承。在面向对象的方法学中,对象可看成是属性及对于这些属性的专用服务的封装体。封装是一种 (1) 技术,封装的目的是使对象的 (2) 分离。类是一组具有相同属性和相同服务的对象的抽象描述,类中的每个对象都是这个类的一个 (3) 。类之间共享属性与服务的机制称为 (4) 。一个对象通过发送 (5) 来请求另一个对象为其服务。(分数:5.00)(1).(1
28、)(分数:1.00)A.组装B.产品化C.固化D.信息隐蔽 解析:(2).(2)(分数:1.00)A.定义和实现 B.设计和测试C.设计和实现D.分析和定义解析:(3).(3)(分数:1.00)A.例证(illustration)B.用例(use case)C.实例(instance) D.例外(exception)解析:(4).(4)(分数:1.00)A.多态性B.动态绑定C.静态绑定D.继承 解析:(5).(5)(分数:1.00)A.调用语句B.消息 C.命令D.口令解析:(1)-(5)封装是一种信息隐蔽技术,其目的是把定义与实现分离,保护数据不被对象的使用者直接存取。类是一组具有相同属性
29、和相同服务的对象的抽象描述,类中的每个对象都是这个类的一个实例。类之间共享属性与服务的机制称为继承。一个对象通过发送消息来请求另一个对象为其服务。18.下面关于面向对象方法中消息的叙述,不正确的是_。(分数:1.00)A.键盘、鼠标、通信端口、网络等设备一有变化,就会产生消息B.操作系统不断向应用程序发送消息,但应用程序不能向操作系统发送消息 C.应用程序之间可以相互发送消息D.发送与接收消息的通信机制与传统的子程序调用机制不同解析:消息就是向对象发出的服务请求。应用程序之间可以相互发送消息,应用程序还可以向操作系统发送消息,所有 I/O 设备输入/输出时也会产生消息。消息通信机制与传统的子程
30、序调用机制不同,子程序调用是完全被动的,而消息的接收方是处理的主体。19.下列是关于继承的说法,正确的是_。(分数:1.00)A.子类继承父类,子类就拥有了父类的全部成员,包括基类的构造函数和析构函数B.当子类继承父类后,子类可以访问父类的全部成员C.抽象类不能被继承D.派生类可能含有与基类同名的数据成员或同名同参数的成员函数,因此可能产生二义性。C+采用将当前类作为默认作用域的方法来消除二义性。若要在派生类中访问基类的成员,则必须使用作用域运算符“:”指定所使用的成员的类名 解析:当子类继承父类后,子类可以访问父类中除私有成员外的全部成员。父类的构造函数和析构函数是不能被子类继承的。在 C+
31、中,当子类有多个基类时,调用基类构造函数的格式为:派生类名:派生类名(参数表):基类名 1参数表 1,基类名 2参数表 2,派生类构造函数体;在 Java 中,在创建子类对象时若希望对父类中的成员变量进行初始化,就要在于类构造方法中利用super()调用父类的构造方法,并且必须将这条语句作为子类构造方法中的第一条语句。抽象类是含有抽象函数或抽象方法的类,它不能被实例化,但是可以被继承。实际上,抽象类主要就是用来派生子类。当派生类含有与基类同名的数据成员或同名同参数的成员函数时,可能产生二义性。 C+采用将当前类作为默认作用域的方法来消除二义性。若要在派生类中访问基类的成员,则必须使用作用域运算符“:”指定所使用的成员的类名。