LOGO面向对象数据库LOGO对象对象是由一组数据结构以及其上的一组方法封装起来的基本单位,由属性集合、方法集合和消息集合加上对象标识组成。⑴属性集合:对象通常具有若干特征,每个特征称为对象的一个属性(attribute)。属性反映对象的状态与特性,描述对象固有静态性质。⑵方法集合:方法(method)是对象行为特性的描述,它定义了允许作用于该对象之上的某种操作,因此,方法也称为操作或行为。方法反映对象固有动态性质,它可以审视并且改变对象的内部状态。LOGO面向对象的基本概念⑶消息集合:消息是对象与对象之间的联系信息。消息中仅仅包含发送者的要求,它告诉接收者要完成哪些处理,但并不指示接收者如何完成,消息完全由接收者解释,并选择所需操作。⑷对象标识:在面向对象数据模型中,每个对象都有在系统内有一个唯一且不变的标识符,不允许两个不同的对象具有相同的对象标识符,这种标识符就称为对象标识(OID)。LOGO面向对象的基本概念对象具有封装性、隐蔽性与稳定性等重要特性:⑴封装性:封装使得用户只能看到对象外在的界面信息,而看不到对象内部的信息(如方法实现细节),对象内部的信息对用户是屏蔽的。⑵隐蔽性:对象封装屏蔽了外界对内部细节的了解,这种屏蔽就称为隐蔽。⑶稳定性:对象内部的对象行为建立在对象属性之上(或行为依赖于属性),这就在对象内部建立起以属性为核心并以行为为附庸的稳定实体特性,称为对象的稳定性。LOGO面向对象方法“面向对象”(objectoriented)一词中的“对象”(object)可以解释为客观世界中的客体。“面向对象方法”(OO方法)则可以理解为以客观世界中的客体为观察目标的方法。LOGO类类(Class)是对具有共同属性和方法的对象全体的抽象和概括地描述,它相当于关系模型中的关系模式。类给出了属于该类全部对象属性与行为的抽象定义,而此时类中的对象仅是这种类定义中的一个实体,人们称其为该类的实例。类的出现简化了人们对客观世界的了解,众多复杂对象因为有了类而变得相当简单,人们可以对属于类的全体对象进行统一研究而不必对每个对象做个别的复杂的研究。LOGO面向对象的基本概念类之间的基本关系可以分为三种:类的继承关系、类的组合关系和类的通信关系(消息)。继承关系和组合关系是类之间的两个基本关系,反映的是类与类之间静态联系。类之间还可以具有如同对象之间“消息”那样的通信关系,消息反映的类与类之间的动态联系,这里的“消息”和对象与对象之间的消息本质上相同。LOGO面向对象的基本概念⑴类的继承类与类之间的层次结构重要特点之一就是继承。继承反映一个类能够自动继承其他某些类所具有的属性和方法,这是面向对象数据模型中避免重复定义的一个重要机制。在超类与子类概念中,子类除了继承超类中的属性和方法外,还可以用增加和取代的途径定义子类所具有的特殊属性和方法。抽象类将有关的类组织在一起,抽象出一个公共的超类,其他子类都从这个超类派生出来。LOGO面向对象的基本概念⑵类继承的特性类继承通常具有下面的四个基本性质。①传递性②单向性③可重用性④包含性⑶继承的多态性在类的继承过程中,超类属性与方法在子类中允许有不同的实现形式、方法与语义,这种情形就称为多态性。多态性,即一个名字可以具有多种语义。例如,人和动物同样吃食物,但是人可以用文明的工具进餐,但是动物只是原始的进食。LOGO面向对象数据模型面向对象数据模型是依据面向对象方法所建立的数据模型,其中包括数据模式、数据操作和数据约束。1.数据模型概念⑴数据模式由对象结构以及类之间继承和组合关系建立起来的数据间的组织结构关系。⑵数据操作由对象与类中方法建构对象数据模式上的数据操作,数据操作分为两个部分:一部分封装在类之中,称为方法,另一部分是类之间相互沟通的操作,称为消息。⑶数据约束数据约束也是一种方法,面向对象数据一般使用方法或消息表示完整性约束条件。LOGO数据类型⑴基本类型基本类型包括通常的整型、字符串和布尔型等,“类”类型也可以将其作为一个整体看成一个基础的类型。⑵构造类型基础型和“类”型是基本型,通过它们,可以使用下述构造器形成各种复杂型(构造型)。●ARRAY。如果T是一个型,i是一个正整数,则ARRAYT,i就是一个型,其对象为T的i个对象的一个数组,例如,ARRAYchar,10就是长度为10的字符串。●LIST。如果T是任意型,则LISTT也是一种型,其对象是T的零个或多个对象的一个。LOGO面向对象数据模型●BAG。如果T是任意型,则BAGT也是一种型,其对象是型T的对象的一个“可重复”集合即一个元素可重用的集合,称为一个“袋”或“包”。包与集合的区别就是其中的元素可以重复。例如{1,4,1,6}是一个包而不是一个集合。●SET。如果T是任意型,则SETT也是一种型,其对象是T的对象的一个有限集合。●RECORD。设Ti和Fi(i=1,2,……,n)分别为任意的一个型和该型的一个域的名字,则RECORD(F1:T1;F2:T2,…,Fn:Tn)也为一种型,其对象为分别具有名字Fi和型Ti(i=1,2,……,n)的域所组成的记录。LOGO与传统数据模型比较⑴面向对象数据模型(OODM)是一种层次式的结构模型,以类为基本单元,以继承和组合作为结构方式;⑵OODM是将数据与操作封装于一体的结构方式,使得OODM中的类是具有独立运作能力的实体,扩大了传统数据模型中实体集仅仅是单一数据集的不足;⑶OODM具有构造多种复杂抽象数据类型的能力;⑷OODM具有不断更新结构的能力。LOGO的扩展主要包括C++对象定义语言(ODL)和C++对象操作语言(OML),其中,OML可分为对象查询语言(OQL)和对象控制语言(OCL)。1.数据定义⑴接口和类的创建例2-3下面语句创建了ODMG中的接口和类。InterfaceEmployee{…};InterfaceProfessor:Employee{…};InterfaceAssociate_Professor:professor{…};LOGO{…};ClassHourly_Employee:Employee{…};ClassPerson{attributestringname;attributedatebirthday;};ClassEmployeepersonextendsPerson:Employee{attributeDatehireDate;AttributeCurrencypayRate;RelationshipManagerbossinverseManager::subordinates;};ClassManagerPersonextendsEmployeePerson:Manager{RelationshipsetEmployeesubordinatesinverseEmployee::boss;};LOGOODMG中的数据操作⑵对象的创建对象创建则类似于关系模式中的数据创建。在ODMG中,对象可以分为聚集对象和原子对象,原子对象就是“用户自定义对象”,聚集对象相对比较整齐,通常是使用为不同聚集了类型定义的一种特殊接口类型-工厂对象来创建聚集对象,也就是说通过“工厂对象”接口定义中的生成函数来创建聚集对象。LOGO是以面向对象模型为基础的类SQL查询语言,允许使用传统SELECT查询语句来书写表达式。OQL没有提供显式删除和修改操作,这些基本数据操作由类型定义中的操作完成。例2-5在大学数据库中,用OQL的SELECT语句可以得到如下查询操作。查询大学中授课门数超过2门的教师,要求显示学校名称和教师姓名,显示时属性名为university_uname和faculty_name:LOGO:F.nameFROMfacultiesFWHEREF.num_teach()2;说明:通常SELECT语句中查询结果为集合或包,但加上ORDERBY后,输出结构就为列表。LOGO如下查询返回式列表而不是集合或包。SELECTF.fno,F.nameFROMfaultiesFORDERBYF.ageDESC[0:4];说明:表达式[0:4]表示抽取年龄最大的5名教师。LOGO面向对象数据库系统●以面向对象方法为指导并对数据库模型做语义解释,就可构造面向对象数据模型(OODM)。●以OODM为基础所构造的数据库系统就是面向对象数据库(OODB)。●以OODB为核心构造的数据库管理系统就是面向对象数据库管理系统(OODBMS)。●以OODBMS为核心构造的数据库系统就是面向对象数据库系统(OODBS)。LOGO面向对象的数据库管理系统数据库管理系统是任何一个数据库的中枢系统,面向对象的数据库管理系统常需要支持面向对象的数据模型,提供面向对象的数据库语言,提供面向对象数据库管理机制,同时具有传统数据库的管理能力。面向对象数据库管理系统由类管理、对象管理和对象控制3个部分组成。LOGO面向对象数据库系统⑴类管理类管理用于对类定义和类操作进行管理,利用类来描述复杂的对象。⑵对象管理对象管理又称为实例管理,主要完成对类中对象的操作管理,利用类中的封装方法来模拟对象的复杂行为。⑶对象控制对象控制具有传统数据库中数据控制功能,但也补充了一些新的内容。LOGO面向对象数据库系统一个系统要成为数据库系统,其最小需求是:一个具有优化能力的高级查询语言,支持持久性和自动的事务并发控制和恢复,支持复杂数据类型快速和有效的查询、索引和存取。一个数据库系统要成为OODBS,其最基本的标准是:⑴首先是一个面向对象系统;⑵其次是一个数据库系统。LOGO