第4章 详细设计(4.5-4.6)_第1页
第4章 详细设计(4.5-4.6)_第2页
第4章 详细设计(4.5-4.6)_第3页
第4章 详细设计(4.5-4.6)_第4页
第4章 详细设计(4.5-4.6)_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第4章详细设计

(第4.5-4.6节)武汉纺织大学数学与计算机学院主要内容面向对象程序的详细设计基于组件的程序设计方法武汉纺织大学数学与计算机学院在结构化程序设计中,数据结构是问题求解的中心环节,一个完整的软件系统是围绕一个或几个关键数据结构建立起来的。操作则是以传送到函数或过程中的数据位基础进行的。结构化程序设计方法和面向数据结构的问题求解方法,在中小型软件系统开发中得到很好应用。当系统的规模和复杂性不断增加时,其呈现了局限性,主要反映在关键数据结构的作用域和可视性方面。武汉纺织大学数学与计算机学院4.5.1面向对象程序的特性封装性:类的封装性使得数据和操纵数据的算法(函数或过程)紧密地捆绑在一起。这样就可以使得操纵数据的函数或过程的作用域和可视性限制在软件系统的局部区域内。//定义日期字符串类型string80typedefcharString80[80];//定义日期类CDateclassCDate{//类的实现private:intyear,month,day;//类的接口public:CDate(intmonth,intday,intyear);CDateoperator+(intdays);voidGetDateString(String80&DateString);//…};//部分成员函数的实现voidCDate::GetDateString(String80&DateString){sprintf(DateString,"%d-%d-%d",month,day,year%100);}C++类的标准设计方法是将数据成员设计为私有的需要对外公开的成员函数设计为公有的C++中类的数据部分称为数据成员,类的算法部分称为成员函数武汉纺织大学数学与计算机学院继承性在面向对象程序设计中,允许某个类继承其它类的成员函数或数据成员。被继承的类称为基类、父类或超类,继承的类称为派生类或子类。classCBaseClass{……};若要从CBaseClass派生一个新的类,其语法是:classCDerivedClass:存取权限标识CBaseClass{……};

派生类继承基类成员时,派生类不能存取基类的private成员,否则需要将基类的成员声明为protected.见P147武汉纺织大学数学与计算机学院多态性多态性使得相关的类可有同名的函数,这个同名的函数根据不同类产生不同的结果。换言之,不同类的对象可以具有相同的接口,这些相同的接口自然会呈现出不同的行为。通过多态性程序设计,可以编写并编译代码以处理未知类型的对象。在C++中,多态性是通过虚拟函数实现的。

//定义日期字符串类型string80typedefcharString80[80];

//定义日期类CDateclassCDate{protected:intyear,month,day;public:CDate(intmonth,intday,intyear);CDateoperator+(intdays);virtualvoidGetDateString(String80&DateString);voidDisplayDateString(void);//将调用GetDateString//…};如果不采用多态性处理GetDateString,则在CDate的子类中如果重写了GetDateString会影响DisplayDateString吗?武汉纺织大学数学与计算机学院4.5.2设计原则一、可复用性:1、保证方法的内聚性;只做一件事2、减少一个方法的代码规模;3、保持方法对外接口的一致性;4、分离策略(控制)方法和实现方法;5、方法应均匀覆盖数据;6、加强封装性,操作对象内部数据,避免全局数据7、减少方法的耦合性;8、利用继承机制;武汉纺织大学数学与计算机学院二、可扩展性:1、封装数据:类的内部数据通常对其他类是隐蔽的。2、封装方法内部的数据结构:是为实现方法的算法而设计的,不应从外部获得。3、避免情况分支语句;4、区分公有方法和私有方法。公有方法是对象的外部接口,通常不应该修改和删除。武汉纺织大学数学与计算机学院三、健壮性:1、防止输入错误(围栏);2、把握优化代码的时机;3、检查参数的合法性:对公有方法的参数,必须严格检查对参数的约束。4、选择适当的实现方法。武汉纺织大学数学与计算机学院四、协作性:涉及协作、交流和通信1、设计前进行周密考虑;2、尽量使得代码容易理解;3、在对象模型中使用相同的名称;4、对类进行详细的文档化;5、把类打包成模块;6、公开公共的设计说明书;武汉纺织大学数学与计算机学院4.6基于组件的程序设计方法

