java的UML图(ExerciseUMLDiagram)

合集下载

浅谈UML中常用的几种图

浅谈UML中常用的几种图

浅谈UML中常用的几种图1 UML简介2 UML常见图分类3 用况图(用例)4 类图简单类图使用举例5 其他辅助用图●时序图(顺序图)●协作图(Collaboration Diagram/communication Diagram)/通信图●状态图●活动图(Activity Diagram)6 组件图(ComponentDiagram)、配置图(Deployment Diagram)1 UML简介统一建模语言(Unified Modeling Language,UML)又称标准建模语言,是始于1997年的一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

‘UML感兴趣的可以阅读UML 1规范,包含了UML 的所有知识内容。

注:OMG, Object Management Group 对象管理组织2 UML常见图分类UML从考虑系统的不同角度出发,定义了用况图、类图、对象图、包图、状态图、活动图、序列图、通信图、构件图、部署图等10种图。

分类:面向对象动态建模,用于建立行为的实体间行为交互的四种图:状态图(Stage Diagram),序列图(Sequence Diagram),协作图(Communication Diagram),活动图(Activity Diagram) 。

“序列图”与“协作图”表述的是相似的消息,“活动图”是“状态图”的一种。

•静态结构图Static Structure Diagram•类图Class Diagram•对象图Object Diagram•用况图Use Case Diagram•交互图Interaction Diagram•顺序图Sequence Diagram•协作图Collaboration Diagram•状态图State chart Diagrams•活动图Activity Diagrams•实现图Implementation Diagrams•构件图Component Diagram•部署图Deployment Diagram3 用况图(用例)用例图,展现了一组用例、参与者(actor)以及它们之间的关系。

UML各种图例齐全—用例图、类图、状态图、包图、协作图、顺序图详细说明书画法和功能

UML各种图例齐全—用例图、类图、状态图、包图、协作图、顺序图详细说明书画法和功能

