壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 419|回复: 0

CIMS信息集成平台中的OO视图模型

[复制链接]
发表于 2012/3/10 11:14:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
1 前言

  随着数据库应用领域的不断复杂化,如计算机集成制造系统CIMS等,传统多数据库系统已不能满足要求,因为在CIMS环境中,信息结构是非常复杂的,既有结构化数据,同时也有非结构化数据(如NC代码等).因此研究面向对象的多数据库系统是非常必要的.许多研究者已经在应用面向对象技术到多数据库系统方面做出了努力〔4-5〕,出现了一些面向对象多数据库系统的原型系统.大多数研究者都采用OO视图模型来定义全局模式(集成模式).
  近年来人们对面向对象的视图模型进行了很多深入的研究〔1~3〕,但这些视图模型都是基于一般的面向对象模型的,没有过多地考虑多数据库集成的特殊需求,不能满足集成的需要,因此本文设计了一种面向模式集成功能的OO视图模型I-VIEW,它具有以下几个主要特征:(1) 对OO数据模型进行了扩充,提出了虚属性、虚对象的概念,以适应视图机制和模式集成的需要;(2) 引入了输入、隐藏和对象状态提炼机制,以实现模式映射和解决模式语义冲突.一个视图能够通过类的输入机制从成员数据库中得到模式和数据信息,输入类的部分信息能够被隐藏,且对象状态能够被提炼;(3) 提供了各种类构造符,以实现模式的合并与重构,并为用户提供一个重新组织视图中的类层次结构的灵活手段.类构造符是从已有类出发构造新类,并建立相应的语义约束.
2 所基于的面向对象数据模型

  
一般的OO模型缺少某些必要的概念以解决多数据库模式集成的特殊问题,为使我们的OO视图模型能够满足多数据库模式集成的特殊需求,在保持通用的OO模型基本特征(如:复杂对象与复杂分类、型与类、继承与多继承、行为的封装与重载、行为的多态性、对象标识和聚合引用等)的基础上,对OO模型进行了扩充.
2.1 虚属性
  
面向对象系统为数据库设计者提供了构造数据的各种选择,例如:地址既可以表示为三个简单属性(City,Street和Number),又可以表示为一个复杂属性,这样就很难确定一种对各种应用都是最好的数据构造方式.因此,我们引入了虚属性的概念,以便在视图中重新组织对象中的信息,解决成员模式间的结构和数据冲突.
  虚属性的结构是通过已有属性经过分类说明构造产生的,它的值是通过计算产生的.在我们的视图模型中有两种分类:基本分类和复杂分类. 基本分类主要包括int,float,char,string,time,date,boolean等; 复杂分类是由基本分类和已经定义的其它复杂分类通过数据构造器来定义的.有三种数据构造器:元组构造器、集合构造器、列表构造器.虚属性的定义格式如下:
       virtualAttribute <attribute_name> [ of <type_structure> ] in <calss_name>
          form class <calss_name>,..., <class_name>
          hasValue <value_fuanction>.
  其中,在虚属性的类型可以由系统推导出来的情况下,of子句可以缺省.例如,下面的例子中,静态类型推导系统可以推导出所定义的虚类的类型是元组类型:[City:string,Street:string,Number:string].
例1:下面的语句将类Person中以三个简单属性(City,Street和Number)表示的地址信息重新组织为一个复杂的虚属性(Address)表示的地址信息.
  virtualAttribute Address in Person form class Person
   hasValue [ City: Person.City, Street: Person.Street, Number: Person.Number].
  虚属性的引入,不仅提供了对对象结构进行重新构造的能力,而且提供了一个在全局模式中对对象的状态进行提炼的手段,这将极大地增加集成的灵活性.
  例2:考虑类"Employee"的一个对象,若在成员模式S1中,Employee.Salary以美元为单位;在另一个成员模式S2中,Employee.Salary以英镑为单位;在全局模式中,Employee.Salary以马克为单位.这样,若在全局模式中将Employee.Salary定义为一个虚属性,就可以在全局模式中定义一个适当的虚属性值计算函数来实现必要的转换.这样的一个虚属性可以定义如下:
  virtualAttribute Salary of float in Employee form class S1.Employee,S2.Employee
   hasValue (IF (self IN S1.Employee) THEN S1.Employee.Salary*1.45;
IF (self IN S2.Employee) THEN S2.Employee.Salary*2.1;).
2.2 虚对象
  