我们能如此开发软件吗?武汉纺织大学数学与计算机学院程序设计方法的发展功能分解法——计算任务结构化程序设计——以数据为中心面向对象程序设计——以对象为中心组件程序设计——以组件为中心综合使用武汉纺织大学数学与计算机学院软件需求的变化计算实用管理(MIS)分布式系统武汉纺织大学数学与计算机学院软件环境的变化单任务多任务文字界面图形界面单线程多线程平台相关跨平台单机(本地)网络(分布式)单一语言多种语言武汉纺织大学数学与计算机学院面临的问题现代软件应用过于庞大而复杂,开发周期长,维护困难,维护成本高应用单一,集成了许多功能,使大多数功能无法单独升级或替换一个应用的数据和功能不能用于另一个应用开发方式不统一,编程模式因应用所在位置的不同而变化非常大武汉纺织大学数学与计算机学院软件发展面临的问题软件的复杂度增加代码开发管理软件升级和更新牵一而发动全身?分布式软件的发布和配置用户需要培训,程序员和设计人员更需要武汉纺织大学数学与计算机学院组件化程序设计方法背景软件体系,开发,和产品本身越来越复杂,更新版本的混乱导致”软件危机”的产生,所以必须从”底层”起就要实现面向对象的应用模式.只是从”底层”解决面向对象应用并不是马上可以实现的.50~60年代专家提出了组件的概念.80年代后,面向组件设计模式开始大量应用,以试图解决上述问题.武汉纺织大学数学与计算机学院组件技术组件定义:可独立发布的二进制单元,有的地方称作“package”组件技术适合于现代的软件环境软件更新快、规模大、强调协作等组件的概念、软件IC组件的可独立发布性要求“接口与实现分离”组件infrastructure,组件体系COM、CORBA、EJB中间件(middleware)市场武汉纺织大学数学与计算机学院组件技术是一种优秀的软件重用技术。采用组件开发软件就像搭积木一样容易,组件是具有某种特定功能的软件模型,它几乎可以完成任何任务。CORBA(CommonObjectRequestBrokerArchitecture)91年第1版,OMG(ObjectManagementGroup)规范+实现COM(ComponentObjectModel)93年发布,脱胎于MS的OLE规范+实现武汉纺织大学数学与计算机学院现实生活中的组件概念:想象一下组装一台电脑:CPU主板,电源,机箱,显卡,内存条,硬盘…有了组件的概念,和一些必要的知识,人们很容易把各种组件安装在一起,形成一个完整的产品,产品升级也变得较容易…武汉纺织大学数学与计算机学院☆组件是一个功能相对完整的集合.组件与组件通过大家共同制定的一组方法进行操作.☆使用的人不必(理想情况)关心组件内具体情况,只要理解组件的I/O就可以正确应用组件,并且将组件有机的组合起来,形成一个完整的产品.☆组件可以单独开发,单独编译,单独测试.通过组件的复用,可以大大提高开发的各种指标(可行性,效率,成本,质量,可维护性…)☆组件——可以自行进行内部管理的一个或多个类所组成的群体。什么是组件?武汉纺织大学数学与计算机学院组件技术的特点真正的软件重用和高度的互操作性接口的可靠性可扩充服务具有强有力的基础设施具有构建和胶合组件的工具武汉纺织大学数学与计算机学院4.6.1三层应用体系结构应用体系结构是软件系统组织的一些重要决策,它是软件体系结构的一个概念性表示选择组成系统的结构元素和接口;由这些元素之间的协作决定的系统的行为;将这些元素和行为组合成更大的子系统;指导系统组织的体系结构模式;武汉纺织大学数学与计算机学院三层应用体系结构模型图武汉纺织大学数学与计算机学院三层应用体系结构用户层用户层用于向用户显示系统中的数据允许用户输入和编辑数据。业务层业务层用于执行业务和制定数据规则。业务层为用户提供服务,不与任何特定的用户捆绑在一起,而面向所有的应用。业务层不应该知道它所操纵数据是如何存储和位置,业务层不依赖于数据层的数据存取服务完成实际的数据存取操作。数据层在数据层,数据存储子层通常就是某个或某些数据库管理系统用来对数据库进行实质性的存储、检索和更新操作。某个或某些数据系统的一部分不是以数据库形式而是以文件或其他形式实现,可以实现对文件等进行实质性的存储、检索和更新操作。武汉纺织大学数学与计算机学院4.6.2CORBA对象总线技术公共对象请求代理体系结构(CommonObjectRequestBrokerArchitecture,CORBA)是由对象管理组织OMG制定的一个工业规范,其主要目标是提供一种机制,在此基础上,对象可以透明地请求和获得应答。CORBA的实质是远过程调用与面向对象技术的有机结合。OMG于1990年制订了OMA(ObjectManagementArchitecture),它可用任何方法来实现,CORBA是其中的一种实现方案。武汉纺织大学数学与计算机学院CORBA

