面向对象程序设计技术概述
面向对象程序设计技术概述 4.4.1 对象复用
对象复用是最基本的复用方式,由于对象的封闭性,使得对象易于成为可复用的单元,当然,并不是所有对象在并发环境下均可自动地作为可复用的单元。为此,有些学者如Papathomas[19]等开始研究易于对象复用的并发面向对象程序设计准则。一般说来,易复用性来源于对象的独立性,即对象的设计对外界的并发环境应作尽可能少的假设和依赖。
4.4.2 方法与同步约束的复用
继承与同步分别是面向对象程序设计和并发程序设计的主要特征。通常,在面向对象的框架下,同步约束和方法的定义是相互关联的,因此其复用性的讨论往往放在一起进行,当然同步约束代码的复用仍然是讨论的重点。主要问题包括通过继承机制是否能够复用同步约束代码以及如何在并发面向对象程序设计语言中提供相应的支持。
(1) 继承异常
在并发环境中,由于可以同时有多个消息访问一个对象,并且对象之间的消息传递具有不确定性,所以为了保证对象的完整性和对象中数据的一致性,必须在对象中引入同步约束部分。在子类中有新方法引入时,可能会改变从父类中继承过来的方法的同步约束条件,因而必须对同步约束代码加以重新定义,当同步约束条件与方法定义融合在一起时,就可能对父类中原本可以继承的方法进行重定义,从而产生一系列的问题,即出现所谓的继承异常[20]。
(2) 解决途径
在并发面向对象的系统中,每个对象对接收到的消息通常依执行条件检查、执行相应方法以及相应的状态转换3个步骤处理,其中前、后两条是与同步约束紧密相关的两个部分,如果这两部分定义在类的方法体中,那么当子类中加入了新方法或对父类方法进行修改从而破坏了这些同步约束条件时就可能导致在子类中重新对包含此同步约束的方法进行定义,产生继承异常。
从根本上解决继承异常,从而对同步代码的复用提供全方位的支持,必须解决好以下3方面的问题:
① 同步代码的分离问题:它是解决继承异常,方法复用的最基本的条件。
② 同步代码的分解问题:分解问题是考虑如何合适地对同步代码进行模块化,使得子类能复用父类中部分同步代码,它是在分离的基础上试图达到同步代码的复用。
③ 同步代码的独立问题:同步代码的独立是对同步约束的抽象,使其独立于具体的方法,从而达到对同步约束框架的复用,如读-写同步约束框架。
上述3个问题分别是针对方法体、部分同步代码和整个同步代码3种不同程度的复用。或者说,前两个问题是从继承的角度来考虑代码复用,第3个问题则是对同步代码加以直接复用。到目前为止,尚未见一种方法能同时很好地满足这3方面的要求。
另外,值得提及的是,形式化并发面向对象语言如VDM++,Z++也是当前研究的热点,特别是在欧洲,现在形式化方法已不限于关键性和安全性软件的开发,开始用于工业性和商业性软件[21,22]。随着支撑工具的完善和坚定性的提高,形式化的并发面向对象程序设计方法将在大型软件系统开发中扮演越来越重要的角色。
5. 面向对象程序设计当前面临的问题
面向对象程序设计技术确实提供了真实世界较为自然的模型,为提高软件开发生产率提供了诱人的前景,然而OOP技术不是万能的,作为一新兴的技术在实现上还存在着某些缺欠,归纳起来主要有以下几方面的问题:
(1) 运行效率问题
OOP技术是针对当前的软件开发危机而产生的,它在提高编程效率方面所起的作用是勿庸置疑的,但是用OOP开发的程序通常较SP方法开发的程序在运行时的效率要低,虽然随着CPU速度的提高、内存容量的增加,对一般规模的OOP系统其运行速度用户是可以接受的,但当系统规模较大时,这一问题是不容忽视的。
(2) 类库的化简问题
OOP语言通常都提供了一个具有丰富功能的类库,用户可以有选择的使用它们进行程序开发,从而缩短软件开发生命周期。要成为一名高效的OOP程序员必须能熟练地运用类库,掌握类库中各个类提供的功能,但由于类库都过于庞大,程序员对它们的掌握要有一个时间过程,从普及、推广的角度,类库应在保证其功能完备的基础上进行相应的缩减。
(3) 类库的可靠性问题
虽然类库中提供的类都是经过精心设计、测试过的,但如此庞大的系统谁也无法保证类库中的每个类在各种环境中百分之百的正确,如果应用程序中使用了类库中某个存在问题的类,当经过几层继承后错误才显现出来,这时程序员对此将束手无策,有可能要推翻原来的全部工作,虽然这种情况出现的概率很低,但国外确曾有过这方面的报道[11]。
以上谈及的这些问题,不应该成为阻碍OOP技术发展的障碍,随着软、硬件技术的发展及OOP技术自身的完善,必将给软件开发技术、观念带来革命性的转变,使软件生产进入一个新的时代。
6.结束语
计算机硬、软件技术的发展日新月异,在很短的时间内即涌现出大量的各种各样的软件开发工具,并在迅速不断地更新换代,给编程人员进行程序设计带来了极大的方便。在不久的将来,相信面向对象程序设计技术必将应用到更多的程序设计方法中。
参考文献
[1] 鸿志创作组. Visual C++5.0编程指南[M]. 北京:科学出版社,1998
[2] 李长江等. C++使用手册[M]. 北京:电子工业出版社,1995
[3] 何立起. Borland C++ for Windows程序设计[M]. 北京:人民邮电出版社,1994
[4] 王松等. Borland C++使用技术入门精解[M]. 成都:电子科技大学出版社,1995
[5] [美]James Jaworshi著,邱仲潘等译. Java Script与JScript从入门到精通[M]. 北京电子工
业出版社,1999
[6] 沈一梁等. Visual C++程序设计[M]. 北京:科学出版社,1996.1
[7] [美]Davis Chapman著,骆长乐译. 学用Visual C++6. 0[M].北京:清华大学出版社,
1999
[8] [美]高永强编著. 全C编程. 北京:清华大学出版社,2002.6 450—515
[9] 周之英编著. 现代软件工程(第二册). 北京:科学出版社,2003.1268-364
[10] 门槛创作室Visual J++6. 0实例教程[M]北京:电子工业出版社,1999
[11] Namir Clement Shammas, Teach Yourself Visual C++ 1.5 in 21 Days. USA: Sams
Publishing,1994 230一420
[12] 杨大军、张鸣等. 并发面向对象程序设计语言研究与发展. 计算机研究与发展. Vol.35,No.9,Sep. 1998
[13] 北京华中兴业科技发展有限公司. Windows98中文版使用大全[M]. 北京:人民邮电
出版社,1998
[14] 周予滨主编. 学习使用Windows98中文版[M ]. 北京:科学出版社,1998
[15] Lu J. Introducing data decomposition into VDM fox tractable development of programs. ACM SIG PLAN Notices,1995, 30(2):41- 50
[16] Lu J. Developing parallel object-oriented programs in the framework of VDM. In: M cG regor J D ed. Annals of Software Engineering一一Special Volume on Object-Oriented Software Engineering: Foundations and Techniques, Vo12. Netherlands: Science Publishers, 1996. 199-211
[17] Laffra C. PROCOL: A concurrent object language with protocols, delegation, persistence and constraints[ Ph D dissertation] .Erasmus University, Rotterdam,1992
[18] Agha G, Callsen C J. ActorSpace: An open distributed programming paradigm. ACM SIGPLAN Notices, 1993, 28(7):23-32
[19] Papathomas M.Concurrency in object-oriented programming languages. In: Nierstrasz O, Tsichritzis Deds. Object-Oriented Software Composition. Upper Saddle River, New Jersey: Prentice Hall, 1995. 31- 68
[20] Matsuoka S, Yonezawa A. Analysis of inheritance anomaly in object-oriented concurrent languages. In: Agha G, Wegner P, Yonezawa A eds. Research Directions in Concurrent Object-Oriented Programming. Cambridge, Mass: MIT press,1993.107 -150
[21] Ram D J, Vivekananda N, Rao C S et al. Constraint meta-object: A new object model fox distributed collaborative designing. IEEE Transactions on Systems, Man, and Cybernetics一一Part A: Systems and Humans, 1997, 27(2): 208-221
[22] H inchey M G, Bowen J P. Applications of Formal Methods. Upper Saddle River. New Jersey: Prentice-Hall, 1995
[23] [加]Timothy C.Lethbridge ,Robert Laganiere著, 张红光, 温遇华等译. 面向对象软件工程. 北京:机械工业出版社, 2003.4 19-40
[24] 邵维忠, 杨芙清 著.面向对象的系统设计. 北京:清华大学出版社, 2003.2 26-36
[25] Meyer B. System atic concurrent object-oriented programming. Communications of the ACM,1993, 36(9):56- 80