第一部分:UML类图(class diagram)

类图用来展现一组类、类的特性以及其类相互之间的关系,一个类图由一组类以及它们之间的关系构成,类图用来对系统的领域概念以及静态结构进行建模。

在软件模型中,类图是最基本、也最重要的一种图。

类图中的元素有类、接口、协作、关系、注释、约束和包。

类的关系主要有关联、组成、泛化、依赖和接口的实现。

类图的作用主要有以下三点:

  • 在软件空间中建立对问题空间抽象的结构映像。
  • 用例分析和设计的逻辑结构建模。
  • 数据库结构建模。

第二部分:PlantUML类图语法

基本语法:

类之间的关系通过下面的符号定义 :

Type Symbol Drawing
Extension(扩展) <|--

Composition(组合) *--  

Aggregation(聚合) o--  

使用.. 来代替 -- 可以得到点 线.

例如:

 @startuml
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 -- Class10
@enduml

 @startuml
Class11 <|.. Class12
Class13 --> Class14
Class15 ..> Class16
Class17 ..|> Class18
Class19 <--* Class20
@enduml

 @startuml
Class21 #-- Class22
Class23 x-- Class24
Class25 }-- Class26
Class27 +-- Class28
Class29 ^-- Class30
@enduml

在关系之间使用标签来说明时, 使用 :后接 标签文字。

对元素的说明,你可以在每一边使用 "" 来说明.例如:

 @startuml

 Class01 "1" *-- "many" Class02 : contains

 Class03 o-- Class04 : aggregation

 Class05 --> "1" Class06

 @enduml

在标签的开始或结束位置添加<>以表明是哪个对象作用到哪个对象上。

 @startuml
class Car Driver - Car : drives >
Car *- Wheel : have 4 >
Car -- Person : < owns @enduml

添加方法:

为了声明域或者方法,你可以使用 后接域名或方法名。

系统检查是否有括号来判断是方法还是域。例如:

 @startuml
Object <|-- ArrayList Object : equals()
ArrayList : Object[] elementData
ArrayList : size() @enduml

也可以使用{} 把域或者方法括起来。注意,这种语法对于类型/名字的顺序是非常灵活的。

@startuml
class Dummy {
String data
void methods()
} class Flight {
flightNumber : Integer
departureTime : Date
}
@enduml

 @startuml
class Dummy {
{field} A field (despite parentheses)
{method} Some method
} @enduml

定义可访问性:

一旦你定义了域或者方法,你可以定义 相应条目的可访问性质。

Character Icon for field Icon for method Visibility
- private
# protected
~ package private
+ public
 @startuml

 class Dummy {
-field1
#field2
~method1()
+method2()
} @enduml

你可以采用以下命令停用这些特性 skinparam classAttributeIconSize 0

 @startuml
skinparam classAttributeIconSize 0
class Dummy {
-field1
#field2
~method1()
+method2()
} @enduml

抽象与静态:

通过修饰符{static}或者{abstract},可以定义静态或者抽象的方法或者属性。这些修饰符可以写在行的开始或者结束。也可以使用{classifier}这个修饰符来代替{static}.

 @startuml
class Dummy {
{static} String id
{abstract} void methods()
}
@enduml

高级类体:

PlantUML默认自动将方法和属性重新分组,你可以自己定义分隔符来重排方法和属性,下面的分隔符都是可用的:--..==__.

还可以在分隔符中添加标题:

@startuml
class Foo1 {
You can use
several lines
..
as you want
and group
==
things together.
__
You can have as many groups
as you want
--
End of class
} class User {
.. Simple Getter ..
+ getName()
+ getAddress()
.. Some setter ..
+ setName()
__ private data __
int age
-- encrypted --
String password
} @enduml

备注和模板:

模板通过类关键字("<<"和">>")来定义

你可以使用note left of , note right of , note top of , note bottom of这些关键字来添加备注。

你还可以在类的声明末尾使用note left, note right,note top, note bottom来添加备注。