(CommonObjectRequestBrokerArchitecture)CORBA是基于面向对象技术的,它能解决远程对象之间的互操作问题由OMG提出,用于分布式异构环境下,可移植可重用、可互连的面向对象的软件开发和应用平台是一种面向对象的分布式中间件体系规范。借助CORBA提供的中间件机制,我们在进行方法调用时,无需考虑被调用对象所在的具体位置,而是像调用一个本地模块的方法一样“直接”与其通信(因此,有些应用中,CORBA也被用于本地进程间通信,以降低各模块间的耦合度,同时也便于系统结构的调整)。武汉纺织大学数学与计算机学院CORBA定义了一系列API,通信协议和服务使得异构的应用程序能够互相操作,这些应用程序用不同的程序语言编写,运行在不同的平台上。是真正跨平台的,平台独立性。它通过一种叫IDL(InterfaceDefinitionLanguage)的接口定义语言,能做到语言无关。也就是说,任何语言都能制作CORBA组件,而CORBA组件能在任何语言下使用。CORBA为这些定义明确的程序提供了平台和位置的透明性,这些程序是分布式计算平台的基础。CORBA一种异构平台下的语言无关的对象互操作模型。武汉纺织大学数学与计算机学院什么是CORBACORBA是一种体系结构CORBA是一种通信协议(GIOP/IIOP)CORBA是一条屏蔽了平台和编程语言的软件总线CORBA是一套细化到编程接口的语言规范CORBA是一套解决进程通信的工具武汉纺织大学数学与计算机学院CORBA对象总线技术公用对象请求代理体系结构(CommonObjectRequestBrokerArchitecture,CORBA)对象管理体系结构公用对象服务公用设施应用程序对象对象请求代理(ORB)公用对象服务公用设施应用程序对象对象请求代理(ORB)武汉纺织大学数学与计算机学院CORBA对象总线技术公用对象请求代理体系结构(CORBA)对象请求代理(ORB):管理对象之间进行通信和数据交换的中间件.ORB客户对象服务器对象请求定位某一服务激活服务建立连接通信客户对象与服务器对象通过ORB进行通信和数据交换武汉纺织大学数学与计算机学院2、公用对象服务:是CORBA提供的系统级服务的集合,是对象请求代理的功能扩充和补充.为创建对象、对象访问控制、对象跟踪和对象引用等提供服务。开发人员无需从头开发,只需调用这些对象的服务功能。公用设施:基于这些技术向应用程序开发者和最终用户提供一些共性的对象组件应用程序对象:是CORBA基础结构的最终使用者武汉纺织大学数学与计算机学院CORBA体系结构CORBA上的服务用IDL描述,IDL将被映射为某种程序设计语言如C++或Java,并且分成两部分。服务器方在Skeleton的基础上编写ObjectImplementation而客户方要访问服务器对象上的方法,则要通过客户桩。而双方又要通过而ORB(ObjectRequestBroker)总线通信。IDL(InterfaceDefinitionLanguage)是用于说明对象接口的标识语言武汉纺织大学数学与计算机学院CORBA的组成客户程序(Client)对象实现(Server)动态调用接口静态IDL存根ORB接口动态骨架接口静态IDL骨架对象适配器ORB核GIOP/IIOP接口存储数据库实现存储数据库GIOP是一种通信协议,它规定了两个实体:客户和服务器ORBs间的通信机制。GIOP因为是一种通用协议,所以不能直接使用。在不同的网络上需要有不同的实现。目前使用最广的便是Internet上的GIOP,称为IIOP(InternetInter-ORBProtocol)。IIOP基于TCP/IP协议。武汉纺织大学数学与计算机学院

