精华内容
下载资源
问答
  • 绘制Python代码的UML图

    2019-07-16 11:01:11
    最近在学习一套Python编写的架构,使用pyreverse和Graphviz绘制了其UML图。记录如下备查。 1. 工具 1.1 pyreverse 是一套python code 逆向工程(reverse engineering)的工具。它使用类层次结构的pyth...


    转载于:https://blog.csdn.net/Jerry_xzj/article/details/89707567 
     

    最近在学习一套Python编写的架构,使用pyreverse和Graphviz绘制了其UML图。记录如下备查。

    1. 工具
    1.1 pyreverse
    是一套python code 逆向工程(reverse engineering)的工具。它使用类层次结构的python 项目表示已提取任何可用的信息,可以很方便的应用于UML图的生成,或者单元测试,如pyargo和py2tests。pyreverse 已被整合进pylint。

    1.2 Graphviz
    是贝尔实验室开源的图形绘制工具包
    graphviz是一个开源做图软件,能画结构化的抽象和网络图形,在网络,生物信息学,软件工程,数据库和web设计,机器学习, 可视化接口等众多其他技术领域都有应用。

    2. 在Ubuntu中安装
    2.1 Graphviz
    sudo apt-get install graphviz
    1
    2.2 pyrevers
    pip3 install pylint
    1
    3. 使用
    一般使用为:

    pyreverse -ASmy -o png path
    1
    可以通过pyreverse --help 查看所有参数。
    -ASmy:为pyreverse选项参数,-ASmy产生的结果最详细,甚至包括了类属性的结果解析。如果只需要类与类的uml图,建议不加-ASmy。
    -o 指定输出文件格式,支持png, svg, dot等
    path 为要解析的文件或文件夹
    输出结果会直接在命令行当前路径下产生。
    --------------------- 

    展开全文
  • 用Enterprise Architecture绘制十种UML图

    千次阅读 2014-06-06 12:33:37
    UML课程作业要求绘制十种UML图,选择Enterprise Architecture作为绘图工具,每次绘制图都要上网找教程,感觉十分麻烦,而且有些图没有找到具体教程,靠自己摸索找到了绘制方法,现在总结一下使用Enterprise ...

    UML课程作业要求绘制十种UML图,选择Enterprise Architecture作为绘图工具,每次绘制图都要上网找教程,感觉十分麻烦,而且有些图没有找到具体教程,靠自己摸索找到了绘制方法,现在总结一下使用Enterprise Architecture如何绘制这十种图,方便大家使用。(写完博客后发表发现图都没了,坑爹的CSDN,大家按照文字描述的步骤也能顺利完成)

    首先这十种图分别是:

    概念类图,活动图,状态机图,用例图,顺序图,通讯图,设计类图,包图,组件图,部署图。

    先来介绍一下前五种图的绘制: 

    EA的安装应该不用介绍吧,没有任何需要配置的东西,是傻瓜式安装软件。

    概念类图:

    1.File->New Project,新建一个project,输入project的名字后首先选择模型



    选择Domain Model,并确定

    2.打开Domain Model,看到如下图:



    删掉上面的提示标签,否则最后生成的图中会有多余的标签。

    画图用到的工具在左侧栏中,其中class栏是画图时用到的元素,class relationship是元素之间添加关系的标签,common类基本不用


    3.绘图方法:

    首先是class的添加:点击左栏中的class标签,在绘图区任意位置点击,此时自动弹出一个可以完善类信息的对话框,在概念类图中比较常用的是常规栏里的名称信息和详细信息栏里的添加变量,这是概念类图要求的描述类的两个方面。在详细信息栏里点击变量可添加变量,在弹出的对话框中可以完善变量的信息,包括可见性,类型等等,想要完善的信息都有,无须赘述。

    关联的添加:在class relationship中可以添加类之间的关联,选择第一个工具Associate,连接有关联的类,连接完成后,在两个类直接产生了一条直线,双击直线,弹出Associate属性对话框,可以完善关联的属性信息。在常规栏中可以添加属性名称,定义关联的方向,以及样式,所谓的样式即连线的形状。另外概念类图常常需要定义源类和目的类的数目对应关系,在Source Role和Target Role栏中可以定义约束,在约束中填写个数限制即可。


    活动图:

    1.File->New Project,新建一个project,输入project的名字后首先选择模型

    注意这里活动图的模型名称为Dynamic Model,而在选择模型中默认显示的模型是common型的,因此需要在选择类型哪里改为 所有:


    打开这个Dynamic View,左栏中工具变化为活动图需要的工具:


    3.绘图方法:

    泳道的绘制:要注意的是绘图用到的泳道不在工具栏中(不知道为什么这么设置),在绘图区单击右键,选择泳道与矩阵,弹出如下对话框:


    点击新建可以再添加用到,注意新添加的泳道是直接向右排在原来泳道旁边的,而且是紧邻的,边界重合的,点击修改可以修改泳道的信息:


    其他工具在左栏中应有尽有,需要任何类型结点都有,自取即可,需要修改节点信息则均是双击结点在弹出的对话框中进行修改,无需赘述。


    状态机图:

    这是我觉得EA比较坑爹的地方,很多图的绘制都藏起来。

    1.File->New Project,新建一个project,输入project的名字后首先选择模型,这里选择Use Case Model即可

    2.选择菜单栏中的Project:


    选择其中的Add Diagram,弹出如下对话框:


    左栏中选择第二项UML Behavior,在右侧栏中现则State Machine:


    这样,就完成了状态机图的创建

    3.此时左栏中是绘制状态机图需要的工具:


    要用到的各种结点在左栏中均有,根据需求自取即可


    用例图:

    File->New Project,新建一个project,输入project的名字后首先选择模型,这里选择Use Case Model即可

    打开Use case model这个图,左栏中就有相应的工具,即可绘图


    顺序图:

    1.File->New Project,新建一个project,输入project的名字后首先选择模型,这里选择Use Case Model即可

    2.选择菜单栏中的Project:


    选择其中的Add Diagram,弹出如下对话框:


    左栏中选择第二项UML Behavior,在右侧栏中现则Sequence:


    这样,就完成了顺序图的创建

    3.此时左栏中是绘制顺序图需要的工具:


    要用到的各种结点在左栏中均有,根据需求自取即可

    注意顺序图中的message有的要求是一个返回值,箭头是虚线,此时双击message连线,在消息属性中生命周期底下是否返回进行勾选,则消息变为虚线


    通讯图:

    感觉这个图的创建是最艰辛的,可能EA是从建立工程的角度出发,所以如果想单独绘制某个图就比较麻烦了。

    1.File->New Project,新建一个project,输入project的名字后首先选择模型,这里选择Use Case Model即可

    2.此时左栏中是Use Case Model对应的结点类型,点击左栏最上方More tools,选择communication,此时左栏工具变为通讯图要使用的结点

    3.注意此时左栏中的工具虽然是绘制通讯图的工具,但是实际是无法进行通讯图绘制的,因为此时在各个对象之间的连接仍然是Use Case Model的连接,你会发现连接两个对象之后是无法在属性中添加消息的,也就是无法添加通讯图要求的那种箭头+消息序号+消息内容那种类型的信息。

    4。此时在右栏选择刚刚创建的通讯图中的对象,比如选择Actor1,右键点击,选择添加->interaction->with communication diagram,此时在Actor1中添加了一个真正可用的通讯图模型。

    5.点开这个名为Interaction的通讯图,将之前在Use Case Model中建立好的各通讯图元素依次直接拖进绘图区,注意在拖动Actor1时都会自动弹出一个名为粘贴原件的对话框,在粘贴原件到图表中选择“作为原件的Instance”也就是第二项,点击确定,相应的对象就被粘贴到绘图区了。

    6.此时创建连接,选择左栏第一个连接工具,连接相应对象,连接完成后,在连接上点击右键,选择Add message from:Source to Target,即可添加消息!可以看到,添加的效果是出现了一个带消息方向箭头,消息序号,消息内容的标签,而如果在第二步中创建连接,是不能添加这种标签的,而这种标签是通讯图必不可少的元素。

    7.注意创建消息的顺序,最好按照顺序图的活动顺序进行添加,因为消息的标号是根据消息创建顺序自动添加的,也就是序号顺序为:1,1.1,1.2,1.3,等等

    也就是说某个消息序列需要按照顺序创建,小标号是无法修改的。

    8.那么如果想创建新的消息序列该怎么办呢?只需要双击新建的标签,注意是标签不是连接,在消息属性的序列表述中选择开始新组即可。


    设计类图:

    1.File->New Project,新建一个project,输入project的名字后首先选择模型

    选择Domain Model,并确定

    2.打开Domain Model,在左栏中选择class,并放置在绘图区,双击该class,弹出设置类属性的对话框,可以在常规中设置类名,在详细信息中添加类的变量和方法,并可以对属性和方法的一切信息进行修改。

    3.类之间的关联用第一个链接工具,链接后双击链接可以在常规中设置链接的名称和方向,可以在Source Role和Target Role中设置个数约束。


    包图:

    1.File->New Project,新建一个project,输入project的名字后首先选择模型,选择Domain Model,并确定

    2.包的建立选择左栏中的package,输入名称后在弹出的新建图表中选择Package,然后就生成了相应的包,可以向包中添加类,接口,等等元素,在绘制图标时按需选择即可


    组件图:

    1.File->New Project,新建一个project,输入project的名字后首先选择模型,选择Component,并确定

    2.此时左栏中是组件图图对应的工具,在绘制图标时按需选择即可


    部署图:

    1.File->New Project,新建一个project,输入project的名字后首先选择模型,选择Deployment,并确定

    2.此时左栏中是部署图对应的工具,在绘制图标时按需选择即可


    PS:在连接不同的类时常常会发现连线方式不理想导致图片效果不理想,能不能手动调节连线呢?你会发现直接拖拉根本不行。此时选中连接,点击右键->线条样式->Tree-Style Vertical(Horizontal),此时线条变成几段的形式,然后再选中该连接,点击右键->线条样式->自定义线条,就可以按照你想要的连接方式进行拉拽了,这样画出的图要美观的多。

    展开全文
  • MarkDown绘制UML图

    千次阅读 2017-02-15 10:08:13
    在研究Markdown UML图的时候,找到了不少在线绘制UML图的方式,例如 Dot 、 PlantUML 和 UMLGraph 等方式,并且发现了一个不用使用任何插件就可调用图片的方式- Gravizo 。 例如,我们可以使用PlantUML的方式...

    1. 前言

    Markdown是一种轻量级的标记语言,把作者从繁杂的排版工作中解放出来,实现易读易写的文章写作,已经逐渐成为事实上的行业标准。CSDN博客支持Markdown可以让广大博友更加专注于博客内容,大赞。但是,不少博友可能对Markdown比较生疏,本博接下来用一个系列文章《Markdown简明教程》扼要介绍Markdown,希望可以对大家有所帮助。

    系列教程目录

    • 关于Markdown
    • Markdown基本使用
    • Markdown表格和公式
    • Markdown UML图
    • CSDN Markdown快速上手
    • Markdown 参考手册

    本文为《Markdown简明教程》系列教程的第4篇Markdown UML图,主要讲解Markdown序列图、流程图等, 顺便为介绍了无需任何插件的在线绘制UML的Gravizo。

    2. 序列图

    2.1 序列图示例

    基于js-sequence-diagrams实现了序列图,使用下列的格式声明一个序列图: 
    序列图 
    在网页上解析结果为:

    DHCP客户机DHCP客户机DHCP服务器DHCP服务器IP租约请求IP租约提供IP租约选择IP租约确认

    注意:所有的序列图代码需要放在一个语法类型为sequence的代码块中。如下面代码所示。 
    序列图代码样例

    2.2 序列图语法

    序列图的语法如下图所示。 
    序列图语法 
    具体来说:

    • 设置title,采用title: message。
    title: 序列图标题
     
    • 1

    将编译为:

    序列图标题
    • 设置participant,采用participant: actor
    participant A
    participant B
     
    • 1
    • 2

    将编译为:

    AABB
    • 设置note, 
      • 左侧note: note left of acotor: message
      • 右侧note: note right of actor: message,
      • 覆盖note: note over actor:message
    note left of A: 左侧note
    note right of B: 右侧note
    note over C: 覆盖note
    note over A,B: 覆盖多个actor
    note over B,C: 测试下\n 换行
     
    • 1
    • 2
    • 3
    • 4
    • 5

    将编译为:

    AABBCC左侧note右侧note覆盖note覆盖多个actor测试下 换行
    • 设置会话, 
      • 实线实箭头: actor->actor: message
      • 虚线实箭头: actor–>actor:message
      • 实线虚箭头: actor->>actor:message
      • 虚线虚箭头: actor–>>actor:message
     A->A:自言自语
     A->B:实线实箭头
     A-->B:虚线实箭头
     A->>B:实线虚箭头
     A-->>B:虚线虚箭头
     
    • 1
    • 2
    • 3
    • 4
    • 5

    将编译为:

    AABB自言自语实线实箭头虚线实箭头实线虚箭头虚线虚箭头

    下面的案例演示了序列图语法的混合使用,参见代码: 
    序列图设置 
    在网页上解析之后结果为:

    作业通知提交序列图教师教师班长班长同学们同学们通知明天作业通知记得明天交作业了解交作业作业

    3. 流程图

    3.1 流程图示例

    CSDN Markdown基于flowchart.js实现流程图。一个简单的流程格式如下代码所示: 
    这里写图片描述 
    编译之后结果为:

    StartMy OperationYes or No?Endyesno

    注意:所有的流程图代码需要放在一个语法类型为flow的代码块中。如下面代码所示。 
    这里写图片描述

    3.2 流程图语法

    流程图绘制包括两部分:节点定义和节点连接。

    1. 节点定义

    格式如下:

    节点名称=>节点类型: 提示文本
     
    • 1
    • 节点名称可随意起,甚至支持中文。提示文本可以为英文,可以为中文,也可以为空使用默认值。例如:
        st=>start: start
    or
        kaishi=>start: 开始
    or
        起点=>start: 起点
    or
        start=>start
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 节点类型有start、operation、condition、end等,如下图所示。
    start=>start: 开始
    login=>operation: 登陆
    isLogin=>condition: 是否已登陆?
    test=>operation: 进行测试
    end=>end: 结束
     
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 节点连接

    格式如下

    一般节点连接:
        节点->节点
    条件判断节点连接:
        条件节点(yes)->正确应答节点
        条件节点(no)->错误应答节点
     
    • 1
    • 2
    • 3
    • 4
    • 5

    如下面代码所示:

    start->isLogin
    isLogin(yes)->test
    isLogin(no)->login->test
    test->end
     
    • 1
    • 2
    • 3
    • 4

    编译之后结果为

    开始是否已登陆?进行测试结束登陆yesno

    接下来做一个复杂的案例,如下图所示,请大家思考如何实现。

    开始是否已登录?选择一张图片格式是否正确?完成资料资料是否符合要求?完成登陆yesnoyesnoyesno

    列出源代码供大家参考。

    start=>start: 开始
    isLogin=>condition: 是否已登录?
    login=>operation: 登陆
    selectPic=>operation: 选择一张图片
    isPic=>condition: 格式是否正确?
    doIt=>operation: 完成资料
    isRight=>condition: 资料是否符合要求?
    end=>end: 完成
    
    start->isLogin
    isLogin(yes)->selectPic
    isLogin(no)->login->selectPic
    selectPic->isPic
    isPic(yes)->doIt->isRight
    isPic(no)->selectPic
    isRight(yes)->end
    isRight(no)->doIt
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4. Gravizo

    在研究Markdown UML图的时候,找到了不少在线绘制UML图的方式,例如DotPlantUMLUMLGraph等方式,并且发现了一个不用使用任何插件就可调用图片的方式-Gravizo

    例如,我们可以使用PlantUML的方式绘制一个用例图,代码如下。 
    用例图

    @startuml
    left to right direction
    skinparam packageStyle rect
    actor customer
    actor clerk
    rectangle checkout {
      customer -- (checkout)
      (checkout) .> (payment) : include
      (help) .> (checkout) : extends
      (checkout) -- clerk
    }
    @enduml
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    然后,我们就可以使用下面代码调用该图片:

    <img src='http://g.gravizo.com/g?
    @startuml
    left to right direction;
    skinparam packageStyle rect;
    actor customer;
    actor clerk;
    rectangle checkout {
      customer -- (checkout);
      (checkout) .> (payment) : include;
      (help) .> (checkout) : extends;
      (checkout) -- clerk;
    }
    @enduml
    '>
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    本文为《Markdown简明教程》系列教程的第4篇Markdown UML图,主要讲解Markdown序列图、流程图等, 顺便为介绍了无需任何插件的在线绘制UML的Gravizo。下一篇文章我们来研读CSDN Markdown的一些特性。


    mermaid简介

    这里写图片描述

    当撰写文档的时候,对于流程图的生成大多使用Visio等繁重的工具,没有一种轻便的工具能够画图从而简化文档的编写,就像markdown那样。

    mermaid解决这个痛点,这是一个类似markdown语法的脚本语言,通过JavaScript实现图表的生成。 
    先来看个例子:

    1.流程图(flowchart)

    graph LR;  
      A-->B;    
      A-->C;  
      B-->D;  
      C-->D;  
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    生成的图表如下所示:

    这里写图片描述 
    2. 时序图(sequence diagram)

    sequenceDiagram
       participant Alice
       participant Bob
       Alice->John:Hello John, how are you?
       loop Healthcheck
         John->John:Fight against hypochondria
       end
       Note right of John:Rational thoughts <br/>prevail...
       John-->Alice:Great!
       John->Bob: How about you?
       Bob-->John: Jolly good!
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    生成的图表如下所示:

    这里写图片描述

    3.甘特图(gantt diagram)

    gantt
       dateFormat YYYY-MM-DD
       title Adding GANTT diagram functionality to mermaid
       section A section
       Completed task  :done, des1, 2014-01-06,2014-01-08
       Active task     :active, des2, 2014-01-09, 3d
       future task     :     des3, after des2, 5d
       future task2    :     des4, after des3, 5d
       section Critical tasks
       Completed task in the critical line :crit, done, 2014-01-06,24h
       Implement parser and json      :crit, done, after des1, 2d
       Create tests for parser       :crit, active, 3d
       Future task in critical line     :crit, 5d
       Create tests for renderer      :2d
       Add to ,mermaid           :1d
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    生成的表如下:

    这里写图片描述


    下游项目

    Mermaid 是由Knut Sveidqbist发起旨在轻便化的文档撰写。所有开发者:开发者列表

    Graph

    graph LR
        A --> B
     
    • 1
    • 2
    • 1
    • 2

    这里写图片描述 
    这是申明一个由左到右,水平向右的图。\ 
    可能方向有: 
    - TB - top bottom 
    - BT - bottom top 
    - RL - right left 
    - LR - left right 
    - TD - same as TB


    节点与形状

    默认节点

    graph LR 
    id1

       
    注意:’id’显示在节点内部。

    文本节点

    这里写图片描述

    graph LR
    id[This is the text in the box];
     
    • 1
    • 2
    • 1
    • 2
    圆角节点

    这里写图片描述

    graph LR
    id(This is the text in the box);
     
    • 1
    • 2
    • 1
    • 2
    圆节点(The form of a circle)

    这里写图片描述

    graph LR
    id((This is the text in the circle));
     
    • 1
    • 2
    • 1
    • 2
    非对称节点(asymetric shape)

    这里写图片描述

    graph LR
    id>This is the text in the box]
     
    • 1
    • 2
    • 1
    • 2
    菱形节点(rhombus)

    这里写图片描述

    graph LR
    id{This is the text in the box}
     
    • 1
    • 2
    • 1
    • 2

    连接线

    节点间的连接线有多种形状,而且可以在连接线中加入标签:

    箭头形连接

    这里写图片描述

    graph LR;
      A-->B;
     
    • 1
    • 2
    • 1
    • 2
    开放行连接

    graph LR
    A --- B
     
    • 1
    • 2
    • 1
    • 2
    标签连接

    这里写图片描述

    graph LR
    A -- This is the label text --- B;
     
    • 1
    • 2
    • 1
    • 2
    箭头标签连接

    A–>|text|B\ 
    或者\ 
    A– text –>B

    这里写图片描述

    graph LR
     A-- text -->B
     
    • 1
    • 2
    • 1
    • 2
    虚线(dotted link,点连线)

    -.->

    这里写图片描述

    graph LR
    A-.->B
     
    • 1
    • 2
    • 1
    • 2

    -.-.

    这里写图片描述

    graph LR
    A-.-.B
     
    • 1
    • 2
    • 1
    • 2
    标签虚线

    -.text.->

    graph LR
    A-.text.->B
     
    • 1
    • 2
    • 1
    • 2

    这里写图片描述

    粗实线

    ==>

    graph LR
    A==>B
     
    • 1
    • 2
    • 1
    • 2

    这里写图片描述

    ===

    graph LR
    A===B
     
    • 1
    • 2
    • 1
    • 2

    这里写图片描述

    标签粗线

    =\=text\==>

    graph LR
    A==text==>B
     
    • 1
    • 2
    • 1
    • 2

    这里写图片描述

    =\=text\===

    graph LR
    A==text===B
     
    • 1
    • 2
    • 1
    • 2

    这里写图片描述


    特殊的语法

    使用引号可以抑制一些特殊的字符的使用,可以避免一些不必要的麻烦。

    graph LR\ 
    d1[“This is the (text) in the box”]

    graph LR
    d1["This is the (text) in the box"]
     
    • 1
    • 2
    • 1
    • 2

    这里写图片描述

    html字符的转义字符

    转义字符的使用语法: 
    流程图定义如下:

    graph LR\ 
    A[“A double quote:#quot;”] –> B[“A dec char:#9829;”]

    渲染后的图如下: 
    这里写图片描述

    graph LR
            A["A double quote:#quot;"]-->B["A dec char:#9829;"]
     
    • 1
    • 2
    • 1
    • 2

    子图(Subgraphs)

    subgraph title\ 
    graph definition\ 
    end

    示例:

    graph TB
            subgraph one
            a1 --> a2
            en
            subgraph two
            b2 --> b2
            end
            subgraph three
            c1 --> c2
            end
            c1 --> a2
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果:

    这里写图片描述

    基础fontawesome支持

    如果想加入来自frontawesome的图表字体,需要像frontawesome网站上那样引用的那样。\ 
    详情请点击:fontawdsome

    引用的语法为:++fa:#icon class name#++

    graph TD
          B["fa:fa-twitter for peace"]
          B-->C[fa:fa-ban forbidden]
          B-->D(fa:fa-spinner);
          B-->E(A fa:fa-camerra-retro perhaps?);
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    渲染图如下:

    graph TD
          B["fa:fa-twitter for peace"]
          B-->C[fa:fa-ban forbidden]
          B-->D(fa:fa-spinner);
          B-->E(A fa:fa-camera-retro perhaps?);
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    这里写图片描述

    以上reference: 
    1.mermaid docs


    第二部分—图表(graph)


    定义连接线的样式
    graph LR
         id1(Start)-->id2(Stop)
         style id1 fill:#f9f,stroke:#333,stroke-width:4px;
         style id2 fill:#ccf,stroke:#f66,stroke-width:2px,stroke-dasharray:5,5;
     
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    渲染结果:

    这里写图片描述

    graph LR
         id1(Start)-->id2(Stop)
         style id1 fill:#f9f,stroke:#333,stroke-width:4px;
         style id2 fill:#ccf,stroke:#f66,stroke-width:2px,stroke-dasharray:5,5;
     
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    备注:这些样式参考CSS样式。

    样式类

    为了方便样式的使用,可以定义类来使用样式 
    类的定义示例:

    classDef className fill:#f9f,stroke:#333,stroke-width:4px;
     
    • 1
    • 1

    对节点使用样式类:

    class nodeId className;
     
    • 1
    • 1

    同时对多个节点使用相同的样式类:

    class nodeId1,nodeId2 className;
     
    • 1
    • 1

    可以在CSS中提前定义样式类,应用在图表的定义中。

    graph LR
          A-->B[AAABBB];
          B-->D;
          class A cssClass;
     
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    默认样式类:\ 
    当没有指定样式的时候,默认采用。

    classDef default fill:#f9f,stroke:#333,stroke-width:4px;
     
    • 1
    • 1

    示例:

    graph LR
        classDef default fill:#f90,stroke:#555,stroke-width:4px;
        id1(Start)-->id2(Stop)
     
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    结果:

    graph LR
    classDef default fill:#f90,stroke:#555,stroke-width:4px;
    id1(Start)-->id2(Stop)
     
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    这里写图片描述

    序列图(sequence diagram)1

    序列图

    示例:

    sequenceDiagram
      Alice->>John: Hello John, how are you ?
      John-->>Alice: Great!
      Alice--->>John: Huang,you are better .
      John-->>Alice: yeah, Just not bad.
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5
    sequenceDiagram
      Alice->>John: Hello John, how are you ?
      John-->>Alice: Great!
      Alice->>John: Hung,you are better .
      John-->>Alice: yeah, Just not bad.
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    这里写图片描述 
    观察上面的图,如果想让John出现在前面,如何控制,mermaid通过设定参与者(participants)的顺序控制二者的顺序。上面的图可以做如下修改:

    sequenceDiagram\ 
      participant John
      participant Alice
      Alice->>John:Hello John,how are you?\ 
      John–>>Alice:Great!

    sequenceDiagram
      participant John
      participant Alice
      Alice-xJohn:Hello John,how are you?
      John-->>Alice:Great!
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    这里写图片描述 
    消息的语法: 
      实线或者虚线的使用: 
    [Actor][Arrow][Actor]:Message text\ 
    Arrow的六种样式:

    • ->
    • –>
    • ->>
    • –>>
    • -x
    • –x

    示例:

    sequenceDiagram
        Alice->John: Hello John, how are you ?
        John-->Alice:Great!
        Alice->>John: dont borther me !
        John-->>Alice:Great!
        Alice-xJohn: wait!
        John--xAlice: Ok!
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这里写图片描述

    便签

    给序列图增加便签:\ 
    具体规则:\ 
    [right of | left of | over][Actor]:Text
    示例:

    sequenceDiagram
      participant John
      Note left of John: Text in note
     
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    结果:

    这里写图片描述

    跨越两个Actor的便签:

    sequenceDiagram
      Alice->John:Hello John, how are you?
      Note over Alice,John:A typical interaction
     
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    sequenceDiagram
    Alice->>John:Hello John, how are you?
    Note over Alice,John:A typical interaction
     
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    这里写图片描述

    循环Loops

    在序列图中,也可以使用循环,具体规则如下:

    loop Loop text
    ... statements...
    end
     
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    示例:

    sequenceDiagram
      Alice->>John: Hello!
      loop Reply every minute
        John->>Alice:Great!
      end
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    渲染结果:

    这里写图片描述

    选择ALT

    在序列图中选择的表达。规则如下:

    alt Describing text
    ...statements...
    else
    ...statements...
    end
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    或者使用opt(推荐在没有else的情况下使用)

    opt Describing text
    ...statements...
    end
     
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    示例:

    sequenceDiagram
      Alice->>Bob: Hello Bob, how are you?
      alt is sick
        Bob->>Alice:not so good :(
      else is well
        Bob->>Alice:Feeling fresh like a daisy:)
      end
      opt Extra response
        Bob->>Alice:Thanks for asking
      end
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    渲染结果如下:

    这里写图片描述


    甘特图(gantt)2

    甘特图是一类条形图,由Karol Adamiechi在1896年提出, 而在1910年Henry Gantt也独立的提出了此种图形表示。通常用在对项目终端元素和总结元素的开始及完成时间进行的描述。

    示例:

    gantt
    dateFormat YYYY-MM-DD
    
    section S1
    T1: 2014-01-01, 9d
    
    section S2
    T2: 2014-01-11, 9d
    
    section S3
    T3: 2014-01-02, 9d
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    gantt
    dateFormat YYYY-MM-DD
    section S1
    T1: 2014-01-01, 9d
    section S2
    T2: 2014-01-11, 9d
    section S3
    T3: 2014-01-02, 9d
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里写图片描述

    先来看一个大的例子:

        gantt
        dateFormat  YYYY-MM-DD
        title Adding GANTT diagram functionality to mermaid
    
        section A section
        Completed task            :done,    des1, 2014-01-06,2014-01-08
        Active task               :active,  des2, 2014-01-09, 3d
        Future task               :         des3, after des2, 5d
        Future task2               :         des4, after des3, 5d
    
        section Critical tasks
        Completed task in the critical line :crit, done, 2014-01-06,24h
        Implement parser and jison          :crit, done, after des1, 2d
        Create tests for parser             :crit, active, 3d
        Future task in critical line        :crit, 5d
        Create tests for renderer           :2d
        Add to mermaid                      :1d
    
        section Documentation
        Describe gantt syntax               :active, a1, after des1, 3d
        Add gantt diagram to demo page      :after a1  , 20h
        Add another diagram to demo page    :doc1, after a1  , 48h
    
        section Last section
        Describe gantt syntax               :after doc1, 3d
        Add gantt diagram to demo page      : 20h
        Add another diagram to demo page    : 48h
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    获得的图渲染后如下: 
    这里写图片描述

    header 1 header 2
    title 标题
    dateFormat 日期格式
    section 模块
    Completed 已经完成
    Active 当前正在进行
    Future 后续待处理
    crit 关键阶段
    日期缺失 默认从上一项完成后

    关于日期的格式可以参考: 
    string-format 
    Time-Formatting

    Demo

    graph TB
        sq[Square shape] --> ci((Circle shape))
    
        subgraph A subgraph
            di{Diamond with  line break} -.-> ro(Rounded)
            di==>ro2(Rounded square shape)
        end
    
        e --> od3>Really long text with linebreak<br>in an Odd shape]
    
        cyr[Cyrillic]-->cyr2((Circle shape Начало));
    
        classDef green fill:#9f6,stroke:#333,stroke-width:2px;
        classDef orange fill:#f96,stroke:#333,stroke-width:4px;
        class sq,e green
        class di orange
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这里写图片描述

    reference

    mermaid docs


    展开全文
  • 如何绘制UML用例

    千次阅读 2013-01-24 09:53:20
    本节向大家介绍一下如何绘制UML用例,主要包括UML简介,用例建模,用例说明等内容,相信通过本节的介绍你对绘制UML用例的方法一定会有所了解。下面让我们一起来看一下UML用例是如何绘制的吧。 如何画UML用...

            本节向大家介绍一下如何绘制UML用例图,主要包括UML简介,用例建模,用例图说明等内容,相信通过本节的介绍你对绘制UML用例图的方法一定会有所了解。下面让我们一起来看一下UML用例图是如何绘制的吧。

    如何画UML用例图

    UML用例图是非常有用的一种图,在需求分析中,可以让人们从繁重的文档中解脱出来,并且促使人们在做需求时能够更加准确、直观的表现自己的意思。常用的语言文字往往是不能将一种事物表达得秀清晰,这时候就需要用其它的方式来进行表达,用例图就是其中一种很好的方法,当然用例图不仅仅只是做为需求分析专用,他强大的应用性还可以用于其它很多地方,这里就不详细说明了。画UML的工具有很多,个人首推IBM的ROSE,建议大家用这款工具来画例图,如果有时间,我会写一篇初级教程。接下来还是介绍一下用例图吧。

    1.首先简单介绍一下UML.

    UML(统一建模语言,UnifiedModelingLanguage)是一种定义良好、易于表达、功能强大且普遍适用的可视化建模语言。它融入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。在系统分析阶段,我们一般用UML来画很多图,主要包括用例图、状态图、类图、活动图、序列图、协作图、构建图、配置图等等,要画哪些图要根据具体情况而定。其实简单的理解,也是个人的理解,UML的作用就是用很多图从静态和动态方面来全面描述我们将要开发的系统。

    2.用例建模

    是UML建模的一部分,它也是UML里最基础的部分。用例建模的最主要功能就是用来表达系统的功能性需求或行为。

    用例建模可分为用例图和用例描述。用例图由参与者(Actor)、用例(UseCase)、系统边界、箭头组成,用画图的方法来完成。用例描述用来详细描述用例图中每个用例,用文本文档来完成。

    3.UML用例图的说明

    这里得说明一下参与者.参与者不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。因此参与者可以是人,可以是事物,也可以是时间或其他系统等等。还有一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。比如小明是图书馆的管理员,他参与图书馆管理系统的交互,这时他既可以作为管理员这个角色参与管理,也可以作为借书者向图书馆借书,在这里小明扮演了两个角色,是两个不同的参与者。参与者在画图中用简笔人物画来表示,人物下面附上参与者的名称。如下图

    接下来就是用例了,用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生传递特定参与者的价值的可观察结果。这是UML对用例的正式定义,初学者可能有点难懂。我们可以这样去理解,用例是参与者想要系统做的事情。对于对用例的命名,我们可以给用例取一个简单、描述性的名称,一般为带有动作性的词。用例在画图中用椭圆来表示,椭圆下面附上用例的名称。如下图

    系统边界是用来表示正在建模系统的边界。边界内表示系统的组成部分,边界外表示系统外部。系统边界在画图中方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。因为系统边界的作用有时候不是很明显。(在画图时可省略)
    箭头用来表示参与者和系统通过相互发送信号或消息进行交互的关联关系。箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例总是要由参与者来启动。

    4.接下来就是要说说UML用例图描述了,可以说好的用例描述直接决定工程的质量。用例图只是简单地用图描述了一下系统,但对于每个用例,我们还需要有详细的说明,这样就可以让别人对这个系统有一个更加详细的了解,这时我们就需要写用例描述。

    对于用例描述的内容,一般没有硬性规定的格式,但一些必须或者重要的内容还是必须要写进用例描述里面的。UML用例图描述一般包括:简要描述(说明)、前置(前提)条件、基本事件流、其他事件流、异常事件流、后置(事后)条件等等。下面说说各个部分的意思:

    简要描述:对用例的角色、目的的简要描述;
    前置条件:执行用例之前系统必须要处于的状态,或者要满足的条件;
    基本事件流:描述该用例的基本流程,指每个流程都“正常”运作时所发生的事情,没有任何备选流和异常流,而只有最有可能发生的事件流;
    其他事件流:表示这个行为或流程是可选的或备选的,并不是总要总要执行它们;
    异常事件流:表示发生了某些非正常的事情所要执行的流程;
    后置条件:用例一旦执行后系统所处的状态。

    展开全文
  • 这周周一,我们导师要求小组成员开会,我们分别汇报自己的工作,在会中,谈到了用例,于是我们开始对大家熟悉的用例进行探讨。经过探讨与自己的思考,我认为应该从以下几个问题来弄清楚用例的作用。 1、用例...
  • 用例绘制: 用例 ├── 登录 └── (Association)系统管理员 ——> └── (Association)图书馆工作人员 ——> └── (Association)教职员工 ——> └── (Association)学生 ——> └─...
  • UML笔记 UML统一建模语言介绍 UML图形的基本绘制   UML简介 UML(Unified Modeling Language的缩写)统一建模...UML图的分类: 静态模型创建并记录一个系统的静态特征反映一个软件系统基础、固定的框架结构...
  • 使用IDEA绘制UML类图及时序

    千次阅读 2020-07-14 10:25:16
    最近有一个项目对文档的要求很高,对每一个模块都需要出类图、时序、状态、活动。。。在网上找了很多资料,发现IDEA可以方便快捷的给出类图和时序,这样解决了很多问题。以下环境使用的是mac的idea和win的稍...
  • UML类图绘制详解

    2020-07-24 17:48:26
    泛化/继承 泛化(generalization)关系时指一个类(子类、子接口)继承另外一个类(称为父类、父接口)的功能,并可以增加它自己新功能的能力,继承是类与类或者接口与接口最常见的关系,在Java中通过关键字extends...
  • Markdown 绘制 UML -- PlantUML + Gravizo

    千次阅读 2019-10-16 22:26:39
    我们在工作中会经常使用UML图,实现UML的工具有很多,首先是绘图软件,但是所有的绘图软件有这样一个问题:这些软件绘制成的图片无法进行版本控制。也就是说如果后面你想修改软件的话,如果在软件里面的原图没有保存...
  • 使用PlantUML绘制UML

    2020-05-11 06:31:00
    官网: https://plantuml.com/zh/ 阿里云缓存pdf: ...状态 https://www.cnblogs.com/jingwhale/p/4230235.html https://baike.baidu.com/item/状...
  • UML时序图是众多UML图中的一种,用图形来表示某个系统中的时序关系。它通过描述对象之间发送消息的时间顺序来显示多个对象之间的交互关系。程序员设计模块的时候,常常会画UML时序图来描述模块中几个对象的交互,...
  • 借助graphviz+pyreverse,自动提取python代码的UML类图。 借助graphviz+pycallgraph,自动提取python代码的动态调用流程
  • UML类图与序列绘制步骤

    万次阅读 2018-05-22 16:24:09
    序列的顶部一般先放置的是取款这个用例涉及的参与者,然后放置系统完成取款用例所需的对象,每个箭头表示参与者和对象或对象之间为了完成特定功能而要传递的消息。 取款这个用例从客户把卡插入读卡机开始,然后...
  • Android Studio中绘制UML类图介绍

    千次阅读 2017-05-27 12:39:56
    动机 最近开始阅读项目源码,从其中...因此想着,能把大致的类图框架绘制出来,在此基础上学习,无论是帮助自己理清逻辑,还是对于讲来给他人讲解都大有帮助,那么,开始UML吧! UML介绍 统一建模语言(英语
  • 1.UML(统一建模语言),称为类图,其中类模板和对象的阐释可用其规范,如下的例子: 2.类图可通过cmd实现,最终在对应的文件夹生成 3.下载graphviz,官网的链接为 http://www.graphviz.org/ 安装成功需要将对应的...
  • UML作业第五次:分析系统,绘制状态 作业题目:分析电梯控制系统和银行账户系统,分别画出状态 一、要求及步骤 step1:学习PlantUML状态图绘制方法 step2:以《电梯控制》系统、《银行账户》系统为例,分析...
  • (4)项目建模语言之UML绘制时序

    千次阅读 2017-01-14 17:46:18
    时序中的简单介绍 1 创建一个时序 2时序的元素介绍 3 添加一个简单的Actor 4 删除一个对象消息 时序中图标使用 1 首先用户请求登录Action 2 Action重定向到登录页面 3 用户输入用户名密码 4 将用户名密码...
  • markdown工具链plantuml:像写代码一样绘制 UML 模型-时列图 概述 序列具有直观、形象的有点,对于理清、呈现对象之间的交互关系非常有帮助。在UML建模中,时序中包括的建模元素主要有:对象(Actor)、生命线...
  • 内容概要:本文主要介绍UML类图的概念,以及如何在Android Studio中利用代码来编写一个UML类图,偏于新手向。动机最近开始阅读项目源码,从其中一个模块开始看,奈何大项目中的一个模块,对于萌新而言,也太过于复杂...
  • uml

    2011-04-25 00:12:00
    类图,对象,角色: 一、UML中基本的范畴: <br />在 UML 2 中有二种基本的范畴:结构和行为。每个 UML 都属于这二个范畴。结构的目的是显示建模系统的静态结构。它们包括类,...
  • uml状态

    2011-11-21 10:38:02
    uml状态 1. 图书状态; 2. 图书借阅卡状态 3、图书馆业务模块中“还书”用例的状态。(例如还书业务的动态行为是由:空闲(idle)、图书查找(finding)、还书(reversion)、失败(Failure)、归还成功...
  • 类图怎么画第一步:在官网下载“亿图示”软件,或者也可以直接访问网页版亿图示,进入后点击开始作图。第二步:点击新建,在一级分类里找到软件/计算机类,然后在相应的二级分类下就可以找到UML类图...
  • UML

    2019-10-03 11:52:49
    某基于C/S的即时聊天系统登录模块功能描述如下: 用户通过登录界面(LoginForm)输入账号和密码,系统将输入的账号和密码与存储在数据库(User)表中的用户信息进行比较,验证用户输入是否正确,如果输入正确则进入主...
  • UML图

    2018-05-18 10:55:27
    2、用例图用例图表示系统对外提供的服务或功能,是开发人员用来跟用户沟通的主要UML图之一。3、序列图序列图用来表示系统内部一群对象之间互相传递信息的情况,配合用例来使用得话,可以针对每一个用例设计系统内部...
  • 需要绘制用例 活动 类图的看过来 很全的网上书店的各个模块的用例 活动 类图 使用rational rose 哦 在UML建模时 有必要!赶快来拿吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,196
精华内容 2,078
关键字:

绘制功能模块图uml