21分钟入门UML

作者: MountainKing | 来源:发表于2015-11-24 13:22 被阅读16145次

架构师进阶必备技能

定义

UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。

模型

  1. 功能模型:从用户的角度展示系统的功能,包括用例图。
  2. 对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图、对象图。
  3. 动态模型:展现系统的内部行为。包括序列图,活动图,状态图。

教程

实现UML的工具有很多,首先排除所有绘图软件,因为这些软件绘制成的图片无法用GIT来进行版本控制,也很难集成在markdown里。我选择PlantUML(类似于HTML的标记性语言)来实现UML,采用gravizo来渲染PlantUML,可集成在markdown。

比如:

![Alt text](http://g.gravizo.com/g?
    a -> b: hello;
    b -> a: hi;
)

将上面的代码复制到md文件,就可以生成下面这张图片。

![Alt text](http://g.gravizo.com/g?
a -> b: hello;
b -> a: hi;
)

  1. 时序图
    通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
    ->表示消息传递,-->表示异步消息传递,note [left | right]对消息进行说明。
a --> b: how are you;
note right: greeting;
a -> a: i am thinking;
b -> a: fine;

![Alt text](http://g.gravizo.com/g?
a --> b: how are you;
note right: greeting;
a -> a: talk to myself;
b -> a: fine;
)

  1. 用例图
    参与者与用例的交互。下图是饭店的用例图。
left to right direction;
skinparam packageStyle rect;
actor customer;
actor chef;
rectangle restaurant{
customer -> (eat food);
customer -> (pay for food);
chef -> (cook food);
}

![Alt text](http://g.gravizo.com/g?
left to right direction;
skinparam packageStyle rect;
actor customer;
actor chef;
rectangle restaurant{
customer -> (eat food);
customer -> (pay for food);
chef -> (cook food);
}
)

  1. 活动图
    我一直是把活动图当流程图来用,描述程序的处理过程。下图描述的是一个经典的程序员笑话。
(*) --> "buy 10 apples";
if "is there watermelon " then;
-->[true] "buy a apple";
-right-> (*);
else;
->[false] "Something else";
-->(*);
endif;

![Alt text](http://g.gravizo.com/g?
() --> "buy 10 apples";
if "is there watermelon " then;
-->[true] "buy a apple";
-right-> (
);
else;
->[false] "Something else";
-->(*);
endif;
)

  1. 组件图
    表示组件是如何互相组织以构建更大的组件或是软件系统。下图是Web项目的组件图。
HTTP - [web server];
[web server] - [app server];
database "mysql" {;
[database];
};
[app server] - [database];

![Alt text](http://g.gravizo.com/g?
HTTP - [web server];
[web server] - [app server];
database "mysql" {;
[database];
};
[app server] - [database];
)

  1. 状态图
    描述一个对象在其生存期间的动态行为。下图是线程的状态图。
[*] -> ready : start;
ready -> running : get cpu;
running -> ready : lost cpu;
running -down-> block : io, sleep, locked;
block -up-> ready : io return, sleep over, get lock;
running -> [*] : complete;

![Alt text](http://g.gravizo.com/g?
[] -> ready : start;
ready -> running : get cpu;
running -> ready : lost cpu;
running -down-> block : io, sleep, locked;
block -up-> ready : io return, sleep over, get lock;
running -> [
] : complete;
)

  1. 类图
    用来描述类与类之间的关系。

  2. 访问权限控制

```
class Dummy {
- private field1
# protected field2
~ package method1()
+ public method2()
}
```

![Alt text](http:https://img.haomeiwen.com/i637398/50e8c74f441b145f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. 类与类之间的关系

  2. 继承

  ```
  Father <|-- Son
  ```
  ![Alt text](https://img.haomeiwen.com/i637398/1b39c44083fb427d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1. 实现
  ```
  abstract class AbstractList
  interface List
  List <|.. AbstractList
  ```
  ![Alt text](http:https://img.haomeiwen.com/i637398/e1cab0e4f0303ff8?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 1. 依赖
   一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,表现在代码层面,为类B作为参数被类A在某个method中使用,例如人和烟草的关系。
   ```
   Human ..> Cigarette
   ```
   ![Alt text](https://img.haomeiwen.com/i637398/b23a192499e6eafa?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 1. 关联
   强依赖关系,表现在代码层面,为被关联类B以类属性的形式出现在关联类A中。
   ```
   class Water
   class Human
   Human --> Water
   ```
   ![Alt text](http:https://img.haomeiwen.com/i637398/f3258bc89d5de6f0?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 1. 聚合
   关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期。
   ```
   Company o-- Human
   ```
   ![Alt text](https://img.haomeiwen.com/i637398/00b9d2ab5efb86bf?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
1. 组合
    关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。
```
Human *-- Brain
```
![Alt text](https://img.haomeiwen.com/i637398/4a767ca51f40b8e1?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

相关文章

  • 学习UML笔记

    设计模式从入门到放弃系列 01 -- UML 基础 StarUML UML 主要类别 UML 作为一个标准,有很多...

  • UML入门

    UML概述 UML简介 UML (Unified Modeling Language)为面向对象软件设计提供统一的...

  • UML入门

    定义 UML:统一建模语言,用于构建和编写一个正在开发的面向对象的、软件密集系统的制品的开放方法 UML类图 记忆...

  • UML的入门

    算是从0开始的学习吧。总结一下网上各种文章 UML可以分为结构型的和行为型的两类。 个人理解,结构型图就有点像交互...

  • [一]UML入门

    类图 二 UML类图讲解 三 UML类图讲解-自上而下 四 UML类图讲解-对比讲解

  • UML基础入门

    一、UML语言概述 1997年,OMG组织(Object Management Group,对象管理组织)发布了统...

  • UML图入门

    类图中,常见的有以下几种关系: 1 泛化(Generalization) 泛化关系是一种继承关系, 表示一般与特殊...

  • UML入门快速学习

    类图 可见性:- : private+ : public# : protected~ 或者 不写 : 默认访问权...

  • 一、UML简单入门

    看第一个区域 类名:斜体表示 抽象类 (abstract)接口表示方法为 < > className 第二个区域 ...

  • UML简介入门

    1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言。 常...

网友评论

  • guoguo_lay:![Alt text](http://g.gravizo.com/g?
    a -> b: hello;
    b -> a: hi;
    )
    这段代码写入markdown中, 并不能转出图片, 但是 写入浏览器的url中可以。 是什么原因呢。
  • 小鱼儿他老汉:Wow。好棒,简书支持吧?
  • 散修码农:很不错的工具
  • 密斯特厚朴:越来越喜欢markdown格式了
  • Vector_07:只有用例图报错,其它的图均正常,是哪里有语法问题吗?
    Vector_07:@MountainKing 多谢多谢。用简书没问题,然后就把本地的客户端从Mou换成了MacDown,已经可以正常使用,多谢。
    MountainKing:@贰十四Lee 我就用的简书博客在线编辑啊
  • Vector_07:请问你使用的是什么MarkDown工具?我用的Mou,在实现用例图的时候报错了,实现活动图的时候也有报错,请问是怎么回事? 谢谢,下面是截图
    这是用百度云分享的图片:https://pan.baidu.com/s/1boNhK7t
  • McDu:请问是怎么集成到markdorn 转换出来的图是截的吗?
    MountainKing:@McDu 最开始说了啊,![Alt text](http://g.gravizo.com/g?
    a -> b: hello;
    b -> a: hi;
    )
  • 加州沙:这个好

本文标题:21分钟入门UML

本文链接:https://www.haomeiwen.com/subject/krapcttx.html