《面向对象模型》ppt课件_第1页
《面向对象模型》ppt课件_第2页
《面向对象模型》ppt课件_第3页
《面向对象模型》ppt课件_第4页
《面向对象模型》ppt课件_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三部分第三部分 面向对象模型面向对象模型GOM Generic Object Model 类型系统与对象系统类型系统与对象系统 GOM的构造定义的构造定义 元组构造元组构造 聚集构造聚集构造 对象的标识对象的标识 子对象的共享子对象的共享 对象的耐久性对象的耐久性 Sort类型上的复合构造类型上的复合构造第七章第七章 对象类型的构造对象类型的构造7.1 类型系统与对象系统类型系统与对象系统 类型系统类型系统sort type的开展的开展 类型:类型: 早期言语只提供简单类型早期言语只提供简单类型 进一步复杂类型进一步复杂类型 简单类型、构造类型、串、指针简单类型、构造类型、串、指针. Ada

2、提出笼统数据类型提出笼统数据类型ADTabstract data type 用户本人定义构造、操作用户本人定义构造、操作 系统提供打包功能系统提供打包功能 以类型方式提供运用以类型方式提供运用几种简单几种简单sort类型类型类型的运用、特点、局限类型的运用、特点、局限 变量阐明:指明一个变量的类型变量阐明:指明一个变量的类型 变量赋值:类型的实例化操作变量赋值:类型的实例化操作 实例化结果:指定一个值实例化结果:指定一个值 在实例的整个生命周期,值是不变的,因此类型在实例的整个生命周期,值是不变的,因此类型的实例无需标识,值就是其本身的标识的实例无需标识,值就是其本身的标识 变量的重新赋值是重

3、新实例化过程,原实例已消变量的重新赋值是重新实例化过程,原实例已消亡。亡。 类型系统的问题:无法描画实例的形状变化,即类型系统的问题:无法描画实例的形状变化,即不同的值代表了某个实例在不同时辰的不同形状不同的值代表了某个实例在不同时辰的不同形状 数据库的运用是最突出的不协调数据库的运用是最突出的不协调面向对象类型面向对象类型 对象系统强调的是对象形状的变化对象系统强调的是对象形状的变化 对象的生命周期种的某一瞬间是一个形对象的生命周期种的某一瞬间是一个形状对象属性的某个值集状对象属性的某个值集 但对象属性值被修正时,阐明该对象由但对象属性值被修正时,阐明该对象由一个形状转化为另一个形状一个形状

4、转化为另一个形状 为了能识别不同形状下的对象,必需进为了能识别不同形状下的对象,必需进展标识。展标识。独一性约束独一性约束 对象形状的转化时内部变化,因此必需对象形状的转化时内部变化,因此必需进展封装进展封装完好性约束完好性约束 对象对象O由由id#, Type, Rep)三元组表示三元组表示7.2 GOM对象类型框架定义对象类型框架定义 对象类型名独一,超类型名可选。 Public子句提供外部阐明 Body子句描画构造主体 操作子句描画接口阐明 操作名独一性 参数阐明 操作实现子句描画操作体7.3 元组构造的对象类型元组构造的对象类型 构造主体由三种根本构造及其组合构造主体由三种根本构造及其

5、组合而成而成 元组构造元组构造(tupe_structure) 集合构造集合构造(set_structure) 表构造表构造(list_structure)元组构造定义元组构造定义Type i可以是简单sort; 组合sort;对象类型;混合类型;集合类型;表类型;直接递归类型等内嵌的属性值读写操作内嵌的属性值读写操作 VCO操作操作Value receiving operation 值接纳操作值接纳操作 Declare attri:-type i; 读取当前第读取当前第i个属性形状个属性形状 VTO擦作擦作Value returning operation 值前往操作值前往操作 Declar

