版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三部分第三部分 面向对象模型面向对象模型GOM Generic Object Model 类型系统与对象系统类型系统与对象系统 GOM的结构定义的结构定义 元组结构元组结构 聚集结构聚集结构 对象的标识对象的标识 子对象的共享子对象的共享 对象的持久性对象的持久性 Sort类型上的复合结构类型上的复合结构第七章第七章 对象类型的结构对象类型的结构7.1 类型系统与对象系统类型系统与对象系统 类型系统(类型系统(sort type)的发展)的发展 类型:类型: 早期语言只提供简单类型早期语言只提供简单类型 进一步复杂类型进一步复杂类型 简单类型、结构类型、串、指针简单类型、结构类型、串、指针.
2、 Ada提出抽象数据类型提出抽象数据类型ADT(abstract data type) 用户自己定义结构、操作用户自己定义结构、操作 系统提供打包功能系统提供打包功能 以类型方式提供使用以类型方式提供使用几种简单几种简单sort类型类型类型的使用、特点、局限类型的使用、特点、局限 变量说明:指明一个变量的类型变量说明:指明一个变量的类型 变量赋值:类型的实例化操作变量赋值:类型的实例化操作 实例化结果:指定一个值实例化结果:指定一个值 在实例的整个生命周期,值是不变的,因此类在实例的整个生命周期,值是不变的,因此类型的实例无需标识,值就是其本身的标识型的实例无需标识,值就是其本身的标识 变量的
3、重新赋值是重新实例化过程,原实例已变量的重新赋值是重新实例化过程,原实例已消亡。消亡。 类型系统的问题:无法描述实例的状态变化,即类型系统的问题:无法描述实例的状态变化,即不同的值代表了某个实例在不同时刻的不同状态不同的值代表了某个实例在不同时刻的不同状态 数据库的应用是最突出的不协调数据库的应用是最突出的不协调面向对象类型面向对象类型 对象系统强调的是对象状态的变化对象系统强调的是对象状态的变化 对象的生命周期种的某一瞬间是一个状对象的生命周期种的某一瞬间是一个状态(对象属性的某个值集)态(对象属性的某个值集) 但对象属性值被修改时,表明该对象由但对象属性值被修改时,表明该对象由一个状态转化
4、为另一个状态一个状态转化为另一个状态 为了能识别不同状态下的对象,必须进为了能识别不同状态下的对象,必须进行标识。行标识。唯一性约束唯一性约束 对象状态的转化时内部变化,因此必须对象状态的转化时内部变化,因此必须进行封装进行封装完整性约束完整性约束 对象对象O由(由(id#, Type, Rep)三元组表示三元组表示7.2 GOM对象类型框架定义对象类型框架定义 对象类型名唯一,超类对象类型名唯一,超类型名可选。型名可选。 Public子句提供外部说子句提供外部说明明 Body子句描述结构主体子句描述结构主体 操作子句描述接口说明操作子句描述接口说明 操作名(唯一性)操作名(唯一性) 参数说明
5、参数说明 操作实现子句操作实现子句描述描述操作体操作体7.3 元组结构的对象类型元组结构的对象类型 结构主体由三种基本结构及其组合结构主体由三种基本结构及其组合而成而成元组结构元组结构(tupe_structure)集合结构集合结构(set_structure)表结构表结构(list_structure)元组结构定义元组结构定义Type i可以是可以是 简单简单sort; 组合组合sort; 对象类型;混合类对象类型;混合类型;集合类型;表型;集合类型;表类型;直接递归类类型;直接递归类型等型等内嵌的属性值读写操作内嵌的属性值读写操作 VCO操作(操作(Value receiving oper
6、ation) 值接收操作值接收操作Declare attri:-type i; 读取当前第读取当前第i个属性状态个属性状态 VTO擦作(擦作(Value returning operation) 值返回操作值返回操作Declare attri:+1)示例(二)示例(二) 立方体对象模型的正文:立方体对象模型的正文:*定义定义“点点”的对象类型的对象类型*定义原材料的对象类型定义原材料的对象类型*定义立方体的对象类型定义立方体的对象类型7.4 GOM类型的实例化类型的实例化 一个对象类型框架可产生一系列对象实例一个对象类型框架可产生一系列对象实例 内嵌的创建对象操作内嵌的创建对象操作“creat
7、e” GOM类型的实例化过程类型的实例化过程 第一步第一步* Var myCuboid :Cuboid;/说明对象变量说明对象变量 第二步第二步*执行赋值语句执行赋值语句: (1) myCuboid:=Cuboid$create;或(或(2) myCuboid.create;赋值语句的作用赋值语句的作用(1)产生了一个初始化的空壳实例;)产生了一个初始化的空壳实例;(2)对该空壳实例赋予了一个对象标记)对该空壳实例赋予了一个对象标记OID;(3)将)将OID(或实例地址)赋给变量(或实例地址)赋给变量myCuboid;(4)将空壳属性值初始化为:)将空壳属性值初始化为: Int:0;float
8、:0.0;char:0;bool:false;复杂对;复杂对象类型:象类型:NULL;(5)当前该)当前该OID还仅是逻辑表示,不能被用户访问。还仅是逻辑表示,不能被用户访问。*产生了一个仅仅与产生了一个仅仅与OID相联系的一个空对象。相联系的一个空对象。 第三步:对空对象的每个属性进行实际值的第三步:对空对象的每个属性进行实际值的初始化工作初始化工作示例示例yxV4V8V1V3V6V7V2V5图7.2 The Topological Representation Of a CuboidmyCuboid图7.3 The “Skeleton” of a New Cuboid Instancema
9、t:NULLvalue:0.0v1:NULLv2:NULLv3:NULLv4:NULLv5:NULLv6:NULLv7:NULLv8:NULLid1Cuboid7.5 对象标识对象标识 表示对象的三种方法:表示对象的三种方法: 内容标识内容标识关键字标识符关键字标识符 地址标识地址标识物理对象标识符物理对象标识符 逻辑对象标识符逻辑对象标识符 内容标识的问题(内容依赖)内容标识的问题(内容依赖) 概念的混淆:将两对象相等与两对象内容相等混为一谈。概念的混淆:将两对象相等与两对象内容相等混为一谈。 一致性管理的困难。一致性管理的困难。例例1:对大商场中,同一商品在不同柜组有不同售价,商品的:对大
10、商场中,同一商品在不同柜组有不同售价,商品的主主key为(商品号为(商品号+柜组号)。柜组号)。例例2:若主:若主key为(人名为(人名+地址),当搬家而修改库时,给完整地址),当搬家而修改库时,给完整性维护带来困难。性维护带来困难。地址标识地址标识 地址标识地址标识 用对象所分配的地址空间表示对象。用对象所分配的地址空间表示对象。 地址标识问题(地址依赖)地址标识问题(地址依赖) 存储空间的重用导致引用错误且无法查找。存储空间的重用导致引用错误且无法查找。例如新对象占用已删除对象空间。例如新对象占用已删除对象空间。 分布式系统中对象经常被移动位置。分布式系统中对象经常被移动位置。 DB性能调
11、整时常常需要重构硬盘存储区。性能调整时常常需要重构硬盘存储区。逻辑对象标识符逻辑对象标识符 OIDLogical Object Identity对于对于GOM,每个对象可以描述为下述三元组,每个对象可以描述为下述三元组O = (id#,Type,Rep) Id# :系统产生的对象:系统产生的对象O的逻辑标识符的逻辑标识符 Type:对象:对象O的类型的类型 Rep:对象的内部状态,即属性的当前值。:对象的内部状态,即属性的当前值。OID的特点的特点 对象实例初始化时,系统产生一个唯一的对象实例初始化时,系统产生一个唯一的OID 一个对象的一个对象的OID在整个生命周期都永远保持在整个生命周期都
12、永远保持 当对象删除后,其当对象删除后,其OID值永不复用值永不复用7.6 共享的队象共享的队象Share Subject 标准的标准的RDBMS:由于:由于INF约束,不支持队象约束,不支持队象的引用的引用 扩展的扩展的INF2的的RDBMS,只能支持层次结构,只能支持层次结构,不支持网状结构不支持网状结构 从需求而言,复杂从需求而言,复杂DB应用要求支持网络结构应用要求支持网络结构 O-O模型中,一个对象模型可以不受限制地引模型中,一个对象模型可以不受限制地引用其他对象,同时也可以被其他对象引用用其他对象,同时也可以被其他对象引用构造出网状拓扑结构构造出网状拓扑结构 GOM模型通过多对象共
13、享机制,支持网络结模型通过多对象共享机制,支持网络结构应用构应用共享子对象示例共享子对象示例共享子对象的副作用修改可见共享子对象的副作用修改可见 对象的状态变化会被其他引用对象可见对象的状态变化会被其他引用对象可见 例:一个对例:一个对Material对象的修改:对象的修改:anotherC = ”Copper”; anotherCuboid.mat.SpecWeight = 0.90 会被会被myCuboid所指所指id1可见可见7.7 引用和重引用引用和重引用Referencing and Dereferencing 复制(复制(copy)语义:将一个值真实地复
14、制到一个)语义:将一个值真实地复制到一个sort类型的变量或属性中。类型的变量或属性中。 引用(引用(referencing)语义:赋值语句处理的是一个对)语义:赋值语句处理的是一个对象时,只将该对象的象时,只将该对象的OID赋值到相应的变量或属性中。赋值到相应的变量或属性中。 引用语句与引用语句与C中的指针赋值相似,是一个间址操作。中的指针赋值相似,是一个间址操作。 重引用(重引用(Dereferencing)语义:引用语义沿着引用链)语义:引用语义沿着引用链的传递。的传递。 重引用语义是通过重引用语义是通过“”操作符的重载,构造的引用链操作符的重载,构造的引用链实现的实现的 整个对象结构可
15、以通过引用语义构成一个网状结构整个对象结构可以通过引用语义构成一个网状结构 一个引用查找的实现是沿引用链,导航式地对逐个对一个引用查找的实现是沿引用链,导航式地对逐个对象实例的查询。象实例的查询。Var someMaterial:Material; w:float; muCuboid:Cuboid; (1)someMaterial.create;(2)someM:=“Carbon”;(3)someMaterial.specWeight:=0.75;(4)myCuboid.mat:=someMaterial;(5)w:=myCuboid.mat.specWeight;ma
16、t:id88value:39.99v1:id11name:”Carbon”specWeight:0.75Materialid88id1CuboidmyCuboidsomeMaterial7.8 聚合类型聚合类型 collection GOM模型提供模型提供body的二种内嵌的聚集类的二种内嵌的聚集类型的类型构造子:型的类型构造子:集合结构集合结构表结构表结构集合结构的对象类型集合结构的对象类型 集合结构的对象类型是一个集合对象集合结构的对象类型是一个集合对象表达如下:表达如下:Type set typeName ispublic body Element typeend 集合元素类型集合元素类
17、型ElementType可以是可以是sort类型,也可以类型,也可以是对象类型是对象类型type SetTypeName isPublicbodyElementTypeend type SetTypeName;type TelephoneNumbers isint;type TelephoneNumbers isPublicbodyintoperationsimplementationend type TelephoneNumbers;声明一个变量var guidosTelephoneNumbers: TelephoneNumbers;(1) guidosTelephoneNumbers.cr
18、eate;(2) guidosTelephoneNumbers.insert(6082080);(3) guidosTelephoneNumbers.insert(6082080);集合结构的对象类型特点集合结构的对象类型特点 需要定义一个元素需要定义一个元素Element的类型的类型 集合对象类型本身可以用于定义对象属性的类型集合对象类型本身可以用于定义对象属性的类型 集合对象类型支持数学上的集合对象类型支持数学上的Set概念,即不允许有相概念,即不允许有相同元素存在。(同元素存在。(GOM要作唯一性检查)要作唯一性检查) 当当Element是是sort类型时,插入概念是复制语义,插入类型时
19、,插入概念是复制语义,插入值;值;当当Element是对象类型时,插入概念是引用语义,插是对象类型时,插入概念是引用语义,插入入OID 集合对象允许共享,当有共享发生时,为共享子对象。集合对象允许共享,当有共享发生时,为共享子对象。 共享概念的引入,使集合对象的概念可以作为对象库共享概念的引入,使集合对象的概念可以作为对象库概念。概念。 共享的副作用共享的副作用 修改可见修改可见对象类型的扩展对象类型的扩展 GOM通过通过with extension子句隐式地产生并维护一个特定对子句隐式地产生并维护一个特定对象类型的集合对象类型,用以管理该类型实例化的对象集合。象类型的集合对象类型,用以管理该
20、类型实例化的对象集合。 例例type Cuboid iswith extention isend type Cuboid 则系统自动产生一个则系统自动产生一个set Cuboid对象类型对象类型Cuboids。并将所有。并将所有Cuboid的实例化对象自动插入到的实例化对象自动插入到Cuboids中。中。 Cuboids类型只允许用户使用类型只允许用户使用ext (Cuboid)进行访问。进行访问。 不允许任何不允许任何显式地修改、删除、插入等操作修改、删除、插入等操作 利用扩展概念建立对象实例库利用扩展概念建立对象实例库type CuboidSet isCuboid;var workPiec
21、eCuboids:CuboidSet;valuableCuboids:CuboidSet;workPieceCuboids.insert(myCuboid);valuableCuboids.insert();type CuboidSetwith extension isend type Cuboid;表结构对象类型表结构对象类型 表结构对象类型的特点表结构对象类型的特点 列表中的元素是有序的列表中的元素是有序的 类标的数学概念是类标的数学概念是bag,即允许相同的元素在表,即允许相同的元素在表中不同位置多次出现中不同位置多次出现 列表中元素的类型可以是列表中元素的类型可以是sort type或
22、或object type 表结构对象类型的定义方式表结构对象类型的定义方式type Name ispublic body CuboidSetid59workPiece Cuboidsid1,id2,id3id3name:”Iron”specWeight:0.89name:”Gold”specWeight:1.32valuable Cuboidsid60CuboidSetid77id99CuboidMaterialVertexid1mat: id77value:39.99v1:id11v2:id12v3:id13v4:id14v5:id15v6:id16v7:id17v8:id18id11x:
23、0.0y: 0.0z: 0.0id1mat: id99value:89.90v1:id31v2:id32v3:id33v4:id34v5:id35v6:id36v7:id37v8:id38id2mat: id77value:19.95v1:id21v2:id22v3:id23v4:id24v5:id25v6:id26v7:id27v8:id28id18x: 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: 2
24、50.00vertices: id899Cuboid2id299id899VertexListtype VertexList isPublicbodyoperationsimplementationend type VertexList;type Cuboid2 isPublicbody mat: Material; value: float; vertices:VertexList;operationsimplementationend type Cuboid2;7.9 类型安全类型安全 非类型安全数据类型:数据库的组件非类型安全数据类型:数据库的组件(属性,变量,集合元素等),并不限(属性
25、,变量,集合元素等),并不限制为一个特定的类型(不需要类型说制为一个特定的类型(不需要类型说明),即编译时不对它们进行类型检查,明),即编译时不对它们进行类型检查,好处是使用灵活。好处是使用灵活。 问题:大量的错误只能在运行时被检测问题:大量的错误只能在运行时被检测出来出来类型安全(续)类型安全(续)类型安全数据类型:对所有构件均限制了数据类类型安全数据类型:对所有构件均限制了数据类型。型。 强类型语言强类型语言 GOM为强类型的为强类型的优点优点1.类型安全类型安全2.高效,在运行时无需作类型检查。高效,在运行时无需作类型检查。3.支持结构化设计支持结构化设计4.类型约束的组件为:属性、变量
26、、操作参数、类型约束的组件为:属性、变量、操作参数、表和集合类型的元素。表和集合类型的元素。5.强类型语言编译时检查表达式中类型的兼容强类型语言编译时检查表达式中类型的兼容性。性。type City isPublicbody name: string; mayor: Person; inhabitants: PersonSet;operationsimplementationend type City;type Person isPublicbody name: string; age: int; spouse:Person; livesIn: City;operationsimplement
27、ationend type Person;type PersonSet isPublicbody Personoperationsimplementationend type PersonSet;Var cityOfLA: City;mickey,mini,dinald;Person;name: “Los Angeles”mayor: id188inhabitants: id115id571CitycityOfLAid193,id188,id372id115PersonSetname: “Mickey Mouse”age: 60spouse: id372livesIn: id571Person
28、id188name: “Mini Mouse”age: 50spouse: id188livesIn: id571Personid372name: “Donald Duck”age: 45spouse: NULLlivesIn: id571Personid193donaldmickeyvar totalAge,ageOfSomeBody:int;anyBody:Person;name:string;(1) ageOfSomeBody:=cityOfLA.mayor.spouse.age;(2) foreach(anyBody in cityOfLA.inhabitants)totalAge:=
29、totalAge+anyBody.age; foreach(anyBody in cityOfLA.inhabitants)totalAge:=totalAge+anyBody.age;ageOfSomeBody:=cityOfLA. mayor. spouse. age;intCityPersonPersonintintPersonCityPersonSetintintPerson7.10 持久性持久性Persistence 持久性:当程序的执行终止后,其创建的构件和数据持久性:当程序的执行终止后,其创建的构件和数据仍然存在。仍然存在。 需进行持久化构件需进行持久化构件 持久化对象类型持久化
30、对象类型 持久化对象实例持久化对象实例 持久化变量持久化变量 处理持久化数据采用的方式处理持久化数据采用的方式 嵌入式嵌入式SQL语言语言 持久化程序设计语言持久化程序设计语言 嵌入式嵌入式SQL语言:持久性数据的存取操作,必须由设语言:持久性数据的存取操作,必须由设计者显式地用计者显式地用SQL提供的语句进行提供的语句进行DB读写。读写。持久化程序设计语言持久化程序设计语言查询语言与宿主语言完全无缝联接查询语言与宿主语言完全无缝联接 优点优点 对象在对象在DB中的创建、存储无需任何格式联接。中的创建、存储无需任何格式联接。 用户对持久化数据的操纵与一般数据一样,无需用户对持久化数据的操纵与一
31、般数据一样,无需进行显式的读进行显式的读/写。写。 缺点缺点 由于宿主语言过强,对由于宿主语言过强,对DB数据的一致性维护更加数据的一致性维护更加困难。困难。 由于语言的复杂性,数据查询的优化处理变得更由于语言的复杂性,数据查询的优化处理变得更困难。困难。 与与SQL的无缝联接目前作的并不理想。的无缝联接目前作的并不理想。GOM持久性构件持久性构件类型的持久化类型的持久化 类型的持久化:类型的持久性由类型的持久化:类型的持久性由Persistence定义符定义符说明。说明。例:例:Persistence Type Vertex is其中,持久性类型名称不能被重定义其中,持久性类型名称不能被重定
32、义 持久性类型的依赖关系持久性类型的依赖关系 在元组结构类型中,持久化类型的所有属性都在元组结构类型中,持久化类型的所有属性都必须是持久的。必须是持久的。 在聚合结构类型中,其元素类型也必须持久。在聚合结构类型中,其元素类型也必须持久。 在继承的在继承的is-a层次内部,一个持久类型的超类型层次内部,一个持久类型的超类型(祖先)必须是持久的。(祖先)必须是持久的。对象的持久性对象的持久性一个对象实例的持久化可以采用以下几种途一个对象实例的持久化可以采用以下几种途径:径:1.按类型持久:一个持久化类型的实例可以自按类型持久:一个持久化类型的实例可以自动确认为持久的。动确认为持久的。缺点:使用极不
33、方便,在需要持久和临时共缺点:使用极不方便,在需要持久和临时共存时,操作困难。有的系统采用持久意向概存时,操作困难。有的系统采用持久意向概念,即持久类型实例化的对象可能潜在变为念,即持久类型实例化的对象可能潜在变为持久。持久。2.按创建持久按创建持久将持久操作与初始化操作绑定,将持久操作与初始化操作绑定,即将持久对象与临时对象采用不同的初始化即将持久对象与临时对象采用不同的初始化子。子。对象的持久性(续)对象的持久性(续)3.提供一个持久化操作,即用显式的持久化操提供一个持久化操作,即用显式的持久化操作将对象持久化。即将持久化声明延迟到对作将对象持久化。即将持久化声明延迟到对象创建之后。象创建
34、之后。4.按引用声明持久:仅对一个(或多个)对象按引用声明持久:仅对一个(或多个)对象显式的声明为持久对象(根对象)。其他对显式的声明为持久对象(根对象)。其他对象的持久化定义为沿着根对象的引用链进行象的持久化定义为沿着根对象的引用链进行持久化扩展。持久化扩展。优点:持久化定义简洁。优点:持久化定义简洁。缺点:系统确定持久化对象的代价较大。缺点:系统确定持久化对象的代价较大。GOM的对象持久化方法的对象持久化方法 GOM采用采用2,3两种方法:两种方法: GOM提供一个持久化操作子(提供一个持久化操作子(persistence) 例如:例如:aVertex.persistence aVerte
35、x在持久化操作之前仍然是临时对象在持久化操作之前仍然是临时对象 GOM提供初始化阶段的持久化操作提供初始化阶段的持久化操作 GOM不支持第不支持第4种方法,带来的危险行种方法,带来的危险行为为 当用户从一个持久化对象中引用了一个临时当用户从一个持久化对象中引用了一个临时对象时,会导致浮动引用对象时,会导致浮动引用持久对象的实现方法持久对象的实现方法 地址依赖方法:地址依赖方法: 当声明一个对象持久化时,系统初始化一特当声明一个对象持久化时,系统初始化一特定的外存区域,并提供一个持久化地址指针定的外存区域,并提供一个持久化地址指针 OID持久方法:持久方法: 对持久化对象的标识进行持久化对持久化
36、对象的标识进行持久化持久对象的存储和访问持久对象的存储和访问 有三种访问策略:有三种访问策略: 名字法:在持久化区域内按名字查找名字法:在持久化区域内按名字查找不不适合有大量对象的情况适合有大量对象的情况 通过通过OID或持久化指针查找或持久化指针查找 系统对每一个持久类型提供一个持久性容系统对每一个持久类型提供一个持久性容器器其区间存放同类型的持久对象其区间存放同类型的持久对象 GOM支持支持2,3种方法种方法变量的持久化变量的持久化 变量的持久化声明:变量的持久化声明: 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校工作计划
- 闭门器配件行业市场发展及发展趋势与投资战略研究报告
- 四年级的科学教学工作计划
- 仓管的实习自我总结十篇
- 中秋节活动策划方案范文锦集六篇
- 三年级数学教师自我鉴定
- 初中语文课前演讲稿10篇
- 生活中的美初中作文600字【5篇】
- 有关晚会策划方案范文汇编5篇
- 旅游社实习报告四篇
- 《湖北省市政基础设施工程质量标准化图册》(燃气管网工程)
- 无机化学实验试题
- 衡重式及重力式挡土墙自动计算表
- 有关大学生寒假生活计划-大学生的寒假计划
- 2024年01月11129土木工程力学(本)期末试题答案
- 家政公司员工合同范例
- 2024年考研(英语一)真题及参考答案
- 山东省济南市(2024年-2025年小学四年级语文)人教版期末考试((上下)学期)试卷及答案
- 肿瘤科常见急重症
- 03SG715-1蒸压轻质加气混凝土板(NACL)构造详图
- 尽职调查工作底稿1_公司业务调查
评论
0/150
提交评论