一个视图I-VIEW定义为一个虚类的集合,虚类的对象集是由已存在的对象(称为基对象)构造出的虚对象组成的.虚对象不被存储,而是在对其进行查询时被重新计算出来.我们将虚对象看成是基对象和视图函数的结合.一个虚对象的建立由两部分构成:查询和视图函数.
  (1) 查询用于选择来自其它类中的基对象.查询是基于我们的视图查询语言的.该查询语言中,类之间的语义关系(特化、概括和聚合)被形成通用方法,以便允许在相关类和对象的网络中沿着语义关系进行导航查询.我们的查询语言是面向对象和集合的,它针对某些类进行查找,返回满足某个限定谓词的对象的集合.有关查询问题的详细论述和示例将在另文给出.
  (2) 视图函数用于处理被查询出的基对象,将其转换为视图环境中的对象.它首先为每个被建立的虚对象建立一个对象标识符,然后应用该虚对象中每个虚属性的计算函数到相应的基对象上,产生该虚对象的状态.我们的视图模型中,视图函数是由系统自动维护的.视图函数维护的一个主要问题是虚对象标识符的惟一性问题.OO系统在每个对象被建立时赋予它一个惟一的对象标识符,因此,一个虚对象被建立时也必须被赋予一个惟一的对象标识符,由于同一个虚对象可能被多次建立(每次被使用都需要重新建立),那么如何保证一个需对象每次建立都被赋予相同的对象标识符?我们的解决办法是将虚对象的对象标识符定义为它所依赖的基对象的对象标识符的函数.由于虚对象是依赖于其基对象而存在的,这样就可以保证虚对象标识符的惟一性.
3 O-O集成视图I-VIEW

  
在我们的OO视图模型中,集成视图I-VIEW定义为虚类的集合,这些虚类的对象集是由已存在的对象构造出的虚对象组成的.这些虚类定义了一个视图模式,而它们的虚对象构成了基于该视图模式的(虚)数据库.一旦虚类被定义,它们将同任何其它类同样被使用,在虚类定义中被使用到的类称为该虚类的基类.
  在信息集成平台中,一个集成模式是一个I-VIEW,初始是空的,然后由参加集成的各成员模式出发,通过模式集成处理建立其视图模式和(虚)数据库.模式集成分两阶段进行:①模式映射和冲突解决:首先将参加集成的各成员模式映射到I-VIEW中,并解决各种模式语义冲突;②模式合并与重构:模式合并是合并来自不同被集成模式中冗余的类,实现集成模式的最小性;而模式重构是捕捉来自不同被集成模式的虚类之间的语义关系,实现集成模式的完备性和可理解性.
  在我们的视图模型中,模式映射和大部分模式语义冲突的解决是由类的输入、隐藏和提炼机制完成的.一个视图能够通过类的输入语句从成员数据库中得到模式和数据信息.一旦被集成模式中的类被输入,其定义和对象在视图中就变成可见的了,我们称这种虚类为输入类.输入类的部分信息能够被隐藏,这是通过显示的隐藏语句来实现.输入类的对象结构能够被重构,且对象状态能够被提炼,以便解决模式语义冲突,使输入类更适合集成用户的需要.这是通过在输入类中定义虚属性来实现.
  为实现模式的合并与重构,提供了各种类构造符,以体现语义关系.在我们的模型中,语义关系是已有类之间的语义约束,而类构造符是从已有类出发构造新类,并建立相应的语义约束.这些类构造符被应用到已存在的虚类(称为基类)上,生成新的虚类(称为派生类).类构造符有:特化、概括、聚合和合并等.
  I_VIEW的基本定义框架如下:
  create i_view <I_ViewName>;
{ import specifications;}
{ hide specifications;}
{ refine specifications;}
{ derive specifications;}
  首先建立一个空的集成视图;然后通过一系列的类的输入、隐藏和提炼定义,进行模式映射和模式语义冲突解决;最后使用类派生操作,对集成视图进行合并与重构,建立起最终的集成视图(集成模式).