6、e attri:+1)例如二例如二 立方体对象模型的正文:立方体对象模型的正文: *定义定义“点的对象类型点的对象类型 *定义原资料的对象类型定义原资料的对象类型 *定义立方体的对象类型定义立方体的对象类型7.4 GOM类型的实例化类型的实例化 一个对象类型框架可产生一系列对象实例一个对象类型框架可产生一系列对象实例 内嵌的创建对象操作内嵌的创建对象操作“create GOM类型的实例化过程类型的实例化过程 第一步第一步* Var myCuboid :Cuboid;/阐明对象变阐明对象变量量 第二步第二步*执行赋值语句执行赋值语句: 1 myCuboid:=Cuboid$create; 或或2

7、 myCuboid.create;赋值语句的作用赋值语句的作用1产生了一个初始化的空壳实例;产生了一个初始化的空壳实例;2对该空壳实例赋予了一个对象标志对该空壳实例赋予了一个对象标志OID;3将将OID或实例地址赋给变量或实例地址赋给变量myCuboid;4将空壳属性值初始化为:将空壳属性值初始化为: Int:0;float:0.0;char:0;bool:false;复杂对;复杂对象类型:象类型:NULL;5当前该当前该OID还仅是逻辑表示,不能被用户访问。还仅是逻辑表示,不能被用户访问。*产生了一个仅仅与产生了一个仅仅与OID相联络的一个空对象。相联络的一个空对象。 第三步:对空对象的每个

8、属性进展实践值的初始化任第三步:对空对象的每个属性进展实践值的初始化任务务例如例如yxV4V8V1V3V6V7V2V5图7.2 The Topological Representation Of a CuboidmyCuboid图7.3 The “Skeleton of a New Cuboid Instancemat:NULLvalue:0.0v1:NULLv2:NULLv3:NULLv4:NULLv5:NULLv6:NULLv7:NULLv8:NULLid1Cuboid7.5 对象标识对象标识 表示对象的三种方法:表示对象的三种方法: 内容标识内容标识关键字标识符关键字标识符 地址标识地址

9、标识物理对象标识符物理对象标识符 逻辑对象标识符逻辑对象标识符 内容标识的问题内容依赖内容标识的问题内容依赖 概念的混淆:将两对象相等与两对象内容相等混为一概念的混淆:将两对象相等与两对象内容相等混为一谈。谈。 一致性管理的困难。一致性管理的困难。 例例1:对大商场中,同一商品在不同柜组有不同售价,:对大商场中,同一商品在不同柜组有不同售价,商品的主商品的主key为商品号为商品号+柜组号。柜组号。 例例2:假设主:假设主key为人名为人名+地址,当搬家而修正库地址,当搬家而修正库时,给完好性维护带来困难。时,给完好性维护带来困难。地址标识地址标识 地址标识地址标识 用对象所分配的地址空间表示对

10、象。用对象所分配的地址空间表示对象。 地址标识问题地址依赖地址标识问题地址依赖 存储空间的重用导致援用错误且无法查存储空间的重用导致援用错误且无法查找。找。例如新对象占用已删除对象空间。例如新对象占用已删除对象空间。 分布式系统中对象经常被挪动位置。分布式系统中对象经常被挪动位置。 DB性能调整时经常需求重构硬盘存储区。性能调整时经常需求重构硬盘存储区。逻辑对象标识符逻辑对象标识符 OIDLogical Object Identity对于对于GOM,每个对象可以描画为下述三元组,每个对象可以描画为下述三元组O = id#,Type,RepId# :系统产生的对象:系统产生的对象O的逻辑标识符的

11、逻辑标识符Type:对象:对象O的类型的类型Rep:对象的内部形状,即属性的当前值。:对象的内部形状,即属性的当前值。OID的特点的特点对象实例初始化时,系统产生一个独一的对象实例初始化时,系统产生一个独一的OID一个对象的一个对象的OID在整个生命周期都永远坚持在整个生命周期都永远坚持当对象删除后,其当对象删除后,其OID值永不复用值永不复用7.6 共享的队象共享的队象Share Subject 规范的规范的RDBMS:由于:由于INF约束,不支持队象约束,不支持队象的援用的援用 扩展的扩展的INF2的的RDBMS,只能支持层次构造,只能支持层次构造,不支持网状构造不支持网状构造 从需求而言