ORB(ObjectRequestBroker)CORBA体系结构的核心就是ORB。可以这样简单理解:ORB就是使得客户应用程序能调用远端对象方法的一种机制。ORB模型武汉纺织大学数学与计算机学院ORB核/ORB接口ORB(ObjectRequestBroker)是作为对象互通信的软总线。ORB截获服务请求调用,然后识别网络中服务器的位置,即对象实现的位置。若服务器不在运行,则ORB启动服务器,并一直等待到它准备接受服务请求为止。ORB接口是ORB核给出的接口,同时为客户和对象实现方所见,提供了一些只能由ORB核提供的服务:对象引用操作、ORB初始化、对象适配器初始化和获取初始对象引用。ORB之间的互操作则采用GIOP和IIOP实现。ORB的特性可使客户程序不用考虑:服务器编程语言、服务器平台、服务器地点和网络协议。ORB提供了两个用于存储有关对象信息的服务:接口仓库(接口存储数据库)和实现仓库(实现存储数据库)。武汉纺织大学数学与计算机学院ORB提供发送客户的请求到目标对象并将应答传给客户的透明通信机制ORB提供以下透明机制:对象位置透明:客户不需要知道目标对象的位置,它可以是在网络的另一台机器上,或者属于同一台机器的不同或相同的进程。对象实现透明:客户不需要知道目标对象的具体的编程语言、其使用的操作系统及硬件平台。对象运行状态透明:客户向目标对象发送请求时不需要知道目标对象的运行状态,如果有必要,ORB会将其自动激活,然后再把请求发送给它。通信机制透明:客户不需要了解ORB所使用的通信机制(如TCP/IP、共享内存、本地方法调用),所有调用均可遵循统一的方式进行。武汉纺织大学数学与计算机学院IDL(InterfaceDefinitionLanguage)IDL使CORBA做到语言无关。是一种描述性语言而不是程序设计语言,只描述接口和相关的数据类型,不描述实现,类似于C中的头文件。实际上它不是真正的编程语言。映射后的代码叫ClientStubCode和ServerSkeletonCode。IDL独立于编程语言,但可以映射为多种编程语言:如C,C++,JAVA,Ada,Cobol等与C++语言类似,简单易学应用时由IDL编译器来实现从IDL语言到具体编程语言的映射武汉纺织大学数学与计算机学院IDL编译由IDL编译器根据IDL代码生成相应编程语言的客户代理(骨架)和服务器代理(存根)对象等。武汉纺织大学数学与计算机学院对象适配器对象适配器是ORB与对象实现间的接口,其主要的工作如下:对象实现的注册;生成及管理对象引用;服务器进程激活;对象激活/撤销/向上调用。武汉纺织大学数学与计算机学院基于CORBA的软件开发①编写OMG定义的IDL接口规范说明文件,描述服务对象所支持的操作和类型;②编译IDL规格说明文件,生成客户端存根和服务器端骨架;③编写对象实现程序;④编写服务器和客户主程序结构;⑤将对象实现程序,服务主程序和生成的服务器骨架编译连接成服务端可执行程序;⑥将客户端主程序和生成的客户端存根编译连接成客户端可执行程序,且若服务器端是基于Web和浏览器方式的,则相应地编写HTML超文本文件,链入编写的客户方JavaApplet小程序;⑦分别运行服务器端和客户端程序。武汉纺织大学数学与计算机学院通常,开发一个CORBA应用的大致步骤如下:1)定义IDL。2)用IDLcomplier将IDL编译成ClientStub代码和ServerSkeleton代码。3)编写Server方的实现(Implementation)代码。4)编写Server。5)编写Client。6)编译和调试。7)运行程序。武汉纺织大学数学与计算机学院CORBA的特点同时支持分布计算技术和面向对象技术。支持许多现存的语言并把这些语言混合到一个分布式应用系统之中。代理机制使得客户端程序和服务器端程序完全分离,这样服务器端和客户端程序都可自由地修改而无需通知对方。提供了“软件总线”的功能,实现了软件组件的即插即用。提供了一种高度的互操作性,保证了建立在不同CORBA产品之上的分布式样对象能够相互通信。武汉纺织大学数学与计算机学院4.6.3COM对象总线技术组件对象模型(ComponentObjectModel,COM)是微软(Microsoft)的组件软件方案,是为组件的互操作而定义的二进制组件模型。分布式组件对象模型(DistribntedComponentObjectModel,DCOM)是COM的一个分布式扩充,是在分布式计算环境的远程过程调用的基础上开发的。COM+是按COM的标准建立的,并组合了一些工具的新版本,如MTS(MicrosoftTransactionServer)、MSMQ(MicrosoftMessageQueues)等。武汉纺织大学数学与计算机学院COM标准COM作为一面向对象的编程模型,目的是提高软件的交互协同工作能力,而不受开发语言和方法、运行环境和地点的限制。在Windows系统平台上,一个COM组件或是一个DLL文件,或是一个EXE文件。一个组件程序可以包含多个COM对象,每个COM对象可以实现多个接口。COM组件COM对象COM对象COM接口COM接口武汉纺织大学数学与计算机学院COM对象在COM规范中,并没有对COM对象进行严格的定义。COM对象同C++语言中的类一样,也包括属性和方法。属性反映了对象的状态,方法则是对象提供给外界的接口,客户必须通过接口才能获得对象的服务。COM对象以提供功能服务为主,可用来替代传统的API(ApplicationProgrammingInterface)函数。武汉纺织大学数学与计算机学院COM对象标识客户并不直接访问COM组件,而是通过一个全局标识符进行对象的创建和初始化工作。在COM的规范中,每个对象有一个128位的全局惟一标识符GUID(GloballyUniqueIdentifier)来标识,称为CLSID(ClassIdentifier)。(GUID不是专门用来定义COM对象标识符的,且GUID是一个随机数)COM库提供了一个API函数产生GUID:HRESULTCoCreateGuid(GUID*pguid);武汉纺织大学数学与计算机学院COM接口COM规范的核心内容是关于接口的定义。COM接口有两种:标准接口和用户接口,用户接口是用户为COM对象设计的接口。标准接口是COM规范定义的,可用来访问有关COM对象的信息。武汉纺织大学数学与计算机学院接口结构类似于COM对象的标识,COM接口也采用GUID,称为IID(interfaceidentifier).客户使用一个COM对象的接口,必须知道接口的IID和接口提供的方法。接口指针PVtable指针指向功能1指向功能2…对象实现(virtualfunctiontable)(供客户使用)武汉纺织大学数学与计算机学院接口定义语言(MIDL)微软用其接口定义语言MIDL来精确定义接口,每一接口中的方法以及每一方法的参数。MicrosoftVC++提供了MIDL工具,可把IDL接口描述文件(*.idl)编译成C/C++语言兼容的接口描述头文件(*·h)供组件程序和客户程序使用。武汉纺织大学数学与计算机学院COM库在MicrosoftWindows操作系统环境下,COM库以DLL文件的形式存在,其中包括以下几项内容:提供少量的API函数,用来加速客户和服务器COM应用程序的创建;完成对象实现的定位服务。它根据唯一的类标识,通过系统注册表来确定类和服务器实现的地址。实现透明的远过程调用,以支持在本地或远程服务器中运行的对象。提供一套应用程序如何控制其进程空间里内存的分配和释放的标准机制。武汉纺织大学数学与计算机学院进程内调用在进程内,服务器组件和客户程序运行在同一地址空间中,一旦客户程序与组件程序建立通信关系,客户程序就可以通过得到的接口指针直接调用服务器对象的成员函数。接口指针PVtable指针指向功能1指向功能2…对象实现(virtualfunctiontable)武汉纺织大学数学与计算机学院本地调用在同一机器上的不同进程,COM采用了本地过程调用LPC(LocalProcedureCall)实现进程外组件与客户程序的通信。图中虚线表明,对开发人员而言,不需考虑底层细节,COM实现了进程模型的透明,使得客户程序调用接口成员函数好像是直接进行的。武汉纺织大学数学与计算机学院分布式COM(DCOM)对于组件程序与客户程序不在同一主机的情形,DCOM则把COM的进程模型的透明性拓展为位置透明性,把COM中本地跨进程(同一主机不同进程)通信用一个网络协议传输过程来替代,组件程序和客户程序均感觉不到中间发生的过程,只是中间数据传递的路线更长一些。武汉纺织大学数学与计算机学院基于COM组件的WindowsDNA软件开发模式WindowsDNA(WindowsDistributedinterNetApplicationArchitecture)是Windows平台上基于三层模型的应用程序开发模式。武汉纺织大学数学与计算机学院4.6.4组件库技术通常可以采用以下途径来获取组件:基于领域分析获取组件;从现存组件中获取得符合要求的组件,直接使用或作适应性修改,得到可复用的组件;通过遗产工程,将具有潜在复用价值的组件提取出来,得到可复用的组件;从市场上购买现成的商业组件,即COTS(CommercialOff-The-Shelf,商业现货)组件;开发新的符合要求的组件。组件获取后,可对它进行结构化组织并放入可复用组件库,以备复用。武汉纺织大学数学与计算机学院组件描述属性。描述了组件的特征。属性值对外可以读出,也可以修改。功能接口。即组件向外提供的服务。依赖关系。指出组件在实例化时所依赖的其它组件的特定接口,是组件完成其任务所必需的。武汉纺织大学数学与计算机学院组件库的组织方式关键词分类用户界面窗口菜单对话框事件处理图形窗口文本窗口信息对话框数据录入对话框拖放处理键盘事件处理关键词分类:通过领域分析,将应用领域中的概念按照从抽象到具体的顺序逐次分解为树形或有向无环图结构。如图形截面设计组件库武汉纺织大学数学与计算机学院多面分类方式

