您的当前位置:首页正文

软件设计师-面向对象技术(二)

2020-10-28 来源:汇智旅游网
软件设计师-面向对象技术(二)

(总分:29.00,做题时间:90分钟)

一、

(总题数:22,分数:29.00)

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)

解析:该题其实考查的是形参和函数重载。

编译器视函数“int f(int a,int b)”和“int f(int x,int y)”为同一个函数,尽管两者的形参名称不一样,编译器只管形参的类型是不是一样。在VC 6.0中,若在同一个类中定义这两个函数,编译错误信息中会提示“member function already defined or declared”,即成员函数已定义或声明了。 对于在同一可访问区内(如同一个类中)被声明的几个具有不同参数列(参数的类型、个数、顺序不同)的同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制叫重载,重载不关心函数的返回值类型。这里,“重载”的“重”的意思不同于“轻重”的“重”,它是“重复”、“重叠”的意思。可见,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.优先使用继承而非组合

解析:“针对接口编程,而不是针对实现编程”这是面向对象程序设计的一条重要准则,遵循此原则有以下好处:

①使用者不必知道其使用对象的具体所属类;

②使用者无需知道特定类,只需知道它们所期望的接口;

③一个对象可以很容易地被(实现了相同接口的)另一个对象所替换; ④对象间的连接不必硬绑定到一个具体类的对象上,因此增加了灵活性。

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.

解析:类A由类B的一个实例和类C伪1个或多个实例构成,可见这是整体与部分的关系。在UML中,用聚集来表示“整体与部分”这种关联,在整体一端连接—个空心菱形。再根据上题中重复度的解释,显然选择A。选项B是普通关联,不能准确描述题目要求。

6.面向对象的测试可分四个层次,按照由低到高的顺序,这四个层次是______。

(分数:1.00)

A.类层——模板层——系统层——算法层 B.算法层——类层——模板层——系统层 √ C.算法层——模板层——类层——系统层 D.类层——系统层——模板层——算法层

解析:模板是面向对象语言所提供的一种特殊机制,通过模板可以定义一种特殊的类 (称为模板类)。在类的定义中可以包含待定的类型参数,在声明类的实例时,系统会自动根据传递的类型生成用户想要生成的类实例。

面向对象的测试可以分成的四个层次是: ①测试与对象关联的单个操作,即算法层。 ②测试单个对象类,即类层。 ③测试对象集群。

④测试面向对象系统,即系统层。 因此,本题的正确答案为B。

7.在UML中,______用于描述系统与外部系统及用户之间的交互。

(分数:1.00) A.类图 B.用例图 √ C.交互图

D.协作图

解析:在UML中,用例图用于描述系统与外部系统及用户之间的交互,在交互过程中,系统表现出相应的逻辑功能。类图用于描述系统的静态结构。顺序图和协作图统称为交互图,在UML 2.0中,已将协作图更名为通信图。顺序图和协作图用于描述系统内对象之间的交互,但是它们的侧重点有所不同。顺序图清楚地表示了交互中的时间顺序,但没有明确表示对象之间的关系;协作图清楚地描述了对象之间的关系,但时间顺序必须从一系列序号中获得。顺序图常用于展示交互的场景,而协作图常用于展示过程的详细设计。 8.以下关于单身模式(Singleton)的描述中,正确的是______。

(分数:1.00)

A.它描述了只有一个方法的类的集合

B.它能够保证一个类只产生唯一的一个实例 √ C.它描述了只有一个属性的类的集合

D.它能够保证一个类的方法只能被唯一一个类调用

解析:单身模式是一种创建型设计模式,所谓“创建型设计模式”,指的是在创建实例或其它实体时遵循的一些规则、约定。在单身模式当中,所谓的“单身”,指的是它能够保证一个类只产生唯一的一个实例,这在某些系统中非常有用。例如一些应用系统在启动时首先要将配置文件加载到内存中,为保持系统一致,要求这些内存中的配置信息有且仅有一份,此时便可用单身模式来解决这个问题。

9.类的实例化过程是一种合成过程,而不仅仅是根据单个类型进行的空间分配、初始化和绑定。指导编译程序进行这种合成的是______。

