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")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值