[emacs] Drawing uml under emacs org-mode using plantUML - 类图
[emacs] Drawing uml under emacs org-mode using plantUML - 类图
[emacs] Drawing uml under emacs org-mode using plantUML - 类图
Table of Contents
1 准备工作
1.1 org-mode学习入门的相关资料
1.2 搭建plantuml环境
- 安装plantuml, 参考
 - 下载相关lisp文件, ob-plantuml.el
 - 将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) - 将 
(require 'ob-plantuml)加入到init.el或是.emacs内 
1.3 先爽一下
当上述的工作都完成之后, 就可以happy的使用plantuml这个神奇的工具了. 需要编辑的代码如下:
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
在上述代码内部使用 <ctrl-c> <ctrl-c> 的快捷键就能够在下面获得相应的图像. 是不是很爽呀, ;)

2 PlantUML使用说明
2.1 PlantUML 简介
PlantUML 允许使用简单的直观的语言实现, 能够用来绘制:
- 序列图
 - 用例
 - 类图
 - 行为图
 - 结构图
 - 状态图
 - 对象图
 
2.2 类图
由于对于一个程序员而言, 类的设计相对于其他的绘图而言更为重要, 因此此处首先介绍了plantUML在类图绘制中的使用方法
2.2.1 类之间的关系
此处, 类之间的关系以及所使用的符号如下:
| 联合, association | <– | 
| 扩展, extension | <(竖线)– | 
| 组成, composition | *– | 
| 聚集, agregation | o– | 
将表格中的 -- 替换成 .. 就能够获得相应的点线, 其中一个短线"<-"表示横向, 两个短线"<–"表示竖向
对于上述的关系表示非常困惑, 不急, 慢慢看来, ;)
- Association 1 2 有两个类, A 和 B, 如果A够根据将消息发送给B, 或是B的实例能够影响A, 那么就称两者之间的关系为Association, 并且在一般情况下两者是相互的. 如下所示:
class class1 as "A"
class class2 as "B"
class1 --> class2
class B {...}
class A {
B* itsB;
} - extension3, 也被称为继承关系, 或is-a关系.
class food {
};
class apple : public food{
};上面的关系就可以理解为, apple是food
class class1 as "food"
class class2 as "apple" class2 --|> class1
 - 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
 
2.2.2 添加label
在关系的后面加个":", 而后添加相应的label, 在连接符两边用""可以添加对应类的label, 如
Class01 "1" *-- "many" Class02 : contains
Class03 o-- Class04 : agregation

2.2.3 添加方法
在类名后面添加":", 如:
Object <|-- ArrayList Object : equals(0
ArrayList : Object[] elementData
ArrayList : size()

另一种方法为:
class Dummy {
  String data
  void methods()
}

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

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

在注释中还可以使用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

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

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

2.2.7 packages
包的定义可以使用关键词"package"
package "Classic Collections" #DDDDDD {
  Object <|-- ArrayList
}
package net.sourceforge.plantuml #Snow {
  Object <|-- Demo1
  Demo1 *- Demo2
}

包之间的关系也可以通过类似的方式给出:
package foo1.foo2 {
}
package foo1.foo2.foo3 {
  class Object
}
foo1.foo2 +-- foo1.foo2.foo3

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

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

2.2.10 添加标题
使用"title"关键词
title Simple
Object <|- ArrayList

Footnotes:
Date: 2014-04-18 Fri
Author: Zhong Xiewei
Org version 7.8.11 with Emacs version 24
[emacs] Drawing uml under emacs org-mode using plantUML - 类图的更多相关文章
- UML系列02之  UML类图(一)
		
概要 本章介绍类图中类的UML表示方法.内容包括:类图介绍实体类的UML表示抽象类和接口的UML表示 转载请注明出处:http://www.cnblogs.com/skywang12345/p/352 ...
 - UML图学习之二 类图
		
