从UML说起

Posted 小许的技术人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从UML说起相关的知识,希望对你有一定的参考价值。

UML全称Unified Modeling Language(统一建模语言),它始于1997年的一个OMG标准,是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持.

UML在消化、吸收、提炼至今存在的所有软件建模语言的基础上提出的,突破了软件的限制,广泛吸收了其他领域的建模方法,并根据建模的一般原理,结合了软件的特点,具有坚实的理论基础和广泛性

笔者认为,UML的优势在于辅助软件从业人员进行业务分析和流程梳理,尤其对复杂业务流程下的场景帮助较大。

结构建模 

结构建模具有捕捉静态的功能,包括:类图 、包图 、组件图 、部署图  

类图

类图的作用是描述程序中类的信息及各个类之间的关系,一般用于详细设计过程。描述每一个类的详细信息,包括变量,和方法 描述系统中各模块类之间的关系 类之间的关系。关系由强到弱依次为:

  • 泛化(Generalization):继承关系。是耦合最强的一种关系。

  • 实现(Realization):针对接口的实现而言。 

  • 组合(Composition) :是一种更强的聚合关系。同样表示组合和局部的关系,但是组合中部分与整体的生命周期是强绑定在一起的,而聚合中局部可以脱离整体独立存在。例如 身体与手的关系是组合关系。

  • 聚合(Aggregation):是一种更强的关联关系。聚合表示的是整体与部分的关系。例如雁群和大雁的关系。面向对象语言中,现为构造函数内参数引用。 

  • 关联(Association) :是一种更强的依赖关系。在面向对象语言中,表现为实例变量的引用。

  • 依赖(Dependency):最弱的一种关系。一般表现为方法参数级别的引用。

组件图

组件图适用于基于组件的开发模式,它通过组件,及组件的接口、端口来表达组件的构成及其关系。组件图通过接口、端口的方式来表达组件间的连接,很形象的表达出一个组件可以被另一个提供了相同接口的组件替换。组件图比较适用于 SOA 架构、微服务架构的表达,描述整个系统的结构以及子系统间的通讯方式,或者表达一些基础设施,比如脚手架,消息中间件等等。 它包含的要素 :

  • 组件(component) 

  • 提供接口 (provided interfaces)

  • 需求接口(required interfaces) 

  • 端口 (port) 

  • 连接器( connector) 

从UML说起

部署图

部署图描述的是系统运行时的结构,展示了硬件的配置及其软件如何部署到网络结构中。一个系统模型只有一个部署图,部署图通常用来帮助理解分布式系统 。包含的要素:

  • 结点(Node):是存在与运行时的代表计算机资源的物理元素,可以是硬件也可以是运行其上的软件系统,比如64主机、Windows server 2008操作系统、防火墙等

  • 实体(Artifact):软件开发过程中的产物,包括过程模型、源代码、可执行程序、设计文档、测试报告、需求原型、用户手册等等。 

  • 连接(Association): 结点之间的连线表示系统之间进行交互的通信路径,这个通信路径称为连接(Association)

  • 结点容器(Node as Container):结点(Node)可以包含物件(Artifact)。  

行为建模

描述了在系统中的相互作用,代表之间的交互的结构图,行为建模显示系统的动态性质。包括用例图、活动图/泳道图 、时序图/交互图 、状态图。

用例图

用例图描述了系统提供的一个功能单元,一般用于需求分析的最初阶段。 可以让使用者清楚的理解这个软件到底能提供什么功能,是不是满足自己的需求 另外一方面对应开发者来说,可以更好地理解需求,从而能更好的去实现这些需求。因此用例图是一种非常有用的分析建模工具。

用例图主要有六个元素。

  • 参与者(Actor) 。参与者是系统外部的,可以是用户、定时器、其他系统。

  • 用例(Use Case) :系统提供的功能。

  • 关联关系(Association) :参与者和用例或用例之间的依赖关系。

  • 包含关系(Include) :一个用例可以进一步分解为多个子用例,以达到复用。

  • 扩展关系(Extend):一个用例在满足某些条件时会扩展出其他的用例。

  • 泛化关系(Generalization):一个用例可能有多种实现逻辑,在面向对象中表现为继承。

从UML说起

状态图

UML 状态图主要用于描述对象具有的各种状态、状态之间的转换过程以及触发状态转换的各种事件和条件。主要用于涉及复杂的状态流转的模型的分析设计 UML 状态图描述了一个状态机,可以被定义为一台机器,它定义了一个对象,这些状态控制外部或内部事件的不同状态。要素 :

  • 源状态:即受转换影响的状态 

  • 目标状态:当转换完成后对象的状态

  • 触发事件:用来为转换定义一个事件,包括调用、改变、信号、时间 

  • 监护条件:布尔表达式,决定是否激活转换 

  • 动作:转换激活时的操作


时序图

UML时序图,应该是应用最广泛的一种工具了。它是一种详细表示对象之间以及对象与参与者实例之间交互的图,它由一组协作的对象(或参与者实例)以及它们之间可发送的消息组成,它强调消息之间的顺序。被广泛使用于设计阶段 详细而直观地表现了一组相互协作的对象在执行一个(或少量几个)用例时的行为依赖关系,以及操作和消息的时序关系。 要素 如下:

  • 角色:系统外部,可以是人、及其甚至其他的系统或者子系统

  • 对象(Object):描述参与交互的实体。 

  • 生命线(Lifeline):一条垂直虚线,表示对象在一段时间内的存在 

  • 激活(Activation):表示一个对象直接或通过从属操作完成操作的过程。通过一个窄长的矩形来表示 

  • 消息(Messages):对象之间的通信

  • 组合片段(Combined Fragment):这部分是序列图中使用最不规范的点,也是体现技术人员专业性的点。它可以描述几种关系:

以上是关于从UML说起的主要内容,如果未能解决你的问题,请参考以下文章

设计模式从青铜到王者第三篇:UML类图

从 Java 中读取 UML 类图

uml的特点是啥

javadoc 中的@uml.property 标签从何而来?

如何从正在运行的应用程序生成 UML 文档

从IDEA角度来看懂UML图