免费智能真题库 > 历年试卷 > 信息系统监理师 > 2016年上半年 信息系统监理师 上午试卷 综合知识
  第34题      
  知识点:   多态性   多态   面向对象分析
  关键词:   多态   面向对象分析   对象   面向对象        章/节:   软件与软件工程知识       

 
面向对象分析设计中,多态机制的作用是(34)。
 
 
  A.  信息隐藏
 
  B.  实现“一种接口,多种方法”
 
  C.  数据抽象
 
  D.  实现“多种接口,一种方法”
 
 
 

 
  第3题    2011年上半年  
   42%
面向对象分析与设计技术中,(3)是类的一个实例。
  第3题    2010年下半年  
   54%
面向对象开发技术中,对象定义为系统中用来描述客观事物的一个实体,对象之间通过(3)执行有关操作。
  第34题    2016年下半年  
   40%
(34)是实现“一种接口,多种方法”的机制。
   知识点讲解    
   · 多态性    · 多态    · 面向对象分析
 
       多态性
        多态性是指同一个操作作用于不同的对象时可以有不同的解释,并产生不同的执行结果。与多态性密切相关的一个概念就是动态绑定。传统的程序设计语言把过程调用与目标代码的连接放在程序运行前进行,称为静态绑定。而动态绑定则是指把这种连接推迟到运行时才进行。在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法连接,即动态绑定。
 
       多态
        多态性(Polymorphism)同继承性一样,是面向对象程序设计的标志性特征,是一个考查重点。
        多态性是考虑在不同层次的类中以及在同一类中,同名的成员函数之间的关系问题。函数的重载和运算符的重载都属于多态性中的编译时的多态性。运行时的多态性是以虚基类为基础的多态性。
        1)多态的定义
        多态是指同样的消息被不同类型的对象接受时导致不同的行为(不同的实现或调用了不同的函数)。所谓消息,是由"类::方法"(功能)和"方法的实参"(消息数据)共同组成的。
        产生多态性的原因是:不同的对象在处理同样的消息时,使用的方法实现(成员函数的函数体)不同。"多态性"是与"类的派生和继承"联系在一起的,是基类中所定义方法的"多态性"。对于在派生类中新增加的方法,是没有多态性的。
        2)分类
        (1)重载多态:成员函数(运算符)重载。
        (2)强制多态:强制类型转换。把一个变量的类型变换成另一种类型,以符合一个函数或者操作的要求。例如,加法运算符在执行浮点数和整数的相加时,首先把整数转换成浮点数,然后再相加。
        (3)包含多态:主要通过虚函数来实现。强调不同类中的同名成员函数的多态行为。
        (4)参数多态:可通过函数模板和类模板来实现。
        在C++中有两种多态性。
        (1)编译时的多态性:通过函数的重载和运算符的重载来实现。
        (2)运行时的多态性:是指在程序执行前,无法根据函数名和参数来确定该调用哪一个函数,必须在程序执行过程中,根据执行的具体情况来动态地确定。这种多态性是通过类继承关系和虚函数(Virtual Function)来实现的。
        3)虚函数
        虚函数是前面有virtual关键字的类的成员函数,定义虚函数的格式如下:
        
        注意:virtual关键字只用在类定义里的函数声明中,写函数体时不用。
        另外,如果基类中的函数不是虚函数,即没有virtual关键字,即使派生类中写了virtual也没有用,不能实现多态。
        使用虚函数时,需要注意以下几点。
        (1)派生类中定义虚函数除必须与基类中的虚函数同名外,还必须同参数表、同返回类型。如基类中返回基类指针,派生类中返回派生类指针是允许的。
        (2)只有类的成员函数才能说明为虚函数。
        (3)静态成员函数不能作为虚函数。
        (4)实现动态多态性时,必须使用基类指针或引用,使该指针指向不同派生类的对象,并指向虚函数。
        (5)内联函数不能作为虚函数。
        (6)析构函数可定义为虚函数,构造函数不能为虚函数。在基类中及其派生类中都有动态分配的内存空间时,必须把析构函数定义为虚函数,实现撤销对象时的多态性。
        4)纯虚函数和抽象类
        (1)纯虚函数(Pure Virtual Function):指被标明为不具体实现的虚拟成员函数。定义纯虚函数的一般格式为:
        
        例如:
        
        定义纯虚函数必须注意以下几点。
        .定义纯虚函数时,不能定义虚函数的实现部分。
        ."=0"本质上是将指向函数体的指针定义为NULL。
        .在派生类中必须有重新定义的纯虚函数的函数体,这样的派生类才能用来定义对象。
        (2)抽象类:包含纯虚函数的类。
        抽象类只能作为基类来派生新类使用,不能创建抽象类的对象,可声明一个抽象类的指针和引用。
        在抽象类的成员函数内可以调用纯虚函数,但是在构造函数或析构函数内部不能调用纯虚函数。因为在构造函数或析构函数内部调用虚函数采用的是静态联编,即编译时就要生成调用该函数的指令,而纯虚函数是没有代码的,所以这样的调用指令无法生成,因此编译会报错。在普通成员函数内可以调用纯虚函数,尽管纯虚函数是没有代码的,但是此时是动态联编,编译时不需要生成调用该函数的指令,所以编译可以通过。在运行时决定到底调用的是自己还是派生类的函数,因为自己是个抽象类,不可能生成对象,所以不可能调用自己的这个纯虚函数。
        5)虚析构函数
        只要基类的析构函数是虚函数,那么派生类的析构函数不论是否使用virtual关键字,不论是自己定义的还是编译器默认生成的,都自动成为虚函数。
        一个类的构造函数会在执行自己代码之前,依派生顺序自动调用它的所有直接基类的构造函数;一个类的析构函数也会在执行完自己的代码之后,以与构造函数调用次序相反的顺序自动调用其所有直接基类的析构函数。一般来说,一个类如果定义了虚函数,则应该将析构函数也定义成虚函数。
 
       面向对象分析
        同其他分析方法一样,面向对象分析(Object-Oriented Analysis,OOA)的目的是获得对应用问题的理解。理解的目的是确定系统的功能、性能要求。面向对象分析法与功能/数据分析法之间的差别是前期的表述含义不同。功能/数据分析法分开考虑系统的功能要求和数据及其结构,面向对象分析方法是将数据和功能结合在一起作为一个综合对象来考虑。面向对象分析技术可以将系统的行为和信息间的关系表示为迭代构造特征。
        面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。
               认定对象
               在应用领域中,按自然存在的实体确立对象。在定义域中,首先将自然存在的“名词”作为一个对象,这通常是研究问题、定义域实体的良好开始。通过实体间的关系寻找对象常常没有问题,而困难在于寻找(选择)系统关心的实质性对象,实质性对象是系统稳定性的基础。例如在银行应用系统中,实质性对象应包含客户账务、清算等,而门卫值班表不是实质性对象,甚至可不包含在该系统中。
               组织对象
               分析对象间的关系,将相关对象抽象成类,其目的是简化关联对象,利用类的继承性建立具有继承性层次的类结构。抽象类时可从对象间的操作或一个对象是另一个对象的一部分来考虑,如房子由门和窗构成,门和窗是房子类的子类。由对象抽象类,通过相关类的继承构造类层次,所以说系统的行为和信息间的分析过程是一种迭代表征过程。
               对象间的相互作用
               描述出各对象在应用系统中的关系。如一个对象是另一个对象的一部分,一个对象与其他对象间的通信关系等。这样可以完整地描述每个对象的环境,由一个对象解释另一个对象,以及一个对象如何生成另一个对象,最后得到对象的界面描述。
               基于对象的操作
               当考虑对象的界面时,自然要考虑对象的操作。其操作有从对象直接标识的简单操作,如创建、增加、删除等;也有更复杂的操作,如将几个对象的信息连接起来。一般而言,避免对象太复杂比较好,当连接的对象太复杂时,可将其标识为新对象。当确定了对象的操作后,再定义对象的内部,对象内部定义包括其内部数据信息、信息存储方法,继承关系以及可能生成的实例数等属性。
               分析阶段最重要的是理解问题域的概念,其结果将影响整个工作。经验表明,从应用定义域概念标识对象是非常合理的,完成上述工作后写出规范文档,文档确定每个对象的范围。
               早期面向对象的目标之一是简化模型与问题域之间的语义差距。事实上,面向对象分析的基础是软件系统结构,这依赖于人类看待现实世界的方法。当人们理解求解问题的环境时,常采用对象、分类法和层次性这类术语。面向对象分析与功能/数据分析方法相比,面向对象的结果比较容易理解和管理。面向对象分析方法的另一个优点是便于修改,早期阶段的修改容易提高软件的可靠性。
   题号导航      2016年上半年 信息系统监理师 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第34题    在手机中做本题