OOAD与UML培训教程.ppt_第1页
OOAD与UML培训教程.ppt_第2页
OOAD与UML培训教程.ppt_第3页
OOAD与UML培训教程.ppt_第4页
OOAD与UML培训教程.ppt_第5页
免费预览已结束,剩余135页可下载查看

下载本文档

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

文档简介

1、第一章,OOAD 与 UML 简介,2,课程地位,C#,SQL Server,XML,PSPM,ASP.NET,Oracle,OOAD,Computer Base,HTML/JavaScript,SQL Base,OOP/Java,C,STB,JSP/Servlet,EJB/WebService,WinForms,Struts/JSF,Testing/SQA,Linux,课程目标,掌握UML建模语言 掌握使用UML进行面向对象的分析与设计 掌握使用Rational XDE工具绘制业务系统的各种UML图,本章目标,简介面向对象的系统分析与设计 (OOAD) 理解建模的基本概念 理解统一建模语言

2、(UML) 描述 UML 与软件开发生命周期 (SDLC) 各阶段之间的关系 认识可视化建模工具Rational XDE,开发人员寻求从他们自己的角度来理解问题,没有考虑技术问题,确认需求的可靠性,按优先次序排列需求,生成并评估备选方案,与管理人员评审推荐方案,分析,回答:要解决问题,必须完成哪些工作?,设计应用程序体系结构,设计用户界面,设计并集成数据库,用于设计详细资料的原型,设计并集成系统控件,设计,回答:应该使用那些技术?应如何解决问题?,设计阶段规定系统如何满足需求规范中提到的系统分析阶段确定的需求,面向对象的系统分析和设计是指面向对象概念基础上的分析与设计,面向对象的系统分析与设计

3、 4-1,信息系统可视为相互协作完成任务的交互对象的集合,对象 - 计算机系统中可对信息作出相应的事物,所有的过程、程序、数据实体或文件都定义为对象,面向对象编程 (OOP) 是根据确定的和协同操作的对象进行编程的方法论,面向对象编程着重于所要控制的对象而不是控制这些对象所需的逻辑,在 OOP 中,确定要控制的对象及这些对象之间的关系就是建模,面向对象的系统分析与设计 4-2,最大的优点在于创建更具模块化的方法 - 帮助传递信息并降低复杂性,提供单个统一的方法,优点:在生命周期的每个阶段使用相同的对象模块,面向对象的系统分析与设计 4-3,面向对象的分析-OOA依照用户所理解的真实世界中的对象

4、和概念,发现和分析对象的内部构成和外部关系,建立准确而简洁的软件系统的对象模型,面向对象的系统分析与设计 4-4,项目分析阶段根据用户对现实世界中对象和概念的理解逐步形成准确而简明的问题域模型(Domain Model),系统分析还必须确定实体之间的相应特性、相互作用和关系,这种从现实生活到计算机分析的自然对应关系就是面向对象分析所提供的优点,面向对象的系统分析,程序是以相互协作的对象集合这种形式组织的,面向对象设计是为了适应 OOA 阶段的结果,设计人员定义一个或几个类的职责、操作属性和关系,设计人员还设计数据库并应用标准化方法,面向对象的系统设计,面向对象的设计-OOD是根据已建立的系统对

5、象模型, 运用面向对象技术,进行软件设计,实际问题与实现的对象与实际问题之间紧密配合,促进重用对象,由于可重用对象,从而减少错误和维护问题,重用对象还加速设计和开发过程,要求符合人类的认知原理(因为这是自然的思维方式),强化数据封装,这有助于解决一些与数据有关的开发和维护问题,降低软件开发的复杂性,辅助生成可修改且具有恢复能力的软件系统,OOAD 的优点,14,建模 3-1,模型是现实的简化,为系统提供蓝图,模型可能包含详细的计划,好的模型包含的元素具有广泛的抽象,有助于如实或根据实际需要将系统视觉化 模型允许指定系统的结构或行为,模型提供引导构建系统的模板 模型记录已经作出的决定,建模 3-

