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




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

相关文章
|
机器学习/深度学习 自动驾驶 算法
深度学习在图像识别中的应用与发展
本文将深入探讨深度学习技术在图像识别领域的应用,通过案例分析展示其最新进展。我们将从基本原理出发,了解深度学习如何改变图像处理和识别的方式,并展望其未来可能的发展方向。
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
10月前
|
算法 测试技术
【深度优先搜索篇】带你暴力dfs去破解飞机降落和八皇后问题(轻松拿捏版)
【深度优先搜索篇】带你暴力dfs去破解飞机降落和八皇后问题(轻松拿捏版)
|
移动开发 人工智能 物联网
移动应用与系统:探索现代移动开发的趋势与挑战####
本文深入探讨了当前移动应用开发和移动操作系统的最新趋势、技术挑战及未来展望。通过分析Android、iOS等主流平台的演进,以及跨平台开发工具的兴起,揭示了开发者在构建高性能、安全且用户友好的移动应用时面临的机遇与挑战。文章还强调了人工智能、物联网集成及5G技术如何重塑移动生态系统,为读者提供了一个全面的行业视角。 ####
|
程序员
程序员的挑战与机遇:中国技术人才的现状
在中国,程序员作为技术行业的中坚力量,面临着一系列独特的挑战和机遇。这些挑战不仅影响着他们的职业发展,也关系到整个技术行业的进步。本文将探讨中国程序员面临的一些主要问题,并分析这些问题背后的原因,同时探讨可能的解决方案。
215 1
|
算法 Java 开发者
《黑神话:悟空》Xbox版的技术挑战与解决方案
【8月更文第26天】《黑神话:悟空》是一款备受期待的动作角色扮演游戏,以其精美的画面和丰富的中国神话故事背景而闻名。本篇文章将重点介绍游戏在Xbox平台上的技术挑战及其解决方案,特别是针对内存管理的问题。通过深入分析,我们将了解开发团队是如何克服这些挑战,确保游戏在Xbox上能够流畅运行的。
479 4
|
传感器 数据可视化 网络协议
DIY可视化整合MQTT生成UniApp源码
DIY可视化整合MQTT生成UniApp源码
240 0
|
机器学习/深度学习 人工智能 算法
人工智能伦理的十字路口:我们如何平衡创新与责任?
【8月更文挑战第20天】随着人工智能技术的飞速发展,其在各行各业的应用日益广泛。然而,伴随技术进步而来的是一系列伦理问题和道德挑战。本文将探讨人工智能伦理的核心议题,包括隐私权、自动化失业、算法偏见和机器人权利等,旨在引发读者对于在追求技术创新的同时,如何确保社会责任和伦理标准得到维护的深入思考。
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中的距离度量有哪些及公式表示?
聚类算法中常用的距离度量方法及其数学表达式,包括欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等多种距离和相似度计算方式。
1257 1
|
监控 数据库连接 PHP
利用Laravel-Admin从头撸一个CRM
本教程聚焦于使用Laravel 5.6+和Laravel-Admin构建CRM系统。你将学习CRM基础、模块及权限管理。核心模块包括联系人(潜在客户、机会、客户和关闭阶段)、任务、文档、邮件/消息、用户、角色&权限和日历。准备工作涉及创建新的Laravel项目,安装Laravel-Admin,配置数据库并运行安装命令。后续章节将介绍数据库设计和模型创建。