Skip to content

4.类图

类一览

plantuml
@startuml
abstract        "抽象"
abstract class  "抽象类"
annotation      "注解"
circle          circle
()              circle_short_form
class           "类"
diamond         diamond
<>              diamond_short_form
entity          entity
enum            枚举
interface       interface
protocol        protocol
struct          struct
@enduml
@startuml
abstract        "抽象"
abstract class  "抽象类"
annotation      "注解"
circle          circle
()              circle_short_form
class           "类"
diamond         diamond
<>              diamond_short_form
entity          entity
enum            枚举
interface       interface
protocol        protocol
struct          struct
@enduml

类之间的关系

泛化关系<|--
组合关系*--
聚合关系o--

  • 箭头方向任意
  • 可以用.. 来代替-- ,会显示为虚线。
  • 可以用:来添加箭头说明

泛化关系 - IBM 文档
泛化关系: 在 UML 建模中,如果一个模型元素(子代)基于另一个模型元素(父代),那么这两个元素之间就存在泛化关系。
在类图、组件图、部署图和用例图中,泛化关系用来指示子代将接收父代中定义的所有属性、操作和关系。

plantuml
Super <|-- Child

interface XxxInterface 
class   XxxInterfaceImpl 
XxxInterface <|-- XxxInterfaceImpl:继承

身体 *-- 四肢:组合
身体 *-- 头:组合

家庭 o-- 儿子: 聚合
家庭 o-- 父亲: 聚合
家庭 o-- 母亲: 聚合
Super <|-- Child

interface XxxInterface 
class   XxxInterfaceImpl 
XxxInterface <|-- XxxInterfaceImpl:继承

身体 *-- 四肢:组合
身体 *-- 头:组合

家庭 o-- 儿子: 聚合
家庭 o-- 父亲: 聚合
家庭 o-- 母亲: 聚合

添加方法

写法举例:

class Family
Family : int age
Family : int size()
Family : boolean contains()
class Family
Family : int age
Family : int size()
Family : boolean contains()

编译器会自动根据有无括号来区分是属性还是方法。效果如下:

plantuml
class Family
Family : int age
Family : int size()
Family : boolean contains()
class Family
Family : int age
Family : int size()
Family : boolean contains()
  • 可以使用花括号来简化写法
  • 可以使用{field}{method}修饰符来覆盖编译器对属性和方法的默认识别
  • 可以区分访问权限
    • - 私有的
    • # 受保护的
    • - 包内可见
    • + 公有
  • 通过修饰符{static}或者{abstract},可以定义静态或者抽象的方法或者属性
  • 可使用-- 等符号进行顺序重排
plantuml
class Family {
 int age
 int size()
 boolean contains()
 {method} Some method...
 -  int private私有方法()
 #  int protected受保护的()
 ~  int 包内可见()
 +  int public公有方法()
 
 {field} A field (despite parentheses)
 -  int private私有属性
 #  int protected受保护私有属性
 ~  int 包内可见属性
 +  int public属性
 {static} String static属性
 {abstract} void abstract抽象Methods()
}
class Family {
 int age
 int size()
 boolean contains()
 {method} Some method...
 -  int private私有方法()
 #  int protected受保护的()
 ~  int 包内可见()
 +  int public公有方法()
 
 {field} A field (despite parentheses)
 -  int private私有属性
 #  int protected受保护私有属性
 ~  int 包内可见属性
 +  int public属性
 {static} String static属性
 {abstract} void abstract抽象Methods()
}