6、2,用于表示模型的语言称为建模语言,创建模型的原理,选择创建什么样的模型对如何解决问题和如何形成解决方案具有深刻影响 单个模型是无法满足要求的。每个完美的系统都是通过为数不多的一系列近乎独立的模型以最合理的方式实现的 每一种模型可以在不同的精度级别上表示 最佳模型与现实情况是紧密相连的,建模 3-3,17,面向对象的建模方法,面向对象建模方法是通过应用面向对象的模式,分析、设计和实现规划中的系统的方法,分析,系统设计,对象设计,实现,18,可视化建模,可视化建模将模型中的信息用标准图形元素直观地显示,19,UML 4-1,归档模型,UML 是帮助进行以下活动的语言:,可视化,构造,详述,20,

7、UML 4-2,致力于并推动 UML 发展的一些重要公司有: Hewlett Packard Microsoft Oracle IBM Unisys,21,UML 4-3,统一建模语言 (UML) 主要用于建模 UML 能用于任何面向对象的方法论 用例图演示系统与用户的交互 类图演示系统的逻辑结构 对象图演示对象和链接 状态图演示行为 组件图演示软件的物理结构 部署图展示软件与硬件配置间的对应关系,22,UML 4-4,UML 是帮助形象化、指定、构建和记录开发中系统的建模语言。UML 的功能如下: 图形符号可展示和表达系统的概观 是为规划中系统精密且明确地建模的一种方法 使用 UML 构建的

8、模型与语言无关,可以使用任何语言编程 帮助完成从开始至交付过程中的所有归档 为了执行所有的任务和功能,UML 提供了一组特定的图和元素,可用来描述开发中系统的不同状态,23,UML 和 OOP,统一建模语言是对描述面向对象的系统分析和设计工作所用符号进行标准化尝试的一种语言 其目的是建立一套不依赖于完成设计所用方法的符号 UML 的开发意图是用于所有面向对象的开发方法、生命循环阶段、应用程序域和媒体 UML 未定义标准过程,而是为迭代开发过程提供帮助,24,UML 应用的领域,信息系统:与数据库有关的系统 技术系统:处理和控制技术设备 嵌入式系统:控制像移动电话这样的设备以及家用设备 分布式系

9、统:使用CORBA和类似的面向对象机制分布在不同系统上的数据库系统 系统软件:用于操作系统和编写系统实用程序 业务系统:与工作流有关的系统,25,UML 图 2-1,UML 借助图形符号展示和表达系统的概观 ,据此 可以开发出表示系统各个方面的不同图示。有助于 理解系统的行为和状态的典型图有:,用例图,用例为一系列事务,其中的每个事务是从系统外部调用的,需要与内部对象合作,以便在对象与系统周围之间创建关联,类图,此图是系统的静态结构,也是类以及这些类表示的关系的集合,时序图是通过展示系统与其环境之间的交互,描述系统行为的简单而直观的方法,时序图,26,UML 图 2-2,协作图表示特定环境和交

10、互中一系列关联的对象。,活动图是状态机图的变更或特例。在状态机图中,状态是展示执行操作的活动,操作完成后将触发转换。,状态图展示方法执行的状态和对象执行的活动。,协作图,活动图,状态图,27,UML 和 SDLC,项目始于“启动”阶段,下一步需要确定什么用例和执行者。可以使用 Rose 归档用例和执行者,也可以创建展示它们之间关系的图。 用例图可展示给用户以确认图是否是系统特性的综合视图。,启动,精化包括详细解释很多项目需求、用例模型也可能需要更新。详细解释流程图之后,序列和协作图有助于演示该流程。它们也帮助设计系统要求的对象。精化同时涉及为系统准备原始设计以让开发人员能开始构建。最后,很多系

11、统组件会在精化中确认。,精化,构建序列、协作、类、状态和组件图。根据对象设计创建组件。创建组件展示组件之间的编译时间依赖。选定每个组件的语言后,可以生成框架代码。开发人员创建代码之后,可通过逆向工程将代码与代码同步。,构建,随着产品的完成,产品化阶段主要更新模块。特别是更新组件和部署图在产品化阶段很常见。,产品化,28,Rational XDE 简介,工具箱窗口,导航器窗口,Model Explorer,属性窗口,29,创建Java Modeling project,教师演示创建 Java Modeling 项目的过程,30,总结 2-1,分析是从开发者的角度来描述系统需要做什么 设计阶段是软