UML各种图例面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language ™),这篇课程的目的是展示出UML的精彩之处.UML中有九种建模的图标,即:∙用例图∙类图∙对象图∙顺序图∙协作图∙状态图∙活动图∙组件图∙配置图本课程中的某些部分包含了这些图的细节信息的页面链接.而且每个部分都有一个小问题,测试一下你对这个部分的理解.为什么UML很重要?为了回答这个问题,我们看看建筑行业.设计师设计出房子.施工人员使用这个设计来建造房子.建筑越复杂,设计师和施工人员之间的交流就越重要.蓝图就成标准文档为了这个行业中的设计师和施工人员的必修课.写软件就好像建造建筑物一样.系统越复杂,参与编写与配置软件的人员之间的交流也就越重要.在过去十年里UML就成为分析师,设计师和程序员之间的“建筑蓝图”.现在它已经成为了软件行业的一部分了.UML提供了分析师,设计师和程序员之间在软件设计时的通用语言.UML被应用到面向对象的问题的解决上.想要学习UML必须熟悉面向对象解决问题的根本原则――都是从模型的建造开始的.一个模型model就是根本问题的抽象.域domain就是问题所处的真实世界.模型是由对象objects组成的,它们之间通过相互发送消息messages来相互作用的.记住把一个对象想象成“活着的”.对象有他们知道的事(属性attributes)和他们可以做的事(行为或操作behaviors or operations).对象的属性的值决定了它的状态state.类Classes是对象的“蓝图”.一个类在一个单独的实体中封装了属性(数据)和行为(方法或函数).对象是类的实例instances.用例图用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象.强调这个系统是什么而不是这个系统怎么工作.用例图与情节紧紧相关的.情节scenario是指当某个人与系统进行互动时发生的情况.下面是一个医院门诊部的情节.“一个病人打电话给门诊部预约一年一次的身体检查.接待员找出在预约记录本上找出最近的没有预约过的时间,并记上那个时间的预约记录.”用例Use case是为了完成一个工作或者达到一个目的的一系列情节的总和.角色actor是发动与这个工作有关的事件的人或者事情.角色简单的扮演着人或者对象的作用.下面的图是一个门诊部Make Appointment用例.角色是病人.角色与用例的联系是通讯联系communication association(或简称通讯communication)标准文档角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线.一个用例图是角色,用例,和它们之间的联系的集合.我们已经把Make Appointment作为一个含有四个角色和四个用例的图的一部分.注意一个单独的用例可以有多个角色.用例图在三个领域很有作用.决定特征(需求).当系统已经分析好并且设计成型时,新的用例产生新的需求标准文档∙客户通讯.使用用例图很容易表示开发者与客户之间的联系.∙产生测试用例.一个用例的情节可能产生这些情节的一批测试用例.类图类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统.类图是静态的-它们显示出什么可以产生影响但不会告诉你什么时候产生影响.下面是一个顾客从零售商处预定商品的模型的类图.中心的类是Order.连接它的是购买货物的Customer和Payment.Payment有三种形式:Cash,Check,或者Credit.订单包括OrderDetails(line item),每个这种类都连着Item.标准文档UML类的符号是一个被划分成三块的方框:类名,属性,和操作.抽象类的名字,像Payment是斜体的.类之间的关系是连接线.类图有三种关系.关联association-表示两种类的实例间的关系.如果一个类的实例必须要用另一个类的实例才能完成工作时就要用关联.在图中,关联用两个类之间的连线表示.标准文档标准文档为了简单地表示出复杂的类图,可以把类组合成包packages.一个包是UML上有逻辑关系的元件的集合.下面这个图是是一个把类组合成包的一个商业模型.dependencies关系.如果另一个的包B改变可能会导致一个包A改变,则包A依赖包B.包是用一个在上方带有小标签的矩形表示的.包名写在标签上或者在矩形里面.点化线箭头表示依赖对象图Object diagrams用来表示类的实例.他们在解释复杂关系的细小问题时(特别是递归关系时)很有用.这个类图示一个大学的Department可以包括其他很多的Departments.标准文档这个对象图示上面类图的实例.用了很多具体的例子.UML中实例名带有下划线.只要意思清楚,类或实例名可以在对象图中被省略.标准文档每个类图的矩形对应了一个单独的实例.实例名称中所强调的UML图表.类或实例的名称可能是省略对象图表只要图的意义仍然是明确的.顺序图类图和对象图是静态模型的视图.交互图是动态的.他们描述了对象间的交互作用.顺序图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线.消息用从一个对象的生命线到另一个对象生命线的箭头表示.箭头以时间顺序在图中从上到下排列.标准文档协作图协作图也是互动的图表.他们像序列图一样也传递相同的信息,但他们不关心什么时候消息被传递,只关心对象的角色.在序列图中,对象的角色放在上面而消息则是连接线.标准文档对象角色矩形上标有类或对象名(或者都有).类名前面有个冒号(:).协作图的每个消息都有一个序列号.顶层消息的数字是1.同一个等级的消息(也就是同一个调用中的消息)有同样的数字前缀,再根据他们出现的顺序增加一个后缀1,2等等.状态图对象拥有行为和状态.对象的状态是由对象当前的行动和条件决定的.状态图statechart diagram显示出了对象可能的状态以及由状态改变而导致的转移.标准文档我们的模型例图建立了一个银行的在线登录系统.登录过程包括输入合法的密码和个人账号,再提交给系统验证信息.登录系统可以被划分为四种不重叠的状态:Getting SSN, Getting PIN, Validating, 以及 Rejecting.每个状态都有一套完整的转移transitions来决定状态的顺序.标准文档状态是用圆角矩形来表示的.转移则是使用带箭头的连线表示.触发转移的事件或者条件写在箭头的旁边.我们的图上有两个自转移.一个是在Getting SSN,另一个则在上Getting PIN.初始状态(黑色圆圈)是开始动作的虚拟开始.结束状态也是动作的虚拟结束.事件或条件触发动作时用(/动作)表示.当进入Validating状态时,对象并不等外部事件触发转移.取而代之,它产生一个动作.动作的结果决定了下一步的状态.活动图活动图activity diagram是一个很特别的流程图.活动图和状态图之间是有关系的.状态图把焦点集中在过程中的对象身上,而活动图则集中在一个单独过程动作流程.活动图告诉了我们活动之间的依赖关系.对我们的例子来说,我们使用如下的过程.“通过ATM来取钱.”这个活动有三个类Customer, ATM和 Bank.整个过程从黑色圆圈开始到黑白的同心圆结束.活动用圆角矩形表示.标准文档标准文档标准文档。

