外文资料翻译
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
毕业设计外文资料翻译
学院:信息科学与工程学院
专业:网络工程
姓名:
学号:
外文出处: Object persistence and Java
(用外文写)
附件: 1.外文资料翻译译文;2.外文原文。
指导教师评语:
签名:
年月日
附件1:外文资料翻译译文
对象持久化和java
--深入的了解面向对象语言中的对象持久的讨论
Arsalan Saljoughy,, 05/01/97 对象持久化这个术语你常常会和数据存储一起听到。持久化被期望用于事务完整性和更严格的条件(参看文献部分获取更多的事务处理的信息)。但是,编程语言提供的标准类库和包都没有包含事务约束。正如本文中我们将清楚的看到简单的java持久化很有可能会滋生语言本身,而复杂的数据库功能将由数据库厂商提供。
没有对象是一个岛屿
在真实的世界,你很少发现一个事物跟其它事物之间没有关系,事物是对象模型的成分。对事物的持久比对对象模型的持久要困难,而且我们可以观察到对象之间是通过他们之间的关系关联在一起的。关联方式的数据存储趋于根据类型进行数据汇总,表中的行表示硬盘上同一种类型对象的物理存储,对象之间的关系是通过多张表共享关键字表现的。虽然通过数据库组织,关系数据库有时允许多表能在同一逻辑块中一起使用组成群集,例如,一个数据库部分,它没有机制存储对象关系。因此,为了构建一个对象模型,这些关系从进程运行时已经存在的关键字被构建的,又被称作表连接。这同样时众所周知的关系数据库的一个特性叫做“数据独立性”。几乎所有的对象数据库都提供一些机制来增强系统的性能,包括复杂的对象关系,都超过传统的关系数据库。
查询或浏览?
在存储数据到磁盘上时,我们要面临的选择是协同定位有关的对象以更适合浏览访问,或者存储到表上-根据对象的类型进行汇集使更容易进行查询访问(查询),或者两者一起使用。对象的协同定位是持久化存储中关系和面向对象数据库非常不一样的一个方面。选择查询语言是另外一个值得考虑的方面。结构化查询语言(SQL)和它的扩展已经证明使用条件判断存取机制的关系系统的成功。对象查询语言(OQL)是SQL的一个变种,由ODMG定制的标准,但是对这个语言的支持却非常的少。多种形式组合的方法使对象的集合在构建语意查询上空前的简洁。例如,假设一个账户有多种行为组合叫做isInGoodStanding,这样所有的in good standing的账户都将会返回正确,其它的返回错误。现在可以想象查询账户集合的简洁性,ingoodstanding为多有in good standing的账户实行不同的基础上的业务规则。它看起来像:
setOfGoodCustomers = setOfAccounts.query(account.inGoodStanding());
大多数的对象数据库能够处理在C++和Samlltalk中像这样的查选语法,但是它门确很难处理更大数据的集合和更复杂的查询表达式。许多关系数据库公司,例如Oracle和Informix,将很快提供其它的方式,基于SQL语法来达到同样的效果。
持久化和类型
面向对象语言的支持者会说持久化和类型是对象的两个相交的特性,也就是说,同一类型的对象的持久和变化过程是能够相同的,因为一个特性不能够影响其它的特性。另一类观点认为持久化只是可持久对象的行为,某些行为可能被应用于持久性对象。后
面的方法提倡通知可持久化对象存储和从存储器检索,模型提供一个实体对象的应用试图――通常延伸虚拟内存。
规范化和语言独立
一种语言同一类型的对象应该已同样的方式储存到持久的储存器上,不管它们的表现形式是怎么样的。把对象的布局改变成普通形式的过程被大家称做对象形式的规范化。在编译语言中,静态类型对象一种语言编写,但在不同的系统下编译,在吃酒储存器中应该具有相同的表现形式。
对独立语言对象表示规范化的进行扩展。如果对象能以单独的一种语言表示,那么同一对象的不同表现形式就可以共享同一持久化存储器。
一种策略为达到这个目的就是通过接口定义语言(IDL)引进一个新的层。通过IDL 可以生成对象数据库接口和相应的数据结构。IDL机构的底部包括两种,第一,额外的中间层总是需要额外的转换成,这样会影响系统的总体性能;第二,它限制了数据库服务对于特定厂商是唯一的价值,这样可能对于应用开发人员来说是相当有价值的。
另一种简单的策略是通过对SQL的扩展来实现对对象服务的支持。关系数据库厂商和较小的对象/关系厂商都提倡这种做法;然而,这些公司在塑造对象存储框架上是否能成功仍有待观察。
但是问题依然存在:对象持久化是对象特征的一部分或者是外部服务通过提供分离的接口给对象?通过什么样的对象集合和方法查询它们?在对象数据库和java语言本身视持久化为语言的内在时,关系,扩展关系,对象/关系往往在语言之间主张分裂的做法。
串行化实现java持久化
对象串行化是java语言中对象和元素的流的存储和读取的特殊策略。值得提醒的是,虽然有商用的第三方库对串行化C++对象的支持,但是C++本身并没有提供对象串行化的策略。下面是如何使用java的串行化:
// Writing "foo" to a stream (for example, a file)
// Step 1. Create an output stream
// that is, create bucket to receive the bytes
FileOutputStream out = new FileOutputStream("fooFile");
// Step 2. Create ObjectOutputStream
// that is, create a hose and put its head in the bucket
ObjectOutputStream os = new ObjectOutputStream(out)
// Step 3. Write a string and an object to the stream
// that is, let the stream flow into the bucket
os.writeObject("foo");
os.writeObject(new Foo());
// Step 4. Flush the data to its destination
os.flush();
writeObject方法串行化了foo对象和它的传递闭包――指的就是图中所有引用foo的对象。流内部只有串行化对象的一个副本存在。其它引用对象以对象句柄的形式存在来保存空格和防止循环引用。串行化对象以继承结构的每个类的属性开始,如下类的实现:// Reading an object from a stream
// Step 1. Create an input stream