时间:2022-11-04 12:30:01 | 来源:信息时代
时间:2022-11-04 12:30:01 来源:信息时代
ODMG语言绑定 : 说明对象定义语言/对象操作语言的结构如何映射到编程语言结构。ODMG目前支持与C++,Java和Smalltalk语言的绑定。
1. C++绑定(c++ binding)
C++绑定通过引入具有持久和临时实例的类集合把对象模型映射到C++中,这些类称为可持久化类(persistence-capable classes),包括五个部分的内容:
(1) ODMG对象模型到C++的映射: 一个ODMG的对象类型映射为C++的一个类,对象模型的结构概念映射为C++的构造结构或嵌入在某个类中的类。ODMG对象模型包含集合类型产生器、集合类型和集合实例,集合类型产生器映射为C++的模板类,集合类型映射为集合类,集合实例映射为这些集合类的实例。ODMG的数组集合映射为C++的d_Varray类,C++不直接支持关系,但通过提供维护关系的特定模板类的实例来实现,类d_Extent〈T〉提供一个可持久化类T的范围接口,C++不支持键的声明。
(2) C++ODL: C++与ODL的绑定被表示为类库和对标准C++类定义机制的扩展,类库提供在ODMG对象模型中定义概念的类和函数。C++ODL提供数据库模式的描述,把数据库模式描述为一个包含属性、关系和操作的对象类的集合,其风格与C++程序中声明部分一致,这些类的实例可以通过C++OML操作。在C++类库中,凡是实现与ODMG对象模型接口的特性都以d为前缀,如基本数据类型d_String,d_Short,集合类型d_List、d_Set、d_Bag,对应Iterator类的d_Iterator,对应extent类的d Extent,对应事务的d_Trancaction以及对应数据库的d Database等,并且还为数据库模式中的每一个类T定义了一个模板d_Ref(T),它涉及类T的持久对象和临时对象。关系通过包含一个引用(一对一关系)或一个集合(一对多关系)来处理,操作说明与标准C++语言函数说明基本一致。
(3) C++OML:对象操纵语言(OML)用来说明在应用程序中如何检索和操作数据对象,C++OML所表达的语法和语义与标准类库的语境中标准C++的语法和语义相同,C++OML包括对象的创建、删除、修改和引用。
对于对象操纵语言,new算子被重载使其可以创建持久或临时对象。为了创建一个持久对象,必须提供数据库名和一个对象名。对象删除通过调用d_Ref:delete object()成员函数进行,对象的修改则调用函数d_object:mark_modified()进行,对象引用是模板类d Ref<T>的实例,其他对对象特性的访问如属性、关系、操作等与标准C++语言基本一致。
(4) C++OQL:C++OQL把对象查询语言的语义映射成C++语言。在C++ODL/OML程序中的对象查询语言的查询可以通过下列方法执行: 一是使用类d_Collection 的成员函数query;二是使用d_OQL_Query接口。
(5)模式访问: 描述通过一个C++类库访问ODMG数据库模式的接口,模式信息是基于对象模型中描述的元数据。C++的模式定义在有些方面不同于ODL中的独立于语言、抽象的模式说明,为使模式访问遵循C++程序设计常规,提供给C++程序员直观的API,在API中包含C++ODL扩展,使其是ODMG ODL的一个超集。模式访问API被结构化为一个面向对象的框架,只有操纵元信息的内部函数被定义,而不是定义所有的类结构和详细的内部实现细节。ODMS实现可以选择模式数据库的实际物理表示,ODL模式列出描述模式的所有类,使用ODL关系表达这些类之间的关系。图1是具体的C++绑定的实现示意图。
图1 C++语言绑定的实现
图2 Smalltalk语言绑定的实现