12、,复杂从需求而言,复杂DB运用要求支持网络构造运用要求支持网络构造 O-O模型中,一个对象模型可以不受限制地援模型中,一个对象模型可以不受限制地援用其他对象,同时也可以被其他对象援用用其他对象,同时也可以被其他对象援用构造出网状拓扑构造构造出网状拓扑构造 GOM模型经过多对象共享机制,支持网络构模型经过多对象共享机制,支持网络构造运用造运用共享子对象例如共享子对象例如共享子对象的副作用修正可见共享子对象的副作用修正可见 对象的形状变化会被其他援用对象可见对象的形状变化会被其他援用对象可见 例:一个对例:一个对Material对象的修正:对象的修正:anotherC

13、= Copper; anotherCuboid.mat.SpecWeight = 0.90 会被会被myCuboid所指所指id1可见可见7.7 援用和重援用援用和重援用Referencing and Dereferencing 复制复制copy语义:将一个值真实地复制到一个语义:将一个值真实地复制到一个sort类型的变量或属性中。类型的变量或属性中。 援用援用referencing语义:赋值语句处置的是一个对语义:赋值语句处置的是一个对象时,只将该对象的象时,只将该对象的OID赋值到相应的变量或属性中。赋值到相应的变量或属性中。 援用语句与援用语句与C中的指针赋值类似,是一个间址操作。中的指

14、针赋值类似,是一个间址操作。 重援用重援用Dereferencing语义:援用语义沿着援用链语义:援用语义沿着援用链的传送。的传送。 重援用语义是经过重援用语义是经过“操作符的重载,构造的援用链操作符的重载,构造的援用链实现的实现的 整个对象构造可以经过援用语义构成一个网状构造整个对象构造可以经过援用语义构成一个网状构造 一个援用查找的实现是沿援用链,导航式地对逐个对一个援用查找的实现是沿援用链,导航式地对逐个对象实例的查询。象实例的查询。Var someMaterial:Material; w:float; muCuboid:Cuboid; (1)someMaterial.create;(2

15、)someM:=“Carbon;(3)someMaterial.specWeight:=0.75;(4)myCuboid.mat:=someMaterial;(5)w:=myCuboid.mat.specWeight;mat:id88value:39.99v1:id11name:CarbonspecWeight:0.75Materialid88id1CuboidmyCuboidsomeMaterial7.8 聚合类型聚合类型 collection GOM模型提供模型提供body的二种内嵌的聚集类的二种内嵌的聚集类型的类型构造子:型的类型构造子:集合构造集合构造表构造表构

16、造集合构造的对象类型集合构造的对象类型 集合构造的对象类型是一个集合对象集合构造的对象类型是一个集合对象表达如下:表达如下:Type set typeName ispublic body Element typeend 集合元素类型集合元素类型ElementType可以是可以是sort类型,也可以类型,也可以是对象类型是对象类型type SetTypeName isPublicbodyElementTypeend type SetTypeName;type TelephoneNumbers isint;type TelephoneNumbers isPublicbodyintoperation

17、simplementationend type TelephoneNumbers;声明一个变量var guidosTelephoneNumbers: TelephoneNumbers;(1) guidosTelephoneNumbers.create;(2) guidosTelephoneNumbers.insert(6082080);(3) guidosTelephoneNumbers.insert(6082080);集合构造的对象类型特点集合构造的对象类型特点 需求定义一个元素需求定义一个元素Element的类型的类型 集合对象类型本身可以用于定义对象属性的类型集合对象类型本身可以用于定义

18、对象属性的类型 集合对象类型支持数学上的集合对象类型支持数学上的Set概念,即不允许有一概念,即不允许有一样元素存在。样元素存在。GOM要作独一性检查要作独一性检查 当当Element是是sort类型时,插入概念是复制语义,插入类型时,插入概念是复制语义,插入值;值;当当Element是对象类型时,插入概念是援用语义,是对象类型时,插入概念是援用语义,插入插入OID 集合对象允许共享,当有共享发生时,为共享子对象。集合对象允许共享,当有共享发生时,为共享子对象。 共享概念的引入,使集合对象的概念可以作为对象库共享概念的引入,使集合对象的概念可以作为对象库概念。概念。 共享的副作用共享的副作用