此外,单独用note这个关键字也是可以的,使用 .. 符号可以作出一条连接它与其它对象的虚线。

链接的注释:

在定义链接之后,你可以用 note on link 给链接添加注释

如果想要改变注释相对于标签的位置,你也可以用 note left on linknote right on linknote bottom on link。(对应位置分别在label的左边,右边,下边)

抽象类和接口:

用关键字abstractabstract class来定义抽象类。抽象类用斜体显示。 也可以使用interface, annotationenum关键字。

使用非字母字符:

如果你想在类(或者枚举)的显示中使用非字母字符,你可以:

  • 在类的定义中使用 as 关键字
  • 在类名旁边加上 ""
 @startuml
class "This is my class" as class1
class class2 as "It works this way too" class2 *-- "foo/dummy" : use
@enduml

隐藏类:

你也可以使用 show/hide 命令来隐藏类

如果你定义了一个大的!included文件,且想在文件包含之后隐藏部分类,该功能会很有帮助。

泛型(generics):

你可以用 <> 来定义类的泛型。

 @startuml

 class Foo<? extends Element> {
int size()
}
Foo *- Element @enduml

指定标记(Spot):

通常标记字符 (C, I, E or A) 用于标记 类(classes), 接口(interface), 枚举(enum)和 抽象类(abstract classes).

