免费智能真题库 > 历年试卷 > 程序员 > 2013年上半年 程序员 上午试卷 综合知识
  第47题      
  知识点:   多态   继承   面向对象的基本概念
  关键词:   多态   继承   数据   子类        章/节:   系统分析和设计基础知识       

 
继承是父类和子类之间共享数据和方法的机制,类的继承支持多态的实现。以下关于类继承的说法中,不正确的是(47)。在多态的几种不同的形式中,(48)多态是指同一个名字在不同上下文中可代表不同的含义。
 
 
  A.  一个父类可以有多个子类
 
  B.  父类描述子类的公共属性和方法
 
  C.  一个子类可以继承父类中的属性和方法,而不必在子类中定义
 
  D.  子类不可以定义新的属性和方法
 
 
 

 
  第45题    2011年上半年  
   52%
在统一建模语言(UML)中,(45)用于描述系统与外部系统及用户之间的交互。
  第44题    2016年上半年  
   31%
对象、类、继承和消息传递是面向对象的4个核心概念。其中对象是封装(44)的整体。
  第54题    2020年下半年  
   57%
画数据流图时,需要用( )对数据流图中各个元素进行定义。
   知识点讲解    
   · 多态    · 继承    · 面向对象的基本概念
 
       多态
        在C++语言中,所谓多态性,即对同一条信息,不同对象将产生不同的相应操作。简言之,以多种形式在多个对象上进行操作(但接口相同)。多态性一般通过对象的继承关系来实现。
        在讲多态性实现之前,首先讨论一下成员函数重载和虚函数的概念。
        成员函数的重载是指在派生类中定义和其祖先类中相同的函数,即函数名、参数个数、参数类型都相同。虽然函数的重载一定程度上满足了多态性,但是函数重载实现多态性的前提是知道接收消息的具体对象。这不能满足在现实世界中,消息发送者在发送消息之前,并不需要知道具体接收者的要求。函数的重载只是静态地满足了多态性的要求。重载的子程序是一种特别的多态。
        虚函数是在类的成员函数定义前面加上关键字virtual。虚函数仅给出方法的定义而不给出方法体。含有虚函数的类叫作抽象类。抽象类具有如下特性:①由于抽象方法没有体,因此抽象类不能实例化;②抽象类的子类必须给出所继承的抽象方法的体。
        在C++语言中,多态是通过虚函数来实现的。如果一个基类的成员函数定义为虚函数,那么,它在所有派生类中也保持为虚函数,派生类中可以省略virtual关键字。要达到多态的效果,基类和派生类的对应函数不仅名字相同,而且返回类型、参数个数和类型也必须相同。在C++语言中,不允许用抽象类创造对象,它只能被其他类继承。要定义抽象类,就必须定义纯虚函数,它实际上是起到接口的作用。对虚函数的限制是:只有类的成员函数才可以是虚函数;静态成员函数不能是虚函数;构造函数不能是虚函数;析构函数可以是虚函数,而且我们常常将析构函数定义为虚函数。
        例如:A是基类,B是A的派生类。现有如下程序:
        
        输出结果为:
        1
        2
        2
        根据输出结果,即可知多态的实现机理了。
 
       继承
        C++最重要的性能之一是代码重用。但是,为了具有可进化性,我们应当能够做比复制代码更多的工作。在C的方法中,这个问题未能得到很好的解决。而用C++,可以用类的方法解决,通过创建新类重用代码,而不是从头创建它们。这样,就可以使用其他人已经创建并调试过的类。创建一个新类作为一个已存在类的类型,采取这个已存在类的形式,对它增加代码,但不修改它。这个有趣的活动被称为继承,其中大量的工作由编译器完成。继承是面向对象程序设计的基石。
        继承的一般形式如下:
        
        访问权限是访问控制说明符,它可以是public、private或protected。派生类与基类是有一定联系的,基类描述一个事物的一般特征,而派生类有比基类更丰富的属性和行为。如果需要,派生类可以从多个基类继承,也就是多重继承。通过继承,派生类自动得到了除基类私有成员以外的其他所有数据成员和成员函数,在派生类中可以直接访问,从而实现了代码的复用。派生类对象生成时,要调用构造函数进行初始化。编译器的调用过程是先调用基类的构造函数,对派生类中的基类数据进行初始化,然后再调用派生类自己的构造函数,对派生类的数据进行初始化工作。当然,在派生类中也可以更改基类的数据,只要它有访问权限。每个派生类只需要编写与基类行为不同或扩展的方面。
        例如:A是基类,B是A的派生类,那么B将继承A的数据和函数。代码如下:
        
        这个简单的示例程序也说明了:C++的"继承"特性可以大大提高程序的可复用性。
 
       面向对象的基本概念
               概述
               面向对象(Object-Oriented, OO)方法是一种非常实用的软件开发方法,它以客观世界中的对象为中心,其分析和设计思想符合人们的思维方式,分析和设计的结果与客观世界的实际比较接近,容易被人们所接受。在面向对象方法中,分析和设计的界线并不明显,它们采用相同的符号表示,能方便地从分析阶段平滑地过渡到设计阶段。
               识别面向对象方法
               Peter Coad和Edward Yourdon提出用下列等式识别面向对象方法:
               面向对象=对象(Object)+分类(Classification)+继承(Inheritance)+通过消息的通信(Communication with Messages)
               采用这4个概念开发的软件系统是面向对象的。
               对象
               在现实世界中,每个实体都是对象,如学生、汽车、电视机、空调等都是现实世界中的对象。在计算机系统中,对象是指一组属性及这组属性上的专用操作的封装体。一个对象通常可由对象名、属性和操作3部分组成。属性可以是一些数据,也可以是另一个对象。例如,书是一个对象,它的属性可以有书名、作者、出版社、出版年份、定价等属性,其中书名、出版年份、定价是数据,作者和出版社可以是对象,他们还可以有自己的属性。每个对象都有它自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。操作也称为方法或服务,它规定了对象的行为,表示对象所能提供的服务。
               类
               类是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类的一个实例(Instance)。在分析和设计时,我们通常把注意力集中在类上,而不是具体的对象。我们也不必为每个对象逐个定义,而只需对类做出定义,再对类的属性给予不同的赋值即可得到该类的对象实例。
               在有些类之间存在一般和特殊关系,即一些类是某个类的特殊情况,某个类是某些类的一般情况。这是一种"is-a"的关系,即特殊类是一种一般类。例如"汽车"类、"轮船"类、"飞机"类都是一种"交通工具"类。特殊类是一般类的子类,一般类是特殊类的父类。同样,"汽车"类还可以有更特殊的类,如"轿车"类、"货车"类等。在这种关系下形成一种层次的关联。
               通常把一个类和这个类的所有对象称为"类及对象"或"对象类"。
               继承
               继承是类间的一种基本关系,是在某个类的层次关联中不同的类共享属性和操作的一种机制。在"is-a"的层次关联中,一个父类可以有多个子类,这些子类都是父类的特例,父类描述了这些子类的公共属性和操作。一个子类可以继承它的父类(或祖先类)中的属性和操作,这些属性和操作在子类中不必定义,子类中还可以定义它自己的属性和操作。
               一个子类只有唯一的一个父类,这种继承称为单一继承。一个子类也可以有多个父类,它可以从多个父类中继承特性,这种继承称为多重继承。例如,"水陆两用交通工具"类既可继承"陆上交通工具"类的特性,又可继承"水上交通工具"类的特性。
               消息
               消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务,一个消息通常包括接收对象名、调用的操作名和适当的参数。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。
               多态(Polymorphism)和动态绑定(Dynamic Binding)
               多态是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果,例如"画"操作,作用在"矩形"对象上则在屏幕上画一个矩形,而作用在"圆"对象上,则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。
               与多态性密切相关的一个概念就是动态绑定。传统的程序设计语言,把过程调用与目标代码的连接(即调用哪个过程)放在程序运行前进行(称为静态绑定),而动态绑定则是把这种连接推迟到运行时才进行。在一般与特殊关系中,子类是父类的一个特例,所以父类对象可以出现的地方,也允许其子类对象出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法连接,即动态绑定。
   题号导航      2013年上半年 程序员 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第47题    在手机中做本题