19、修正可见修正可见对象类型的扩展对象类型的扩展 GOM经过经过with extension子句隐式地产生并维护一个特定对子句隐式地产生并维护一个特定对象类型的集合对象类型,用以管理该类型实例化的对象集合。象类型的集合对象类型,用以管理该类型实例化的对象集合。 例例type Cuboid iswith extention isend type Cuboid 那么系统自动产生一个那么系统自动产生一个set Cuboid对象类型对象类型Cuboids。并。并将一切将一切Cuboid的实例化对象自动插入到的实例化对象自动插入到Cuboids中。中。 Cuboids类型只允许用户运用类型只允许用户运用ex

20、t (Cuboid)进展访问。进展访问。 不允许任何显式地修正、删除、插入等操作不允许任何显式地修正、删除、插入等操作 利用扩展概念建立对象实例库利用扩展概念建立对象实例库type CuboidSet isCuboid;var workPieceCuboids:CuboidSet;valuableCuboids:CuboidSet;workPieceCuboids.insert(myCuboid);valuableCuboids.insert();type CuboidSetwith extension isend type Cuboid;表构造对象类型表构造对象类型 表构造对象类型的特点表构

21、造对象类型的特点 列表中的元素是有序的列表中的元素是有序的 类标的数学概念是类标的数学概念是bag,即允许一样的元素,即允许一样的元素在表中不同位置多次出现在表中不同位置多次出现 列表中元素的类型可以是列表中元素的类型可以是sort type或或object type 表构造对象类型的定义方式表构造对象类型的定义方式type Name ispublic body CuboidSetid59workPiece Cuboidsid1,id2,id3id3name:IronspecWeight:0.89name:GoldspecWeight:1.32valuable Cuboidsid60Cuboi

22、dSetid77id99CuboidMaterialVertexid1mat: id77value:39.99v1:id11 v2:id12v3:id13 v4:id14v5:id15 v6:id16v7:id17 v8:id18id11x: 0.0y: 0.0z: 0.0id1mat: id99value:89.90v1:id31 v2:id32v3:id33 v4:id34v5:id35 v6:id36v7:id37 v8:id38id2mat: id77value:19.95v1:id21 v2:id22v3:id23 v4:id24v5:id25 v6:id26v7:id27 v8:i

23、d28id18x: 0.0y: 1.0z: 1.0id21x: 0.0y: 0.0z: 0.0id28x: 0.0y: 2.0z: 2.0id31x: 0.0y: 0.0z: 0.0id38x: 0.0y: 3.0z: 3.0mat: id77value: 250.00vertices: id899Cuboid2id299id899VertexListtype VertexList isPublicbodyoperationsimplementationend type VertexList;type Cuboid2 isPublicbody mat: Material; value: flo

24、at; vertices:VertexList;operationsimplementationend type Cuboid2;7.9 类型平安类型平安 非类型平安数据类型:数据库的组件非类型平安数据类型:数据库的组件属性,变量,集合元素等,并不限属性,变量,集合元素等,并不限制为一个特定的类型不需求类型阐制为一个特定的类型不需求类型阐明,即编译时不对它们进展类型检查,明,即编译时不对它们进展类型检查,益处是运用灵敏。益处是运用灵敏。 问题:大量的错误只能在运转时被检测问题:大量的错误只能在运转时被检测出来出来类型平安续类型平安续类型平安数据类型:对一切构件均限制了数据类类型平安数据类型:对

