面向对象技术概要
面向对象技术的发展
60年代人们便提出了面向对象的概念,但几年前面向对象还只和程序设计语言有关,直到最近五、六年才开始真正的研究开发。从操作系统、数据库、用户界面,直到专家系统等所有同软件有关的领域,都有面向对象的产品面世。其中较著名的有1988年美国HP发表的面向对象的操作环境NewWave和美NEXT发表的装有面向对象环境的工作站。后来Apple推出的操作系统System7以及Microsoft新近推出的Windows/NT,也部分采用了面向对象技术。人们期待最大的,还要数1991年IBM和Apple合资成立的Taligent公司正在开发的下一代操作系统“Pink”(开发中暂用代号),它将从头到尾,都采用面向对象技术。
面向对象的基本概念
所谓面向对象就是指着眼于对象的一种方法,也就是把现实世界模型化。它认为现实世界由许多事物、对象构成,而事物之间系通过互相发出信报(消息)来进行处理的。因此,面向对象技术就是不以控制为中心,而是以事物(对象)的行为为中心,来考虑计算机上的处理体系。
这里的事物不仅包括人、器具等物理实体,还包括“销售表”、“库存表”这类逻辑事物。世界上存在的一切事物,都有其“本身”、“本身能做什么”、“本身能得到什么”这样的意义和功能。把事物的形象(数据)同其功能和意义(过程)一体化,作为处理的基本单位,便是面向对象。
所以在面向对象时,只要给出“执行它”这样的信报,便可完成处理。
以前采用的非面向对象的方法,正好与之相反,系把数据和过程截然分开。因此,即使规定了数据的详细构造,如果未记述一个一个的处理过程,那么什么处理也不能进行。就像事事依赖别人时一样,首先要调查数据,然后进行统计,最后才能指示做什么。而面向对象与之不同,只要给出“想做什么”的信报,便能完成处理。因为对方已经知道工作的内容。
面对对象的四种基本技术
如前文所述,面向对象的基本思想是,通过对象之间交换信报而进行处理。为此,需要采用以下四种基本技术。
封装化 它把数据和过程一体化,制成软件的部件。它是面向对象中基本又基本的方法,所以非常重要。正像在制造硬件时,用不着从设计LSI开始,而只要采用现成的芯片就可以一样,通过封装化,生成软件时也可以使用现成部件。
类/实例 分别表示对象的概念(框架)和实体。如果用以前的程序设计作比方,它相当于变量的类型(文字型、整型等)和变量的值。这对于面向对象的程序设计语言特别重要。因为属于同一类的对象,基本上具有同样方法,因此不必逐个定义其方法,这样就能高效率地生成各类对象。
类、继承 通过它使得上位类定义的内容,下位类可以照样使用。就是说生成新类时,可以只定义同已定义类的不同之处。这就使“差分程序设计”成为可能。当然,在整理对象间的层次关系时,类、继承也是有用的。
信报传递 它是用以指示对象做什么的唯一手段,是和封装化相配对使用的方法。除它之外,其它方法都不能对对象进行访问,是防止对象被错误使用的有效方法,因而可以大大提高可靠性。它同所谓的子程序调用类似但又有所不同,子程序调用要移交对程序的控制,而信报传递仅仅传送信息,这便是它们的差别之处。
面向对象同面向过程的比较
面向对象同目前使用的面向过程技术,在许多方面都不一亲。前者依赖信报传递,后者依赖过程的控制;前者使用实例、类,后者使用数据、数据类型;前者有继承功能,后者则没有;前者由系统决定处理的步骤,后者则由程序员决定处理的步骤。
今以了解各仓库的库存量为例,说明这二者的不同。假定有A、B、C三个仓库,为了了解各仓库的库存,要求编个程序。面向过程时当然要把控制流作为重点,程序员必须详细了解各仓库的管理制度,然后一一编写出了解A、B、C各仓库的库存的情况,确定调拔计划。使用面向对象技术时,只要生成管理各仓库库存的对象,向这一名为“商品管理”的对象,发出“如果库存不足请告知”的信报,系统便会安排处理。这时程序员用不着了解各仓库是如何进行管理的,因为对象自己知道怎么做。就像各仓库负责人用电话互通消息,便可调剂余缺一样,用不着了解对方内部是如何进行管理的。