12、件开发生命周期中最富挑战性和创造性的阶段 面向对象的系统分析是在对象帮助下构建系统。并且,面向对象的系统设计是设计由现实世界对象组成的系统 UML 是在面向对象模式下为软件建模使用的语言 由于人们无法全面理解复杂系统,因此应构建复杂系统的模型,建模型的主要原因是为了能够更好地理解将要开发的系统,31,总结 2-2,软件开发生命周期 (SDLC) 的各阶段都需要使用UML图。 IBM Rational XDE Developer 是一种完整的可视化设计和开发环境。支持代码和模型同步。 UML 使用不同的图展示系统的各个方面。常见的图包括: 用例图 类图 时序图 协作图 活动图 状态图,第二章,用

13、例图,33,回顾 2-1,分析是从开发者的角度来描述系统需要做什么 设计阶段是软件开发生命周期中最富挑战性和创造性的阶段 面向对象的系统分析是在对象帮助下构建系统。并且,面向对象的系统设计是设计由现实世界对象组成的系统 UML 是在面向对象模式下为软件建模使用的语言 由于人们无法全面理解复杂系统,因此应构建复杂系统的模型,建模型的主要原因是为了能够更好地理解将要开发的系统,34,回顾 2-2,软件开发生命周期 (SDLC) 的各阶段都需要使用UML图。 IBM Rational XDE Developer 是一种完整的可视化设计和开发环境。支持代码和模型同步。 UML 使用不同的图展示系统的各

14、个方面。常见的图包括: 用例图 类图 时序图 协作图 活动图 状态图,35,目标,描述用例和用例图 解释使用用例图的必要性 描述用例之间的关系 解释如何使用 Rational XDE 编写“在线拍卖”系统的用例,36,用例图简介,统一建模语言为实现其建模目的使用了不同的图 用例图是其中之一,此概念由 Ivar Jacobson 提出,这是他对UML的主要贡献 编写系统的用例图有助于在初始开发阶段构建系统的业务需求,37,用例,Jacobson 对用例的定义 “对话中的参与者所执行的交互的动作序列,系统为参与者提供了一些可测量值。”,用例的简单解释 “系统的一组使用场景,每个场景描述了一个系统执

15、行的动作序列。执行动作序列,产生特定参与者可看得见的结果值 。”,38,用例图的元素 4-1,系统,用例,参与者,39,用例图的元素 4-2,系统,系统是用例图的一个组成部分,它代表的是一个活动范围,而不是一个真正的软件系统。系统的边界用来说明构建的用例的应用范围。系统边界框定义系统的边界或限制,所以,系统的所有功能或过程会被限制在系统内,即此边界将系统的所有过程/功能与外界环境分隔。,40,用例图的元素 4-3,用例,用例是系统执行的功能或过程,它可以由外部对象或系统内部另一个用例启动。,41,用例图的元素 4-4,参与者,参与者是负责启动系统过程的外部实体,它可以是使用系统的人或为某些访问

16、系统的外部过程。,42,用例符号 3-1,系统边界框,系统边界,功能,功能,功能,投币饮料售货机系统,43,用例符号 3-2,用例符号,1. 投掷硬币,2. 计算币值,3. 送出饮料,44,用例符号 3-3,参与者,用例 1,用例 2,参与者符号,45,用例的优点,用例将详细说明的需求表示为系统和一个或多个参与者之间的一系列交互 这些交互有助于向用户描述所提出的系统功能 就复杂系统来说,用例也以需要构建的内容提供系统分析的起点 用例提供由系统提供的服务的源,并且有助于确定系统必须实现的类,46,用例的必要性,有助于理解系统需求,有助于正确设计系统功能,有助于正确建立功能间的关系,47,构建用例

