[emacs] Drawing uml under emacs org-mode using plantUML - 类图

时间:2022-12-29 12:01:23

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

 

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

1 准备工作

 

1.2 搭建plantuml环境

  1. 安装plantuml, 参考
  2. 下载相关lisp文件, ob-plantuml.el
  3. 将plantuml的安装路径, 加入到 ob-plantuml.el 文件中
    # line 44
    (defcustom org-plantuml-jar-path "/your/install/path/plantuml.jar"
    "Path to the plantuml.jar file."
    :group 'org-babel
    :version "24.1"
    :type 'string)
  4. (require 'ob-plantuml) 加入到init.el或是.emacs内

1.3 先爽一下

当上述的工作都完成之后, 就可以happy的使用plantuml这个神奇的工具了. 需要编辑的代码如下:

Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

在上述代码内部使用 <ctrl-c> <ctrl-c> 的快捷键就能够在下面获得相应的图像. 是不是很爽呀, ;)

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

2 PlantUML使用说明

 

2.1 PlantUML 简介

PlantUML 允许使用简单的直观的语言实现, 能够用来绘制:

  1. 序列图
  2. 用例
  3. 类图
  4. 行为图
  5. 结构图
  6. 状态图
  7. 对象图

2.2 类图

由于对于一个程序员而言, 类的设计相对于其他的绘图而言更为重要, 因此此处首先介绍了plantUML在类图绘制中的使用方法

2.2.1 类之间的关系

此处, 类之间的关系以及所使用的符号如下:

 
联合, association <–
扩展, extension <(竖线)–
组成, composition *–
聚集, agregation o–

将表格中的 -- 替换成 .. 就能够获得相应的点线, 其中一个短线"<-"表示横向, 两个短线"<–"表示竖向

对于上述的关系表示非常困惑, 不急, 慢慢看来, ;)

  1. Association 12 有两个类, A 和 B, 如果A够根据将消息发送给B, 或是B的实例能够影响A, 那么就称两者之间的关系为Association, 并且在一般情况下两者是相互的. 如下所示:
    class class1 as "A"
    class class2 as "B"
    class1 --> class2

    [emacs] Drawing uml under emacs org-mode using plantUML - 类图

    class B {...}
    class A {
    B* itsB;
    }
  2. extension3, 也被称为继承关系, 或is-a关系.
    class food {
    };
    class apple : public food{
    };

    上面的关系就可以理解为, apple是food

    class class1 as "food"
    class class2 as "apple" class2 --|> class1

    [emacs] Drawing uml under emacs org-mode using plantUML - 类图

  3. composition and aggregation. 对于这两者的理解wikpedia中有一段很好的描述 4:

    一个大学里面有很多的学院, 每个学院又有很多的教授. 当这个大学倒闭关门的时候, 原来存在的学院也就随着大学的关门而不存在了, 但是这些教授却依然活着. 因此, 学校是由学院组成的, 即compostition, 学院是教授的集合地, aggregation

    class Professor;
    
    class Department
    {
    private:
    // Aggregation
    Professor* members[5];
    }; class University
    {
    private:
    std::vector<Department> faculty;
    create_dept() { // Composition
    faculty.push_back(Department());
    faculty.push_back(Department());
    }
    };
    class class1 as "University"
    class class2 as "Department"
    class class3 as "Professor" class3 -right--o class2
    class2 -right--* class1

    [emacs] Drawing uml under emacs org-mode using plantUML - 类图

2.2.2 添加label

在关系的后面加个":", 而后添加相应的label, 在连接符两边用""可以添加对应类的label, 如

Class01 "1" *-- "many" Class02 : contains
Class03 o-- Class04 : agregation

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

2.2.3 添加方法

在类名后面添加":", 如:

Object <|-- ArrayList

