多线程编程出现的主要问题为:死锁(deadlock)、无限延迟(indefinite postponement)以及数据竞争(data race)。
在面向对象应用程序中使用多线程最有效的途径就是通过构建于C++进程间通信组件(IPC)、C++同步组件以及C++互斥组件之上的应用框架。(application framework)。而构建IPC、同步和互斥组件的最有效途径就是构建接口类(interface class)和类库(class library),让他们封装提供线程和API任务的操作系统服务。
常见的C++组件有4种:类(class)、集合和容器(collection and container)、类库(class library)、应用框架(applicationframework)。
类可以用于实现抽象数据类型。数据类型是数据值和用于操纵该数据的一套运算的集合。抽象数据类型是定义数据类型的数学概念。
类可以用来创建软件模型。一种为:为了试验和分析,对一些过程、概念、思想的放大表示。另一种模型,是用软件对某些现实世界的任务、过程或思想的再现;这一模型的目的是为了让他像真实对应物、系统或应用程序的一部分一样发挥作用。软件取代人工系统或某些物理体的某些组件。
实现抽象数据类型的类与作为模型的类之间的区别:一般而言,数据类型用于支持编程工作。即程序员可以使用float、int、char、bool或rational等,让他们各施其责。就像钉住面板的钉子一样。这些钉子是用来建造房子的,但他们不是房子结构的一部分。当C++类用作模型时,类通常是编程过程的最终结果,或者表示最终结果架构的重要部分。用作模型的类不仅仅是一种数据类型。模型化类实际上作为现实人物、地点、事物或思想的重要替身。软件模型抓住了真是事物的本质。
常见的类类型有八种:
@具体类(concreteclass):独立类;表示一个祖先-后代世系终止的结束类。
@抽象类(abstract class):为所有子类提供布局和蓝图的类。不能声明此类型的对象;必须派生新类,对抽象基类中声明任何虚函数提供定义。
@接口类(interfaceclass):用于修改或增强另一个类或类集合的接口。为了为非面向对象代码和数据提供面向对象性而用来封装独立函数。容器的适配器类,就是一个接口类。
@节点类(nodeclass):提供继承和多态的基础;不包含纯虚函数。
@支持/应用类(supportclass/ utility class):不管在任何域内,对于不同的应用都非常有用。
@域类(domainclass):创建类在指定的域内模拟部分现实或实体。
@集合和容器类(collectionand container class):其他对象组的一般性容纳器。
补充:
接口类:接口类也可以充当非任何类成员函数的包装器。当我们包装在线程处理、进程间通信和多任务处理中使用的操作系统基本要素时,接口类就会发挥作用。通过封装操作系统基本要素,为用户提供这些要素的一般性借口,是代码跨平台的移植性更强。
节点类:与抽象基类一样,节点类设计用于继承。与抽象类不一样的是,节点类不包含纯抽象虚函数。节点类可以即时使用。不过节点类的设计是着眼于将来的。它被设计成可重用类。它提供可以在派生类中覆盖的虚成员函数。
节点类提供了可悲派生类继承的受保护数据成员和成员函数。它使用基类的指针允许在后代类中操纵成员函数。用户可以通过多台和集成特殊化节点类。节点类既可以是基类,也可以是派生类。接地阿雷为类层次提供了实质内容。