免费智能真题库 > 历年试卷 > 信息系统项目管理师 > 2014年下半年 信息系统项目管理师 上午试卷 综合知识
  第25题      
  知识点:   面向对象基本概念   多态   多态性
  关键词:   对象   多态性   多态        章/节:   信息系统及其技术和开发方法       

 
对象的多态性是指()。
 
 
  A.  两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同的响应的方式
 
  B.  两个或多个属于不同类的对象,对于同一个消息(方法调用)作出相同的响应的方式
 
  C.  两个或多个属于同一类的对象, 对于同一个消息(方法调用)作用于不同类型的数据,作出不同响应的
 
  D.  两个或多个属于同一类的对象, 对于不同消息(方法调用)作用于不同类型的数据,作出不同响应的
 
 
 

 
  第27题    2015年上半年  
   27%
以下关于UML的叙述中,()是正确的。
  第26题    2011年上半年  
   49%
假设ICBCA_ACCOUNT和CBCA_ACCOUNT是用计算机语言定义的两个不同的类。前者代表工商银行账户,后者代表建设银行账户。ZhangSan_IC..
  第21题    2013年上半年  
   34%
统一建模语言(UML)是一种定义良好的可视化建模语言,其中(21)是对一组动作序列的描述,系统执行这些动作将产生一个对特定的参..
   知识点讲解    
   · 面向对象基本概念    · 多态    · 多态性
 
       面向对象基本概念
        面向对象是一种运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法。面向对象的主要思想是将现实世界中的对象映射为问题域中的要素,从而有效地连接计算机和现实问题域。面向对象的基本概念有对象、类、抽象、封装、封装、继承、多态、消息、模式和复用等。
        对象
        对象是由数据及其操作所构成的封装体,是系统中用来描述客观事物的一个封装,是构成系统的基本单位,采用计算机语言描述,对象是由一组属性和对这组属性进行操作的一组服务构成。
        对象的三要素:对象标识、对象状态和对象行为。如对于教师Joe,其个人状态信息包括性别、年龄和职位等,其行为特征为授课,则Joe就是封装后的一个典型对象。
        
        类是现实世界中实体的形式化描述,类将该实体的数据和函数封装在一起。类的数据也叫属性、状态或特征,它表现类静态的一面。类的函数也叫功能、操作或服务,它表现类动态的一面。
        如教师类中,教师共同的状态通过属性表现出来,共同的行为通过操作表现出来。可用下图来表示。
        
        教师类的属性和操作
        类和对象的关系
        对象是类的实际例子,如所有教师可以抽象为教师类,教师Joe则是教师类的一个对象。
        类和对象的关系如下:
        .每个对象都是某个类的实例。
        .每个类在某一时刻都有零或更多的实例。
        .类是静态的,它们的存在、语义和关系在程序执行前就已经定义好了;对象是动态的,它们在程序执行时可以被创建和删除。
        .类是生成对象的模板。
        抽象
        抽象是通过特定的实例抽取共同特征以后形成概念的过程。它强调主要特征,忽略次要特征。一个对象是现实世界中一个实体的抽象,一个类是一组对象的抽象,抽象是一种单一化的描述,它强调给出与应用相关的特性,抛弃不相关的特性。
        封装
        封装是将相关的概念组成一个单元,然后通过一个名称来引用它。面向对象封装是将数据和基于数据的操作封装成一个整体对象,对数据的访问或修改只能通过对象对外提供的接口进行。
        继承
        继承表示类之间的层次关系,这种关系使得某类对象可以继承另外一类对象的属性和操作。继承又可分为单继承和多继承,单继承是子类只从一个父类继承,而多继承中的子类可以从多于一个的父类继承,Java是单继承的语言,而C++允许多继承。
        如类B继承了类A,则类B中的对象具有类A的一切特征,类B还可以有一些扩展。类A称为基类、父类或超类,类B称为类A的派生类或子类。
        多态
        多态性是一种方法,这种方法使得在多个类中可以定义同一个操作或属性名,并在每个类中可以有不同的实现。多态性使得一个属性或变量在不同的时期可以表示不同类的对象。
        动态绑定
        绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般的程序设计语言中,绑定是在编译时进行的,叫做静态绑定。动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才进行。
        动态绑定是和类的继承以及多态相联系的。在继承关系中,子类是父类的一个特例,所以父类对象可以出现的地方,子类对象也可以出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。
        接口
        接口就是对操作规范的说明。接口只是说明操作应该做什么,但没有定义操作如何做。接口可以理解为类的一个特例,它只规定实现此接口的类的操作方法,而把实现细节交由实现该接口的类完成。
        消息
        消息(Message)是对象内操作之间的交互手段。一个对象执行一个操作后产生了消息,这个消息可以触发另一个操作。
        组件
        组件也叫构件。组件是软件系统可替换的、物理的组成部分,它封装了实现体(实现某个职能)并提供了一组接口的实现方法。可以认为组件是一个封装的代码模块或大粒度的运行时的模块,也可将组件理解为具有一定功能、能够独立工作或同其他组件组合起来协调工作的对象。
        模式
        每个模式描述了一个不断重复发生的问题,以及该问题的解决方案。它是一条由三部分组成的规则,表示了一个特定环境、一个问题和一个解决方案之间的关系。
        设计模式通常是对于某一类软件设计问题的可重用的解决方案。设计模式使人们可以更加简单和方便地去复用成功的软件设计和体系结构,能够帮助设计者更快更好地完成系统设计。
        设计模式的四要素:
        .模式名称(Pattern Name)
        .问题(Problem)
        .解决方案(Solution)
        .效果(Consequences)
        设计模式确定了所包含的类和实例,它们的角色、协作方式以及职责分配。按照设计模式的目的可以分为三类:
        .创建型模式:与对象的创建有关。
        .结构型模式:处理类或对象的组合。
        .行为型模式:对类或对象怎样交互和怎样分配职责进行描述。
        复用
        软件复用是指将已有的软件及其有效成分用于构造新的软件或系统。构件技术是软件复用实现的关键。
 
       多态
        多态性(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关键字,不论是自己定义的还是编译器默认生成的,都自动成为虚函数。
        一个类的构造函数会在执行自己代码之前,依派生顺序自动调用它的所有直接基类的构造函数;一个类的析构函数也会在执行完自己的代码之后,以与构造函数调用次序相反的顺序自动调用其所有直接基类的析构函数。一般来说,一个类如果定义了虚函数,则应该将析构函数也定义成虚函数。
 
       多态性
        类的某些操作允许同一名称具有多种语义。OOPL的这些特点使程序员进行面向对象程序设计时与进行过程式的程序设计有很大的不同,体现在以下这些方面。
        .设计程序不采用顺序性的结构,而是采用对象本身的属性与方法来解决问题。
        .在解决问题的过程中,可以直接在对象中设计事件处理程序(接受事件消息),而不用调用子过程严格地按顺序执行,很方便地让用户实现自由无顺序的操作。
        .数据与程序不是分离的,数据是特定对象的数据,也只有对象的函数或过程才能对数据进行处理,一个对象中的函数或过程共享对象的数据,解决了因调用子过程出现大量数据传递的情况(如函数返回值和较多参数)。
        .不用设计公用程序模块,因特定方法下的公用模块很难再被扩展为更复杂的处理方式,只需设计类就可以实现重用,而且类库中提供大量基类,掌握它们后可以加快开发过程,开发小组还可以按自己设想的基类放入类库共享。
        .OOPL非常适合于Windows环境下的程序开发,可以充分利用Windows的各种资源来构造应用程序,这也就需要程序员比较熟悉Windows。
   题号导航      2014年下半年 信息系统项目管理师 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第25题    在手机中做本题