25、一切构件均限制了数据类型。型。 强类型言语强类型言语 GOM为强类型的为强类型的优点优点1.类型平安类型平安2.高效,在运转时无需作类型检查。高效,在运转时无需作类型检查。3.支持构造化设计支持构造化设计4.类型约束的组件为:属性、变量、操作参类型约束的组件为:属性、变量、操作参数、数、表和集合类型的元素。表和集合类型的元素。5.强类型言语编译时检查表达式中类型的兼强类型言语编译时检查表达式中类型的兼容容性。性。type City isPublicbody name: string; mayor: Person; inhabitants: PersonSet;operationsimpleme

26、ntationend type City;type Person isPublicbody name: string; age: int; spouse:Person; livesIn: City;operationsimplementationend type Person;type PersonSet isPublicbody Personoperationsimplementationend type PersonSet;Var cityOfLA: City;mickey,mini,dinald;Person;name: “Los Angelesmayor: id188inhabitan

27、ts: id115id571CitycityOfLAid193,id188,id372id115PersonSetname: “Mickey Mouseage: 60spouse: id372livesIn: id571Personid188name: “Mini Mouseage: 50spouse: id188livesIn: id571Personid372name: “Donald Duckage: 45spouse: NULLlivesIn: id571Personid193donaldmickeyvar totalAge,ageOfSomeBody:int;anyBody:Pers

28、on;name:string;(1) ageOfSomeBody:=cityOfLA.mayor.spouse.age;(2) foreach(anyBody in cityOfLA.inhabitants)totalAge:=totalAge+anyBody.age; foreach(anyBody in cityOfLA.inhabitants)totalAge:=totalAge+anyBody.age;ageOfSomeBody:=cityOfLA. mayor. spouse. age;intCityPersonPersonintintPersonCityPersonSetintin

29、tPerson7.10 耐久性耐久性Persistence 耐久性:当程序的执行终止后,其创建的构件和数据耐久性:当程序的执行终止后,其创建的构件和数据依然存在。依然存在。 需进展耐久化构件需进展耐久化构件 耐久化对象类型耐久化对象类型 耐久化对象实例耐久化对象实例 耐久化变量耐久化变量 处置耐久化数据采用的方式处置耐久化数据采用的方式 嵌入式嵌入式SQL言语言语 耐久化程序设计言语耐久化程序设计言语 嵌入式嵌入式SQL言语:耐久性数据的存取操作,必需由设言语:耐久性数据的存取操作,必需由设计者显式地用计者显式地用SQL提供的语句进展提供的语句进展DB读写。读写。耐久化程序设计言语耐久化程序设

30、计言语查询言语与宿主言语完全无缝联接查询言语与宿主言语完全无缝联接 优点优点 对象在对象在DB中的创建、存储无需任何格式联中的创建、存储无需任何格式联接。接。 用户对耐久化数据的支配与普通数据一样,用户对耐久化数据的支配与普通数据一样,无需无需进展显式的读进展显式的读/写。写。 缺陷缺陷 由于宿主言语过强,对由于宿主言语过强,对DB数据的一致性维数据的一致性维护更加护更加困难。困难。 由于言语的复杂性,数据查询的优化处置由于言语的复杂性,数据查询的优化处置变得更变得更困难。困难。 与与SQL的无缝联接目前作的并不理想。的无缝联接目前作的并不理想。GOM耐久性构件耐久性构件类型的耐久化类型的耐久

31、化 类型的耐久化:类型的耐久性由类型的耐久化:类型的耐久性由Persistence定义符定义符阐明。阐明。例:例:Persistence Type Vertex is其中,耐久性类型称号不能被重定义其中,耐久性类型称号不能被重定义 耐久性类型的依赖关系耐久性类型的依赖关系 在元组构造类型中,耐久化类型的一切属在元组构造类型中,耐久化类型的一切属性都性都必需是耐久的。必需是耐久的。 在聚合构造类型中,其元素类型也必需耐在聚合构造类型中,其元素类型也必需耐久。久。 在承继的在承继的is-a层次内部,一个耐久类型的层次内部,一个耐久类型的超类型超类型祖先必需是耐久的。祖先必需是耐久的。对象的耐久性对

