博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Clojure绘制UML
阅读量:6683 次
发布时间:2019-06-25

本文共 1811 字,大约阅读时间需要 6 分钟。

简单介绍

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

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5193593.html,如需转载请自行联系原作者

你可能感兴趣的文章
R语言基础3
查看>>
深度优先之货物搬运路径
查看>>
C# 基本术语概念
查看>>
Python爬虫学习笔记之点触验证码的识别
查看>>
苹果承认137名中国员工致残
查看>>
面向对象
查看>>
[1601]3n+1数链问题 sdutOJ
查看>>
jdbcTemplate 后台接口中的分页
查看>>
Excel 之查找与替换
查看>>
Mysql实现rownum
查看>>
python:使用OO和工厂模式解决问题
查看>>
C++学习-2
查看>>
SQL中查询数据表字段名称的查询语句
查看>>
关于masonry
查看>>
mysql单表导入数据,全量备份导入单表
查看>>
GAITC 2019全球人工智能技术大会(南京)
查看>>
使用gradle生成protobuf
查看>>
transition transform animate的使用
查看>>
WebService_HelloWorld
查看>>
【翻译】Ext JS最新技巧——2014-5-12
查看>>