OCC体系结构和基本概念.DOC

上传人:国*** 文档编号:770879 上传时间:2018-10-31 格式:DOC 页数:119 大小:2MB
下载 相关 举报
OCC体系结构和基本概念.DOC_第1页
第1页 / 共119页
OCC体系结构和基本概念.DOC_第2页
第2页 / 共119页
OCC体系结构和基本概念.DOC_第3页
第3页 / 共119页
OCC体系结构和基本概念.DOC_第4页
第4页 / 共119页
OCC体系结构和基本概念.DOC_第5页
第5页 / 共119页
点击查看更多>>
资源描述

1、第 1 章 OCC 体系结构和基本概念OCC 是用面向对象方法设计的一个 CAD 基础平台(软件) 。为了能从整体上把握 OCC 的组织情况,也为了方便后续章节的讨论,本章将介绍 OCC 体系结构和几个基本概念。1.1 OCC 体系结构1.1.1 面向对象方法和面向对象的软件工程在介绍 OCC 体系结构之前,先介绍面向对象方法的概念和什么叫面向对象的软件工程。在面向对象的方法出现以前,程序员都采用面向过程的程序设计方法,其中典型的是结构化程序设计。这种设计的思路是:自顶向下、逐步求精。其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构。各模块间的关系尽可能简单,在功能上相对独立;

2、每一模块内部均是由顺序、选择和循环三种基本结构组成。其模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分解与功能抽象以及自顶向下、分而治之的方法,从而有效的将一个复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护 2。这种设计方法的致命缺点是:程序的可重用性差。因为它把数据和处理数据的过程分离为相互独立的实体,当数据结构改变时,所有相关的处理过程都要进行相应的修改。而面向对象的方法将数据及对数据的操作放在一起,作为一个相互依存、不可分离的整体对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关

3、系,对象与对象之间通过消息进行通信 2。这样,程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障,实现了“高内聚”“低耦合” 。另外,继承与多态性可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括面向对象的分析(OOA) 、面向对象的设计(OOD) 、面向对象的编程(OOP) 、面向对象的测试(OOT)和面向对象的软件维护( OOSM)等主要内容 2。1.1.2 OCC 的体系结构整个 OCC 就是用面向对象方法设计出来的一个对象库。之所以用面向对象方法而不是面向过程方法,是因为用面向对象方法有三个

4、好处。第一,由面向对象方法抽象的系统结构能映射到数据库结构中,很容易实现程序与数据结构的封装。第二,面向对象方法从所处理的数据入手,以数据为中心来描述系统,数据相对于功能而言,具有更强的稳定性,这样设计出的系统模型往往能较好地映射问题域模型 3。第三,对象、类、继承性、多态性的引入使用,令面向对象的设计方法能更好地生产可重用的软件构件和解决软件的复杂性问题。不过,面向对象的设计方法要求开发人员必须花很大精力去分析对象是什么,每个对象应该承担什么责任,所有这些对象怎样很好地合作以完成预定的目标。这样做换来的好处是:提高了目标系统的可重用性,减少了生命周期后续阶段的工作量和可能犯的错误,提高了软件

5、的可维护性 3。用面向对象方法和软件工程思想分析,整个 OCC 由五个模块组成,分别是基础类模块、建模数据模块、建模算法模块、可视化模块、数据交换模块和应用程序模块。其中,建模数据模块主要提供二维和三维几何模型的数据结构,也称数据结构模块。一个模块主要由一个或几个工具箱构成。当然它也可以包含一些执行体和资源体等。就结构上看,一个工具箱就是一个共享库(如.so 或.dll 类型的文件) 。每个工具箱由一个或几个包组成。而每个包则由许多类组成,例如,一个几何包包含点类、线类和圆类等。在同一个包中,不能含有相同名字的两个类。使用类的时候,类名要以包名作前缀,如 Geom_Circle。图 2.1 简

