UML入门以及工具介绍

简介

UML,Unified Modeling Language,统一建模语言,是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。——维基百科

模型

  • 功能模型:从用户的角度展示系统的功能,包括用例图。
  • 对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图、对象图。
  • 动态模型:展现系统的内部行为。包括序列图,活动图,状态图。

工具

  • Rose

  • EA

  • processon 在线协作绘图平台,为用户提供最强大、易用的作图工具,支持在线创作流程图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。

  • Plant UML

类图

类图是UML的灵魂。想要画好类图,就要学会给类图分出不同的组,分成不同的包。分组的规则就是跟三层架构的层是一一对应的。纯三层——UI、BLL、DAL这三层再加上一个Entity(实体)层。

  • UI层
    用户界面对应的类。这些窗体类一般既没有方法也没有属性,它们只是通过事件(如单击事件等)来调用 BLL 层里面的方法。
  • Entity层
    实体层里面的类跟数据库里面的表是一一对应的,即一张表一个实体类,实体类同样没有方法,但是它有自己的属性。它的属性就是表里面每一列的每个字段。
  • DAL层
    用来跟数据库打交道,所以它跟实体层一样,也是与数据库中的表是一一对应的。而它所具有的方法就是对数据简单的增删改查。
  • BLL层
    Business Logic Layer:这一层就是上面三个层之间的一个桥梁,负责它们之间的数据交换,通常情况只有方法没有属性,其方法就是窗体所具有的功能(一个功能可能包含一个或多个方法)。

类图是软件工程的统一建模语言一种静态结构图,该图描述系统的类集合,类的属性和类之间的关系。是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。

在UML类图中,类使用包含类名,属性,方法名及其参数并且用分割线分隔的长方形表示。通过Person的类图,可以看出类图有三部分组成,类名,属性和方法。若是抽象类,在类名右上角会有一个(Abstract)表示。
在这里插入图片描述
UML中的属性名就是Java中的成员变量。Java类中成员变量的修饰符,类型和默认值都可以在UML类图中体现出来。通用表示方法如下:
可见性 名称:类型 [ = 默认值 ]
在Java类中可见性分为三类,分别是private,public 和protected,类图中分别用符号-、+和#表示。
通用表示方法中名称就成员变量的名字,类型就是成员变量的类型,可以是自定义类型。而后面的默认值是可选参数,如果没有给成员变量设置初始值,UML类图中就不显示;

# 实例展示类图访问权限控制
class Dummy {
- private field1
# protected field2
~ package method1()
+ public method2()
}

在这里插入图片描述

继承
Father <|-- Son
实现

abstract class AbstractList
interface List
List <|.. AbstractList

操作方法
可见性 名称(参数列表) [ : 返回类型]
类的操作方法通用表示方式如上,方法可见性和属性可见性是一致的,名称就是方法名,参数列表是可选项,若多个参数用英文逗号隔开,返回类型是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void);构造方法,则无返回类型。

类之间的关系

  • 泛化(Generalization)
  • 实现(Realization)
  • 依赖(Dependency)
  • 关联(Association)
  • 聚合(Aggregation)
  • 组合(Composition)

另有一说,类的关系有泛化、实现、依赖和关联,关联又分为一般关联关系和聚合关系、组合关系。

泛化,is-a的关系,表示一个对象是另外一个对象的意思,也就是Java中的继承。泛化是对象之间耦合度最大的一种关系,子类继承父类的所有细节。类和类,接口和接口都可以是继承关系,父类又称作基类或超类,子类又称作派生类,类继承父类后可以实现父类的所以功能,并能拥有父类没有的功能。用带空心三角形的直线来表示,箭头从子类指向父类。最终代码中,泛化关系表现为一个类继承一个非抽象类。

实现,在java中就是一个接口和实现类之间的关系,接口中一般是没有成员变量,所有操作都是抽象的,只有声明没有具体的实现,具体实现需在实现该接口的类中。在UML中用与类的表示法类似的方式表示接口,区别可在UML中类图中看出。用虚线和带空心的三角形表示,箭头从实现类指向接口。

依赖,是类与类之间最弱的关系,依赖可以简单的理解一个类使用另一个类,这种使用关系具有临时性特征,但一个类又会由于另一个类的改变而受到影响。表现在代码层面,为类B作为参数被类A在某个method中使用,一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。用带箭头的虚线表示依赖,箭头从使用类指向被依赖的类。
如:Human ..> Cigarette

