UML类图

3/26/2022 设计模式

摘要

JDK:1.8.0_202
下面的类图是采用插件自动生成的,该插件会自动将成员属性的类型放在前面,按照标准应该是将类型放在后面

# 一:类

具体类在类图中用矩形框表示,矩形框分为三层:第一层是类名字。第二层是类的成员变量;第三层是类的方法。

类:(如下图所示)

classDiagram Test1 class Test1{ +String name +modifyInfo() void }

这里采用的类图插件自动将成员属性的类型放在前面,按照标准应该是将类型放在后面

抽象类的类名用斜字体表示,部分插件为了直观,第一层顶端用 <<abstract>>表示,紧接着是抽象类的名字:(如下图所示)

classDiagram Test2 class Test2{ <<abstract>> +int age +addAge()* void }

接口第一层顶端用 <<interface>> 表示,紧接着是接口的名字:(如下图所示)

classDiagram Shape class Shape{ <<interface>> noOfVertices +draw() }

枚举第一层顶端用 <<enumeration>> 表示,紧接着是枚举的名字,第二层是该枚举的所有实现:(如下图所示)

classDiagram Color class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

# 二:类的属性

classDiagram Employee class Employee{ +String name -String phone #int id ~String email +String address$ +modifyInfo() void }

成员变量以及方法前的访问修饰符用符号来表示:

  • +:表示 public
  • -:表示 private
  • #:表示 protected
  • ~:表示 default,也就是包权限
  • _下划线:表示static

实际上,属性的完整表示方式是这样的:

可见性 名称 :类型 [ = 缺省值]

中括号中的内容表示是可选的

这里采用的类图插件自动将成员属性的类型放在前面,按照标准应该是将类型放在后面

# 三:类的方法

方法的完整表示方式如下:

可见性 名称(参数列表) [ : 返回类型]

同样,中括号中的内容是可选的。

classDiagram Demo class Demo{ <<abstract>> +method1() void -method2(List~String~) int #method3() void +mothod4()* List~Demo~ +mothod5()$ String }

基本和类成员变量修饰符类似,这里主要说两点:

  • _下划线:表示static,同上
  • 斜字体:方法method4,字体是倾斜的,代表是抽象方法

# 四:类与类之间的关系

# 4.1 继承

继承:继承表示是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。

表示方法:空心三角形 + 实线

这里采用的类图插件把空心三角形,变为实心三角形,按照规范应该为空心三角形

示例:(鸟类继承抽象类动物)

classDiagram 动物 <|-- 鸟 class 动物{ +生命 +新陈代谢(氧气、水) +繁殖() } class 鸟{ +羽毛 +下蛋() }

# 4.2 实现

实现:表示一个 class 类实现 interface 接口(可以使多个)的功能

表示方法:空心三角形 + 虚线

这里采用的类图插件把空心三角形,变为实心三角形,按照规范应该为空心三角形

示例:(大雁需要飞行,就要实现飞()接口)

classDiagram 飞翔 <|.. 大雁 class 飞翔{ +飞() } class 大雁{ +下蛋() +飞() }

# 4.3 依赖

依赖:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。

表示方法:虚线箭头

示例:(动物依赖氧气和水。调用新陈代谢方法需要氧气类与水类的实例作为参数)

classDiagram 氧气 <.. 动物 水 <.. 动物 class 动物{ +生命 +新陈代谢(氧气、水) +繁殖() }

# 4.4 关联

关联:对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。

表示方法:实线箭头

示例:(企鹅需要 "知道" 气候的变化,需要 "了解" 气候规律。当一个类 "知道" 另一个类时,可以用关联)

classDiagram 气候 <-- 企鹅 class 企鹅{ +下蛋() }

# 4.5 聚合

聚合:表示一种弱的 "拥有" 关系,即 has-a 的关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。两个对象具有各自的生命周期

表示方法:空心的菱形+实线箭头

示例:(每一只大雁都属于一个大雁群,一个大雁群可以有多只大雁。当大雁死去后大雁群并不会消失,两个对象生命周期不同)

classDiagram 大雁群 o--> 大雁 class 大雁群{ +V型飞行() +一型飞行() } class 大雁{ +下蛋() +飞行() }

# 4.5 组合

组合:组合是一种强的 "拥有" 关系,是一种 contains-a 的关系,体现了严格的部分和整体关系,部分和整体的生命周期一样

表示方法:实心的菱形+实线箭头

示例:(鸟和翅膀就是组合关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的)

classDiagram 鸟 "1" *--> "2" 翅膀 class 鸟{ +羽毛 +下蛋() } class 翅膀{ }

# 五:参考文献

最后更新: 3/26/2022, 9:19:21 PM