6、要说明了包的内容。图 2.1 包的内容1.2 基本概念1.2.1 类和泛化1、类OCC 是一个面向对象的软件,与所有面向对象的软件一样,其最基本的软件成分是类。一个类就是一种数据类型的实现。类有自己的行为(由它的函数提供的服务)和结构(类的数据结构用来存储其数据) 。OCC 中所有类按其实现方式可以分三种:普通类、推迟类和通用类。普通类含有实例方法,可以被直接实例化。而推迟类则不能被实例化。推迟类的作用在于使一层类共同拥有一种给定的行为,而这些行为的发生取决于普通类(推迟类的派生类)的实现。通过推迟类的创建,可以保证所有派生自同一推迟类的普通类拥有相同的继承行为。在 C+中,与推迟类等同的是抽

7、象类。至于通用类,它提供了一套处理其他数据类型的功能行为。通用类的实例化需要为它的参数指定类型。通用类的作用与 C+中模板类的作用一样。2、泛化这里所谓的泛化,主要是通过通用类的实现来获得的。通用类分两步实现。首先,对一个通用类进行声明以建立模型。在CDL(CASCADE 定义语言)中,通用类被声明为对不确定类型数据项的操作。这里的数据项就是通用类中的形参。对通用类的形参进行限制,就可以使形参类型成为普通类的子类。要注意的是:声明一个通用类并没有创建一个新的类类型,而只是定义了一种适用于几个普通类的通用形式。然后,赋予通用类型信息对该通用类进行实例化。通用类被实例化时,它的形参类型由实参类型(

8、基本类型或基本类)替代。实例化结束后,就创建出一个新的类。新类可以由用户在实例化声明中任意命名。按惯例,通用类的实例名通常由通用类名和实参类型名组成。至于通用类的名字,只需在其本身名字前添加一个前缀(该通用类所在包的名字) 。例 2.1:class Array1OfReal instantiates Array1 from TCollection (Real); 这个声明位于 TColStd 包的一个 CDL 文件中。它定义了一个新的类TColStd_Array1OfReal。该类是通用类 TCollection_Array1 的一个实例,并且参数类型指定为实型。从具有相同形参类型的相同通用类

9、中,可以实例化出不止一个类。这些实例化出来的类通过各自的实现来识别。其实在 C+中,它们已经不属于同一类了。另外,我们不能从通用类中派生类。在由通用类获得的泛化中,我们经常发现许多类由一个共同的通用类型联系着。这种现象发生在一种基本结构供给迭代器的时候。在这种情况下,有必要弄清一件事,那就是由相关通用类构成的团体的确用于同一对象类型的实例化。为了使这个实例化过程成为一整体,可以将一些通用类声明为内嵌类。这样的通用类就叫内嵌通用类。一旦主通用类被实例化,它的内嵌类也将被实例化。内嵌类的实例名由内嵌类名字和主通用类名字组成,通过“Of”连接。例 2.2:class MapOfReal instan

10、tiates Map from TCollection (Real,MapRealHasher); 这个声明位于 TColStd 中。它不仅定义了 TColStd_MapOfReal 类,也定义了 TColStd_MapIteratorOfMapOfReal 类(该类是通用类 TCollection_Map 的内嵌类 MapIterator 的一个实例) 。内嵌类的实例独立于主类的实例,而决非绑定于它。作为内嵌类,即使它们本身不是通用类,但是内嵌于通用类,它们也是通用的。1.2.2 数据类型的分类数据类型是作为类被实现的。类不仅定义了它的数据结构和基于它的实例的方法,也声明了该实例的处理方式。

11、依据处理方式(见图 2.2)的不同, OCC 中所有数据类型可分为两大类:通过句柄(或引用)处理的数据类型和通过值处理的数据类型。一个通过值处理的类型变量包含自己的实例;而一个通过句柄处理的类型变量包含一个实例的引用。通过值处理的类型首先有基本类型,如布尔类型、字符型、整型、实型等。通过句柄处理的类型变量,如果它不指向任何对象,那我们就说它是空的。要引用一个对象,我们就得用它的一个构造函数实例化该对象,如例 2.3。例 2.3:Handle(myClass) m = new myClass(); 在 OCC 中,句柄是一些特殊类,它们以引用的方式对动态存储对象进行安全处理。句柄提供了一种引用计