Object : equals(0
ArrayList : Object[] elementData
ArrayList : size()

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

另一种方法为:

class Dummy {
String data
void methods()
}

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

在类中添加不同的方法的时候, 往往需要给出相应的方法的属性, 如private, protected, public等:

 
- private
# protected
~ package private
+ public

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

2.2.4 注释以及定型

对图中的类进行注释, 采用"..", 定型(即, 给类一个特定的分类), 采用""和" ".

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

在注释中还可以使用html标签对注释的内容的格式进行美化.

  • <b> 加粗
  • <u> 加下划线
  • <i> 斜体
  • <s>, <del>, <strike> 删除线
  • <font color="#AAAAAA"> or <font color="colorname"> 字体颜色
  • <color:#AAAAAA> or <color:colorName> 字体颜色
  • <size: nn> 字体大小
  • <img src="file"> or <img:file> 添加图片
note top of Object
In java, every <u>class</u>
<b>extends</b>
<i>this</i> one
end note note as N1
This <size:10>note</size> is <u>also</u>
<b><color:royalBlue>on several</color></b>
<s>words</s> lines
end note

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

2.2.5 抽象类以及接口

抽象类使用"abstract"或"abstract class"关键字, 接口用"interface"关键字, 枚举用"enum"关键字

abstract class AbstractList
abstract AbstractConllection
interface List
interface Collection List <|-- AbstractList
Collection <|-- AbstractConllection Collection <|- List
AbstractConllection <|- AbstractList
AbstractList <|- ArrayList ArrayList : Object[] elementData
ArrayList : size() enum TimeUnit
TimeUnit : DAYS
TimeUnit : HOURS
TimeUnit : MINUTES

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

2.2.6 方法属性的隐藏

可以使用 "hide/show" 命令实现对方法以及属性的隐藏, 常用的命令如下:

  • hide empty members
  • hide empty fields or hide empty attributes
  • hide fields or hide attributes
  • hide methods
  • hide members
  • hide circle 隐藏类名前面圆形的字符
  • hide stereotype 通过""和" "增加的标识
  • hide class
  • hide interface
  • hide enum
  • hide foo1 隐藏所有foo1标识的类
  • hide classname
class Dummy1 {
+myMethods()
} class Dummy2 {
+hiddenMethod()
} class Dummy3 <<tag>> {
string name
} hide members
hide <<tag>> circle
show Dummy1 method
show <<tag>> members

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

2.2.7 packages

包的定义可以使用关键词"package"

package "Classic Collections" #DDDDDD {
Object <|-- ArrayList
} package net.sourceforge.plantuml #Snow {
Object <|-- Demo1
Demo1 *- Demo2
}

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

包之间的关系也可以通过类似的方式给出:

package foo1.foo2 {
} package foo1.foo2.foo3 {
class Object
} foo1.foo2 +-- foo1.foo2.foo3

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

2.2.8 命名空间

引用当前默认命名空间中的类时, 只要在类名前增加一个"."即可.

class BaseClass

namespace net.dummy #DDDDDD {
.BaseClass <|-- Person
Meeting o-- Person .BaseClass <|- Meeting
} namespace net.foo {
net.dummy.Person <|- Person
.BaseClass <|-- Person net.dummy.Meeting o-- Person
} BaseClass <|-- net.unused.Person

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

2.2.9 箭头方向的控制

  <- or -left-> 向左
-> or -right-> 向右
<-- or -up-> 向上
--> or -down-> 向下
foo1 -left-> dummyLeft
foo1 -right-> dummyRight
foo1 -up-> dummyUp
foo1 -down-> dummyDown foo2 -> right
left <- foo2
up <-- foo2
foo2 --> down

[emacs] Drawing uml under emacs org-mode using plantUML - 类图

Date: 2014-04-18 Fri

Author: Zhong Xiewei

Org version 7.8.11 with Emacs version 24

Validate XHTML 1.0