(分数:1.00) A.类层次结构 √ B.实例的个数 C.多态的种类

D.每个实例的初始状态

解析:类的实例化过程是一种合成过程,而不仅仅是根据单个类型进行的空间分配、初始化和绑定。指导编译程序进行这种合成的是类层次结构。 10.下列是关于虚函数的描述,正确的是______。

(分数:1.00)

A.虚函数是一个static类型的成员函数 B.虚函数是一个非成员函数

C.基类中采用virtual说明一个虚函数后,派生类中定义相同原型的函数时可不必加virtual说明 √ D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型

解析:根据C++语法规定,虚函数在继承层次结构中总是自动从基类传播下去,因此,基类中采用virtual说明一个虚函数后,派生类中定义相同原型的函数时可不必加virtual说明。 11.关于面向对象技术及其优点,有下述说法:

①采用面向对象技术开发软件系统,提高了软件的重用性,进而提高了软件开发的生产率。

②根据面向对象的观点,可以将目标系统分割成各种对象,这比传统的自顶向下进行的功能分解的分析及设计方法更符合人们的思维习惯。

③面向对象技术中一个重要原则是封装,它有两层含义:第一,对象是其全部属性和全部服务紧密结合而形成的一个不可分割的整体;第二,对象是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码都被封装在黑盒子里面。使用一个对象的时候,只需知道它向外界提供的接口形式,无需知道它的数据结构细节和实现操作的算法。从外面看不见,也就更不可能从外面直接修改对象的私有属性了。这种封装的原则使得对象的使用者只关注其外界接口而不必关心其内部实现,对象之间的关系也清楚了许多,修改和维护软件也变得容易起来。

④面向对象技术只适合开发大型的软件系统。其中说法正确的有______。

(分数:1.00) A.①②③ √ B.①②④ C.①②③④ D.③④

解析:面向对象技术有如下五个突出的优点:

①与人类习惯的思维方法一致。面向对象方法学的出发点和基本原则是,尽可能模拟人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的“问题域”与解决问题的“解域”在结构上尽可能一致。

②稳定性好。传统的软件开发方法基于功能分析与功能分解,软件结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。而用户需求变化大部分是针对功能的,因此这样的系统是不稳定的。

面向对象的方法用对象模拟问题域中的实体,以对象为中心构造软件系统,系统的功能需求变化时并不会引起软件结构的整体变化。由于现实世界中的实体是相对稳定的,因此以对象为中心构造的软件系统也是比较稳定的。

③可重用性好。面向对象方法学在利用可重用的软件成分构造新的软件系统时有很大的灵活性。继承机制与多态性使得子类不仅可以重用其父类的数据结构与程序代码,并且可以方便地修改和扩充,而这种修改并不影响对原有类的使用。

④较易开发大型软件产品。用面向对象方法开发软件时,构成软件系统的每个对象相对独立。因此,可以把一个大型软件产品分解成一系列相互独立的小产品来处理。这不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易多了。

⑤可维护性好。面向对象的软件比较容易理解,容易修改,容易测试。

说法之一的“面向对象技术只适合开发大型的软件系统”显然是不对的,一些中小型软件系统也适合用面向对象技术来开发。实际上,目前绝大部分软件系统都采用面向对象技术开发。