UML时序图的绘制指南与实例解析

UML时序图的绘制指南与实例解析

UML时序图的绘制指南与实例解析UML(统一建模语言)是一种用于软件开发的标准化建模语言,它提供了一种图形化的方式来描述系统的结构和行为。

在UML中,时序图(Sequence Diagram)是一种常用的建模工具,用于展示系统中各个对象之间的交互过程。

本文将为读者提供一份UML时序图的绘制指南,并通过实例解析来帮助读者更好地理解和运用时序图。

一、时序图的基本概念时序图是一种描述对象之间交互行为的图形化工具,它展示了对象之间的消息传递和时间顺序。

在时序图中,每个对象都表示为一个矩形框,框内写上对象的名称。

对象之间的交互通过箭头表示,箭头上标注的是消息的名称和参数。

时序图按照从上到下的顺序表示时间的流逝,从而展示了系统中对象之间的交互过程。

二、时序图的绘制步骤1. 确定参与者:首先,需要确定在时序图中需要包含哪些对象或者参与者。

参与者可以是系统的各个模块、用户、外部接口等。

将每个参与者表示为一个矩形框,并在框内写上其名称。

2. 确定消息:接下来,需要确定对象之间的交互过程,并将其表示为消息。

消息可以是方法调用、事件触发等。

在时序图中,消息通常用箭头表示,箭头上标注的是消息的名称和参数。

3. 确定时间顺序:在时序图中,对象之间的交互是按照时间顺序展示的,因此需要确定每个消息发生的时间顺序。

可以通过在时序图中添加垂直虚线来表示时间的流逝,从而更清晰地展示对象之间的交互过程。

4. 添加约束条件:有时候,对象之间的交互过程可能会受到一些约束条件的限制,比如并发执行、条件判断等。

在时序图中,可以使用条件框来表示这些约束条件,从而更准确地描述系统的行为。

三、时序图的实例解析为了更好地理解和运用时序图,我们以一个简单的购物系统为例进行实例解析。

在这个购物系统中,主要包含三个参与者:用户、购物车和商品。

用户可以将商品添加到购物车,并进行结算。

首先,我们将用户、购物车和商品分别表示为三个矩形框,并在框内写上其名称。

接下来,我们确定对象之间的交互过程。

JAVA:UML类图符号表示方法学习

JAVA:UML类图符号表示方法学习

JAVA:UML类图符号表⽰⽅法学习
1.类(Class):使⽤三层矩形框表⽰。

第⼀层显⽰类的名称,如果是抽象类,则就⽤斜体显⽰。

第⼆层是字段和属性。

第三层是类的⽅法。

注意前⾯的符号,‘+’表⽰public,‘-’表⽰private,‘#’表⽰protected。

2.UML类图符号之接⼝:使⽤两层矩形框表⽰,与类图的区别主要是顶端有<<interface>>显⽰。

第⼀⾏是接⼝名称。

第⼆⾏是接⼝⽅法。

3.UML类图符号之继承类(extends):⽤空⼼三⾓形+实线来表⽰。

4.UML类图符号之实现接⼝(implements):⽤空⼼三⾓形+虚线来表⽰
5.UML类图符号之关联(Association):⽤实线箭头来表⽰,例如:燕⼦与⽓候
6.UML类图符号之聚合(Aggregation):⽤空⼼的菱形+实线箭头来表⽰
聚合:表⽰⼀种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的⼀部分,例如:公司和员⼯
组合(Composition):⽤实⼼的菱形+实线箭头来表⽰
组合:部分和整体的关系,并且⽣命周期是相同的。