[emacs] Drawing uml under emacs org-mode using plantUML - 类图的更多相关文章

  1. UML系列02之 UML类图&lpar;一&rpar;

    概要 本章介绍类图中类的UML表示方法.内容包括:类图介绍实体类的UML表示抽象类和接口的UML表示 转载请注明出处:http://www.cnblogs.com/skywang12345/p/352 ...

  2. UML图学习之二 类图

    类图(ClassDiagrams)是根据系统中的类以及各类之间的关系描述系统的静态视图.类图不仅显示系统内信息的结构,还描述系统内这些信息的行为.类图的一个重要目的是为其他图(如顺序图.交互图)定义一 ...

  3. 设计模式学习(二):面向对象设计原则与UML类图

    一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...

  4. 创建&period;emacs&period;d目录和&period;emacs文件

    1.双击bin下的addpm.exe 2.HKEY_CURRENT_USER->Software->GNU->Emacs 新建字符串值HOME,数值数据为emacs的安装路径 3.创 ...

  5. Emacs学习阶段小结-Emacs常用快捷键总结

    首先推荐一下Emacs自带的Emacs Tutorial,跟着这个做一边,两三个小时,基本的使用就能掌握了.之后的神教程就有很多了,比如<Sams.Teach.Yourself.Emacs.in ...

  6. 我的Emacs折腾经验谈&lpar;二&rpar; Emacs上手难的原因

    既然之前说过要写我怎么继续折腾Emacs的,过了一个星期这里就是第二篇了,突然觉得我把blog这样分节不是很好,每次可能要凑一些东西才有该有的篇幅,而且说的东西可能东一点西一点,这样一篇看下来不利于检 ...

  7. CentO7-使用plantuml绘制UML类图

    准备工作 到PlantUml官网(http://plantuml.com/download)下载plantuml.jar.官网上还有一个在线的demof服务.plantuml的官网真的很挫! 到官网下 ...

  8. 练习UML类图中的类的表示

    第一部分:UML类图(class diagram) 类图用来展现一组类.类的特性以及其类相互之间的关系,一个类图由一组类以及它们之间的关系构成,类图用来对系统的领域概念以及静态结构进行建模. 在软件模 ...

  9. UML类图(下):关联、聚合、组合、依赖

    前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...

随机推荐

  1. doctype声明的重要性-------这绝对是ie的坑&comma; 与angular无关&comma; 我错怪你啦

    今天开发一个页面,  自己写页面, 自己实现功能. 因为以往需求都没有要求兼容ie9, 所以并未发现此坑. 今天就记录下来. 贴图对比 ie9 chrome 如图, ie9界面显示错误. 起初以为是a ...

  2. &lbrack;Liferay6&period;2&rsqb;启动Tomcat提示APR不能在java类库路径中被找到的解决办法

    问题描述 启动liferay之后,在控制台中打印出会打印出以下信息: 信息: The APR based Apache Tomcat Native library which allows optim ...

  3. Android --账户注销

    参考博客:android如何实现注销功能 Intent logoutIntent=new Intent(SettingActivity.this,LoginActivity.class); //在执行 ...

  4. win7引导项顺序

    转载:http://jingyan.baidu.com/article/72ee561aa1d123e16138df81.html 问题描述: 个人在宿舍使用的比较多的是Window 7,而它的启动项 ...

  5. Oracle to&lowbar;char格式化函数

    转:http://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日 ...

  6. &period;Net设计模式&lowbar;建造者模式

    引言: 建造者的特点是过程,需要建造对象的过程是一样的,如:软件项目,过程都是,POC.投标.立项.软件过程.收款,那么标准的软件项目都是这个过程,只是不同的项目在做这个过程的内容不一样.所以需要有一 ...

  7. 业务开发(八)—— Maven

    0x01.maven install成功后,项目旁边依然有个红叉 maven--update--选中下方Force Update of Snapsshots/Releases 0x02.An inte ...

  8. &lpar;计算几何 线段判交&rpar; 51nod1264 线段相交

    1264 线段相交 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No".   ...

  9. elasticsearch 安装、配置

    elasticsearch:基于java开发,基于RESTful web 接口,提供分布式多用户能力的全文搜索引擎. elasticsearch 安装: 1. java SE Development ...

  10. GoLand tool tips

    goland format code (on save ) preference -> tool -> file watcher  then ,select go fmt 2, highl ...