Clojure绘制UML

Posted 正经地扯淡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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),效果图如下:

Clojure绘制UML

添加依赖

  • 继续在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

Clojure绘制UML

添加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的主要内容,如果未能解决你的问题,请参考以下文章

LaTeX绘制UML类图备忘

一键将项目代码绘制成 UML 类图

利用IDEA一键把整个项目代码绘制成UML类图!

IDEA这个功能真强大!一键把整个项目代码绘制成UML类图...

如何绘制UML图?

IDEA中一个被低估的功能,一键把项目代码绘制成UML类图