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")
  • 相关阅读:
    紫书 例题8-6 UVa 1606(扫描法)
    紫书 例题8-5 UVa11054(等价转换)
    紫书 例题8-4 UVa 11134(问题分解 + 贪心)
    紫书 例题8-3 UVa 1152(中途相遇法)
    紫书 例题8-2 UVa 11605(构造法)
    Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0
    2016ACM/ICPC亚洲区沈阳站
    Tenka1 Programmer Contest D
    [Gym-101512C] 凸包+最远点对
    ZOJ
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5193593.html
Copyright © 2011-2022 走看看