例如:⼈与⼿
7.UML类图符号之依赖(Dependency):⽤虚线箭头来表⽰,例如:动物与氧⽓
8.UML类图符号之基数:连线两端的数字表明这⼀端的类可以有⼏个实例,⽐如:⼀个鸟应该有两只翅膀。

如果⼀个类可能有⽆数个实例,则就⽤‘n’来表⽰。

关联、聚合、组合是有基数的。

sequencediagram 语法

sequencediagram 语法

sequencediagram 语法顺序图(Sequence Diagram)是一种UML(Unified Modeling Language)的图形化建模工具,用于描述对象之间的交互关系。

在软件开发过程中,顺序图用于可视化系统的行为,展示对象之间的时序交互流程。

顺序图的目标是描述对象之间的消息传递,以及这些消息在时间上的顺序。

它可以用来表示不同对象之间的交互方式,或者展示一个对象内部的交互过程。

顺序图的基本元素包括参与者(Actor)、对象(Object)、生命线(Lifeline)、消息(Message)和控制焦点(Focus of Control)。

1.参与者(Actor):顺序图中的参与者是指与系统交互的外部实体,可以是人、其他系统或者硬件设备。

在顺序图中,参与者通常表示为一个方框,可以包含多个实例。

2.对象(Object):对象在顺序图中表示系统中的实体或者模块。

它可以是一个类的实例、一个组件、一个子系统或者系统本身。

每个对象都有一个生命线,在顺序图中表示为一条垂直虚线。

3.生命线(Lifeline):生命线表示对象在一段时间内的存在。

它是一个垂直虚线,从对象的图形下方延伸到顺序图的顶部。

生命线上的箭头表示对象的存在时间。

4.消息(Message):消息是顺序图中对象之间的通信方式。

它分为同步消息(Synchronous Message)、异步消息(Asynchronous Message)和返回消息(Return Message)等几种类型。

同步消息表示发送者在接收到消息后会等待返回结果,而异步消息则表示发送者不需要等待返回结果。

5.控制焦点(Focus of Control):控制焦点表示在顺序图中的消息接收和处理过程。

它通常表示为带有箭头的竖线,箭头指向消息的接收者。

在顺序图中,可以通过以下步骤来描述对象之间的交互过程:1.确定参与者和对象:首先需要确定顺序图中涉及的参与者和对象,以及它们之间的关系和交互方式。

uml表示法

uml表示法

uml表示法
UML(Unified Modeling Language)是一种用于软件开发的图形化建模语言,它提供了一种标准的、统一的、可扩展的表示法,用于描述系统的结构、行为和交互。

UML是一种通用的建模语言,可以用于各种类型的系统,包括软件系统、硬件系统和业务系统等。

UML的表示法包括以下几种:
1. 用例图(Use Case Diagram):用于描述系统的功能需求和用户与系统之间的交互。

用例图中包含用例、参与者和关系等元素。

2. 类图(Class Diagram):用于描述系统的静态结构,包括类、接口、属性、方法等元素,以及它们之间的关系。

3. 对象图(Object Diagram):用于描述系统中的对象实例及其之间的关系。

4. 时序图(Sequence Diagram):用于描述系统中的对象之间的交互,包括消息、对象、生命线等元素。

5. 协作图(Collaboration Diagram):与时序图类似,用于描述系统中的对象之间的交互,但它强调的是对象之间的协作关系。

6. 状态图(Statechart Diagram):用于描述系统中对象的状态和状态之间的转换。

7. 活动图(Activity Diagram):用于描述系统中的业务流程或操作流程,包括活动、决策、分支、合并等元素。

8. 部署图(Deployment Diagram):用于描述系统的物理部署结构,包括节点、连接线、组件等元素。

以上是UML的常用表示法,它们可以互相结合使用,形成一个完整的系统模型,帮助开发人员更好地理解和设计系统。

UML用例图的主要元素解析与使用方法

UML用例图的主要元素解析与使用方法

UML用例图的主要元素解析与使用方法UML(Unified Modeling Language)是一种用于软件系统建模的标准化语言,用例图是UML的一种图表类型,用于描述系统的功能需求和用户与系统之间的交互。