17、图 2-1,步骤 1. 定义系统和系统边界 步骤 2. 确定参与者及其目标 步骤 3. 确定用例 步骤 4. 确定参与者和用例之间的关系,48,构建用例图 2-2,系统边界框,用例,用例,问题详述,参与者,开发典型用例,49,用例之间的关系 3-1,用例之间的常见关系,扩展关系,包含关系,50,用例 1,扩展的行为,用例之间的关系 3-2,扩展关系,满足条件,用例 2,51,用例之间的关系 3-3,包含关系,用例 1,用例 2,用例 1 具有用例 2 的功能,用例 1 表现出用例 2 的功能,52,使用Rational XDE 编写用例 7-1,添加用例图,打开用例图,添加系统边界,将图形添加

18、到图,“在线拍卖”系统的需求,53,“在线拍卖”系统的需求,54,使用Rational XDE 编写用例 7-3,演示:添加用例图,启动Rational XDE后,创建一个“Java Modeling Project”类型的工程,2. 在 Model Explorer 中右击模型,接着选择“Add Diagram”,最后选择“Use Case”,55,使用Rational XDE 编写用例 7-4,在 Model Explorer 中右击该用例图 ,选择 Open,演示:打开用例图,56,使用Rational XDE 编写用例 7-5,在图上右击,选择“Add Geometric Shapes

19、”,然后选择“Rectangle” 调整矩形的大小以覆盖所有用例,演示:添加系统边界,57,使用Rational XDE 编写用例 7-6,演示:添加图形,确定添加或打开一个用例图 2. 打开图后,用例工具栏也会打开 3. 单击一个图形,将它拖动到图上 4. 将图形放到图上,并根据需要调整对象的大小,58,使用Rational XDE 编写用例 7-7,“在线拍卖”系统的用例图,59,总结,用例图用于描述系统的需求 用例之间的关系有:包含或扩展关系 用例图用于表示系统的行为或功能 用例图的各个组成部分包括:系统、参与者和用例 Rational XDE 可以方便的编写用例图,第三章,类图,61,

20、回顾,用例图用于描述系统的需求 用例之间的关系有:包含或扩展关系 用例图用于表示系统的行为或功能 用例图的各个组成部分包括:系统、参与者和用例 Rational XDE 可以方便的编写用例图,62,目标,标识和理解关键抽象 标识所需的类 标识所需的类属性和方法 讨论类之间的各种关系 掌握如何在 Rational XDE 中绘制类图,63,关键抽象是在系统范围上的一些重要概念,主要是从需求中得到(例如词汇表、业务规约以及用例模型),这些概念也会涉及到系统所针对的业务领域知识。关键抽象通常表现为系统的实体 ,其重要的原因为:,关键抽象,在线拍卖,拍卖和拍卖物项,信用卡,竞拍,分类,用户帐户和未付款

21、项,关键抽象,业务实体,实体之间的关系,例如:一个拍卖就包含一个拍卖物项,强调与系统设计有关的实体,排除系统外部多余的实体,最后,关键抽象成为分析模型中的类,64,候选类,在分析的初始过程中阐明的类称为候选类,多个类定义同一个实体,任何不属于应用程序域的类都需去除,保留基类,而排除所有作为角色的类,标识候选类,没有明确功能的类称为模糊类,65,识别类 3-1,类是一组对象,这些对象具有共同的属性和共同的行为 类是创建对象的模板,类可捕获对象的本质对象是类的实例化,66,识别类 3-2,在标识类时,需查找: 有形事物 事件 扮演的角色 交互 位置 组织单位,67,识别类 3-3,标识的类也称为候

22、选类。可从以下方面标识类:,需求说明,用例,应用程序专家,研究系统,分析以下方面可标识其他候选类:,相似的系统,以前的系统,68,类图 2-1,类是对一组对象的描述,这些对象具有相似的属性、操作、关系和行为。,Window,size: Size visibility: boolean,display() hide(),类名称,属性,操作,69,类图 2-2,类名称通常可对应于现实生活中的实体,类名称,类属性,类方法,70,在 Rational XDE 中构建类图,创建一个项目 新建一个类图 添加UML类 添加属性和操作(方法),71,对象图,CAH : AccountHolder Name =

