Clojure繪製UML

簡單介紹

使用Clojure封裝了Graphviz的使用。眼下主要實現了UML的繪製ruby

使用

以命令模式的UML爲例,演示cdraw的使用markdown

安裝Graphviz

cdraw是對Graphviz的簡單封裝。請先安裝Graphvizui

加入依賴

  • 使用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")
相關文章
相關標籤/搜索