4 类的输入、隐藏和提炼

  
一个集成视图I_VIEW初始是空的,然后确定来自被集成数据库中的哪些信息是可见的.实现这一功能的机制是输入(Importing)和隐藏(Hiding).在我们的输入机制中,当一个类被输入,该类及其所有超类形成集成视图中的虚类(称为输入类),这些类的结构信息和行为特征都变成可见的了.但这些类中的哪些对象是可见的,即输入类的(虚)对象集如何构成,则需要类输入语句中的查询子句来描述.输入语句的定义格式如下:
  import [all] classes [<class_name>,..., <class_name>] from [database] <database_name>
    [query: <query_specification>];
  子句query用来选择来自被输入类中的基对象,以形成输入类的虚对象,其查询表示是基于我们的视图查询语言的.该子句可以缺省,缺省时被输入的类中所有对象均被选为基对象;当该子句不缺省时,这条输入语句只能输入一个类.当一个数据库中的所有类都被输入时,可以缺省被输入的类名,而使用描述符“all”.
  一旦数据被输入,我们经常希望它的部分信息被隐藏(这是关系视图的主要目标之一).关系视图是通过投影操作来提供信息隐藏的.例如,对关系数据库中的结构为[Name,Number,Age,Salary]的关系Employee,下面的语句隐藏Salary信息:create view A_Relational_View select [E.Name,E.Number,E.Age] from E in Employee.
  但这种隐式隐藏机制在OO视图中是不合适的.我们的视图模型引入了显示的信息隐藏机制.隐藏语句的定义格式如下:
  hideAttributes <attribute_name>,...,<attribute_name> in class <class_name>;
对于上面的例子,下面的语句在视图中隐藏了类Employee及其所有超类中定义的属性Salary:hideAttributes Salary in class Employee.
  由于被集成模式是由不同的用户设计的,而且不同的用户对现实世界中的实体有各自的视点和表现方式,这样被集成模式间必然存在各种冲突和不完全适合集成用户需要的表示,因此需要对由被集成模式输入的输入类的对象结构和对象状态进行重构和提炼.这是通过在输入类中定义虚属性来实现.另外,为解决模式命名冲突,提供了换名语句,其定义格式如下:
  rename <name1> to <name2> in class <class_name>;
例3:下面的语句定义集成视图My_View,输入被集成模式(数据库)Chrysler中的所有类和对象、Ford中的类Person和Age ≥18的对象,并对类Person建立虚属性Address,隐藏属性City、Street和Number,将属性Name换名为P_Name.
  create i_view My_View;
  import all classes from database Chrysler;
  import classes Person from database Ford
   query: select P from Person where P.Age ≥18;
  virtualAttribute Address in Person form class Ford.Person
   hasValue [ City: Person.City, Street: Person.Street, Number: Person.Number];
  hideAttributes City, Street, Number in class Person;
  rename Name to P_Name in class Person.
