面向对象程序设计技术概述

类别:软件工程 点击:0 评论:0 推荐:
  面向对象程序设计技术概述

葛继科

(重庆西南农业大学327#信箱 400716)

 

摘要:介绍了面向对象程序设计技术的产生和现状,陈述了面向对象程序设计技术与面向过程程序设计技术的区别,论述了面向对象程序设计的一些关键技术及面向对象程序设计方法。列举了面向对象程序设计技术中的新技术及存在的问题。

 

关键词:面向对象程序设计,类,封装,继承,多态,并发对象模型

 

Object-Oriented Programming

Abstract   The appearance and current development of the object- oriented programming

technique are reviewed. The difference between the object-oriented programming technique and the process-oriented programming technique are mentioned, and some key points of the Object- Oriented Programming technique are introduced. The object-oriented programming methods are given. New technology: concurrent object-oriented programming and some questions are listed. At last ,a web page is designed.

 

Key Words object-oriented programming, class, encapsulation, inheritance, polymorphism, concurrent object-oriented model

 

引言     

     随着计算机技术的不断发展,其软硬件之间的差距越来越大,造成了计算机发展的不均衡,当系统较为复杂时,常规的软件工具、技术和概念已不足以应付,从而使软件开发陷人了困境,即所谓的“软件危机”。尽管软、硬件发展的这种差距自计算机出现以来始终存在,但进入90年代后这种差距更加明显,在这一背景下,面向对象程序设计技术逐步兴起,随着它的不断完善,逐步进入实用阶段而受到广大软件开发者的青睐,吸引了众多的人士去研究、使用它,使之在软件工程、人工智能等领域得到了十分广泛的应用。人们把面向对象的程序设计语言看作是计算机软件产业的一次革命。本文对面向对象的程序设计技术的现状及发展进行简要介绍。

1.面向对象程序设计的关键技术

1.1  类和对象[1,2,8]

在面向对象程序设计中,“对象(Object)”是系统中的基本运行实体,是有特殊属性(数据)和行为方式(方法)的实体。即对象有两个元素构成:① 一组包含数据的属性;② 允许对属性中包含的数据进行操作的方法。也可以说,“对象”是将某些数据代码和对该数据的操作代码封装起来的模块,是有特殊属性(数据)和行为方式(方法)的逻辑实体。

   对象包含了数据和方法,每个对象就是一个微小的程序。由于其它对象不能直接操纵该对象的私有数据,只有对象自身的方法才能得到它,这就使对象具有很强的独立性,因此可把对象当作软件的基本组件。在面向对象的程序设计中,可使用若干对象来建立所需要的各种复杂的应用软件,即通过对象组合,创建具体的应用。

   对象的这种软件组件作用使它具有很强的可重用性。用户在开发应用程序时,可以调用系统中的各种对象,作为自己的应用程序的基本组件。这样就使新增代码明显减少,而且增加了程序的可靠性和可维护性。

   类(Class)是对具有公共的方法和一般特殊性的一组基本相同对象的描述。一个类实质上定义的是一种对象类型,由数据和方法构成,它描述了属于该类型的所有对象的性质。对象在执行过程中由其所属的类动态生成,一个类可以生成不同的对象。在面向对象的程序设计中,对象是构成程序的基本单位,每个对象都属于某一个类。对象也可称为类的一个实例(Instance)。

    从理论上讲,类是一个ADT(抽象数据类型)的实现。信息隐蔽原则表明类中的所有数据是私有的。类的公共接口是由两种类型的类方法组成:一种是返回有关实例状态的抽象辅助函数;另一种是用于改变实例状态的变换过程。

一个类可以由其它的已存在的类派生出来,类与类之间按具体情况以层次结构组织起来,在这种层次结构中,处于上层的类称为父类或基类,处于下层的类称为子类或派生类。

    抽象类[8](Abstract Class)是一种不能建立实例的类。抽象类将有关的类组织在一起,提供一个公共的根,其它一系列的子类都从这个根派生出来。抽象类刻画了公共行为的特征并将这些特征传给它的子类。通常一个抽象类只描述与这个类有关的操作接口或这些操作的部分实现,完整的实现留给一个或几个子类,即可用抽象类作为派生类的基类。抽象类的通常用途是用来定义一种协议(或概念)。

1.2  方法和消息 [1,2, 8, 10]

   程序语句操纵一个对象来完成相应的操作,与对象有关的完成相应操作的程序语句称为“方法”(Method)。方法是对象本身内含的执行特定操作的函数或过程。方法的内容是不可见的,用户不必过问,只要执行它就可以了。方法的操作范围只能是对象内部的数据或对象可以访问的数据。

   消息(Message)用来请求对象执行某一处理或回答某些信息的请求,消息统一了数据流和信息流。在面向对象的程序设计中通过消息来请求对对象进行操作,对象间的联系或称相互作用也是通过消息来完成的。消息只包括发送者的请求,不指示接收者具体该如何去处理这些消息。对象接收一个消息后,由该对象所含的方法决定该对象如何处理消息,即对象由消息控制操作。

   一个对象可以接收不同形式、不同内容的多个消息;相同形式的消息可以送给不同的对象;不同的对象对于形式相同的消息可以有不同的解释,做出不同的反映。因此,只要给出对象的所有消息模式及对应于每个消息的处理方法,也就定义了一个对象的外部特征。

1.3  继承性(Inheritance) [1,2,5,8] 

继承性指的是一个新类可以从现有的类中派生出来,新类具有父类中所有的特性,直接继承了父类的方法和数据,新类的对象可以调用该类及父类的成员变量和成员函数。继承是从一种对象类型构造另一种对象类型的一个主要方法。利用继承性,可以在已经定义的对象类型基础上创建更复杂、更专业的对象类型,只要加进所需属性和方法,将新对象与上级对象区别开来即可。一旦创建一个对象类型即可多次复用,创建多个子对象和多代子对象。继承性是自动的共享类、子类和对象中的方法和数据的机制,合理使用继承可以减少很多的重复劳动。如果类实现了一个特别的功能,那么它的派生类就可以重复使用这些功能,而不再需要重新编程。

1.4  封装性(Encapsulation) [2,4,5,10]

   任何程序都包含两个部分代码和数据。在SP模式中,数据在内存中进行分配,并由子程序和函数代码处理;而在OOP模式中是将处理数据的代码、数据的声明和存储封装在一起。一个对象中的数据和代码相对于程序的其余部分是不可见的,它能防止那些非期望的交互和非法的访问。

   封装就是将对象的属性和方法封装到具有适当定义接口的容器中。对象接口提供的方法和属性应使对象能够如期使用。

   封装的功能取决于两个重要概念:模块化和信息隐藏。模块化是对象的自给自足的特性,它不会访问定义接口以外的其它对象。信息隐藏是指将对象的信息限制在对象接口使用所必须的范围内,删除对象中仅供对象内部操作的信息。

   封装是一种信息隐蔽技术,用户只能见到对象封装界面上的信息,对象内部对用户是隐蔽的。封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需用设计者提供的消息来访问该对象即可。

1.5  多态性(Polymorphism)[1,2,4,5,10]

   所谓多态是指一个名字可具有多种语义,多态引用表示可引用多个类的实例。多态可为一种对象类定义一种方法的多种实现方案,这些方法是通过类型和可接受的参数来区分的。

   多态性可使公共的信息传送给基类对象及所有的派生类的对象,允许每一个基类的对象按适合于其定义的方式响应信息格式。

   多态性有时也指方法的重载。方法的重载是指同一个方法名在上下文中有不同的含义,是该类以统一的方式处理不同数据类型的一种手段。它是静态的,这是因为在实现类并编写方法之前需要考虑将要遇到的所有数据类型。子类在动态运行时提供了更丰富的多态性。

   从对象接收消息后的处理方式看,多态性指的是同一个消息被不同的对象接收时解释为不同意义的能力。也就是说,同样的消息被不同的类对象接收时,产生完全不同的行为。利用多态性,用户能发送一般形式的消息,而将其所有实现的细节留给接收消息的对象去解决。

2.面向对象程序设计方法

2.1  面向对象程序设计方法的基本思想[9]

(1) 认为世界由各种对象组成,任何事物都是对象,是某个对象类的实例;复杂的对象可以由比较简单的对象以某种方式组成。按照这个观点,整个世界也可以从一些最原始的对象开始,经过层层组合而成。因此,可以说整个世界就是一个最复杂的对象。

(2) 把所有对象都划分成各种对象类,每个对象类都定义了一组方法,所谓方法实际上是允许施加于该类对象上的各种操作。对象和传统的数据有本质区别,不是被动地等待对它执行某种操作;相反,它是进行处理的主体,必须发送消息请求对象执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。

(3) 对象之间除了互相传递消息的联系之外再没有其它联系。一切局部对象的信息和实现方法,都被封装于相应的对象类的定义之中。在外界是不可见的、是封装的。

(4) 对象类将按照类、子类与父类的关系构成一个层次结构的系统。在这种层次结构中,上层对象类所具有的性质可以被下层对象类继承,除非在下层对象类中又对相应的属性作了重新描述,这时将以新属性为准,也就是说,低层的属性将屏蔽高层的同名属性,这种特性称为对象类之间的属性继承关系,它有助于避免信息冗余,也是实现软件重用的重要机制。

2.2  面向对象的程序设计方法的步骤[,23, 24]

面向对象软件开发的主要目的是用可重用软件分解基类和用子类加快问题求解,缩短开发时间和减少软件开发费用;通过改变一个或多个类的实现,使其影响局部化,从而降低软件维护费用。其步骤略述为:

① 选择主要数据对象;

② 定义每个对象能够接收和发送的消息;

③ 说明为实现每个对象所必须的数据元素;

④ 用小说明书说明每个对象的方法;

⑤ 最终优化整个设计。

2.3  编写Windows应用程序[3,4,6,7,13,14]

  创建Windows应用程序的步骤为:

  ① 利用其提供的项目管理器开始一个新项目;② 创建窗体;③ 将各种所需对象、组件、构件、类库函数等放入窗体内;④ 处理窗体、构件相应的事件,编写相应的处理程序代码;⑤ 编译连接程序和相关组件、构件和类库函数,形成目标程序文件一一应用程序文件。

本文地址:http://com.8s8s.com/it/it37176.htm