UML语言生成的流程图、活动图等图形对我们软件设计、逻辑分析、程序拆解等设计思路有不可忽视的重要性。
在网络上很少看到对UML程序语言、语法的讲解。
本文将简要解析程序"语法"的使用与规则及其一些可能的报错现象进行规避。
目录
1、UML程序的开始与结束
@startuml | 程序起始点 |
@enduml | 程序结束点 |
程序开始用@startuml定义开始
程序写完后用@enduml定义结束
中间是程序内容,首行和末行不需要加任何其他。
(@startuml与@enduml)是不会在生成的图形里面显示出来的!
代码演示:
@startuml
:程序中间内容;
@enduml
2、节点块(个人对该模块的称呼)
释义:模块内的文字,包含这个"方块"称之为 "节点块"
以":"开始,以";"结尾,中间的内容构成了一个"节点块"
代码演示:
@startuml
:两只老虎,两只老虎;
note right :这个方块就是一个节点块
:跑的快,跑的快。;
note right :这个方块又是一个节点块
@enduml
3、抬头|标题
title 标题文字 | 前面是标题关键字语句 后面空格后加标题文字 |
title 这个位置就是标题
title 后面有一个空格 空格后面放标题文字 (不需要跟";"分号)
警告:请不要将title写成tittle(一部分人会写错,并且报错也找不到原因。)
title意思标题 | tittle是一点或者说 一点点 一丢丢 ,很微小的意思,完全不是一个东西!
-------------------------------细致是成功的第一步!
代码演示:
@startuml
title 这是一个标题
:程序中间内容;
@enduml
4、路径解析与多路径分离(重点)
fork | 第一条路径起始位 |
-> xxxxx; | ->空格后面跟第一条路径线侧面的文字";"结束 |
:xxxxxxx; | 第一条路径的第一个节点块 |
fork again | 第二条路径起始位 |
-> xxxxx; | ->空格后面跟第二条路径线侧面的文字";"结束 |
:xxxxxxx; | 第二条路径的第一个节点块 |
fork again .............. | 第三条.....第四条.....第五条,可多路径 |
fork end | 路径结束 |
代码演示:
@startuml
title :这是一个标题
:标题下面可以跟一个内容,也可以不加;
:开始;
fork
-> 这是一条路径;
:这是第一条路径的第一个节点块;
fork again
-> 这是第二条路径;
:这是第二条路径的第一个节点块;
fork end
@enduml
(能看得出来 "->"这个符号实际上是在某一条路径下的箭头边上的文字,而不是在节点块内)
实际上可以继续在后面跟"fork again"
如果大家嫌麻烦,可以直接复制我的代码块,然后修改一下即可。
下次继续完成更新---update_DateTime_2025/06/06
5、判断语句详解
if () then () | 如果(括号内条件是否成立?) then (成立) |
else () | 否则 (不成立) |
endif | 判断语句正式结束(如果不加结束语句,可能会有其他未知问题,推荐使用符合语法要求的endif) |
代码演示:
@startuml
title 这个标题看着就很不错
:开始;
fork
-> 第一个节点;
:节点内加点东西;
:免得看着空空的;
fork again
-> 第二个节点;
if (今天任务完成了吗?) then (完成了)
:奖励一下自己吧;
:吃个冰淇淋;
else (未完成)
:没完成更要奖励一下自己;
:吃个大西瓜;
endif
fork end
@enduml
随着学习的深入,
我会尽可能的将前面的知识呢,给融入到现有的场景内。
这样更容易融会贯通。
6、UML程序有关模块外注释讲解
程序代码:
note left :注释的内容; #首先这是对该位置上方的模块进行注释,其次这是从left方向进行注释!
note right:注释内容; #这也是对该段代码上方的模块进行注释,其次这是从right方向进行的注释!
代码演示:
@startuml
title 这是一个标题
:程序中间内容;
note left:这是从左边开始注释
:第二段内容;
note right:这是从右边注释
@enduml
7、隔离模块(区分内容性质)
作用:便于观察,层次与结构分明。
程序代码:
partition 模块名{
:隔离模块内的内容;
:这里面可以包含任意的内容;
}
代码演示:
@startuml
skinparam backgroundColor #EEEBDC
skinparam ArrowColor #3366CC
skinparam ActivityBorderColor #333333
skinparam ActivityBackgroundColor #CCCCFF
skinparam NoteBackgroundColor #FFFFCC
title 这是一个标题
:程序中间内容;
note left:这是从左边开始注释
:第二段内容;
note right:这是从右边注释
:开始;
fork
:这是第一路径的内容;
partition 检修模式{
:隔离模块内的内容;
:大概写个判断;
if (这就是大佬嘛?) then (是的)
:斯锅以,原来这就是大佬;
:大佬就是强的离谱;
else(不是)
:嘻嘻,这其实是菜鸡;
endif
}
:结束;
fork again
:这是并行第二个路径的内容;
partition 自动模式{
:巴拉巴拉;
:小魔仙;
:大概写一下内容了;
if (这个是自动模式吗?) then (是的)
:这就是自动模式;
else (不是)
:这不是自动模式;
:结束;
end
endif
}
fork again
:这是并行第三个路径;
partition 手动模式{
:这里面内容少一点;
note right :不是不想写,页面快满了
:页面放不下了;
}
@enduml
8、★★★重点关注★★★
其实今天我本身想要直接讲解repeat 和repeat while这个函数
但是考虑到现在函数的类型越来越多,类型与类型之间混合使用更加混淆难辨!
而其实作为初学者包括我,并不能很好的梳理uml程序(因过多的语法产生严重的混乱行为)
实际上梳理出自己逻辑,然后(排兵布阵)才能更好的理解自己的函数的结构和框架内的具体内容。
这是基本功,也是为了写好UML而打牢的基础要素!
我知道您很急,想要咔咔咔把自己想要表达的内容赶紧写出来,但是您请先别急!先将代码结构梳理清楚,再将想要表达的内容填充进去,是否更加简洁,清楚,明了呢?
下面我来用本人自己的代码结构为大家梳理 如何多函数多角度更容易地去写好UML程序。
下面是我写的代码结构和梳理的头脑风暴。
@startuml
skinparam backgroundColor #EEFFFC
skinparam ArrowColor #3366CC
skinparam ActivityBorderColor #333333
skinparam ActivityBackgroundColor #CCCCFF
skinparam NoteBackgroudColor #FFFFCC
:上面是对颜色的定义(主打一个炫);
title 如何让↓(箭头)从底下上去?
start
:↓都是从上朝下?如何让↑从下朝上?;
note left : 今天学习的内容就是如此;
note right : 内容会有点儿复杂;
:说人话就是让流程返回想要返回的节点;
:自此可以产生循环;
:该块内容是讲解程序头内容;
:有多少种可能就写多少个fork,多一个不写,少一个不行。;
:fork的最后 完成时的时候 一定要用一个 fork end 更加合情合理(可能);
fork
:第一路径内容;
partition 第一条路径待命名{
:梳理思想;
:调整结构;
}
fork again
:第二路径内容;
partition 第二条待命名{
:梳理思想;
:调整结构;
}
fork again
:第三路径内容;
partition 第三条待命名{
:梳理思想;
:调整结构;
}
fork again
:第四路径内容;
partition 第四条待命名{
:梳理思想;
:调整结构;
}
fork end
@enduml
总结:先思考自己需要用到什么样UML语句,再将UML代码结构先写好。最后再向代码内填充你想要填充的内容。 PS-也许这也是我在写嵌入式,写java,写Python等等的时候养成的良好的习惯吧!
本次更新日期---update_DateTime_2025/06/17