5 类的派生

  
为支持相交模式的语义集成,我们的视图模型提供了一组类构造符来体现集成模型中的语义关系.当被应用到类C1,C2,...,Cn时,一个类构造符建立一个称为派生类的虚类C,C与C1,C2,...,Cn间保持某种语义联系,我们称类C1,C2,...,Cn为虚类C的基类.语义关系是已有类之间的完整性约束,而类构造符是从基类派生出新类.由语义关系所保证的完整性约束也被相应的类构造符所保证,只是方式不同:语义关系是在执行修改操作时检查完整性约束,而类构造符是通过由系统决定如何产生新类和新对象来自动保证完整性约束.对于集成模型中的任何一种语义关系,都有一个相应的类构造符.鉴于篇幅所限,我们仅讨论主要的类构造符,有概括、特化、聚合和合并.下面用S(C)、M(C)、D(C)、Sub(C)和Sup(C)表示类C的模式结构集、行为方法集、对象实例集、直接子类集和直接超类集.
5.1 特化
  特化构造符从已有类C1,C2,...,Cn派生出子类C,形成超类/子类联系Ci/C.C的对象集是C1, C2,...,Cn的对象集的子集.我们的模型支持单继承(n=1)和多继承特化.对多继承有两种特化:范畴特化和共享特化,分别对应选择继承和全继承.
5.1.1 范畴特化
  范畴特化是从若干个类派生一个范畴子类.范畴子类中的对象集为所有超类的对象的并集的子集,范畴子类中的一个对象则不一定是所有超类的对象,但至少是一个超类中的对象实例.因此在超类/子类层次中,范畴子类中的对象仅能继承某些超类中相应对象的属性特征和行为方法,这种继承关系称为选择继承.范畴子类的继承规则是:
5.1.2 共享特化
  共享特化是从若干个类派生一个共享子类,共享子类的模式结构为其超类的共同模式结构特征.一个共享子类可以有多个超类,而共享子类中的一个对象同时应该属于每个超类,因此在超类/共享子类层次中的继承性并不是选择继承,而是全继承,即共享子类中的一个对象应该从其所有的超类中继承相应的模式信息和行为方法.共享子类的继承规则是:
  特化操作的定义格式如下:
  create derived class <class_name>
  [category | share]specializationOf: <class_name>,...,<class_name>;
  { specializatongPredicate: <specialization_predicate>;}
  { virtualAttribute <attribute_name> [ of <type_structure> ] in <class_name>
     form class <class_name>,..., <class_name>
     hasValue <value_fuanction>;}
  {mthods: <method_name>;
  methodImplementation: <method_code>;}.
  specializatongPredicate使用第2节描述的查询语言的语法,用于确定基类中的哪些对象对应于派生类中的虚对象,多继承时可以有多条子句.virtualAttribute子句用于定义派生类自己特有的(虚)属性.mthods和methodImplementation子句用于定义派生类自己的方法或对继承的方法进行提炼.
例4:类Teacher(教师)和Grad(研究生)是集成视图中的两个类.若在学校里只有研究生才能作教学助教, 则下面的共享特化语句产生派生类RA(教学助教):
  create derived class RA
  share specializationOF:Teacher,Grad;
  specializatongPredicate:select T,G from Teacher,Grad where T.Name=G.Name;
5.2 概 括
  概括构造符从已有类C1,C2,...,Cn派生出超类C,形成超类/子类联系C/Ci,这里实现的是向上继承(详见第2节).C的对象集是C1, C2,...,Cn的对象集的并集.我们的模型区别两种并集:互斥并集和相交并集,分别对应于互斥概括和相交概括.二者的区别是:在形成C的对象集时,互斥概括将来自于基类的每个对象看成是不同的;而相交概括将来自于不同基类的某些对象当作同一个对象处理(合并为一个对象),这时就需要用户给出判定对象相同的条件(因为系统以OID来标识对象,而不同基类中的对象具有不同的OID).相交超类的集成规则是:
  概括操作的定义格式如下:
  create derived class <class_name>;
  [disjointGeneralizatingOf: <class_name>,...,<class_name>;]
  [overlapGeneralizatingOf: <class_name>,...,<class_name> equal: <expression>;]
  [inheritsMethods: <method_name>,...,<method_name>;]
  {hideAttributes <attribute_name>,...,<attribute_name> in class <calss_name>;}
  {mthods: <method_name>;
  methodImplementation: <method_code>;}.
  equal子句给出对象相等条件.inheritsMethods子句定义派生类从基类中向上继承的方法,缺省表示向上继承所有方法.hideAttribut子句用于去掉不需要的子类公共属性.mthods和methodImplementation子句对向上继承的方法进行提炼.