在软件开发过程中,用例图是非常重要的工具,它能够帮助开发团队更好地理解系统需求,设计出更合理的系统架构。

本文将对UML用例图的主要元素进行解析,并介绍其使用方法。

一、参与者(Actors)参与者是指与系统进行交互的实体,可以是人、其他系统或外部设备。

在用例图中,参与者用一个小人的图标表示。

参与者与系统之间通过用例进行交互。

一个参与者可以在多个用例中出现,也可以在一个用例中有多个参与者。

二、用例(Use Cases)用例是对系统功能的描述,它表示系统为参与者提供的一项功能或服务。

用例图中,用例用一个椭圆形图标表示。

每个用例都有一个名称,通常使用动词短语来描述功能。

用例之间可以有关系,如包含关系(include)、扩展关系(extend)等。

三、关系(Relationships)在用例图中,参与者与用例之间可以有不同类型的关系,如关联关系(association)、包含关系(include)、扩展关系(extend)等。

关联关系表示参与者与用例之间的关联,包含关系表示一个用例包含另一个用例,扩展关系表示一个用例可以扩展另一个用例。

四、系统边界(System Boundary)系统边界是用于表示系统的边界,用一个矩形框表示。

在用例图中,系统边界将参与者和用例包围在内,表示系统的范围和边界。

五、泛化(Generalization)泛化是一种继承关系,用于表示两个用例之间的继承关系。

在用例图中,泛化关系用一个带有箭头的实线表示,箭头指向父用例。

六、扩展点(Extension Points)扩展点用于表示一个用例可以被扩展的地方。

在用例图中,扩展点用一个小圆圈表示,并与扩展用例之间用虚线连接。

使用UML用例图进行系统建模时,需要按照以下步骤进行:1. 确定参与者:首先,需要确定系统中的参与者,包括用户、其他系统或外部设备。

UML用例图的绘制技巧

UML用例图的绘制技巧

UML用例图的绘制技巧UML(Unified Modeling Language)是一种用于软件系统的建模语言,它提供了一套标准的图形符号和规范,用于描述系统的结构和行为。

其中,用例图是一种常用的图示工具,用于描述系统的功能需求和用户之间的交互。

在绘制UML用例图时,我们需要掌握一些技巧,以确保图示的清晰、准确和易于理解。

本文将介绍一些常用的绘制技巧,帮助读者更好地应用UML用例图。

1. 确定系统边界在绘制用例图之前,我们需要明确系统的边界。

系统边界是指系统与外部实体之间的分界线,它定义了系统的范围和界限。

确定系统边界是用例图绘制的第一步,它可以帮助我们理清系统的功能和参与者之间的关系。

2. 识别参与者参与者是指与系统进行交互的外部实体,可以是人、其他软件系统或硬件设备等。

在绘制用例图时,我们需要识别所有的参与者,并将它们表示为图中的符号。

参与者通常以人的图标或简单的图形表示,以便于理解和识别。

3. 确定用例用例是指系统的功能需求,描述了系统与参与者之间的交互过程。

在绘制用例图时,我们需要明确系统的所有用例,并将它们表示为图中的椭圆形符号。

每个用例应该具有一个简洁明确的名称,以便于理解和识别。

4. 确定参与者和用例之间的关系参与者和用例之间的关系是用例图的核心内容。

在绘制用例图时,我们需要明确参与者与用例之间的关系,并将它们表示为图中的连线。

常见的关系有:关联关系(Association)、包含关系(Include)、扩展关系(Extend)等。

这些关系可以帮助我们理清系统的功能和参与者之间的交互流程。

5. 添加扩展和包含关系扩展和包含关系是用例图中的重要概念,用于描述用例之间的依赖关系。

扩展关系表示一个用例可以在另一个用例的基础上进行扩展,而包含关系表示一个用例可以包含另一个用例。

在绘制用例图时,我们可以使用带箭头的虚线来表示扩展关系,使用带箭头的实线来表示包含关系。