但是当你想定义原型时,可以增加对应的单个字符及颜色,来定义自己的标记(spot),就像下面一样:

 @startuml

 class System << (S,#FF7700) Singleton >>
class Date << (D,orchid) >>
@enduml

你可以通过关键词 package 声明包,同时可选的来声明对应的背景色(通过使用html色彩代码或名称)。

注意:包可以被定义为嵌套。

 @startuml

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

包样式:

包可以定义不同的样式。

你可以通过以下的命令来设置默认样式 : skinparam packageStyle,或者对包使用对应的模板:

 @startuml
scale 750 width
package foo1 <<Node>> {
class Class1
} package foo2 <<Rectangle>> {
class Class2
} package foo3 <<Folder>> {
class Class3
} package foo4 <<Frame>> {
class Class4
} package foo5 <<Cloud>> {
class Class5
} package foo6 <<Database>> {
class Class6
} @enduml

你也可以参考下面的示例来定义包之间的连线:

 @startuml

 skinparam packageStyle rectangle

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

第三部分:以班级学生管理系统中的 —— “学生” 类为例

在班级管理系统中,学生是一个类,与此同时,课程、宿舍、成绩与学生这个类也有着很大的关系。

@startuml
class 课程 {
  -课程号:int
  -课程名:string
  -主课教师:string
  __
  +课程信息
  +选择课程
}
class 学生{
  -学号:int
  -姓名:string
  -班级:string
  -专业:string
  __
  +登陆
  +修改信息
  +退出
  +已选课程
  +课程信息
}
class 宿舍 {
  -宿舍号:int
  -楼号:int
  -所住人员:string
  __
  +登陆
  +修改信息
  +退出
}
class 成绩 {
  -课程号:int
  -课程名:string
  -考试成绩:int
  __
  +课程信息
  +查看成绩
}
课程 -right-> 学生
宿舍 -left-> 学生
学生 -down-> 成绩
@enduml

第四部分:总结

类通常都是用一个矩形来表示,这个矩形分为三部分,最上面是类名,中间是类的属性,最下面是类的操作。

通过类图,能很清晰的就将系统中的各个类对象都描述清楚,然后再根据这些类图来进行设计就非常的方便。

同时,也可以通过类图来对与客户的要求进行完善,以免出现软件设计后却不符合客户要求的情况。

练习UML类图中的类的表示的更多相关文章

  1. UML类图中类与类的四种关系图解

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. UML类图中的关系和表示方法

    类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这六种关系中类之间的紧密程度是依 ...

  3. UML类图中连接线与箭头的含义(转)

    UML类图是描述类之间的关系 概念 类(Class):使用三层矩形框表示. 第一层显示类的名称,如果是抽象类,则就用斜体显示. 第二层是字段和属性. 第三层是类的方法. 注意前面的符号,'+'表示pu ...

  4. UML类图中最重要的几种类关系及其表示

    阅读UML图最常见到的类与类之间的关系有如下几种: 1.依赖关系 依赖关系是指一个类在计算时,应用了“另一个类”类型的参数,这种关系是偶然.临时.弱的. UML类图中,依赖关系用带单箭头的虚线表示,即 ...

  5. UML第二次作业:类在类图中的表示

    类在类图中的表示 一.概览 1.plant UML语法学习小结 2.班级学生管理系统中的 —— “学生” 类的属性.方法 3.类图脚本程序 4.类图示例 二.类图语法学习小结 1.类之间的关系 通过某 ...

  6. UML类图中箭头和线条的含义和用法

    UML类图中箭头和线条的含义和用法 在学习UML过程中,你经常会遇到UML类图关系,这里就向大家介绍一下UML箭头.线条代表的意义,相信通过本文的介绍你对UML中箭头.线条的意义有更明确的认识. AD ...

  7. UML类图中的六种关系(物理设计阶段)

    UML类图中经常会用到各种箭头和线条来表示不同类或者接口之间的关系,因此非常好的理解各个图标的含义是很有必要的. 在物理设计阶段可以通过EA工具将类图搭建好,然后直接生成物理类,这样也可以减少物理设计 ...

  8. UML类图中的几种关系的画法和含义

    UML的类图中,一共有以下六大关系: 泛化(Generalization), 实现(Realization), 依赖(Dependence),关联(Association),聚合(Aggregatio ...

  9. UML类图中的各种箭头代表的含义(转自:http://www.cnblogs.com/damsoft/archive/2016/10/24/5993602.html)

    1.UML简介Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他 ...

随机推荐

  1. zoj3223

    其实这题不超时完全是因为串长度太小,如果串够长,一次匹配后都要往上跳,复杂度是n^2的. #include <iostream> #include <cstdio> #incl ...

  2. js如何实现类的继承

    方法一:借助构造函数实现继承 这种方法的缺点:原型链上的东西并没有被继承. 方法二:借助原型链实现继承 这种方法的缺点:改变了一个实例对象,另一个实例对象也跟着改变,因为s1.__proto__ == ...

  3. async-await用法

    转载:https://segmentfault.com/a/1190000011526612?utm_source=tag-newest

  4. OneNote无法打开链接出现错误:你的组织策略阻止我们为你完成此操作

    首先打开注册表编辑器,按键盘win+r,调出运行窗口,输入regedit打开注册表编辑器 打开HKEY_CURRENT_USER\Software 打开\Classes 最后选中.html,在默认选项 ...

  5. C# 获取Newtonsoft.Json的JObject多层节点内容

    json形如 { "object":{ "name":"cwr" }, " } 要获取name的值,则需要构造两个JObject来 ...

  6. fibos开发踩坑集合

    fibos.js API资料: 与eosjs相比,fibos.js没有添加新功能,可以在eosjs项目页面https://developers.eos.io/eosio-nodeos/referenc ...

  7. 算法:输出一个整数(不用ToString方法)

    1.递归实现 static void Main(string[] args) { Console.WriteLine("Pls input a number:"); int p = ...

  8. angular ,require.js, angular-async-loader实现单页面路由,控制器js文件分离

    https://github.com/heboliufengjie/appRoute/tree/re re 分支,实现,路由配置,控制器js文件分离

  9. 小白的python之路Linux部分10/28&29

    属主属组其他人对文件的rwx权限 1.userdel删东西不全,会有残留,

  10. kd-tree题目总结

    在竞赛中,kd-tree一般只用于平面,很少有高于二维的情况. 在随机情况下,kd-tree的复杂度为O(NlogN),但会被极端数据卡到平方级别. 总而言之,就是优美的暴力. 查询时,通过估价函数进 ...