一.PlantUML类图
1.关于类图
(1)通过类图可以在软件空间中建立问题空间抽象的结构映像,类图也是功能用例设计建模的核心和数据库结构建模的基础。
2.类图的内容
(1)对象与实例
(2)类元(类、接口、用例、参与者、关联)与类
(3)关联关系(组成关系、泛化关系、依赖关系)
3.语法小结及实例
(1)类之间的关系
表达类之间的关系有数种不同方法,如<|--、*--、..等,不同的表达方式将呈现出不同的效果。
例:
@startuml c1 <|-- c2 c3 *-- c4 c5 o-- c6 c7 .. c8 c9 -- c0 @enduml
我们可通过在箭头内部使用关键字, 例如left
, right
, up
或者 down
,来改变箭头方向。
(2)关系上的标签注释
如果想要在关系上标注,可以使用:符号,但是对于元素的说明,可以在每一边使用 ""
来说明。
例:
@startuml c1 "1" *-- "many" c2 : contains c3 o-- c4 : aggregation c5 --> "1" c6 @enduml
(3)声明方法和域
如果想要声明域或者方法,可以后接域名或方法名。系统将通过检查是否有括号来判断是方法还是域。
例:
@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
(4)对于可访问性的定义
对于域和方法需要一定的访问性约束时,我们使用一些前缀符号。
例:
@startuml class Dummy { -f1 #f2 ~m1() +m2() } @enduml
(5)对于抽象方法与静态方法的定义
我们通过修饰符{static}
或者{abstract}
来定义静态和抽象的方法或属性。
例:
@startuml class Dummy { {static} String id {abstract} void methods() } @enduml
(6)长注释与模板的使用
模板通过类关键字("<<"和">>")来定义。我们使用note left of
, note right of
, note top of
, note bottom of
这些关键字来添加备注。
同样的,也可以在类的声明末尾使用note left
, note right
,note top
, note bottom
来添加备注。
此外,如果想要单独用note
也可以,..
符号可以作出一条连接它与其它对象的虚线。
例:
@startuml class Object << g >> Object <|--- A note top of Object : aaaaaaaaaaa\bbbbbbbbbb note "ccccccccc" as N1 note "ddddddddddddddddddd" as N2 Object .. N2 N2 .. A class Foo note left: eeeeeeeeeeeee @enduml
同样的,我们可以在类图的语法中使用一些HTML的标签。
(7)关于抽象类与接口
我们使用关键字abstract
和abstract class
来定义抽象类,抽象类将会使用斜体显示。此外,interface
, annotation
和 enum等
关键字同样有效。
例:
@startuml abstract class AbstractList abstract AbstractCollection interface List interface Collection List <|-- AbstractList Collection <|-- AbstractCollection Collection <|- List AbstractCollection <|- AbstractList AbstractList <|-- ArrayList class ArrayList { Object[] elementData size() } enum TimeUnit { DAYS HOURS MINUTES } annotation SuppressWarnings @enduml
(8)隐藏类
我们可以使用 show/hide
命令来隐藏类。
@startuml class Foo1 class Foo2 Foo2 *-- Foo1 hide Foo2 @enduml
(9)指定标记
系统已经内置了标记字符 (C, I, E or A) 用于标记类(classes),接口(interface),枚举(enum)和抽象类(abstract classes)。
但是如果想定义原型,可以增加对应的单个字符及颜色,来定义自己的标记。
例:
@startuml class System << (S,#666666) Singleton >> class Date << (D,orchid) >> @enduml
(10)包
我们使用关键词 package
声明包,同时可选的来声明对应的背景色(HTML色彩代码或名称)。
例:
@startuml package "Classic Collections" #666666 { Object <|-- ArrayList } package net.sourceforge.plantuml { Object <|-- Demo1 Demo1 *- Demo2 } @enduml
我们使用关键字skinparam packageStyle设置默认的包的样式,
或者对包使用对应的模板。
(11)关系类
我们可以在定义了两个类之间的关系后定义一个关系类:association class。
例:
@startuml class Student { Name } Student "0..*" - "1..*" Course (Student, Course) .. Enrollment class Enrollment { drop() cancel() } @enduml
二.班级学生管理系统——“学生”类
1.属性
基本信息:
学号:varcher
姓名:string
个人信息:
性别:string
年龄:int
专业:string
班级:string
出生日期:date
班级职务:string
私人信息:
籍贯:string
政治面貌:string
身份证号:string
手机号码:string
宿舍信息:
宿舍号:string
成绩信息:
成绩:string
平均绩点:string
成绩-课程通用信息:
课程号:string
课程名:string
课程信息:
任课教师:string
2.方法
学生基本信息
学生课程信息
学生住宿信息
学生成绩信息
学生个人信息
PlantUML的类图脚本程序
@startuml class 学生基本信息{ 学号:varchar 姓名:string 性别:string 年龄:int 专业:string 班级:string 班级职务:string __ +添加信息() +修改信息() +删除信息() +课程信息() +成绩查询() +住宿查询() +私人信息查询() +保存() } class 学生课程信息{ 学号:varchar 姓名:string 课程号:string 课程名:string 任课教师:string __ +添加课程() +修改课程() +删除选课() +成绩查询() +保存() +返回() } class 学生住宿信息{ 学号:varchar 姓名:string 宿舍号:string __ +添加信息() +更换寝室() +离校退住() +保存() +返回() } class 学生成绩信息{ 学号:varchar 姓名:string 成绩:string 课程号:string 课程名:string 平均绩点:string __ +成绩核对() +错误审核() +课程信息() +返回() } class 学生个人信息{ 学号:varchar 姓名:string 出生日期:date 籍贯:string 政治面貌:string 身份证号:string 手机号码:string __ +添加信息() +修改信息() +删除信息() +保存() +返回() } 学生基本信息"1"<--right-->"1"学生课程信息 学生基本信息"1"<--left-->"1"学生住宿信息 学生基本信息"1"<-->"1"学生成绩信息 学生基本信息"1"<-->"1"学生个人信息 学生课程信息"1"<-->"1"学生成绩信息 @enduml
类图