ImageVerifierCode 换一换
格式:PPT , 页数:46 ,大小:96.50KB ,
文档编号:2046239      下载积分:9.5 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-2046239.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(罗嗣辉)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(高级软件工程03(IDL与ORB接口).ppt)为本站会员(罗嗣辉)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

高级软件工程03(IDL与ORB接口).ppt

1、IDL特点特点IDL规范规范模块模块 接口接口 提前声明提前声明 常量常量 类型声明类型声明 序列序列any 类型类型 属性属性 例外例外操作签名操作签名 预编译预编译1、IDL特点特点 CORBA规范中最有意义的内容规范中最有意义的内容IDL类似于应用程序接口(类似于应用程序接口(API)在客户代码与对象实现(服务)之间定义了在客户代码与对象实现(服务)之间定义了 一个清晰的边界一个清晰的边界 OMG IDL是一个稳定的标准是一个稳定的标准自自1991年公布以来,基本未改变年公布以来,基本未改变是是OMG其它被采纳规范的基础其它被采纳规范的基础已经被已经被ISO采纳(采纳(ISO DIS 1

2、4750)一个一个IDL文件可以向多个编程语言映射文件可以向多个编程语言映射IDL是独立于语言的是独立于语言的CORBA规范包含规范包含IDL向具体编程语言的映射向具体编程语言的映射已经发布映射规范的语言包括:已经发布映射规范的语言包括:C, C+, SmallTalk, Ada95 等等 IDL支持平台独立性支持平台独立性IDL是独立于平台的是独立于平台的由由IDL指定的接口可以在不同的指定的接口可以在不同的ORB 与平台上一致地表达与平台上一致地表达只要程序员使用由只要程序员使用由IDL定义的接口定义的接口不会遇到由于使用不会遇到由于使用CORBA导致的导致的平台移植问题平台移植问题IDL

3、是一个纯规范,不涉及实现问题:是一个纯规范,不涉及实现问题:IDL定义的接口不对对象实现进行任何约束定义的接口不对对象实现进行任何约束例如:例如:编程语言编程语言进程进程算法算法等等将客户从对象实现细节中清晰地分离出来将客户从对象实现细节中清晰地分离出来有利于:有利于:软件复用软件复用软件演化软件演化这是这是IDL被广泛接收的重要原因被广泛接收的重要原因IDL设计的质量至为重要设计的质量至为重要IDL通常被用于定义应用系统中的重要接口通常被用于定义应用系统中的重要接口例如:例如:子系统接口子系统接口企业模型接口企业模型接口库接口库接口等等这些接口是复用、互操作的关键部分这些接口是复用、互操作的

4、关键部分IDL的变化将影响系统中的多个软件模块的变化将影响系统中的多个软件模块 好的好的IDL将:将:提高复用与互操作性提高复用与互操作性提高系统的适应性提高系统的适应性降低维护费用降低维护费用 2、IDL规范规范 IDL是一个严格的定义是一个严格的定义 用用OMG IDL编写的接口定义编写的接口定义完整地定义了接口完整地定义了接口 并且并且完全指定了每个操作的参数完全指定了每个操作的参数 OMG IDL接口提供的信息接口提供的信息被用于开发使用接口操作的客户被用于开发使用接口操作的客户 客户程序不用纯描述性语言客户程序不用纯描述性语言OMG IDL编写编写 而是用事先定义的映射而是用事先定义

5、的映射 从从OMG IDL概念映射到的语言编写的概念映射到的语言编写的OMG IDL词法词法 遵循遵循C+的词法规则的词法规则OMG IDL语法语法 是已被提议的是已被提议的ANSI C+标准的子集标准的子集 但比但比C+更严格:更严格: 函数返回类型是强制的函数返回类型是强制的 对操作声明的每个正式参数都必须提供名称对操作声明的每个正式参数都必须提供名称 由单个符号由单个符号void组成的参数列表组成的参数列表不允许作为不允许作为 空参数列表的同义字空参数列表的同义字 结构、结构、discriminated联合和枚举要求被标记联合和枚举要求被标记 整数类型不能定义为简单的整数类型不能定义为简

6、单的 int 或或 unsigned它们必须显式声明为它们必须显式声明为short或或long char不能由不能由 signed 或或 unsigned 关键字限定关键字限定(1)IDL 模块模块 (Modules) 为为IDL定义定义 创建创建 分离的名空间分离的名空间防止不同领域中标识之间的冲突防止不同领域中标识之间的冲突模块可以嵌套模块可以嵌套 以创建以创建具有一定长度的具有一定长度的限定范围的限定范围的名字引用名字引用名字引用例子:名字引用例子:Part:Assembly:ComponentWidget3个模块例子:个模块例子:module Assembly typedef stri

7、ng Widget;module Part typedef:Assembly:Widget PartWidget;module ComponentPart typedef PartWidget ComponentWidget;CORBAServices 对模块进行扩充使用对模块进行扩充使用 每个服务定义了一个或多个模块每个服务定义了一个或多个模块(2) IDL 接口接口 (Interface)IDL接口定义分布对象显露的细节接口定义分布对象显露的细节每个每个IDL接口定义了一个新对象类型接口定义了一个新对象类型操作签名操作签名是接口的核心是接口的核心是服务请求的入口点是服务请求的入口点接口接口

8、 清晰地划分了服务的实现与客户之间的边界清晰地划分了服务的实现与客户之间的边界接口的不足之处:未显示代码之间的关系接口的不足之处:未显示代码之间的关系例子:例子:Interface Account /Account definitionsInterface Cheking: Account /Inherits all Account definitions/adds Checking definitions;Interface Saving: Account /Inherits all Account definitions/adds Savings definitions;IDL 支持多继承

9、支持多继承(3) IDL Forward用于声明用于声明 一个未定义的接口一个未定义的接口例子:例子:interface Employee; /forward declarationstruct EmployeeContacts Employee supervisor;Employee secretary;Employee union_shop_leader;interface Employee attribute EmployeeContacts contacts;typedef string JobTitle;/ other definitions (5) IDL 类型声明类型声明(4)

10、IDL 常量常量 (Constants) IDL中类型定义的目的在于中类型定义的目的在于支持操作签名的强类型检查支持操作签名的强类型检查类型声明包括:类型声明包括: IDL中特殊类型的重命名中特殊类型的重命名 创建用户定义的类型创建用户定义的类型例如:例如:枚举枚举结构结构数组数组序列序列联合联合 等等 例子:例子:typedef unsigned long PhoneNumber;typedef string GuestName, Address;enum ChargeCard MasterCard, Visa, AmericanExpress;struct GuestRecord Gues

11、tName name;Address address;PhoneNumber number;ChargeCard card_kind;unsigned long card_number, expiration;typedef sequence GuestList;typedef struct Employeestruct string name;Address address;unsigned long social_security_number; EmployeeRecord;typedef EmployeeRecord Employee100;enum PersonKind A_GUES

12、T, AN_EMPLOYEE,AN_OTHER;cunion Person switch (PersonKind) case A_GUEST:GuestRecord guest_record;case AN_EMPLOYEEEmployeeRecord employee_record;default: string description;(6) IDL序列序列 (Sequence)序列是序列是IDL特有的特殊数据类型特有的特殊数据类型其本质上是变长数组其本质上是变长数组下面的例子通过下面的例子通过IDL向向C语言的映射语言的映射显示了序列的实现方式显示了序列的实现方式IDL:typedef

13、sequence LongSeq;struct Automobile string make, model;unsigned short year;typedef sequence AutomobileSeq;C:typedef struct CORBA_unsigned_long _maximum;CORBA_unsigned_long _length;CORBA_long *_buffer; LongSeq;typedef struct CORBA_char *make, *model;CORBA_unsigned_short year; Autumobile;typedef struct

14、 unsigned long _maximum;unsigned long _length;Automobile *_ buffer; AutomobileSeq;(7) 动态动态IDL Type AnyIDL 提供了强类型接口定义的能力提供了强类型接口定义的能力同时也存在弱类型数据值的能力同时也存在弱类型数据值的能力方式:方式:CORBA type any。例如:例如: typedef any DynamicallyTypedValue;struct RunTimeValue string description;any run_time_value; ;exception userErro

15、r string explanation;any exception_value; ;类型类型Any的值是自标识的的值是自标识的包含关于运行时类型的信息包含关于运行时类型的信息IDL编译器为用户定义的类型编译器为用户定义的类型 产生产生 type code 值值CORBA 接口池的接口包括接口池的接口包括运行时产生新类型代码的机制运行时产生新类型代码的机制type any 在定义可复用接口方面有用在定义可复用接口方面有用例如,例如,type any 在在 CORBAServices 中被大量使用中被大量使用因为这些服务被期望在任意应用程序中复用因为这些服务被期望在任意应用程序中复用(8)IDL

16、属性属性IDL 定义显露公共的属性与操作定义显露公共的属性与操作如果属性或者操作是私有的如果属性或者操作是私有的则它不应出现在则它不应出现在IDL定义中定义中属性可以是属性可以是只读的(只读的(Read-only)或者或者 可读写的(可读写的(read-write)每个属性都具有一个每个属性都具有一个IDL数据类型数据类型并出现在一个特定的并出现在一个特定的IDL接口定义中接口定义中(9) IDL 例外例外 (Exceptions)与其它计算模型相比,与其它计算模型相比,CORBA作出了一个重要的保证作出了一个重要的保证发出调用的客户总是可以接收到发出调用的客户总是可以接收到一个成功的返回一个

17、成功的返回或者一个例外或者一个例外这是对分布计算复杂性的重要简化这是对分布计算复杂性的重要简化并可以明显地降低客户方的代码量并可以明显地降低客户方的代码量例外值的声明类似于例外值的声明类似于IDL结构类型结构类型例如:例如:exception CardExpired string expiration_date; ;exception CreditLimitExceeded unsigned long credit_limit; ;exception CardReportedStolen string reporting_instructions;unsigned long hotline_p

18、hone_number; ;例外被分为两类:例外被分为两类:用户定义的用户定义的 与与CORBA定义的定义的 标准例外标准例外与标准例外相关的与标准例外相关的IDL:#define ex_body unsigned long minor;completion_status completed; ;enum completion_status COMPLETED_YES, COMPLETED_NO, COMPLETED_MAYBE ;enum exception_type NO_EXCEPTION,USER_EXCEPTION,SYSTEM_EXCEPTION ;(10) IDL 操作签名操作签

19、名操作签名规范是操作签名规范是IDL的基本目标的基本目标当当IDL向特定语言编译时向特定语言编译时每个签名对应于一个目标对象每个签名对应于一个目标对象目标对象的类型是接口的声明名字目标对象的类型是接口的声明名字例如:例如: interface Hospital typedef string PatientId;PatientId admit_patient ( );void release_patient ( in PatientIdpatient );确省情况下,确省情况下, IDL操作是同步的操作是同步的当当 有有 oneway 关键字时,关键字时,IDL操作是异步的操作是异步的一个完整的

20、例子:一个完整的例子: interface AirlineReservation typedef unsigned long ConfirmationNumber;enum SeatKind Window, Aisle, Middle ;exception BadFrequentFlyerNumber ;exception SeatNotAvailable ;ConfirmationNumber make_reservation in string passenger_name, in unsigned long frequent_flyer_number, inout SeatKind se

21、at_kind, out string seat_assignment raises (BadFrequentflyerNumber, SeatNotAvailable) context ( “TicketAgent”, “Agency”); ;IDL很重要很重要是是CORBA规范的关键规范的关键是分离客户与实现的关键是分离客户与实现的关键是具体代码实现的起点是具体代码实现的起点IDL 从何而来?从何而来?手工编写手工编写OOD导出导出5、ORB接口接口ORB操作综述操作综述对象引用操作对象引用操作ORB初始化初始化获取初始对象应用获取初始对象应用策略对象策略对象线程相关的操作线程相关的操作(

22、1)ORB操作综述操作综述 由由ORB核心实现核心实现 不依赖于所使用的对象适配器不依赖于所使用的对象适配器对于所有的对于所有的ORB和所有的对象实现而言和所有的对象实现而言这些操作都是一样的这些操作都是一样的它们既可以由客户端的对象执行它们既可以由客户端的对象执行也可以由实现方的对象执行也可以由实现方的对象执行一些这样的操作在一些这样的操作在ORB上出现上出现另一些在对象引用上出现另一些在对象引用上出现尽管在描述方式上这些操作尽管在描述方式上这些操作看起来就象对象上的操作一样看起来就象对象上的操作一样但是但是, 因为该部分所讨论的操作都由因为该部分所讨论的操作都由ORB自身实现自身实现 所以

23、实际上不是对象上的操作所以实际上不是对象上的操作因为因为 对象引用是不透明的对象引用是不透明的而且各而且各ORB之间不一样之间不一样所以所以 对于对象引用的长期存储对于对象引用的长期存储 或或对象引用的通信对象引用的通信(除激活之外除激活之外)来说来说对象引用不是一个很方便的值对象引用不是一个很方便的值因而必须解决两个问题:因而必须解决两个问题:允许对象引用转换成允许对象引用转换成一个客户可以存储在其他介质上的值一个客户可以存储在其他介质上的值并确保该值以后能够转换为正确的对象引用并确保该值以后能够转换为正确的对象引用(2)对象引用与字符串的转换对象引用与字符串的转换可以通过可以通过objec

24、t_to_string操作操作把一个对象引用转化为一个字符串把一个对象引用转化为一个字符串该字符串值就可以以任何字符串所能被处理的方式该字符串值就可以以任何字符串所能被处理的方式进行存储或通信进行存储或通信string_to_object操作操作接受由接受由object_to_string产生的字符串产生的字符串并返回相应的对象引用并返回相应的对象引用(3) 对象引用操作对象引用操作 有一些操作可以在所有对象上进行有一些操作可以在所有对象上进行它们并不是通常意义上的操作它们并不是通常意义上的操作因为因为 这些操作直接由这些操作直接由ORB实现实现而并不传递到对象实现端而并不传递到对象实现端我们

25、将以在对象引用上的操作的方式我们将以在对象引用上的操作的方式来讨论这些操作来讨论这些操作尽管它们的接口实际上依赖于语言绑定尽管它们的接口实际上依赖于语言绑定 interface Object / PIDLInterfaceDef get_interface ();boolean is_nil();Object duplicate ();void release ();boolean is_a (in string logical_type_id);boolean non_existent();boolean is_equivalent (in Object other_object);unsi

26、gned long hash(in unsigned long maximum);这样的操作包括这样的操作包括:void create_request (in Context ctxin Identifier operation,in NVList arg_list,inout NamedValue result,out Request request,in Flags req_flag);Policy get_policy (in PolicyType policy_type);DomainManagersList get_domain_managers ();Object set_poli

27、cy_overrides(in PolicyList policies,in SetOverrideType set_add);InterfaceDef get_interface ();ImplementationDef get_implementation ();确定对象实现和接口确定对象实现和接口对象引用上的对象引用上的get_interface操作返回操作返回Interface Repository里的一个对象里的一个对象该对象提供可能对程序有用的类型信息该对象提供可能对程序有用的类型信息Object上的上的get_implementation操作操作返回实现池里的一个对象返回实现池里

28、的一个对象该对象描述对象的实现该对象描述对象的实现Object duplicate ();void release ();复制和释放对象引用的拷贝复制和释放对象引用的拷贝如果需要多于一个的对象引用如果需要多于一个的对象引用则客户可以用则客户可以用duplicate操作创建一个副本操作创建一个副本注意:对象实现不能创建副本注意:对象实现不能创建副本 而且实现方也不能区别在一个特定的请求中而且实现方也不能区别在一个特定的请求中客户使用的是原来的对象引用还是副本客户使用的是原来的对象引用还是副本当程序不再需要一个对象引用时当程序不再需要一个对象引用时 则可以用则可以用release操作收回它所占用的

29、存储空间操作收回它所占用的存储空间注意:对象实现不能进行这样的操作注意:对象实现不能进行这样的操作 对象自身和任何其他对它的引用对象自身和任何其他对它的引用都不会受到都不会受到release操作的影响操作的影响boolean is_a (in string logical_type_id)等价性检查操作等价性检查操作定义该操作的目的是在一个定义该操作的目的是在一个ORB范围上范围上帮助维护对象引用的类型安全性帮助维护对象引用的类型安全性如果该对象确实是该类型的一个实例如果该对象确实是该类型的一个实例或者如果该类型是该对象的或者如果该类型是该对象的“最底层最底层”的类型的祖先的类型的祖先则该操作

30、返回则该操作返回trueboolean is_nil ();测试一个对象引用是否为空测试一个对象引用是否为空一个值为一个值为OBJECT_NIL的对象引用表示没有对象的对象引用表示没有对象boolean non_existent ();用来检测一个对象用来检测一个对象(如一个代理对象如一个代理对象)是否已被破坏是否已被破坏那些维护着包括对象引用的状态的服务,那些维护着包括对象引用的状态的服务,如桥、事件通道和基本关系服务等如桥、事件通道和基本关系服务等 可以利用它们的可以利用它们的“空闲时间空闲时间”使用该操作从对象表中筛选出那些不再存在的对象使用该操作从对象表中筛选出那些不再存在的对象 并以

31、垃圾收集的形式删除它们并以垃圾收集的形式删除它们unsigned long hash (in unsigned long maximum);boolean is_equivalent (in Object other_object);对象引用同一性对象引用同一性为了有效地管理包含大量对象引用的状态为了有效地管理包含大量对象引用的状态部分服务需要支持一个对象引用同一性的概念部分服务需要支持一个对象引用同一性的概念这样的服务包括这样的服务包括: 桥桥关系服务关系服务其他分层的服务其他分层的服务 等等CORBA提供了两个有关同一性的操作提供了两个有关同一性的操作一个操作是把对象引用映射到不相邻的组里

32、一个操作是把对象引用映射到不相邻的组里这样的组里的对象引用具有潜在的等价性;这样的组里的对象引用具有潜在的等价性;另一个操作是支持开销更大的成对地定价性检查另一个操作是支持开销更大的成对地定价性检查这些操作一起支持对以对象引用为关键字的表的这些操作一起支持对以对象引用为关键字的表的高效地维护和检索高效地维护和检索Policy get_policy (in PolicyType policy_type);获取与对象相关的策略获取与对象相关的策略Object set_policy_overrides(in PolicyList policies,in SetOverrideType set_add

33、 );设置策略设置策略DomainManagersList get_domain_managers ();获取域管理者获取域管理者(4)ORB初始化初始化当应用程序要求当应用程序要求CORBA环境时环境时它需要一种获得它需要一种获得ORB和和OA伪对象引用的机制伪对象引用的机制这样的机制有两个作用:这样的机制有两个作用:把应用程序初始化到把应用程序初始化到ORB和和OA环境环境向应用程序返回向应用程序返回ORB和和OA伪对象引用伪对象引用以便将来使用以便将来使用ORB和和OA操作操作在在ORB中初始化应用程序中初始化应用程序并获得并获得ORB的伪对象引用的操作的伪对象引用的操作不是在一个对象上

34、进行的不是在一个对象上进行的因为应用程序开始时并没有一个能激活操作的对象因为应用程序开始时并没有一个能激活操作的对象ORB初始化操作是应用程序进入初始化操作是应用程序进入CORBA世界的引导程序世界的引导程序应用程序可以初始化到一个或多个应用程序可以初始化到一个或多个ORB中去中去当完成一个当完成一个ORB初始化之后,初始化之后,返回该返回该ORB的伪对象引用的伪对象引用然后可以用该伪对象引用然后可以用该伪对象引用获得该获得该ORB的其他对象引用(例如的其他对象引用(例如OA)(5)获取初始对象引用)获取初始对象引用应用程序要求一种方便的办法应用程序要求一种方便的办法通过它可以获得它们的初始对

35、象引用通过它可以获得它们的初始对象引用初始引用并不通过一个新的接口获得,初始引用并不通过一个新的接口获得, 而是增加两个新的操作到而是增加两个新的操作到ORB伪对象接口中去伪对象接口中去这两个操作提供了列出和解析初始对象引用的便利这两个操作提供了列出和解析初始对象引用的便利Object resolve_initial_references (in ObjectId identifier)raise (InvalidName)ObjectIdList list_initial_services ();(6)策略域的管理策略域的管理一个一个ORB或者或者CORBA服务可以选择对某些选项进行访问服务

36、可以选择对某些选项进行访问它们对其操作具有影响它们对其操作具有影响该信息是以结构化的方式该信息是以结构化的方式通过从通过从Policy接口继承的接口访问到的接口继承的接口访问到的一个一个 CORBA 服务可以不用这种方法访问上述操作服务可以不用这种方法访问上述操作策略域提供了较直接的方式策略域提供了较直接的方式特别需要指出的是,特别需要指出的是,安全服务安全服务使用这种技术使用这种技术将安全策略与系统中的对象进行关联将安全策略与系统中的对象进行关联相关概念:相关概念:策略域策略域一个策略一个策略域是一个对象集合域是一个对象集合与该域相关的策略可以应用于这些对象与该域相关的策略可以应用于这些对象

37、这些对象是领域成员这些对象是领域成员策略代表了:策略代表了: 对于该领域内对象活动进行约束的原则与规则对于该领域内对象活动进行约束的原则与规则在生成对象引用时在生成对象引用时ORB隐式地将对象引用与一个或多个策略域关联隐式地将对象引用与一个或多个策略域关联通过在一个领域的粒度通过在一个领域的粒度而不是单个对象实例的粒度上应用策略而不是单个对象实例的粒度上应用策略 策略域提供策略管理在规模问题上的平衡策略域提供策略管理在规模问题上的平衡策略域管理器策略域管理器每一个策略域所包含的唯一的一个对象每一个策略域所包含的唯一的一个对象它与领域中的策略对象相关它与领域中的策略对象相关域管理器还记录域的成员

38、域管理器还记录域的成员并提供并提供 增加增加删除删除 成员的方法成员的方法域管理器本身是一个域的成员域管理器本身是一个域的成员可能是它所管理域的成员可能是它所管理域的成员一个策略对象封装了一个特定类型的策略一个策略对象封装了一个特定类型的策略通过将策略对象与策略域的域管理器关联通过将策略对象与策略域的域管理器关联封装在一个策略对象中的策略与域关联封装在一个策略对象中的策略与域关联一个域可以有多个策略与之相关一个域可以有多个策略与之相关分别通过一个策略对象分别通过一个策略对象一个策略域至多有一个类型的策略与之相关一个策略域至多有一个类型的策略与之相关策略对象被域中的对象所共享策略对象被域中的对象所共享而不是与独立的对象关联而不是与独立的对象关联因此因此 如果一个对象需要有一个独立的策略如果一个对象需要有一个独立的策略它必须是一个域的唯一成员它必须是一个域的唯一成员策略对象策略对象

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|