关联,描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;一般用来定义对象之间静态的、天然的结构;是一种强关联的关系。这种关系通常使用类的属性表达。关联又分为一般关联、聚合关联与组合关联。表现在代码层面,为被关联类B以类属性(成员变量)的形式出现在关联类A中。表示一个类和另一类是一种包含关系。用带箭头的实线表示,箭头指向被包含类(箭头从使用类指向被关联的类)。分为:1..1 表示另一个类的一个对象只与该类的一个对象有关系,0..*表示另一个类的一个对象与该类的零个或多个对象有关系,1..* 表示另一个类的一个对象与该类的一个或多个对象有关系,0..1 表示另一个类的一个对象没有或只与该类的一个对象有关系,* 任意多个对象关联。关联关系默认不强调方向,表示对象间相互知道。

class Water
class Human
Human --> Water

聚合,关联关系的一种特例,表示整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期。但是部分可以脱离整体而存在。用带空心菱形的直线表示,菱形从局部指向整体。如:Company o-- Human

组合,关联关系的一种特例,体现一种 contains-a 关系,一种强烈的包含关系,比聚合更强,也称为强聚合;同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。此时部分需在整体的构造方法中创建。组合关系是一种强依赖的特殊聚合关系。组合关系用带实心菱形的直线表示,菱形从局部指向整体。如:Human *-- Brain

聚合和组合的区别
聚合是has-a关系,组合是contains-a关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除聚合对象不一定就删除代表部分事物的对象。组合关系中一旦删除组合对象,同时也就删除代表部分事物的对象。

其他类型

时序图

通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
->表示消息传递,-->表示异步消息传递,note [left | right] 对消息进行说明。

用例图

参与者与用例的交互。

活动图

当流程图来用,描述程序的处理过程。

组件图

表示组件是如何互相组织以构建更大的组件或是软件系统。

状态图

描述一个对象在其生存期间的动态行为。
实例:

[*] -> ready : start;
ready -> running : get cpu;
running -> ready : lost cpu;
running -down-> block : io, sleep, locked;
block -up-> ready : io return, sleep over, get lock;
running -> [*] : complete;

效果:
在这里插入图片描述

plant UML

类似于HTML的标记性语言,采用gravizo来渲染PlantUML,可集成在markdown。故而可以像维护代码一样维护 UML 图的历史版本,编写脚本就会自动生成UML图。会议讨论、流程设计、需求编写等环节。支持的工具集tools 不要太多!
在线版工具:online-plantuml

PlantUML是一个快速创建UML图形的组件,其支持的图形有:

  • sequence diagram
  • use case diagram
  • class diagram
  • activity diagram
  • component diagram
  • state diagram
  • object diagram
  • wireframe graphical interface

PlantUML 依赖 Graphviz
Windows 下载安装 graphviz,选择 msi 安装包或者 zip压缩包;
Mac 安装:brew install graphviz
注意:无论是 sublime 还是 IDEA 想要借助 plant UML绘制 UML 图,都需要先安装 Graphviz。

提供 IDEA 插件:plantuml integration,安装好后重启IDEA。在 IDEA other setting 中更改配置即可。
在这里插入图片描述
参考示例:我的 GitHub

sublime 安装 plantUML 参考我的博客:Sublime 入门使用教程

也可以在 chrome 中安装 plant UML 插件的形式来集成使用。

语法

参考PDF:http://plantuml.com/PlantUML_Language_Reference_Guide.pdf
绘图的内容需要包含在@startuml和@enduml中。保存绘图文本格式不限,如 demo.txt 都行,然后可以使用命令行:
java -jar /path/to/plantuml.jar -tsvg demo.txt
即可在当前路径生成 demo.svg 的图片。也可以生成PNG、SVG、LaTeX和二进制图片。修改选项-t即可。

其他

http://www.planttext.com/planttext也是一个类似的导出工具,甚至你可以自建一个服务器生成图片。使用在线生成工具的好处是不用保存图片,可以直接应用生成的图片地址。

猜你喜欢

转载自blog.csdn.net/lonelymanontheway/article/details/83154787
今日推荐