23、 “Charles” Age = 35 Status = True,实例化于,属性变量,赋予的值,类,对象,72,类不是孤立存在的 因此,类与类之间创建了一种关系: 类关系可能指明某种共享关系 类关系可能指明某种类型的语义连接,类关系,关联,接口与实现,组合,泛化与继承,聚合,依赖,类关系,73,关联 2-1,示例:“雇员为公司工作”,74,关联 2-2,public class Person /* modelguid AE706A50-C99B-4002-B0BC-8BF3830FC5A7 */ private Car _Vehicle; public class Car /* modelg

24、uid F6646612-CF1E-4039-9A1B-36FD4ACACD5F */ public String go() return new String(Hi! it going.); /* modelguid 5439D942-4CD0-4F1E-BF7B-096DFFB66303 */ public void startEngine() ,75,泛化 2-1,形状 抽象,圆圈,父类,子类,抽象类,泛化关系,76,泛化 2-2,public class Printer /* modelguid 949C10B9-AFE3-40BB-8201-3B87B5E23BB0 */ publi

25、c void print() public class ColorPrinter extends Printer /* modelguid E708B557-A667-4319-B199-A52E7F182B71 */ public void print() public class BlackWhitePrinter extends Printer /* modelguid 6808C7F6-0353-48C8-A325-28E6BAB12FEC */ public void print() ,77,依赖 2-1,78,依赖 2-2,public class Worker /* modelg

26、uid 48434AC5-09B2-4769-A478-17A9CCF08596 */ public void purchaseCleaner(Cleaner clean) /use cleaner /forget about cleaner public class Cleaner /* modelguid 60A968A8-D591-433F-98DB-536240F149CA */ public void clean() ,79,聚合 2-1,整体,部分,门,房子,1.*,2.*,汽车,80,public class Computer /* modelguid 5B07F355-C068

27、-4F71-B2CC-E5B5E9C298ED */ private KeyBoard _KeyBoard; public class KeyBoard ,聚合 2-2,81,组合 2-1,圆圈,点,多边形,点,圆圈,82,组合 2-2,import java.util.ArrayList; /* modelguid AA7857DF-9F6C-4A65-A41D-E4A92998A343 */ public class Motor /* modelguid 0BFB212F-9DCE-4D48-AE12-A2DDEA980E17 */ private ArrayList _Cogs = ne

