zoukankan      html  css  js  c++  java
  • 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")
  • 相关阅读:
    webpack优化
    原生js实现平滑滚动
    【大前端攻城狮之路】JavaScript函数式编程
    【大前端攻城狮之路】面试集锦
    【大前端攻城狮之路·二】Javascript&QA⼯程师
    【vue系列之三】从一个vue-pdf-shower,说说vue组件和npm包
    display:box和display:flex填坑之路
    【vue系列之一】使用vue-cli脚手架工具搭建vue-webpack项目
    快速上手微信小程序-快递100
    js面向对象小结(工厂模式,构造函数,原型方法,继承)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5193593.html
Copyright © 2011-2022 走看看