Clojure绘制UML
2016-02-16 18:39
232 查看
简单介绍
使用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")
相关文章推荐
- Codeforces Round #114 (Div. 1) C. Wizards and Numbers 博弈论
- HDU 4965 Fast Matrix Calculation(矩阵高速幂)
- mac下完整删除mysql
- hdu2089(数位dp)
- struts2的jsp读取action参数
- ASP.NET页面之间传递值的几种方式
- 秒秒钟看懂MyBatis
- U盘、系统备份
- Andriod5.0以上APP打开白屏(无响应)
- Ionic基础——ion-tap选项卡及路由结合ion-tap详解
- 列举你能想到的UNIX信号,并说明信号用途
- hive函数总结-字符串函数
- Y - Design T-Shirt(第二季水)
- Android更好的扩展性更强网络请求框架----okhttp
- 混合式开发接口文档
- [LintCode]Insertion Sort List
- android 通过包名杀死进程
- 215. Kth Largest Element in an Array LeetCode
- 【React Native开发】React Native控件之WebView组件详解以及实例使用(22)
- Codeforces Round #127 (Div. 1) C. Fragile Bridges dp