32、象的耐久性一个对象实例的耐久化可以采用以下几种途一个对象实例的耐久化可以采用以下几种途径:径:按类型耐久:一个耐久化类型的实例可以自动确按类型耐久:一个耐久化类型的实例可以自动确以为耐久的。以为耐久的。缺陷:运用极不方便,在需求耐久和暂时共缺陷:运用极不方便,在需求耐久和暂时共存时,操作困难。有的系统采用耐久意向概存时,操作困难。有的系统采用耐久意向概念,即耐久类型实例化的对象能够潜在变为念,即耐久类型实例化的对象能够潜在变为耐久。耐久。按创建耐久按创建耐久将耐久操作与初始化操作绑定,即将耐久操作与初始化操作绑定,即将耐久对象与暂时对象采用不同的初始化子。将耐久对象与暂时对象采用不同的初始化子

33、。对象的耐久性续对象的耐久性续提供一个耐久化操作,即用显式的耐久化操提供一个耐久化操作,即用显式的耐久化操作将对象耐久化。即将耐久化声明延迟到对作将对象耐久化。即将耐久化声明延迟到对象创建之后。象创建之后。按援用声明耐久:仅对一个或多个对象按援用声明耐久:仅对一个或多个对象显式的声明为耐久对象根对象。其他对显式的声明为耐久对象根对象。其他对象的耐久化定义为沿着根对象的援用链进展象的耐久化定义为沿着根对象的援用链进展耐久化扩展。耐久化扩展。优点:耐久化定义简约。优点:耐久化定义简约。缺陷:系统确定耐久化对象的代价较大。缺陷:系统确定耐久化对象的代价较大。GOM的对象耐久化方法的对象耐久化方法 G

34、OM采用采用2,3两种方法:两种方法: GOM提供一个耐久化操作子提供一个耐久化操作子persistence 例如:例如:aVertex.persistence aVertex在耐久化操作之前依然是暂时对在耐久化操作之前依然是暂时对象象 GOM提供初始化阶段的耐久化操作提供初始化阶段的耐久化操作 GOM不支持第不支持第4种方法,带来的危险行种方法,带来的危险行为为 当用户从一个耐久化对象中援用了一个当用户从一个耐久化对象中援用了一个暂时对象时,会导致浮动援用暂时对象时,会导致浮动援用耐久对象的实现方法耐久对象的实现方法 地址依赖方法:地址依赖方法: 当声明一个对象耐久化时,系统初始化当声明一个

35、对象耐久化时,系统初始化一特定的外存区域,并提供一个耐久化一特定的外存区域,并提供一个耐久化地址指针地址指针 OID耐久方法:耐久方法: 对耐久化对象的标识进展耐久化对耐久化对象的标识进展耐久化耐久对象的存储和访问耐久对象的存储和访问 有三种访问战略:有三种访问战略: 名字法:在耐久化区域内按名字查找名字法:在耐久化区域内按名字查找不适宜有大量对象的情况不适宜有大量对象的情况 经过经过OID或耐久化指针查找或耐久化指针查找 系统对每一个耐久类型提供一个耐久性系统对每一个耐久类型提供一个耐久性容器容器其区间存放同类型的耐久对象其区间存放同类型的耐久对象 GOM支持支持2,3种方法种方法变量的耐久

36、化变量的耐久化 变量的耐久化声明:变量的耐久化声明: Persistence var myVertices:Vertexset; aVertex:Vertex; 运用要求:运用要求: 变量名必需坚持独一性,无二义性变量名必需坚持独一性,无二义性 变量类型必需已定义为耐久性变量类型必需已定义为耐久性 耐久性变量由系统管理:它的值在定义它的程耐久性变量由系统管理:它的值在定义它的程序终了后,依然有定义序终了后,依然有定义 问题:系统不能保证耐久性变量援用一个暂时问题:系统不能保证耐久性变量援用一个暂时对象,因此会产生悬空援用,即它的值在再次对象,因此会产生悬空援用,即它的值在再次赋值前是未定义的赋值前是未定义的7.11 渣滓回收渣滓回收Garbage Collection 对于不再被运用的对象,该当及时从对于不再被

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论