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

 第一部分:PlantUML类图 语法总结

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

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

例:

@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

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

抽象与静态:

通过修饰符{static}或者{abstract},可以定义静态或者抽象的方法或者属性

这些修饰符可以写在行的开始或者结束。也可以使用{classifier}这个修饰符来代替{static}

高级类体:

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

备注和模板:

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

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

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

@startuml
class Object << general >>
Object <|--- ArrayList

note top of Object : In java, every class\nextends this one.

note "This is a floating note" as N1
note "This note is connected\nto several objects." as N2
Object .. N2
N2 .. ArrayList

class Foo
note left: On last defined class

@enduml

链接的注释:

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

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

抽象类和接口:

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

@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

使用非字母字符:

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

  • 在类的定义中使用 as 关键字
  • 在类名旁边加上 ""

 隐藏类:

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

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

泛型:

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

包:

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

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

包样式:

包可以定义不同的样式。

你可以通过以下的命令来设置默认样式 : 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

棒棒糖 接口:

需要定义棒棒糖样式的接口时可以遵循以下语法:

  • bar ()- foo
  • bar ()-- foo
  • foo -() bar
@startuml
class foo
bar ()- foo
@enduml

拆分大文件:

有些情况下,会有一些很大的图片文件。

可以用 page (hpages)x(vpages) 这个命令把生成的图片文件拆分成若干个文件。

hpages 用来表示水平方向页面数, and vpages 用来表示垂直方面页面数。

你也可以使用特定的皮肤设定来给分页添加边框

@startuml
' Split into 4 pages
page 2x2
skinparam pageMargin 10
skinparam pageExternalColor gray
skinparam pageBorderColor black

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
@enduml

 

 

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

学生是一个类,同时和宿舍,课程,教室有关

学生有对应的一个宿舍,多门课程,每门课程有对应的教室

用PlantUML 编写 “学生” 类 绘图脚本,例图:

 

@startuml
class 课程 {
  -课程号:int
  -课程名:string
  -老师:string
  __
  +选课信息
}
class 学生{
  -学号:int
  -姓名:string
  -班级:string
  -专业:string
  __
  +登陆
  +修改信息
  +退出
  +已选课程
  +课程信息
}
class 宿舍 {
  -楼号:int
  -宿舍号:int
  -床位:int
  __
  +登陆
  +修改信息
  +退出
}
class 教室 {
  -地点:string
  -每时段对应课程:string
  -容纳人数:int
  __
  +教室信息
  +教职人员
}
课程 -right-> 学生 
宿舍 -left-> 学生
学生 -down-> 教室
课程 -->教室
@enduml

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/zpp502/p/10612068.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值