UML 类图
类图是面向对象编程的外围建模工具。它形容了对象的类型,以及它们之间存在的各种动态关系。
类图的构造
类图由三个区域组成:
- 名称:类/接口的名称;当类是接口时,须要在名称的上一行增加
<<interface>>
。 - 属性:构造为
[visibility attr] fieldName: dataType
。 - 办法:构造为
[visibility attr] methodName(arg1Name: dataType, ...): returnDataType
。
在属性和办法的结尾是拜访修饰符(visibility attr)
:
- “+”示意
public
; - “-”示意
private
; - “#”示意
protected
; - 缺省值,同“+”,示意
protected
。
类之间的关系
接口、类之间存在肯定的关系。UML类图中个别会用连线指明它们。
实现(Implementation)
接口与其实现类
之间的关系,用实现示意。
用空心三角
和虚线
组成的箭头来示意实现关系;箭头指向接口
。
interface IPerson { name: string; age: number; sayHi(msg: string): void;}class Person implements IPerson { name: string; age: number; constructor (name: string, age: number) { this.name = name this.age = age } sayHi (msg: string): void { console.log(`${this.name} say: "${msg}"`) }}
泛化(Generalization)
类与类之间是继承
的关系,则用泛化(is a)示意。
用空心三角
和实线
组成的箭头来示意泛化关系;箭头指向父类
。
class Person { name: string; age: number; constructor (name: string, age: number) { this.name = name this.age = age } sayHi (msg: string): void { console.log(`${this.name} say: "${msg}"`) }}class Student extends Person { score: number; constructor (name: string, age: number, score: number) { super(name, age) this.score = score } printScore () { console.log(this.score) }}
学生“is a”人类。“学生”继承了“人类”的所有个性,“人类”是父类,“学生”是子类。
关联(Association)
如果一个对象含有另一个对象的援用,则用关联示意。
用实线箭头
示意关联关系
;箭头指向被关联的对象
。
class TimeCard {}class Employee { name: string; timeCard: TimeCard; constructor (name: string, timeCard: TimeCard) { this.name = name this.timeCard = timeCard }}
关联关系
又能够分为三种:聚合关系
、组合关系
和依赖关系
。
聚合(Aggregation)
聚合(has a)关系是关联关系的一种,体现的是整体与局部的领有关系:整体蕴含局部,局部能够脱离整体而独自存在。
用空心菱形
和实线箭头
来示意聚合;空心菱形指向整体
,箭头指向局部
。
class Engine {}class Car { engine: Engine constructor (engine: Engine) { this.engine = engine }}
发动机、底盘、变速箱等等零部件,能够组装一辆汽车。发动机和汽车的关系不是必须的。发动机也能够拆下来,供发电机应用。
组合(Composition)
组合(contains a)关系是关联关系的一种,体现的是整体与局部的领有关系:整体蕴含局部,局部不能够脱离整体。
用实心菱形
和实线箭头
来示意关联;实心菱形指向整体
,箭头指向局部
。
class Mouth {}class Face { mouth: Mouth; constructor (mouth: Mouth) { this.mouth = mouth }}
人蕴含头、躯干、四肢,它们的生命周期统一。当人出世时,头、躯干、四肢同时诞生。当人死亡时,作为人体组成部分的头、躯干、四肢同时死亡。
依赖(Dependency)
如果在一个对象的办法中应用了另一个对象,例如:函数参数或函数返回值。则用依赖(use a)示意。
用虚线箭头
示意依赖;箭头指向被应用的对象
。
class Car {}class Driver { drive (car: Car) {}}
驾驶员应用汽车,两者就是依赖关系。