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")