在面向对象技术中,多态有多种不同的形式,其中 (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.包含多态

解析:(1)-(3)

在面向对象技术中,对象在收到信息后要予以响应,不同的对象收到同一消息可产生完全不同的结果,这一现象称为多态。在使用多态技术时,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定,这样同一消息就可以调用不同的方法。多态有多种不同的形式,其中参数多态和包含多态称为通用多态,过载多态和强制多态称为特定多态。

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.组合 √ C.封装 D.多态 解析:略。

13.面向对象程序设计语言为______提供支持。

(分数:1.00)

A.面向对象用例设计阶段 B.面向对象分析阶段 C.面向对象需求分析阶段 D.面向对象实现阶段 √

解析:程序设计语言是实施阶段用到的工具,故是为面向对象实现阶段提供技术。所谓“实现”,就是将图形化、文档化的设计变成实际的程序代码。

14.在公有继承的情况下,基类的成员在派生类中的访问权限为______。

(分数:1.00) A.公有 B.私有

C.保持不变 √ D.受保护 解析:略。

15.若对象A可以给对象B发送消息,那么______。

(分数:1.00)

A.对象B可以看见对象A B.对象A可看见对象B √ C.对象A、B相互不可见 D.对象A、B相互可见

解析:此题考查面向对象基础知识——可见性。由于A可以给对象B发送消息,因此对象A必然可看见B。 16.下列叙述中正确的是______。

(分数:1.00)

A.面向对象程序设计语言都不支持过程化的程序设计 B.面向对象系统只可采用面向对象程序设计语言实现 C.某些过程化程序设计语言也可实现面向对象系统 √ D.面向对象程序设计语言不支持对成员变量的直接访问

解析:某些面向对象程序设计语言支持过程化的程序设计,比如C++;某些过程化程序设计语言也可实现面向对象系统,如2005年11月软件设计师考试下午试题七就用C语言实现了观察者模式。 17.______不是面向对象程序设计的主要特征。

(分数:1.00) A.封装 B.多态 C.继承 D.结构 √

解析:面向对象程序设计的主要特征有被封装的类、对象、多态性、继承。

在面向对象的方法学中,对象可看成是属性及对于这些属性的专用服务的封装体。封装是一种 (1) 技术,封装的目的是使对象的 (2) 分离。

类是一组具有相同属性和相同服务的对象的抽象描述,类中的每个对象都是这个类的一个 (3) 。类之间共享属性与服务的机制称为 (4) 。一个对象通过发送 (5) 来请求另一个对象为其服务。

(分数:5.00) (1).(1)(分数: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)

封装是一种信息隐蔽技术,其目的是把定义与实现分离,保护数据不被对象的使用者直接存取。 类是一组具有相同属性和相同服务的对象的抽象描述,类中的每个对象都是这个类的一个实例。类之间共享属性与服务的机制称为继承。一个对象通过发送消息来请求另一个对象为其服务。 18.下面关于面向对象方法中消息的叙述,不正确的是______。

(分数:1.00)

A.键盘、鼠标、通信端口、网络等设备一有变化,就会产生消息

B.操作系统不断向应用程序发送消息,但应用程序不能向操作系统发送消息 √ C.应用程序之间可以相互发送消息

D.发送与接收消息的通信机制与传统的子程序调用机制不同

解析:消息就是向对象发出的服务请求。应用程序之间可以相互发送消息,应用程序还可以向操作系统发送消息,所有I/O设备输入/输出时也会产生消息。消息通信机制与传统的子程序调用机制不同,子程序调用是完全被动的,而消息的接收方是处理的主体。 19.下列是关于继承的说法,正确的是______。

(分数:1.00)

A.子类继承父类,子类就拥有了父类的全部成员,包括基类的构造函数和析构函数 B.当子类继承父类后,子类可以访问父类的全部成员 C.抽象类不能被继承

D.派生类可能含有与基类同名的数据成员或同名同参数的成员函数,因此可能产生二义性。C++采用将当前类作为默认作用域的方法来消除二义性。若要在派生类中访问基类的成员,则必须使用作用域运算符“::”指定所使用的成员的类名 √

解析:当子类继承父类后,子类可以访问父类中除私有成员外的全部成员。父类的构造函数和析构函数是不能被子类继承的。在C++中,当子类有多个基类时,调用基类构造函数的格式为: <派生类名>::<派生类名>(参数表):<基类名1><参数表1>,<基类名2> <参数表2>…, {

派生类构造函数体; }

在Java中,在创建子类对象时若希望对父类中的成员变量进行初始化,就要在于类构造方法中利用super()调用父类的构造方法,并且必须将这条语句作为子类构造方法中的第一条语句。

抽象类是含有抽象函数或抽象方法的类,它不能被实例化,但是可以被继承。实际上,抽象类主要就是用

来派生子类。

当派生类含有与基类同名的数据成员或同名同参数的成员函数时,可能产生二义性。 C++采用将当前类作为默认作用域的方法来消除二义性。若要在派生类中访问基类的成员,则必须使用作用域运算符“::”指定所使用的成员的类名。

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