28、w ArrayList(); /* modelguid E4522F65-B996-4CDD-A75E-81FE14A7FCB1 */ public Motor() this._Cogs.add(new Cog(); this._Cogs.add(new Cog(); ,public class Cog ,83,接口和实现 2-1,符号,类接口用于描述类的外部可见行为。 它呈现为一个圆圈与名称一同出现。,验证,类的实现是其内部视 图,涵盖了其行为的 秘密 类的接口提供了其外 部视图,因此在隐藏 其结构以及其行为的 秘密时,强调了抽象,84,接口和实现2-2,public interface I

29、CargoTransport /* modelguid 66855DC0-6F08-42DE-ADA1-FD06625C8605 */ public void loadCargo(); public class Truck implements ICargoTransport public String go() return new String(It is going!); /* modelguid 4E19DF60-35EA-4827-943A-51CC99255A48 */ public void loadCargo() ,85,绘制”在线拍卖”系统的类图,86,总结,关键抽象是一个类

30、或一个对象,可组成问题域词汇的一部分 在派生关键抽象时,一定要记住抽象的层次不应过高或过低 UML类是一个包括类名、属性和操作三个部分的矩形 可通过以下方面标识类: 需求说明 用例 应用程序专家 研究系统,87,类之间的各种类型的关系包括: 关联 泛化 依赖 聚合 组合 接口与实现,第四章动态模型,89,回顾 2-1,关键抽象是一个类或一个对象,可组成问题域词汇的一部分 在派生关键抽象时,一定要记住抽象的层次不应过高或过低 可通过以下方面标识类: 需求说明 用例 应用程序专家 研究系统,90,回顾 2-2,对象是类的实例,因此对象图与类图相似 类之间的各种类型的关系包括: 关联 泛化 依赖 聚

31、合 组合 继承,91,目标,列出动态模型的优点 理解动态模型的组件 用 XDE 制作时序图 用 XDE 制作状态图 用 XDE 制作活动图,92,简介,模型,模型表示系统静态和动态的行为。这种表示形式可为 同一系统提供不同的视角,静态模型,动态模型,静态模型展示了构思中的系统结构方面,动态模型是系统的表示形式,也就是过程和行为的集合,93,采用动态 建模的优点,明确性,简易性,可视性,动态模型的优越性 2-1,动态模型描述系统与操作时间和顺序有关的系统方面、影响更改的事件、事件的序列、事件的环境以及事件的组织,使用高级表示层通常可导致使用更少但更广泛的结构,模型可按数据实际存储的方式表示数据,

32、这有助于开发人员熟悉将要使用的数据,图示是通过列表和图 指明错误的简单方法,94,操作和维护模型比操作和维护实际系统容易得多,使用户和开发人员都能更容易地理解构思中的系统,可助于解释状态的改变和降低复杂度,可监视构思中的系统是否存在任何类型的缺陷,动态模型的优越性 2-2,动态模型的优越性,95,动态模型的组件 5-1,状态图,时序图,活动图,协作图,动态模型的组件,96,动态模型的组件 5-2,状态1,状态2,初始状态,如果无效,则重复状态,1,如果有效,则转换状态 2,最终状态,状态图,状态图描述了单个事物如何为响应发生的事件而更改状态和生成响应,并通过此方式与其环境进行交互,状态图示例如

33、下所示:,97,动态模型的组件 5-3,时序图,时序图用于按时间顺序模拟控制流程。它显示了在对象生命线上各点之间的对象传递的消息,演示了在时间序列中对象之间的交互,时序图示例如下所示:,时序图示例,98,协作图,动态模型的组件 5-4,协作图用于按组织模拟控制流程。消息在对象之间传递, 但重点应在于演示或检测对象间结构样式的协作,协作图示例,99,活动图,动态模型的组件 5-5,活动图显示活动与活动之间的流程。活动是状态机中 当前执行的活动,由作用于系统状态的操作组成,活动图示例,操作活动1,操作活动2,操作活动3,初始状态,结束状态,操作活动4,100,时序图演示按时间序列安排的交互,用于显

34、示特定用例 或特定用例某部分的详细流程,时序图,时序图 6-1,101,时序图 6-2,在显示递归时,事件箭头会回到从其开始的同一对象处 ,“validateCoin”方法调用就是一个递归调用,其目的为验证硬币。 可通过验证硬币的重量及其尺寸来执行硬币的验证,递归,递规,102,时序图 6-3,创建时序图,步骤 1:,在Rational XDE中单击“文件”-“Open Rational”打开第二章创建的“在线拍卖”系统的工程。,步骤 2:,创建一个类图,演示:创建时序图的步骤。,103,时序图 6-4,步骤 3:,在 Model Explorer 中,右击要在其中添加新图 的模型,然后选择“

35、Add Diagram”,再从不同的 图类型中选择“Sequence :Role”,创建一个时序图。从 Model Explorer 中拖出参与者“买主” 和 步骤2创建的所有分析类,放置到时序图上 。,104,时序图 6-5,步骤 4:,创建对象之间的消息传递,演示:创建时序图的步骤。,105,时序图 6-6,步骤 5:,竞拍用例的时序图,演示:创建时序图的步骤。,106,状态图,状态图 4-1,状态图显示对象在生命周期内响应外部事件和消息时所经历的状态序列。,状态图,未结算的余额,更新余额,支票存款,支票结算,107,在 Model Explorer 中,右击然后并单击“Add Diagr

36、am”“Statechart”。,创建状态图,状态图 4-2,步骤 1:,创建一个工程后,再创建状态图,演示:创建状态图的步骤。,108,步骤 2:,状态图 4-3,创建状态图符号,演示:创建状态图的步骤。,状态图中的用户帐户的各种状态,109,步骤 3:,创建转换,状态图 4-4,演示:创建状态图的步骤。,状态图中的转换,110,活动图 4-1,活动图,活动图通过显示已执行活动的序列描述活动的状态。 活动图描述系统的工作流行为,111,步骤 1:,活动图 4-2,创建活动图,创建一个工程,再右击 Model Explorer ,然后单击“Add Diagram”“Activity”。在模型中添加一个新的活动

温馨提示

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

评论

0/150

提交评论