摘要 面向对象程序设计模型中的并发行为 摘要 面向对象软件开发技术已广泛应用于软件系统的设计与构造,面向对象模型 是对客观世界活动的自然刻划,其中的对象是对客观世界中有形或无形实体的直 接模拟。用面向对象技术开发软件,能够减小问题域与解题域之间的语义间隙, 使得软件开发过程显得比较自然,从而可提高软件生产率。 客观世界中的活动往往是并发进行的,而目前大多数面向对象模型只提供了 描述系统顺序执行的能力。为了加强面向对象模型的表达能力,必须在面向对象 模型中提供并发描述机制,使其能够描述客观世界中的并发行为。 本论文工作的主要目的就是研究如何在面向对象模型中引进并发描述机制, 使其能够描述客观活动的并发行为,并且,所引进的并发描述机制要与面向对象 模型相容,不破坏面向对象模型中已有的一些特性。 本论文首先分析了在面向对象模型中引进并发所面临的各种问题,并给出了 现有的一些解决方案。然后,在研究了现有的一些并发面向对象模型的基础上, 论文提出了一个基于并发对象的并发面向对象模型,在该模型中,并发机制以一 种与面向对象模型相集成的方式被引进。对象可以有私有执行线程,各对象的私 有线程之间以及对象内部的各线程之间并发执行:对象间采用远程过程调用方式 进行通信,对象对消息的接收以及内部各线程之间的并发执行进行控制:并发对 象类的并发属性可以从父类继承。论文还用CSP对所提模型中并发对象的语义进行 了形式化描述,论文最后用所提模型对C++进行了并发扩充,使得C+能够用于描 述并发计算。 关键词:面向对象,程序设计,并发对象,CSP,C++ i
摘 要 i 面向对象程序设计模型中的并发行为 摘 要 面向对象软件开发技术已广泛应用于软件系统的设计与构造,面向对象模型 是对客观世界活动的自然刻划,其中的对象是对客观世界中有形或无形实体的直 接模拟。用面向对象技术开发软件,能够减小问题域与解题域之间的语义间隙, 使得软件开发过程显得比较自然,从而可提高软件生产率。 客观世界中的活动往往是并发进行的,而目前大多数面向对象模型只提供了 描述系统顺序执行的能力。为了加强面向对象模型的表达能力,必须在面向对象 模型中提供并发描述机制,使其能够描述客观世界中的并发行为。 本论文工作的主要目的就是研究如何在面向对象模型中引进并发描述机制, 使其能够描述客观活动的并发行为,并且,所引进的并发描述机制要与面向对象 模型相容,不破坏面向对象模型中已有的一些特性。 本论文首先分析了在面向对象模型中引进并发所面临的各种问题,并给出了 现有的一些解决方案。然后,在研究了现有的一些并发面向对象模型的基础上, 论文提出了一个基于并发对象的并发面向对象模型,在该模型中,并发机制以一 种与面向对象模型相集成的方式被引进。对象可以有私有执行线程,各对象的私 有线程之间以及对象内部的各线程之间并发执行;对象间采用远程过程调用方式 进行通信,对象对消息的接收以及内部各线程之间的并发执行进行控制;并发对 象类的并发属性可以从父类继承。论文还用CSP对所提模型中并发对象的语义进行 了形式化描述,论文最后用所提模型对C++进行了并发扩充,使得C++能够用于描 述并发计算。 关键词:面向对象,程序设计,并发对象,CSP,C++
Abstract Concurrent Behavior in Object-Oriented Programming Models Abstract Object-oriented(OO)technique has been widely used in the design and construction of software systems.Object-oriented models describe the real world activities in a natural way.The objects in the models are the direct simulations of the entities in the real or mind world.Developing software with OO technique can minimize the semantic gap between problems and solutions.It makes software development processes more natural and,thus, promotes software productivity. The real-world activities are usually carried out concurrently.Currently,OO models only support the specification of the sequential behaviors of a system.To model the concurrent behaviors of the real-world activities,concurrency must be introduced into OO models. The main concern of this dissertation is to study how to introduce concurrency into OO models.The introduced concurrent mechanism should be compatible with OO models and does not hamper the existing properties of OO models. In this dissertation,all kinds of problems encountered in introducing concurrency into OO models are analyzed first.Then,based on the study of some existing concurrent object-oriented models,the dissertation present a concurrent object-oriented model around concurrent objects.In the model,concurrency is introduced in an integrated way. Objects may have private threads.Threads in objects execute concurrently.The remote procedure calls are used as communication mechanism between objects.Objects control their own message accepting and the concurrent executions of their private threads.The specification of concurrency control in a class can be inherited by its subclasses.The formal semantics of the concurrent objects in the presented model has been given in CSP.At last, C++has been extended based on the presented concurrent object-oriented model. Keywords:Object-Oriented,Programming,Concurrent Objects,CSP,C++ ii
Abstract ii Concurrent Behavior in Object-Oriented Programming Models Abstract Object-oriented(OO) technique has been widely used in the design and construction of software systems. Object-oriented models describe the real world activities in a natural way. The objects in the models are the direct simulations of the entities in the real or mind world. Developing software with OO technique can minimize the semantic gap between problems and solutions. It makes software development processes more natural and, thus, promotes software productivity. The real-world activities are usually carried out concurrently. Currently, OO models only support the specification of the sequential behaviors of a system. To model the concurrent behaviors of the real-world activities, concurrency must be introduced into OO models. The main concern of this dissertation is to study how to introduce concurrency into OO models. The introduced concurrent mechanism should be compatible with OO models and does not hamper the existing properties of OO models. In this dissertation, all kinds of problems encountered in introducing concurrency into OO models are analyzed first. Then, based on the study of some existing concurrent object-oriented models, the dissertation present a concurrent object-oriented model around concurrent objects. In the model, concurrency is introduced in an integrated way. Objects may have private threads. Threads in objects execute concurrently. The remote procedure calls are used as communication mechanism between objects. Objects control their own message accepting and the concurrent executions of their private threads. The specification of concurrency control in a class can be inherited by its subclasses. The formal semantics of the concurrent objects in the presented model has been given in CSP. At last, C++ has been extended based on the presented concurrent object-oriented model. Keywords: Object-Oriented, Programming, Concurrent Objects, CSP, C++
目录 目录 第一章前言。 1 1.1面向对象模型 1.1.1对象与消息 1 1.1.2类与继承 2 1.1.3多态和动态定连 …2 1.1.4类型与子类型 2 1.1.5相关的术语 1.2并发与面向对象模型 1.3主要工作 1.4论文安排. 5 第二章在面向对象模型中引进并发 6 2.1并发系统的一般模型 6 2.2面向对象模型的并发执行 8 2.2.1异步消息传递 8 2.2.2主动对象. ..9 2.2.3对象内部并发 9 2.3对象的并发控制…… 。。 11 2.3.1集中控制和分散控制 11 2.3.2隐式控制和显式控制. 12 2.3.3对象并发状态的表示.… 12 2.4并发与继承. 13 2.4.1同步限制、同步代码与同步机制 14 2.4.2继承异常 14 2.5对象与进程. 15 2.6现有系统介绍. 15 2.6.1 Actor模型 16 2.6.2ABCL/1. 17 2.6.3P00L. 19 2.6.4 Hybrid...... 20 2.6.5.DRAGOON 21 试
目 录 iii 目 录 第一章 前言 ......................................................................................................... 1 1.1 面向对象模型......................................................................................... 1 1.1.1 对象与消息.................................................................................. 1 1.1.2 类与继承...................................................................................... 2 1.1.3 多态和动态定连 .......................................................................... 2 1.1.4 类型与子类型 .............................................................................. 2 1.1.5 相关的术语.................................................................................. 3 1.2 并发与面向对象模型 ............................................................................. 3 1.3 主要工作................................................................................................. 4 1.4 论文安排................................................................................................. 5 第二章 在面向对象模型中引进并发................................................................... 6 2.1 并发系统的一般模型 ............................................................................. 6 2.2 面向对象模型的并发执行...................................................................... 8 2.2.1 异步消息传递 .............................................................................. 8 2.2.2 主动对象...................................................................................... 9 2.2.3 对象内部并发 .............................................................................. 9 2.3 对象的并发控制................................................................................... 11 2.3.1 集中控制和分散控制................................................................. 11 2.3.2 隐式控制和显式控制................................................................. 12 2.3.3 对象并发状态的表示................................................................. 12 2.4 并发与继承........................................................................................... 13 2.4.1 同步限制、同步代码与同步机制 ............................................. 14 2.4.2 继承异常.................................................................................... 14 2.5 对象与进程........................................................................................... 15 2.6 现有系统介绍....................................................................................... 15 2.6.1 Actor 模型.................................................................................. 16 2.6.2 ABCL/1 ...................................................................................... 17 2.6.3 POOL ......................................................................................... 19 2.6.4 Hybrid......................................................................................... 20 2.6.5. DRAGOON ............................................................................... 21
目录 2.6.6ACT++ 21 2.6.7 Smalltalk ConcurrentSmalltalk 22 2.6.8 Eiffel、Eiffel/和CEiffel 25 2.7小结. 30 第三章基于并发对象的并发面向对象模型 31 3.1对象系统的并发执行 31 3.1.1对象的私有执行线程 31 3.1.2对象内部的并发 33 3.1.3对象的自治性 33 3.2对象间的通信… 34 3.2.1远程过程调用 34 3.2.2对象的通信对象 35 3.3对象的并发控制, 4… 36 3.3.1条件同步与互斥 36 3.3.2缺省并发控制 37 3.3.3内部并发控制 38 3.4并发对象类的继承 40 3.4.1条件同步控制的继承。 40 3.4.2内部并发控制的继承 40 3.5实例 41 3.6与相关工作的比较.. 47 3.7小结 48 第四章并发对象的形式语义 50 4.1CSP简介… 50 4.2并发对象的定义 51 4.3并发对象的CSP语义 52 4.3.1对象的进程模型 52 4.3.2对象各进程的CSP表示 53 4.3.3消息传递语义 55 4.4小结 56 第五章NDC++:C++的并发扩充 57 iv
目 录 iv 2.6.6 ACT++ ....................................................................................... 21 2.6.7 Smalltalk 和 ConcurrentSmalltalk................................................ 22 2.6.8 Eiffel、Eiffel//和 CEiffel ............................................................. 25 2.7 小结 ...................................................................................................... 30 第三章 基于并发对象的并发面向对象模型 ..................................................... 31 3.1 对象系统的并发执行 ........................................................................... 31 3.1.1 对象的私有执行线程................................................................. 31 3.1.2 对象内部的并发 ........................................................................ 33 3.1.3 对象的自治性 ............................................................................ 33 3.2 对象间的通信....................................................................................... 34 3.2.1 远程过程调用 ............................................................................ 34 3.2.2 对象的通信对象 ........................................................................ 35 3.3 对象的并发控制................................................................................... 36 3.3.1 条件同步与互斥 ........................................................................ 36 3.3.2 缺省并发控制 ............................................................................ 37 3.3.3 内部并发控制 ............................................................................ 38 3.4 并发对象类的继承............................................................................... 40 3.4.1 条件同步控制的继承................................................................. 40 3.4.2 内部并发控制的继承................................................................. 40 3.5 实例 ...................................................................................................... 41 3.6 与相关工作的比较............................................................................... 47 3.7 小结 ...................................................................................................... 48 第四章 并发对象的形式语义 ............................................................................ 50 4.1 CSP 简介............................................................................................... 50 4.2 并发对象的定义................................................................................... 51 4.3 并发对象的 CSP 语义........................................................................... 52 4.3.1 对象的进程模型 ........................................................................ 52 4.3.2 对象各进程的 CSP 表示............................................................ 53 4.3.3 消息传递语义 ............................................................................ 55 4.4 小结 ...................................................................................................... 56 第五章 NDC++ : C++的并发扩充 ..................................................................... 57
目录 5.1预定义的Concurrency类 57 5.2语言扩充 59 5.2.1条件同步定义concurrency_control 60 5.2.2私有线程定义threads.. 61 5.2.3并发对象类的继承原则 62 5.3转换机制 63 5.3.1成员函数的转换 63 5.3.2私有线程的转换 65 5.3.3初始线程的自动执行 66 5.3.4C+类的转换 67 5.4 Concurrency类的实现 67 5.4.1lock0与unlock0的实现 67 5.4.2 new thread0和stop_threads(0的实现 68 5.4.3与消息有关的函数的实现 69 5.5NDC++的支撑环境 69 5.6小结 70 第六章结束语 71 6.1论文的主要贡献和特色 71 6.2进一步工作」 72 致谢. 73 作者在博士生期间发表(包括已录用)的论文 74 参考文献 75 附录:NDC+扩充语法 81
目 录 v 5.1 预定义的 Concurrency类 ..................................................................... 57 5.2 语言扩充............................................................................................... 59 5.2.1 条件同步定义 concurrency_control............................................ 60 5.2.2 私有线程定义 threads................................................................ 61 5.2.3 并发对象类的继承原则............................................................. 62 5.3 转换机制............................................................................................... 63 5.3.1 成员函数的转换......................................................................... 63 5.3.2 私有线程的转换......................................................................... 65 5.3.3 初始线程的自动执行................................................................. 66 5.3.4 C++类的转换............................................................................. 67 5.4 Concurrency类的实现.......................................................................... 67 5.4.1 lock()与 unlock()的实现............................................................. 67 5.4.2 new_thread()和 stop_threads()的实现 ........................................ 68 5.4.3 与消息有关的函数的实现......................................................... 69 5.5 NDC++的支撑环境 .............................................................................. 69 5.6 小结 ...................................................................................................... 70 第六章 结束语 ................................................................................................... 71 6.1 论文的主要贡献和特色 ....................................................................... 71 6.2 进一步工作........................................................................................... 72 致 谢............................................................................................................... 73 作者在博士生期间发表(包括已录用)的论文.................................................... 74 参考文献............................................................................................................ 75 附录:NDC++扩充语法.................................................................................... 81
第一章前言 第一章前言 面向对象软件开发技术已广泛应用于软件系统的设计与构造。面向对象模型 由一组对象构成,对象之间通过发送消息进行交互,这种模型是对客观世界活动 的自然刻划,其中的对象是对客观世界中有形或无形实体的直接模拟。用面向对 象技术开发软件,能够减小问题域与解题域之间的语义间隙,使得软件开发过程 显得比较自然,从而可提高软件生产率。面向对象技术中的模块、封装、数据抽 象及继承等特性,使得它更适合于构造软件系统,并且构造出的系统具有较好的 易维护性与可重用性。 客观世界中的活动往往是并发进行的,而目前大多数面向对象模型只提供了 描述系统顺序执行的能力。为了加强面向对象模型的表达能力,必须在面向对象 模型中提供并发描述机制,使其能够描述客观世界中的并发行为。在面向对象模 型中,各对象间通过发送消息,相互影响,协作完成系统功能,其中存在着潜在 的并发执行能力。为了保证面向对象并发系统的正确执行,必须把这种潜在的并 发行为显式地表示出来,并且,所采用的并发描述机制应与面向对象模型相一致, 不损害面向对象模型已有的一些重要特性,如:封装与继承等。 本论文工作的主要目的就是研究如何在面向对象模型中引进并发描述机制, 使其能够描述客观活动的并发行为,并且,所引进的并发描述机制要与面向对象 模型相容,不破坏面向对象模型中己有的一些特性。在本章中,首先对面向对象 模型中的一些主要概念进行简要介绍:然后给出了对面向对象模型进行并发扩充 应遵循的基本原则:最后介绍本论文的主要工作和论文的安排。 1.1面向对象模型 面向对象技术首先成熟于面向对象程序设计(OOP),然后逐步应用于软件的设 计和软件的需求分析,产生了面向对象设计(OOD)和面向对象分析(OOA)2,23]。用 面向对象技术开发的系统由一组交互的软件对象构成,这些软件对象往往对应着 实际应用中一些有形或无形的实体。面向对象模型包含了许多良好的程序设计思 想,如:模块、封装、数据抽象、多态和继承等等,这些对软件的构造、维护及 重用是很有用的。下面将对面向对象模型中的一些基本概念作简单描述。 1.1.1对象与消息
第一章 前 言 1 第一章 前言 面向对象软件开发技术已广泛应用于软件系统的设计与构造。面向对象模型 由一组对象构成,对象之间通过发送消息进行交互,这种模型是对客观世界活动 的自然刻划,其中的对象是对客观世界中有形或无形实体的直接模拟。用面向对 象技术开发软件,能够减小问题域与解题域之间的语义间隙,使得软件开发过程 显得比较自然,从而可提高软件生产率。面向对象技术中的模块、封装、数据抽 象及继承等特性,使得它更适合于构造软件系统,并且构造出的系统具有较好的 易维护性与可重用性。 客观世界中的活动往往是并发进行的,而目前大多数面向对象模型只提供了 描述系统顺序执行的能力。为了加强面向对象模型的表达能力,必须在面向对象 模型中提供并发描述机制,使其能够描述客观世界中的并发行为。在面向对象模 型中,各对象间通过发送消息,相互影响,协作完成系统功能,其中存在着潜在 的并发执行能力。为了保证面向对象并发系统的正确执行,必须把这种潜在的并 发行为显式地表示出来,并且,所采用的并发描述机制应与面向对象模型相一致, 不损害面向对象模型已有的一些重要特性,如:封装与继承等。 本论文工作的主要目的就是研究如何在面向对象模型中引进并发描述机制, 使其能够描述客观活动的并发行为,并且,所引进的并发描述机制要与面向对象 模型相容,不破坏面向对象模型中已有的一些特性。在本章中,首先对面向对象 模型中的一些主要概念进行简要介绍;然后给出了对面向对象模型进行并发扩充 应遵循的基本原则;最后介绍本论文的主要工作和论文的安排。 1.1 面向对象模型 面向对象技术首先成熟于面向对象程序设计(OOP),然后逐步应用于软件的设 计和软件的需求分析,产生了面向对象设计(OOD)和面向对象分析(OOA)[12,23]。用 面向对象技术开发的系统由一组交互的软件对象构成,这些软件对象往往对应着 实际应用中一些有形或无形的实体。面向对象模型包含了许多良好的程序设计思 想,如:模块、封装、数据抽象、多态和继承等等,这些对软件的构造、维护及 重用是很有用的。下面将对面向对象模型中的一些基本概念作简单描述。 1.1.1 对象与消息
第一章前言 面向对象模型由一组互相发送消息的对象构成,其核心概念就是对象和消息。 对象是一个可标识的实体,它由状态和操作两部分构成,对象的状态由对象的局 部变量(实例变量)来表示,对象状态的改变是通过向其发送消息进行的。当对象接 收到消息后,将调用其某个方法(成员函数)来对该消息进行处理,方法的执行中有 可能改变对象局部变量的值(对象的状态)。对象的方法构成了对象的接口,获取或 改变对象的状态只能通过接口中的方法来进行。对象的这种封装特性可以看作是 对模块化和数据抽象的支持。 1.1.2类与继承 类刻划了一组具有共同特性的对象,在面向对象程序设计语言中,类是创建 对象(类的实例)的模板(Template)。 类继承是一种资源共享机制,它使得在定义新类时可利用已有类的一些信息, 这些已有的类被称为父类或超类,新定义的类被称为子类或衍生类。如只允许从 一个类继承,则称为单继承,否则,称为多继承。类继承是支持软件复用的一个 重要语言机制。 一个程序设计语言被称为面向对象的(Object-.Oriented),它首先要支持对象概 念,除此之外,它还应支持类和继承。仅支持对象的语言只能被称为基于对象的 (Object-Based)[8],如:Adal13]。 1.1.3多态和动态定连 多态是指某一论域中的元素有多种解释。在面向对象程序设计语言中,多态 主要是指一个父类指引元变量在程序运行时可指向父类和子类对象。 定连是指结构成分与其有关性质的确定和关联。在编译时刻完成的定连称为 静态定连,否则,称为动态定连。在面向对象程序设计语言中,由于多态指引元 变量的存在,往往需要动态定连。 1.1.4类型与子类型 与类和继承相关的概念是类型和子类型。在很多面向对象程序设计语言中, 用类表示对象类型,用类继承表示子类型关系,如:C++82】、E63]等,这样做 的好处在于简化程序设计,并且使静态类型检查变得容易,但同时也带来一些问 题,它造成语言的描述能力和程序的可靠性下降。因为,类实际上是给出了抽象 数据类型的实现,而类继承则是类之间的一种代码复用机制,若用类表示类型则 限制了类型的实现,用类继承表示子类型关系则要求类型间的子类型关系必须基
第一章 前 言 2 面向对象模型由一组互相发送消息的对象构成,其核心概念就是对象和消息。 对象是一个可标识的实体,它由状态和操作两部分构成,对象的状态由对象的局 部变量(实例变量)来表示,对象状态的改变是通过向其发送消息进行的。当对象接 收到消息后,将调用其某个方法(成员函数)来对该消息进行处理,方法的执行中有 可能改变对象局部变量的值(对象的状态)。对象的方法构成了对象的接口,获取或 改变对象的状态只能通过接口中的方法来进行。对象的这种封装特性可以看作是 对模块化和数据抽象的支持。 1.1.2 类与继承 类刻划了一组具有共同特性的对象,在面向对象程序设计语言中,类是创建 对象(类的实例)的模板(Template)。 类继承是一种资源共享机制,它使得在定义新类时可利用已有类的一些信息, 这些已有的类被称为父类或超类,新定义的类被称为子类或衍生类。如只允许从 一个类继承,则称为单继承,否则,称为多继承。类继承是支持软件复用的一个 重要语言机制。 一个程序设计语言被称为面向对象的(Object-Oriented),它首先要支持对象概 念,除此之外,它还应支持类和继承。仅支持对象的语言只能被称为基于对象的 (Object-Based)[89],如:Ada[13]。 1.1.3 多态和动态定连 多态是指某一论域中的元素有多种解释。在面向对象程序设计语言中,多态 主要是指一个父类指引元变量在程序运行时可指向父类和子类对象。 定连是指结构成分与其有关性质的确定和关联。在编译时刻完成的定连称为 静态定连,否则,称为动态定连。在面向对象程序设计语言中,由于多态指引元 变量的存在,往往需要动态定连。 1.1.4 类型与子类型 与类和继承相关的概念是类型和子类型。在很多面向对象程序设计语言中, 用类表示对象类型,用类继承表示子类型关系,如:C++[82]、Eiffel[63]等,这样做 的好处在于简化程序设计,并且使静态类型检查变得容易,但同时也带来一些问 题,它造成语言的描述能力和程序的可靠性下降。因为,类实际上是给出了抽象 数据类型的实现,而类继承则是类之间的一种代码复用机制,若用类表示类型则 限制了类型的实现,用类继承表示子类型关系则要求类型间的子类型关系必须基
第一章前言 于类之间的继承关系,即使两个类的抽象行为存在子类型关系,如果它们没有继 承关系,则编译系统不会认为它们是子类型关系。另外,因为在子类中可以对父 类中的方法重定义,这样就有可能使得子类与父类有不同的行为,从而破坏子类 型关系。因此,在一些面向对象语言中把类与类型分开考虑8,53]。 1.1.5相关的术语 在有关面向对象技术的不同研究中,往往对一个相同的概念采用了不同的术 语描述,为了在论文的描述中不至于产生混淆,现将这些术语进行归类,同一类 中的术语表示相同的概念,本论文中经常交替使用它们。 (1)对象、类的实例。 (2)对象的局部变量、成员变量、实例变量。 (3)父类、超类。 (4)子类、衍生类。 (⑤)方法、成员函数、操作、消息处理过程。 1.2并发与面向对象模型 并发(concurrency)的概念伴随我们已有很长时间,几乎自从计算机出现起,并 发就受到了人们的重视,它反映了程序潜在的并行执行能力。 传统的并发模型是围绕进程的概念进行设计的,它由一组进程构成,每个进 程是一个顺序执行的过程,各进程间可以并发执行。进程在执行中可以相互通信, 交换数据。进程间通信可以采用两种方式:共享变量和消息传递,信号量、临界 区、管程和路径表达式等被用来对并发进程的操作进行同步。我们认为,进程是 一个实现级的概念,它是对客观世界活动的一种间接模拟,因此,采用进程模型 来解决客观世界中的并发问题就显得极不自然,并且也使得并发程序难以设计和 理解。 面向对象模型以一种更加直接的方式刻划客观世界中的活动,模型中存在着 潜在的并发执行能力。通过简单的观察,我们不难看出:一个对象向另一个对象 发送消息后,若不需要或不立即需要消息的处理结果,前者不必等待后者处理消 息,消息发送者和消息接受者可以并发执行:对象不都是处于被动的提供服务状 态,它们中的一些除了能通过接收消息向外提供服务外,还可以有自己的事务处 理;一个对象往往可以同时处理多个消息,等等
第一章 前 言 3 于类之间的继承关系,即使两个类的抽象行为存在子类型关系,如果它们没有继 承关系,则编译系统不会认为它们是子类型关系。另外,因为在子类中可以对父 类中的方法重定义,这样就有可能使得子类与父类有不同的行为,从而破坏子类 型关系。因此,在一些面向对象语言中把类与类型分开考虑[8,53]。 1.1.5 相关的术语 在有关面向对象技术的不同研究中,往往对一个相同的概念采用了不同的术 语描述,为了在论文的描述中不至于产生混淆,现将这些术语进行归类,同一类 中的术语表示相同的概念,本论文中经常交替使用它们。 (1)对象、类的实例。 (2)对象的局部变量、成员变量、实例变量。 (3)父类、超类。 (4)子类、衍生类。 (5)方法、成员函数、操作、消息处理过程。 1.2 并发与面向对象模型 并发(concurrency)的概念伴随我们已有很长时间,几乎自从计算机出现起,并 发就受到了人们的重视,它反映了程序潜在的并行执行能力。 传统的并发模型是围绕进程的概念进行设计的,它由一组进程构成,每个进 程是一个顺序执行的过程,各进程间可以并发执行。进程在执行中可以相互通信, 交换数据。进程间通信可以采用两种方式:共享变量和消息传递,信号量、临界 区、管程和路径表达式等被用来对并发进程的操作进行同步。我们认为,进程是 一个实现级的概念,它是对客观世界活动的一种间接模拟,因此,采用进程模型 来解决客观世界中的并发问题就显得极不自然,并且也使得并发程序难以设计和 理解。 面向对象模型以一种更加直接的方式刻划客观世界中的活动,模型中存在着 潜在的并发执行能力。通过简单的观察,我们不难看出:一个对象向另一个对象 发送消息后,若不需要或不立即需要消息的处理结果,前者不必等待后者处理消 息,消息发送者和消息接受者可以并发执行;对象不都是处于被动的提供服务状 态,它们中的一些除了能通过接收消息向外提供服务外,还可以有自己的事务处 理;一个对象往往可以同时处理多个消息,等等
第一章前言 为了保证面向对象系统的正确运行,必须要给出显式的并发描述与控制,否 则将会出现混乱,例如:当处于某状态下的一个对象不能处理某消息时,强行调 用该消息的处理方法将造成对象内部状态的破坏。另外,对一个对象的多个方法 进行并发调用,也可能造成该对象内部状态的不完整和不一致。 如何把并发与面向对象相结合?如何在面向对象模型引进并发描述机制?目 前很多人都在进行这方面的研究3,10,11,19,64,71,72,85,91,927,56,这些研究的做法各不 相同,归结起来可分为两条途径: (a)在面向对象模型中引进并发机制。 (b)在传统并发模型中引进面向对象思想。 不同的观点将产生不同的结果。()充分利用面向对象技术刻划客观世界的良 好模型能力和面向对象的各个重要特性,同时把其潜在的并发能力显式地描述出 来,使其适合于描述并发计算。(b)只是采用面向对象技术的某些思想,不是完全 的面向对象,往往舍弃了面向对象的一些重要特性,从而削弱了面向对象的模型 能力,采用(b)观点的研究结果一般是基于对象(Object--Based)而不是面向对象 (Object-Oriented)的并发系统。因此,采用(a)是一个可取的途径,它从对象模型本 身出发研究其并发能力,这样,既保留了面向对象的各个重要特性,又解决并发 程序设计问题。 然而,很多的研究表明:并发与面向对象不是正交的,并发往往与面向对象 的一些特性相冲突[59,62,85,49,71]。即使采用途径(a)来解决并发与面向对象结合问题, 也存在不同的做法,这些做法对面向对象的支持程度是不同的。例如,在一些并 发面向对象模型中就舍弃了继承特性0]。因此,在面向对象模型中引进并发机制 是一个方面,另一方面是要保证所引进的并发机制与面向对象模型相容,不破坏 面向对象模型己有的一些重要特性。 1.3主要工作 本文首先给出了在面向对象模型中引进并发应考虑的各种问题,然后,在对 这些问题及现有的一些并发面向对象模型进行分析的基础上,提出了一种基于并 发对象的并发面向对象模型,该模型主要考虑的是:
第一章 前 言 4 为了保证面向对象系统的正确运行,必须要给出显式的并发描述与控制,否 则将会出现混乱,例如:当处于某状态下的一个对象不能处理某消息时,强行调 用该消息的处理方法将造成对象内部状态的破坏。另外,对一个对象的多个方法 进行并发调用,也可能造成该对象内部状态的不完整和不一致。 如何把并发与面向对象相结合?如何在面向对象模型引进并发描述机制? 目 前很多人都在进行这方面的研究[3,10,11,19,64,71,72,85,91,92,7,56],这些研究的做法各不 相同,归结起来可分为两条途径: (a)在面向对象模型中引进并发机制。 (b)在传统并发模型中引进面向对象思想。 不同的观点将产生不同的结果。(a)充分利用面向对象技术刻划客观世界的良 好模型能力和面向对象的各个重要特性,同时把其潜在的并发能力显式地描述出 来,使其适合于描述并发计算。(b)只是采用面向对象技术的某些思想,不是完全 的面向对象,往往舍弃了面向对象的一些重要特性,从而削弱了面向对象的模型 能力,采用(b)观点的研究结果一般是基于对象(Object-Based)而不是面向对象 (Object-Oriented)的并发系统。因此,采用(a)是一个可取的途径,它从对象模型本 身出发研究其并发能力,这样,既保留了面向对象的各个重要特性,又解决并发 程序设计问题。 然而,很多的研究表明:并发与面向对象不是正交的,并发往往与面向对象 的一些特性相冲突[59,62,85,49,71]。即使采用途径(a)来解决并发与面向对象结合问题, 也存在不同的做法,这些做法对面向对象的支持程度是不同的。例如,在一些并 发面向对象模型中就舍弃了继承特性[10]。因此,在面向对象模型中引进并发机制 是一个方面,另一方面是要保证所引进的并发机制与面向对象模型相容,不破坏 面向对象模型已有的一些重要特性。 1.3 主要工作 本文首先给出了在面向对象模型中引进并发应考虑的各种问题,然后,在对 这些问题及现有的一些并发面向对象模型进行分析的基础上,提出了一种基于并 发对象的并发面向对象模型,该模型主要考虑的是:
第一章前言 (1)对象的自治性。 (2)对象的并发控制与对象的功能分开进行描述。 (3)对象内部存在并发。 (4)对象间采用同步消息发送。 (5)对象可以有自己的执行线程。 (6)模型概念简单,不给程序设计者带来太大的负担。 论文还对所提并发面向对象模型中并发对象的语义进行了描述,最后,给出 了采用论文所提模型对C++进行并发扩充的一种方案。 1.4论文安排 本论文的安排如下: 第二章分析了在面向对象模型中引进并发描述所面临的问题以及目前的一些 解决方案,并介绍了现有的一些并发面向对象模型。 第三章提出了一种基于并发对象的并发面向对象模型。 第四章对所提模型中并发对象的语义给出形式化描述。 第五章给出了用论文所提模型对C++进行扩充的一种方案。 第六章给出论文工作的总结及进一步的工作
第一章 前 言 5 (1)对象的自治性。 (2)对象的并发控制与对象的功能分开进行描述。 (3)对象内部存在并发。 (4)对象间采用同步消息发送。 (5)对象可以有自己的执行线程。 (6)模型概念简单,不给程序设计者带来太大的负担。 论文还对所提并发面向对象模型中并发对象的语义进行了描述,最后,给出 了采用论文所提模型对C++进行并发扩充的一种方案。 1.4 论文安排 本论文的安排如下: 第二章分析了在面向对象模型中引进并发描述所面临的问题以及目前的一些 解决方案,并介绍了现有的一些并发面向对象模型。 第三章提出了一种基于并发对象的并发面向对象模型。 第四章对所提模型中并发对象的语义给出形式化描述。 第五章给出了用论文所提模型对C++进行扩充的一种方案。 第六章给出论文工作的总结及进一步的工作