12、算机制,通过这种机制,当对象不被引用时,可以自动析构对象。图 2.2 数据类型的两种处理方式1.2.3 持久化和数据模式数据模式是应用程序用来存储数据的一种结构,由一些持久类构成。一个对象若可以被永久存储,则是持久的。持久对象可以被它的创建程序或其它程序在以后的时间里再次使用。要想使一个对象在 CDL 中是持久的,必须声明它的类型继承自Standard_Persistent 类或其派生类。所有继承自 Standard_Persistent 类的类都是通过引用处理的。对于由 Standard_Storable 类派生出的所有类,它们的实例(对象)是不能被单独存储的,但是可以作为持久对象的区域被存

13、储。所有继承自Standard_Storable 类的类,其对象都是通过值处理的。1.3 本章小结本章用面向对象方法和软件工程思想从整体上分析了 OCC 的体系结构。整个 OCC 包含五个模块;模块中包含工具箱;工具箱中包含包;包中包含类;类是 OCC 软件的最基本要素。本章还介绍了 OCC 的几个基本概念:类、泛化、数据类型的分类、持久化和数据模式。与 C+类的命名不同,OCC 有自己的命名方法。OCC 中类分为普通类、推迟类和通用类三种,分别对应 C+中的具体类、抽象类和模板类。OCC 的数据可以分为句柄处理类型和值处理类型两种。OCC 的持久化和数据模式与一般软件的原理相同,不同的是:为

14、了使对象持久化,需要声明该对象是由 Standard_Persistent 类或其派生类派生的。第 2 章 基础类分析顾名思义,基础类是 OCC 的基石。它提供了大量的通用服务,如自动动态内存管理(通过句柄对对象进行处理) 、集合容器、异常处理、通过向下抛掷和创建插件程序而获得的泛化等。因此,本章将先对 OCC 的基础类模块进行概述,然后论述其中几个重点部分,如数据类型、集合容器等。2.1 基础类概述基础类包括根类组件、串类组件、集合容器组件、标准对象的集合容器组件、向量和矩阵类组件、基本几何类型组件、常用数学算法组件、异常类组件、数量类组件和应用程序服务组件。1、根类组件根类是基本的数据类型

15、和类,其它所有类都是依此而建立的。它提供以下类型和类:(1)基本类型,如 Boolean(布尔类型) 、Character(字符型) 、Integer(整型)或者 Real(实型)等。(2)动态对象的安全处理,以确保那些不再被引用的对象能被及时删除(详见 Standard_Transient 类) 。(3)可设置的内存优化管理器。它能改善那些经常使用动态对象的程序性能。(4)run-time 类型信息扩展机制。它使得复杂程序的创建变得更为简易。(5)异常管理。(6)C+各种流的封装。根类主要在 Standard 和 MMgt 两个包中实现。2、串类组件串类用来处理动态大小的 ASCII 和 U

16、nicode 字符序列,可以通过句柄处理,因此也可以被共享。串类在 TCollection 包中实现。3、集合容器组件集合容器是处理动态大小的数据集合的类。集合容器是通用的,即每一种集合容器定义了一种结构和一些算法,可持有许多对象通常这些对象不必从根类继承。这与 C+模板相似。如果需要使用一个给定对象类型的集合容器,则必须对这个元素的指定类型进行实例化。一旦这个实例声明被编译,所有基于这个通用集合容器的函数都可以在集合容器对象中实现。集合容器包含许多通用类,如 run-time 大小的数组、列表、栈、队列、集(Set)和散列图(hash map) 。集合容器在 TCollection 和 NC

17、ollection 包中实现。4、标准对象的集合容器组件TColStd 包为 TCollection 包中通用类的一些经常使用的实例化提供对象(来自 Standard 包)或者串(来自 TCollection 包) 。5、向量和矩阵类组件向量和矩阵类提供了有关向量和矩阵的常用数学算法和基本运算(加、乘、转置、求逆等) 。6、基本几何类型组件基本几何类型提供了基本几何实体和代数实体的实现。这些实现符合STEP(Standard Exchange of Product data model,即产品数据模型的交换标准) 。它们提供基本几何 Shape 的描述(点、向量、直线、圆与圆锥、平面与基本曲面

18、、通过坐标轴或坐标系使 Shape 在平面上或空间中定位)和 Shape 几何变换的定义与应用(平移、旋转、对称、缩放、复合变换、代数计算工具) 。7、常用数学算法组件常用数学算法为那些经常使用的数学算法提供 C+实现。这些算法有:(1)求解线性代数方程组的算法 ;(2)求一元或多元函数最小值的算法;(3)求解非线性方程或非线性方程组的算法;(4)求矩阵特征值和特征向量的算法。8、异常类组件OCC 提供了一套异常类。所有异常类都是基于它们的根类 Failure 类的。异常类描述了函数运行期间可能发生的异常情况。发生异常时,程序将不能正常运行。对这种情况的响应称为异常处理。9、数量类组件数量类为

