1. 面向对象方法
面向对象编程技术可用于解决许多过程编程技术难以解决的问题,面向对象架构可用于管理并行编程情况下出现的死锁、无限延迟以及数据竞争问题。可使用面向对象组件来模块化应用程序可能需要的线程需求。使用封装和对象访问策略来简化并发和并行编程。在面向对象应用程序中使用多线程的最有效途径是通过构建于C++进程间通信组件(IPC)、C++同步组件以及C++互斥组件之上的应用框架。而构建IPC、同步和互斥组件的最有效途径是构建接口类和类库,让它们封装提供线程和API任务的操作系统服务。通过使用接口类、类库以及多线程应用框架,C++程序员可以构建充分利用多线程、多处理器环境的面向对象架构。
2. 面向对象架构
软件的架构是一套主宰软件操作的规则、模式、进程以及断言。它表示与数据组织和执行流程有关的整体结构,反映了设计思想、开发方法学以及域模型。当软件基础架构基于代码/数据封装、代码/数据继承和多态时,此软件就称做面向对象架构。具有面向对象架构的软件构建于类和类层次之上,它使用组件方法来构建软件。其中每个组件都是一个独立的软件部分,具备特定的功能。我们可以将这些组件装配起来形成一个更大的软件部分或者生成一个完整的应用程序。
3. 面向对象软件组件
面向对象软件组件是独立的功能性单元。每个组件均是某些人物、地点、事件或思想的模型,都包含一些数据和服务列表或包含可以操作以上数据的运算。它可以对向外提供部分或所有的数据与服务。其中能够为外界所用的数据与服务(一般会隐藏数据)称做组件的接口(interface)。组件是用于构建程序、应用,甚至其它组件的基石。
C++软件组件是一种软拼装体,用于构建应用于多目的、多种类应用以及可能无限制组合体的一般性软件部分。常用的C++组件有以下4种:
1>. 类;
2>. 集合和容器;
3>. 类库;
4>. 应用框架。
这些组件赋予了应用程序真正的面向对象架构。使用它们,我们可以引入面向对象架构、增量多线程以及多线程架构的思想。在这些组件中,应用框架使用集合类、容器类、类库以及基本类。集合、容器和类库组成了更基本的类。类组件是所有其它C++组件的基础。
类具有不同的类型,某些类类型仅对用作蓝图类(blueprint class)有用,这些蓝图类为其他类提供推荐接口策略,而另外一些类型仅能用作基类,还有一些则不宜用为基类。常用类型可归为以下8类:
1>. 具体类:表示一个祖先-后代世系终止的结束类,它是进一步继承的终点。它可以在实现时进行优化,因为其不需要担心派生类
中的功能性,它最小化了对其他类的依赖性;
2>. 抽象类:为所有后代提供蓝图的类。为了使用它,用户必须从其上派生出一个新类,而且为它上面声明的所有纯虚函数提供实际定义;
3>. 接口类:类用户可用的数据与函数成员组成了它的接口。它可用于修改和增强另一个类或类集合的接口,使修改后的类更易于使用、功能更强或语义上更正确。它也可充当非任何类成员函数的包装器。当我们包装在线程处理、进程间通信和多任务处理中使用的操作系统基本要素时,接口类就会发挥作用。通过封装操作系统的基本要素,为用户提供这些基本要素的一般性接口,使代码跨平台的移植性更强。
4>. 节点类:它可用于继承,但不含纯虚函数,可以即时使用,其又着眼于未来,被设计为可重用的,提供了可以在派生类中覆盖的虚成员函数。又提供了可以被派生类继承的受保护数据成员和成员函数,可以使用基类的指针在后代类中操作成员函数,可以通过多态和继承特殊化节点类;
5>. 支持类:与域无关,可以跨域使用。在不同的应用程序中非常有用;
6>. 域类:创建用来模拟指定域内实体的类,它为现实的某些方面建模,可捕获某些现实过程或概念的规则、断言和行为;
7>. 应用类
8>. 集合和容器类:为充当其它对象组一般性容纳器的对象。
类库和应用框架是不同的。类库可用于它能应用的几乎任何方面,而应用框架是一个类的集合,有预定义的结构,并表示一个应用。应用框架类之间的关系是事先制定的,其使用也只限于它所表示应用的范围之内。而类库之间的类根本没有任何关联,只是不同的类别。
在一个具有面向对象架构的应用之内,建议使用应用框架来解决所有多线程问题。它决定并行和并发有意义的地方。它的用户受益于并行的同时应当隐藏它。与域类一起,多线程应用框架必须正确使用互斥类和IPC类来提供支持并发和多进程的软件基础。