面向对象的程序设计

来自中文百科,文化平台
跳转至: 导航搜索

  向对象的程序设计汉语拼音miàn xiàng duì xiàng de chéng xù shè jì),(object oriented programming),基于面向对象方法学原理的程序设计。英文简称OOP

基本概念

  认识一个系统的过程和方法同用于分析、设计和实现一个系统的过程和方法很不一致。对一个系统的认识是一个渐进过程,是在继承了以往的有关知识的基础上、多次迭代往复而逐步深化的。在这种认识的深化过程中,既包括从一般到特殊的演绎,也包括从特殊到一般的归纳。而以往用于分析、设计和实现一个系统的过程和方法大部分是瀑布型的,即后一步是实现前一步所提出的需求,或者是进一步发展前一步所得出的结果。因此,当越接近系统设计(或实现)的后期时,如要对系统设计(或实现)的前期的结果作修改就越加困难。同时也只有在系统设计的后期才能发现在前期所铸成的一些差错。当这个系统越大、问题越复杂时,由于这种对系统的认识过程和对系统的设计(或实现)过程不一致所引起的困扰也就越大。为了解决这种不合理的现象,就应使分析、设计和实现一个系统的方法尽可能地接近认识一个系统的方法;换言之,就是应使描述问题的问题空间和解决问题的方法空间在结构上尽可能地一致,也就是使分析、设计和实现系统的方法学原理与认识客观世界的过程尽可能地一致。这就是面向对象技术的方法学的出发点和所追求的基本原则。

  和人们认识世界的规律一样,面向对象技术的基本方法学认为:客观世界是由许多各种各样的对象所组成,每种对象都有各自的内部状态和运动规律,不同对象间的相互作用和联系就构成各种不同的系统,构成客观世界。当设计和实现一个客观系统时,如能在满足需求的条件下把系统设计成是由一些不可变的(相对固定的)部分所组成的最小集合,则这个设计就是优秀的,而这些不可变的(相对固定的)部分就被看成是一些不同的对象。

基本特征

  基于面向对象方法学原理的程序设计,至少应当具有以下的特征:①模块性。一个对象是一个可以独立存在的实体模块。从外部来看这个模块,只了解这个模块具有哪些功能,至于这个模块的内部状态,以及如何实现这些功能的细节都是“隐蔽”在模块内部的。一个模块的内部状态是不受(或很少受)外界影响的。同时,一个模块内部状态的改变也不会影响到其他模块的内部状态。因此,各模块间的依赖性很小,从而它们才有可能较为独立地为各个系统所选用。②继承性和类比性。人们是通过对客观世界中的各种对象进行分类及合并来认识世界的,每个具体的对象都是在它所属的某一类对象(类)的层次结构中占据一定的位置。因此,下一层次的对象应具有上一层次对象的某些属性,在面向对象技术的方法学中,把它称为是下一层次的对象继承了上一层次的对象的某些属性。另一方面,当发现一些不同的对象具有某些相同的属性时,也常常把它们归并成一类,在面向对象技术方法学中,把它称为是通过对象间的类比而实现了归类。③动态连接性。在客观世界中,由于存在各式各样的对象以及它们之间的相互连接和作用,从而构成了各种不同的系统。因此,把对象和对象间所具有的一种统一、方便和动态地连接和传递消息的能力和机制称为动态连接性。④易维护性。任何一个对象都是把如何实现本对象功能的细节隐藏在该对象的内部。因此,无论是完善本对象的功能,还是改正功能实现的细节,都被囿于该对象的内部,而不会传播给外部,这就增强了对于对象和整个系统的易维护性。

基本方法

  传统的结构化的程序设计方法是面向数据的,它是将大量复杂的数据结构分离成一些独立的、彼此无关的简单的数据结构。将这些简单的数据结构映射成小程序,再用小程序组装成应用软件。基于面向对象的方法学原理进行程序设计时,是按照以下的方法进行的:①确定构成该系统的各个组成部分(即对象)及它们的属性。②确定每一组成部分(即对象)应完成的功能。③建立每一组成部分(即对象)与其他组成部分(也是对象)的相互关系。④建立各个组成部分(即对象)间的通信关系和接口形式。⑤进一步协调和优化各个组成部分的性能及相互间的关系,使得该系统成为是由不同的组成部分(即不同的对象)的最小集合所组成的。⑥分析、设计及实现每个组成部分(即对象)的功能实现细节。

  面向对象的程序设计是对问题域进行自然分割,将问题的数据及其行为功能结合一体。对象直接对应于软件结构。对象统一了数据和处理,对象间的通信(消息)统一了数据流和控制流。程序的执行就是对象间的消息传送。

  程序设计语言 已设计出多种面向对象的程序设计语言,如基于对象的语言ADA(在ADA中,程序包就是对象);基于类的语言CLU(在CLU中,Cluster实际上就是类);和面向对象的语言Smalltalk、C++等。各种语言之间在封装、数据抽象、继承性、连接方式、存储管理、操作符重载、软插件库、并行性等方面有相同和不同之处。

  程序设计环境 在面向对象的开发方法中,软件系统是由对象组成的,而对象则是一个能完整地反映现实问题本质的实体。面向对象的程序设计方法使程序人员摆脱了具体的数据格式与过程,而可集中精力去研究所要处理的对象。由于数据抽象、信息隐蔽机制使得对象的内部实现与外界相独立,从而构成了一个可重用的软件成分,即使对对象内部做修改,也不会引起外部(即系统)的变化。这种方法在创建和组合可重用软件成分上也有很大的灵活性,它可通过继承已有的对象性质(数据和操作)产生新的对象。

  几乎所有的面向对象的程序设计环境都配有很丰富、实用的基本类库(有些还配有面向对象的数据库),这对提高系统软件和用户软件的可重用性发挥了极大的作用。