武汉纺织大学数学与计算机学院多面分类方式多面分类机制:分析领域范围并定义若干描述组件特征的“面”,每个“面”包含若干“概念”,这些概念表述在“面”上的基本特征,“面”可以描述组件执行的功能、被操作的数据、组件应用的上下文及其他特征。同义词库:意义相同或相近的若干词汇组成同义词汇。概念距离图:概念距离图用来度量每个“面”中概念相似程度。武汉纺织大学数学与计算机学院组件库的检索方法基于关键词的检索(在图形用户界面上将可复用组件库的关键词树直观地显示给用户,用户通过逐级浏览关键词树寻找需要的关键词并提取相应的组件;或直接输入含通配符的关键词由系统自动给出合适的候选组件清单,用户选择并提取相应的组件。);多面检索(构造查询、检索组件、排序组件)。上述两种检索方法均基于语法匹配,这要求使用者对组件库中的有关词汇有较全面的把握和较精确的理解。理想的检索方法是语义匹配:组件库的用户以形式化的手段描述所需组件的功能或行为的语义,系统通过定理证明或基于知识的推理来寻找语义上等价的或相近的组件。武汉纺织大学数学与计算机学院组件的使用理解组件(①组件的功能与行为;②相关的领域知识;③可适应性约束条件与例外情形;④可以预见的修改部分及修改方法);修改组件;合成组件(基于功能的合成技术:调用与参数传递、基于数据的合成技术:调用与参数传递、面向对象的合成技术:继承)。武汉纺织大学数学与计算机学院“软件设计国家标准GB8567-88”详细设计说明书的大纲1引言1.1编写目的说明编写该总体设计的目的,指出预期的读者.1.2背景

a.所建议开发的软件系统的名称;

b.本项目的任务提出者、开发者、用户及实现该软件的计算中心或计算机网络;

c.该软件系统同其他系统或其他机构的基本的互相往来关系。1.3定义列出本文件中用到的

温馨提示

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

评论

0/150

提交评论