6. 使用注释和说明在绘制用例图时,我们可以使用注释和说明来提供额外的信息和解释。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Exercise 8.10: QuadraticEquation
1
QuadraticEquation
-a : double -b: double -c : double +QuadraticEquation(a : double, b: double, c: double) +getDisc riminat(): double +getRoot1(): double +getRoot2(): double
Exercise 10.12: MyRectangle2D
3
M yRectangle2D -x: double -y: double -width: double -height: double +MyRectangle2D() +MyRectangle2D(x: double, y: double, width: double, height: double) +getX(): double +setX(x: double): void +getY():double +setY(y: double): void +getWidth(): double +setWidth(width: double): void +getHeight(): double +setHeight(height: double): void +getRadius(): double +getPerimeter(): double +getArea(): double +contains(x: double, y: double): b oolean +contains(r: Rectangle2D): boolean +overlaps(r: Rectangle2D): boolean
2
Chapter 10
Exercise 10.4: MyPoint
MyPoint -x: double -y: double +MyPoint() +MyPoint(x: double, y: double) +getX(): double +getY(): double +distance(secondPoint: MyPoint): double x-coordinate of this point. y-coordinate of this point. Constructs a Point object at (0, 0). Constructs an object with specified x and y values. Returns x value in this object. Returns y value in this object.
Employee Staff
Student
Employee
-office: String -salary: int -dateHired: java.util.Date +Employee() +Employee(name: String, address: String, phone: String, email: String) +getOffice(): String +getSalary(): int +getDateHired(): Date +setOffice(office: String): void +setSalary(salary: int): void +setDateHired(dataHired: Date): void +toString(): String -rank: String +Faculty()
ge t methods for all data fields are provided and omitted for brevity. Thre e coefficients for the equation.
Constructs a Quadrati c oefficients. Returns the discriminant of this equation. Returns the first root of this equation. Returns the se cond root of this e qua tion.
Solutions for UML Class Diagrams Chapter 8
Exercise 8.2: Stock
Stock
symbol: String name: String previousClosingPrice: double currentPrice: double Stock(symbol: String, name: String) getChangePercent(): double The symbol of this stock. The name of this stock. The previous closing price of this stock. The current price of this stock. Constructs a stock with a specified symbol and a name. Returns the percentage of change of this stock.
4
Chapter 11
Exercise 11.2: Person, Student, Staff, Employee
Person Student Faculty
Person
-name: String -address: String -phone: String -email: String +Person() +Person(name: String, address: String, phone: String, email: String) +getName(): String +getAddress(): String +getPhone(): String +getEmail(): String +setName(name: String): void +setAddress(address: String): void +setPhone(phonee: String): void +setEmail(email: String): void +toString(): String +Student() +Student(name: String, address: String, phone: String, email: String) +getStatus(): String +setStatus(status: String): void +toString(): String -status: String
Returns the distance from this point to another point. +distance(p1: Point, p2: MyPoint): double Returns the distance between two points.
Exercise 10.8: Tax
Faculty
-officeHour: String
+Faculty(name: String, address: String, phone: String, email: String) +getOfficeHour(): String +setOfficeHour(officeHour: String): void +getRank(): String +setRank(rank: String): void +toString(): String
Tax -filingStatus: int -brackets: int[][] -rates: double[] -taxableIncome: double +Tax() +Tax(filingStatus: int, brackets: int[], rates: double[], taxableIncome: double) +getFilingStatus(): int +setFilingStatus(filingStatus: int): void +getBrackets(): int[][] +setBrackets(brackets: int[][]): void +getRates(): double[] +setRates(rates: double[]): void +getTaxableIncom(): double +setTaxableIncome(taxableIncome: double): void +getTax(): double
Exercise 10.14: MyDate
MyDate -year: int -m onth: int -day: int +MyDate() +MyDate(elaps edTime: long) +getYear(): int +getMonth (): int +getDay(): int +setDate(elapsedTime: long): void The year for the d ate. The month for the date. The day for the date. Con structs M yDate for the current d ate. Con structs M yDate with a s pecified elapse time in milliseconds. Returns the year for the date. Returns the month for the d ate. Returns the day for the date. Sets a new date using the elapsed tim e.
相关文档
最新文档