Clojure绘制UML
简单介绍
使用Clojure封装了Graphviz的使用。眼下主要实现了UML的绘制
使用
以命令模式的UML为例,演示cdraw的使用

安装Graphviz
cdraw是对Graphviz的简单封装。请先安装Graphviz
加入依赖
- 使用leiningen新建一个Clojure项目uml
- 在project.clj中加入例如以下依赖
[com.ivaneye/cdraw "0.2.0"]
定义类
- 在uml.core中编写例如以下代码
(ns uml.core
(:require [cdraw.uml :refer :all]))
(defclass Client)
(defclass Inboker)
(defclass Receiver {:m ["Action()"]})
(defclass Command {:m ["Execute()"]})
(defclass ConcreteCommand {:f ["state"] :m ["Execute()"]})
- 第一,二行。引入了cdraw
- defclass定义了类,及其字段(:f)和方法(:m),效果图例如以下:

加入依赖
- 继续在uml.core中加入依赖代码
(defrelation Client :u Receiver)
(defrelation ConcreteCommand :u Receiver {:t "reveiver"})
(defrelation Client :d ConcreteCommand)
(defrelation ConcreteCommand :e Command)
(defrelation Invoker :p Command)
- Client关联Receiver
- ConcreteCommand关联Receiver
- Client依赖ConcreteCommand
- ConcreteCommand继承Command
- Invoker聚合Command
关联 :u
依赖 :d
聚合 :p
组合 :c
继承 :e
实现 :i

加入label
- 在uml.core中加入例如以下代码
(label ConcreteCommand "receive-\\>Action()")
- >须要转义

定义子包
(defsub "Sub Command" Command ConcreteCommand)
- 第一个參数为子包名称
- 兴许为须要包括到子包中的类

生成
- 在uml.core中加入例如以下代码
(watch (to-file "/t.dot") "/t.png")
- to-file生成符合Graphviz的dot文件
- watch生成须要的终于文件,这里是生成了png图片
终于代码
(ns uml.core
(:require [cdraw.uml :refer :all]))
(defclass Client)
(defclass Invoker)
(defclass Receiver {:m ["Action()"]})
(defclass Command {:m ["Execute()"]})
(defclass ConcreteCommand {:f ["state"] :m ["Execute()"]})
(defrelation Client :u Receiver)
(defrelation ConcreteCommand :u Receiver {:t "reveiver"})
(defrelation Client :d ConcreteCommand)
(defrelation ConcreteCommand :e Command)
(defrelation Invoker :p Command)
(label ConcreteCommand "receive-\\>Action()")
(defsub "Sub Command" Command ConcreteCommand)
(watch (to-file "/t.dot") "/t.png")
Clojure绘制UML的更多相关文章
- [Tool] 使用Astah绘制UML图形
[Tool] 使用Astah绘制UML图形 前言 在软件开发的过程中,开发人员可以绘制UML图形来将分析设计内容转化为图形化文件,方便在团队之间传递分析设计结果.但在团队经费有限的情景中,可能没办法为 ...
- 如何绘制UML图?
首先推荐在线绘制UML的网址:https://www.processon.com/,很好用. 在软件开发过程中,开发人员往往需要通过绘制类图来理清业务的实现思路,从而方便代码实现,也便于后期的代码维护 ...
- Markdown 绘制 UML 图 -- PlantUML + Gravizo(转)
原文地址:Markdown 绘制 UML 图 -- PlantUML + Gravizo
- 在VSCode使用Markdown绘制UML图
在VSCode使用Markdown绘制UML图 需要插件 Markdown All in One Markdown Preview Enhanced PlantUML markdownlint Mar ...
- 10分钟学会使用Markdown绘制UML时序图
1.1 什么是Markdown? Markdown是一种语法特别少.特别简单的标记语言,用来编写文档.用Markdown编写的文档是纯文本格式,经过编辑器的渲染,就会形成排 版优美的文档,本文就是用M ...
- 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...
- 1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...
- CentO7-使用plantuml绘制UML类图
准备工作 到PlantUml官网(http://plantuml.com/download)下载plantuml.jar.官网上还有一个在线的demof服务.plantuml的官网真的很挫! 到官网下 ...
- 用Processon在线绘制UML的尝试
地址https://www.processon.com/ ProcessOn是一个面向垂直专业领域的作图工具和社交网络,成立于2011年6月并于2012年启动.ProcessOn将全球的专家顾问.咨询 ...
随机推荐
- leetcode Roman to Integer python
class Solution(object): def romanToInt(self, s): """ :type s: str :rtype: int "& ...
- SimpleXML 使用详细例子
要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制, 对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构造为一棵DOM 树,通过对DOM 树 ...
- perl正则表达式第三周笔记
正则引擎的分类 正则引擎的分类 正则引擎的分类主要分两种: DFA:egrep.awk.lex.flex NFA:.NET.PHP.Perl.Ruby.Python.GNU Emacs.ed.sec. ...
- JQ兼容性问题
checkbox操作 1:设置为选中状态 $(this).prop("checked", true); 2:判断是否选中 $(this).is(":check ...
- C# 中使用Newtonsoft.Json 处理JSON数据 绝对能用
当你搜到这篇文章是幸运的,因为之前我遇到这个问题 主要是 Newtonsoft.Json 版本不一 且网上各种文章 都是复制的 并不说明版本的问题 这里我就不说什么版本的问题了,总之必须使用我这个DL ...
- C#学习日志 day 3 ------ 基本语句示例
写c#首先需要知道的就是数据类型,这里是所有c#中的所有数据类型以及说明.
- 蓝桥杯之FBI树问题
问题描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- LCM Cardinality
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=31675#problem/E 暴力 // File Name: uva10892.cpp ...
- apache kafka系列之性能优化架构分析
apache kafka中国社区QQ群:162272557 Apache kafka性能优化架构分析 应用程序优化:数据压缩 watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...
- Cookie管理
1,判断来访者是否第一次 public class VistorTest extends HttpServlet { @Override protected void doGet(HttpServle ...