例5:类Unedrgrad(本科生)和Grad(研究生)是集成视图中的类.若在学校里只有本科生和研究生这两类学生, 则下面的互斥概括语句产生派生类Student(学生):
  create derived class Student;
  disjointGeneralizating Of:Undergrad Grad
5.3 聚合
  一个聚合操作过程实际上是一个模式分解过程,它将一个类分解为两个类.聚合构造符是将一个结构为S(C)={A1,...,An}的类C中的某些属性{Ai,...,Ap}聚合出来派生一个新类C,在C到C间形成一个聚合层次(C为被引用类),且C的结构将被改变如下:删除属性{Ai,...,Ap}并在C中增加一个对C的引用属性A,使得:
  聚合操作的定义格式如下:
    create derived class <class_name>;
  aggregationOf: <attribute_name>,...,<attribute_name> form class <calss_name>;
  referenceAttribute: <attribute_name>;
  {mthods: <method_name>;
  methodImplementation: <method_code>;}.
  mthods和methodImplementation子句用于定义派生类自己的方法.
例6:可将类Person的属性{City,Street,Number}聚合成新类Address, 引用属性为Addr.聚合构造语句如下: create derived class Address;z
  aggregationOf:City,Street,Number
   form class Person;
  referenceAttribute:Addr.
5.4 合并
  合并是模式集成特有的操作,来自不同成员模式的类C1,C2,...,Cn有相同的含义和模式结构时,在集成模式(视图)中可将这n个类合并,产生派生类C,使得:

  该合并操作是删除合并,即合并后类C1,C2,...,Cn将被删除.定义格式如下:
       create derived class <class_name>;
       mergeOf: <class_name>,...,<class_name>.
例7:若集成模式S1中的类Engineers与集成模式S2中的类Technicians具有相同结构, 则可将它们合并为新类Employee.create derived class Employee;
mergeOf:S1.Engineers,S2.Technicians.
6 结论

  
为了满足CIMS环境中信息集成的需求,本文设计了一种面向信息集成的OO视图模型I-VIEW,I-VIEW对OO模型进行了扩充,提出了虚属性、虚对象概念;引入了输入与隐藏机制和类派生机制、允许对对象状态进行提炼,能够很好地解决各类集成问题,如模式映射、模式冲突和模式合并与重构等.
  I-VIEW的设计基于以下原则:(1) 视图应该被当作一个数据库:虚类可被看成与任何其它的类一样;(2) 视图应该容易构造:尽可能地使用查询语言;(3) O-O特征应该被保持:输入和隐蔽的语义主要依赖于继承;(4) 适应模式集成的需要:提供输入和隐藏以实现模式映射,引入虚属性、属性换名和虚对象等以解决模式语义冲突,提供向上继承和新类派生以实现模式合并与重构.
  与本文相关的进一步研究工作有面向对象视图的修改问题和查询优化问题.
 * 国家“863”计划CIMS主题资助项目.宋宝燕,讲师,主要从事数据库集成技术的研究.张斌,副教授,主要研究领域为数据库集成技术,多数据库系统,面向对象数据库等.石祥滨,副教授,主要从事数据库集成技术研究.郑怀远,教授,主要研究领域为计算机集成制造(CIM),数据库系统.
作者单位:  东北大学计算机系 沈阳 110006
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 15:20 , Processed in 0.014641 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表