19、日期和时间信息提供支持,同时也为表示常用物理量的基本类型(如长度、面积、体积、质量、密度、重量、温度和压力等)提供支持。10、应用服务组件应用服务组件包括几种低级服务的实现。借助 OCC 平台,这些服务可以使那些允许用户自定义和用户友好的应用程序的创建变得更容易。以下是该组件提供的四种服务:(1)单位转换工具。它们为各种量和相应物理单位的处理提供统一机制。这种机制能够检查单位的兼容性,以及在两种不同的单位间进行数值转换等(详见 UnitsAPI 包) 。(2)有关表达的基本解释器。它使得用户脚本工具的建立和表达的通用定义等变得更容易(详见 ExprIntrp 包) 。(3)用于处理配置资源文件

20、(见 Resource 包)和用户定制信息文件(见Message 包)的工具。有了这些工具,为应用程序提供多语言支持就很容易了。(4)进程提示和用户中断接口。它们甚至可能为低级算法提供一种综合便利的用户交流方式。2.2 数据类型、句柄、内存管理器和异常类一个软件首先要规定能处理的数据类型,其次要实现三项最基本的功能引用管理、内存管理和异常管理。在 OCC 中,这三项功能分别对应基础类中的句柄、内存管理器和异常类。2.2.1 数据类型在第二章的基本概念里,已经介绍了 OCC 数据类型的分类,即依据处理方式的不同,分为值处理类型和句柄处理类型两类。在详细描述这两种类型之前,先描述 OCC 数据的基

21、本类型。1、基本类型所有基本类型都是用 CDL 预定义的,并且只能通过值处理。依据不同的出自,或者依据各自的存储性能,它们可分为耐存的和非耐存的。耐存的基本类型由 Standard_Storable 类派生,能应用于持久对象的实现(要么包含于持久对象方法声明的实体中,要么作为持久对象内部结构的一部分) 。表 3.1 给出 OCC 提供的所有基本类型和相应的 C+基本类型。表 3.1 OCC 基本类型和相应的 C+基本类型OCC 基本类型 C+基本类型Standard_Integer intStandard_Real doubleStandard_ShortReal floatStandard_

22、BooleanStandard_False=0Standard_True=1unsigned intStandard_Character charStandard_ExtCharacter shortStandard_Cstring char*(指针类型)Standard_Address void*(指针类型)Standard_Extstring short*(指针类型)下面分别论述表中的类型。(1)Standard_Integer(整型) 。它是由 32 位二进制数表示的基本类型,包括正数、负数和零。Integer 类型与 C+ int 类型一样。因此,可以对 Integer 类型进行+ 、

23、 -、 *、/四种代数运算,也可以对其进行=、六种关系运算。(2)Standard_Real(实型) 。它表示具有确定精度和确定范围的实数的基本类型。Real 类型与 C+ 中 double(双精度)类型一样。因此,+、 -、 *、/四种代数运算、- 取反运算和=、六种关系运算同样适用于 Real 类型。(3)Standard_ShortReal(短实型) 。它表示具有确定精度和确定范围的实数。ShortReal 类型与 C+中 float 类型一样。因此, +、 -、 *、/四种代数运算、-取反运算和 =、 六种关系运算同样适用于 ShortReal 类型。(4)Standard_Boolean(布尔类型) 。 它是描述逻辑值的基本类型。它有两种值:false 和 true。 Boolean 类型与 C+中 unsigned int 类型一样。因此,与、或、异或、非四种代数运算和=、!= 两种关系运算同样适用于 Boolean 类

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。