UML(Unified Modeling Language,统一建模语言或标准建模语言)是一种用于描述、构建和设计软件系统的标准化语言。UML图形包括13种类型,而UML规范则用来描述建模的概念,如类(对象的属性和行为)、对象、关联、职责、行为、接口、用例、包、顺序、协作以及状态等。下面我们将详细介绍这13种UML图形及其元素关系。
1. 用例图(UseCase Diagram):静态图,用于对系统的使用方式进行分类,帮助开发团队以一种可视化的方式理解系统的功能需求。用例图中的元素关系包含有:参与者、用例、子系统和关系(关联、泛化、包含、扩展、依赖、项目、注释)。这里给出一个visio画用例图的界面截图和一个示例图。
2. 类图(Class diagram):静态图,显示类和它们的相互关系。类图中的关系包括泛化(Generalization)、实现(Realization)、关联(Association)、聚合(Aggregation)、组合(Composition)和依赖(Dependency)。泛化表示继承关系;实现表示类是接口所有特征和行为的实现;关联表示一种拥有的关系,它使一个类知道另一个类的属性和方法;聚合表示整体与部分的关系,且部分可以离开整体而单独存在;组合表示整体与部分的关系,但部分不能离开整体而单独存在;依赖表示一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。这里给出一个UML综合示例图以及一个工具示例staruml。
3. 对象图(Object Diagram):静态图,对象图只显示对象及它们的相互关系。与类图对比,对象图主要用于展示单个对象及其属性和操作。对象图示例如下。
4. 活动图(Activity Diagram):动态图,显示人或对象的活动,其方式类似于流程图。活动图包含有初始节点(开始)、最后一个节点(结束)、活动、转换、判定(决策)、同步条、分岔或汇合以及泳道等元素。初始节点用实心圆表示,圆圈内加一个实心圆来表示活动终点;活动是最主要的元素之一,用来表示一个活动的执行过程;转换用于表示活动之间的条件判断和选择;判定用于表示基于条件的决策过程;同步条用于表示并发活动中的时间约束;分岔或汇合用于表示活动的分支或合并;泳道用于表示活动的执行顺序。
总结:UML是一种强大的建模语言,通过使用各种UML图形和规范,可以帮助开发团队更好地理解和管理软件系统的需求和设计。本文介绍了UML中的13种图形及其元素关系,包括用例图、类图、对象图、活动图等,希望对大家学习和使用UML有所帮助。
当一个活动结束时,控制流就会马上传递给下一个活动节点,在活动图中称之为“转换”,用一条带箭头的直线来表示。在活动图中,分支是用菱形表示的,它有一个进入转换(箭头从外指向分支符号),一个或多个离开转换(箭头从分支符号指向外)。而每个离开转换上都会有一个监护条件,用来表示满足什么条件的时候执行该转换。分岔用于将动作流分为两个或者多个并发运行的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。对象流是用来描述某个对象时,把涉及到的对象放置在活动图中,并用一个依赖将其连接到进行创建、修改和撤销的动作状态或者活动状态上,对象的这种使用方法就构成了对象流。泳道是一种图形化工具,用于描述工作流程中的任务和资源之间的关系。
参考文章:
- http://www.cnblogs.com/finehappy/archive/2009/11/22/1608026.html
- http://www.uml.org.cn/oobject/201409092.asp
- http://www.cnblogs.com/ywqu/archive/2009/12/14/1624082.html
5.状态机图(Statechart Diagram)是一种动态图,用于显示生命-周期比较有趣或复杂的对象的各种状态。包括:状态、状态表示法及状态机、转换等五部分组成。其中:
- 状态:是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况。一个状态通常包括名称、进入/退出活动、内部转换、子状态和延迟事件等五个部分组成。
- 状态机:是计算机科学理论的一部分,但UML中的状态机模型主要是基于David Harel所做的扩展,是用来展示状态与状态之间转换的图。
- 转换:另一个则是在状态之间的、包含一些文字描述的有向箭头线,这些箭头线称为转换。下图中红线箭头为转换。
- 转换五要素:源状态、目标状态、触发事件、监护条件和动作。
- 复杂转换:转换类型包括外部转换等。
事件响应、状态变化和自身转换,以及引发特定动作。当离开或进入状态时,将触发进入转换和离开转换。
事件 (参数) [监护条件] / 动作
内部转换
对事件做出响应,并执行特定活动,但不引起状态变化或进入转换、离开转换。
事件 (参数) [监护条件] / 动作
进入转换
当进入某一状态时,执行相应活动。
entry/ 活动
退出转换
当离开某一状态时,执行相应活动。
exit/ 活动
只有动作描述,进入和退出以及操作方法写在了里面。
• 进入和退出转换:当进入一个状态时,执行某个动作;或当退出某个状态时,执行什么动作。这时就可以使用进入和退出转换来表示。
• 内部转换:用来处理一些不离开该状态的事件。
活动与延迟事件
• 活动:当对象处于一个状态时,它一般是空闲的,在等待一个事件的发生。但是某些时间,你可能希望描述个正在进行的活动。在处于一个状态的同时,对象做着某些工作,并一直继续到被某个事件中断。
• 延迟事件:延迟事件是一种特殊的事件,它是指该事件不会触发状态的转换,当对象处于该状态时事件不会丢失,但会被延迟执行。例如,当E-mail程序中正在发送第一封邮件时,用户下达发送第二封邮件执令就会被延迟,但第一封邮件发送完成后,这封邮件就会被发送。这种事件就属于延迟事件。
符合状态表示法:
状态图Visio:
6. 通信图(Communication Diagram)
UML2.0之前叫协作图(Collaboration Diagram)。
显示在某种情形下对象之间发送的消息。协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。
作用:
1). 强调的是发送和接收消息的对象之间的组织结构。
2). 说明系统的动态情况。
3). 描述协作对象间的交互和链接,显示对象、对象间的链接以及对象间如何发送消息。
4). 表示一个类操作的实现。
协作图中的要素:协作图中的关系。
示例:画图工具:StarUML。参考文章:http://www.cnblogs.com/wolf-sun/p/UML-collaboration-diagram.html http://blog.csdn.net/wuyuxing24/article/details/50885827
UML中的包图是一种静态图,用于显示相关的类如何组合。包图可以用来表述功能组命名空间的组织层次。包之间的关系非常简单,两个字,依赖,UML中依赖用带箭头的虚线表示。每个包都必须有一个与其它包相区别的名称,拥有的元素包括类、接口、构件、节点、协作、用例,甚至是其它包或图。包的可见性用“+”来表示“public”,用“#”来表示“protected”,用“-”来表示“private”。
UML的部署图是一种静态图,用于显示安装已完成系统的机器、过程和部署制品。从部署图中,您可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况。使用部署图可以显示运行时系统的结构,同时还传达构成应用程序的硬件和软件元素的配置和部署方式。
UML中活动者、对象、生命线、控制焦点和消息都是常用的元素。其中活动者是指系统中执行操作的用户或实体;对象是指系统中参与交互的其他实体或用户;生命线是指对象在时间轴上存在的时间段;控制焦点是指在交互过程中当前接收输入或输出信息的实体;消息是系统内部传递信息的方式之一。
以下是重构后的内容:
1. 处理器(Processor):处理器是能够执行软件、具有计算能力的节点。
2. 设备(Device):设备是没有计算能力的节点,通常情况下都是通过其接口为外部提供某种服务,例如打印机、IC读写器。如果我们的系统不考虑它们内部的芯片,就可以把它们看作设备。
3. 节点中的构件:当某些构件驻留在某个节点时,可以在该节点的内部描述这些构件。部署图用连接表示各节点之间通信路径,连接用一条实线表示。对于企业的计算机系统硬件设备间的关系,我们通常关心的是节点之间是如何连接的,因此描述节点间的关系一般不使用名称,而是使用构造型描述。
参考文章:
- http://blog.csdn.net/u010168160/article/details/19926715
- http://blog.csdn.net/wangyongxia921/article/details/8250129
10组件图(Component Diagram)静态图。显示可重用的组件(对象或子系统)及期接口。又称为构件图,它描述的是在软件系统中遵从并实现一组接口的物理的、可替换的软件模块。
构件图=构件(Component)+接口(Interface)+关系(Relationship)+端口(Port)+连接器(Connector)。在面向对象系统的物理方面进行建模要用到两种图:组件图和配置图。包含的元素:组件(Component)->构件,接口(Interface,外部接口——端口),连接器(Connector)->连接件,依赖关系(Dependency)。
10.1 组件• 组件是定义了良好接口的物理实现单元,是系统中可替换的物理部件。• 组件代表系统的一个物理实现块,代表逻辑模型元素如类、接口、协同等的物理打包。• 构件通过它的提供接口和请求接口展现行为。• 由于在UML2.0中,构件是一种类,因此构件具有属性、操作和可见性。这些概念的含义与在类图中定义的是一样的,只是在这里把这些概念应用在构件上。
组件的命名• 组件的名称有两种:简单名和路径名。并依据目标操作系统可以添加相应的扩展名,例如Java和dll。
表示方式• 组件用一个左侧带有突出两个小矩形的矩形来表示。
UML2.0如下:UML2.0把构件分为基本构件和包装构件
以下是重构后的内容,保持了原有的段落结构:
基本构件注重于把构件定义为在系统中可执行的元素。包装构件扩展了基本构件的概念,它注重于把构件定义为一组相关的元素,这组元素为开发过程的一部分。也即, 包装构件定义了构件的命名空间方面。在构件的命名空间中,可以包括类、接口、构件、包、用况、依赖(如映射)和制品。按照这种扩展,构件也具有如下的含义:可以用构件来装配大粒度的构件,方法为把所复用的构件作为大粒度构件的成分,并把它们的请求和提供接口连接在一起(简单理解:组件包含组件,组拼大组件)。
组件种类如下:
- 配置组件(Deployment Component):运行系统需要配置的组件,是形成可执行文件的基础–操作系统、JAVA虚拟机、DBMS。
- 工作产品组件(Work Product Component):包括模型、源代码和用于创建配置组件的数据文件,它们是配置组件的来源–UML图、java类和数据库表。
- 执行组件(Execution Component):在运行时创建的组件,是最终可运行的系统产生的允许结果–.net组件。
接口(Interface)由一组操作组成,它指定了一个契约,这个契约必须由实现和使用这个接口的构件所遵循。接口分为提供接口和请求接口。把构件实现的接口称为提供接口(供接口),这意味着构件的提供接口是给其它构件提供服务的。实现接口的构件支持由该接口所拥有的特征,包括接口拥有的约束。构件使用的接口被称为请求接口(需接口),即构件向其它构件请求服务时要遵循的接口。表示方式如下:
- 供接口用“棒棒糖”式的图形表示,即由一个封闭的圆形与一条直线组成。
- 需接口用“插座”式的图形表示,即由一个半圆与一条直线组成。
外部接口——端口是UML2.0引入的概念。端口描述了在构件与它的环境之间以及在构件与它的内部构件之间的一个显示地交互点。端口是一个封装构件的显示的对外窗口,所有进出构件的交互都要通过端口。使用端口能在更大的程度上增加构件的封装性和可替代性。端口是构件的一部分,端口的实例随着它们所属的构件的实例一起被创建和撤消。
以下是关于接口与端口之间的关系:
- 提供接口说明了通过端口来提供服务。
- 请求接口说明了通过端口需要从其它构件获得服务。
一个构件可以通过一个特定端口同另一个构件通讯,而且通讯完全是通过由端口支持的接口来描述的。UML2.0提供两种类型的连接器:代理连接器和组装连接器。代理连接器是委托连接件,用于连接外部接口的端口和内部接口;组装连接器是组装连接件,用于表示构件之间的关系,它连接构件内部的类,将一个构件的供接口和一个构件的需接口捆绑在一起。连接端口意味着请求端口要调用提供端口中的操作,以得到服务。立端口和接口的优点在于在设计时,两个构件彼此不需要了解对方的内部,只要它们的接口是相互兼容的即可。如果一个端口提供一个特定的接口而另一个端口需要这个接口,且接口是兼容的,那么这两个端口便是可连接的。
组装连接件有两种表示方法:如果要显式地把两个构件实例衔接在一起,在它们的端口之间画一条线即可;如果两个构件实例相连是由于它们有兼容的接口,则可以使用一“球-穴”标记来表示构件实例之间的连接关系。装配连接件是两个构件实例间的连接件,它定义一个构件实例提供服务,另一个构件实例使用这些服务。在执行时,消息起源于一个请求端口,沿着连接件传递,被交付到一个提供端口z。
委托连接件把外部对构件端口的请求分发到构件内部的部件实例进行处理,或者通过构件端口把构件内部部件实例向构件外部的请求分发出去。注意,必须在两个提供端口间或两个请求端口间定义委托连接件。
在UML中,组件图中依赖关系的表示方法与类图中依赖关系相同,都是一个由客户指向提供者的虚线箭头。
交互总图使用顺序图展示活动步骤。协作图定义了各个角色、它们之间的关系以及它们所完成的任务。
顺序图是一种UML图表,用于描述为了完成某确定事务,对象之间按照时间顺序进行消息交互的图。它强调了交互发生时,每个对象承担的职责和角色。在项目的需求阶段,分析师能通过提供一个更加正式层次的表达,把用例带入下一层次。那种情况下,用例常常被细化为一个或者更多的序列图。组织的技术人员能发现,序列图在记录一个未来系统的行为应该如何表现中非常有用。在设计阶段,架构师和开发者能使用图挖掘出系统对象间的交互,这样充实整个系统设计。
顺序图由五要素组成:活动者、对象、生命线、控制焦点和消息。其中生命线表示对象存在的时间;控制焦点表示这个时间对象将执行操作;消息表示对象之间传输的信息;而消息类型则包括调用(同步)消息、异步消息、返回消息、阻止消息和超时消息等 。
类元素在类图的这一部分中被详细阐述,主要关注于表示类中的复合元素,例如暴露的接口、包含的端口和部件。
1. 部件:部件是一个代表一组(一个或多个)实例的元素,这些实例的拥有者是一类元实例。例如,如果一个图形的实例包含一组图形元素,那么这些图形元素可以被视为部件,并可以对其之间的某种关系进行建模。需要注意的是,一个部件可以在它的父类被删除之前从父类中移除,这样部件就不会被同时删除。在类或组件内部,部件以不加修饰的方框形式显示。
2. 端口:端口是一个类型化的元素,代表一个包含类元实例的外部可视部分。端口定义了类元与其环境之间的交互。端口显示在包含它的部件、类或组合结构的边缘上。端口指定了类元提供的服务,以及类元要求环境提供的服务。端口以所属类元边界指定的方框形式显示。
3. 接口:与类相似,但有一些限制。所有的接口操作都是公共和抽象的,不提供任何默认实现。所有的接口属性都必须是常量。然而,当一个类从一个单独的超级类继承而来时,它可以实现多个接口。当一个接口在图中单独列出时,它既可以显示为类元素的方框,带 «interface» 关键字和表明它是抽象的斜体名称,也可以显示为圆环。注意:圆环标注不显示接口操作。当接口显示为类所有的接口时,它们会被当作暴露接口引用。暴露接口可以定义为是提供的还是需求的。提供接口确认包含它的类元提供指定接口元素定义的操作,可通过类和接口间实现的连接来定义。需求接口说明该类元能与其他类元进行通信,这些类元提供了指定接口元素所定义的操作。需求接口可通过在类和接口间建立依赖连接来定义。提供接口显示为“带棒球体”,依附在类元边缘。需求接口显示为“带棒杯体”,也是依附在类元边缘。
4. 委托:委托连接器用于定义组件外部端口和接口的内部工作方式。委托连接器表示为带有 «delegate» 关键字的箭头。它连接组件的外部约定(表现为其端口),到组件部件行为的内部实现。
5. 协作:协作定义了一系列共同协作的角色,它们集体展示一个指定的设计功能。协作图应仅显示完成指定任务或功能的角色与属性。隔离主要角色是为了简化结构和澄清行为,也用于重用。一个协作通常实现一个模式。协作元素显示为椭圆。
6. 角色绑定:角色绑定连接器是一条从连接协作到要完成该任务的类元的连线。它显示为虚线,并在类元端显示作用名。
7. 表现:在设计系统中,表现层负责处理用户界面和用户体验。表现层的主要目标是为用户提供易于理解和使用的界面。表现层的元素包括:布局、样式、图标、文本等。这些元素通过各种设计原则和规范进行组织和呈现,以实现良好的用户体验。
以下是重构后的内容:
表现连接器用于连接协作到类元,表示此类元中使用了该协作。显示为带关键字“represents”的虚线箭头。
发生连接器用于连接协作到类元,表示此协作表现了(同原文)该类元;显示为带关键字“occurrence”的虚线箭头。