类图(ClassDiagrams)是根据系统中的类以及各类之间的关系描述系统的静态视图.类图不仅显示系统内信息的结构,还描述系统内这些信息的行为.类图的一个重要目的是为其他图(如顺序图.交互图)定义一 ...
 - 设计模式学习(二):面向对象设计原则与UML类图
		
一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...
 - 创建.emacs.d目录和.emacs文件
		
1.双击bin下的addpm.exe 2.HKEY_CURRENT_USER->Software->GNU->Emacs 新建字符串值HOME,数值数据为emacs的安装路径 3.创 ...
 - Emacs学习阶段小结-Emacs常用快捷键总结
		
首先推荐一下Emacs自带的Emacs Tutorial,跟着这个做一边,两三个小时,基本的使用就能掌握了.之后的神教程就有很多了,比如<Sams.Teach.Yourself.Emacs.in ...
 - 我的Emacs折腾经验谈(二) Emacs上手难的原因
		
既然之前说过要写我怎么继续折腾Emacs的,过了一个星期这里就是第二篇了,突然觉得我把blog这样分节不是很好,每次可能要凑一些东西才有该有的篇幅,而且说的东西可能东一点西一点,这样一篇看下来不利于检 ...
 - CentO7-使用plantuml绘制UML类图
		
准备工作 到PlantUml官网(http://plantuml.com/download)下载plantuml.jar.官网上还有一个在线的demof服务.plantuml的官网真的很挫! 到官网下 ...
 - 练习UML类图中的类的表示
		
第一部分:UML类图(class diagram) 类图用来展现一组类.类的特性以及其类相互之间的关系,一个类图由一组类以及它们之间的关系构成,类图用来对系统的领域概念以及静态结构进行建模. 在软件模 ...
 - UML类图(下):关联、聚合、组合、依赖
		
前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...
 
随机推荐
- 练习1-12:编写一个程序,以每行一个单词的形式打印其输入(C程序设计语言 第2版)
			
#include <stdio.h> #define NOT_BLANK 1 #define BLANK 0 main() { int c; int last_ch = NOT_BLANK ...
 - 如何在Hdevelop加入自己的算子
			
halcon中允许用户编写自定义函数,同时也可以将此函数保存在其他工程中调用. 以halcon12讲解 创建自定义函数 本地程序函数:创建后仅能在当前工程使用 hdevelop函数文件 ...
 - poj 1099
			
http://poj.org/problem?id=1099 #include<stdio.h> #include<string.h> #include <iostrea ...
 - segmentControl实现控制器的切换
			
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
 - hadoop使用问题
			
前提 环境 ubuntu 安装hadoop 已经有一段时间 1.启动的时候提示 Connection reset by peer 这个查看日志,里面有说 ssh里面某个文件的权限太大 这个ssh里修改 ...
 - C# Entity Framework查询小技巧 NoTracking
			
在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据. 这样可以提高查询的性能. 代码如下: var context = ...
 - UWP?UWP! - Build 2015有些啥?(1)
			
UWP?UWP! - Build 2015有些啥? Build 2015圆满落幕了,不知大家有多少人刷夜看了直播呢?不管怎么说,想必各位都很好奇在这场微软开发者盛宴上,Microsoft又发布了什么令 ...
 - Wix 安装部署教程(十) --来,用WPF做个漂亮的安装界面
			
在上一篇中曾留下两个问题,.Net捆绑安装不触发以及路径选择的问题现在都已经解决,这段时间花的最多的地方还是WPF调样式上面,奈何WPF功力不够,暂时还是没有达到自己想要的效果.另外ViewModel ...
 - Nim教程【六】
			
目前看来这是国内第一个关于Nim的系列教程 先说废话 Rust1.0已经发布了, 国内有一个人为这个事情写了一篇非常长的博客, 这篇文章我前几天草草的看了一下,只记得这位朋友追Rust的艰辛,其他内容 ...
 - SQLSERVER取当前月第一天和最后一天
			
--本月第一天: select dateadd(dd,-day(getdate())+1,getdate()) --本月最后一天: SELECT dateadd(ms,-3,DATEADD(mm, ...