跳至主要內容

UML类图

Yang大约 5 分钟UMLUML

UML 类图

UML(Unifled Modeling Language),又称统一建模语言或标准建模语言,是一种支持模型化和软件系统开发的图形化语言

  • 可以为软件开发的所有阶段提供模型化和可视化支持,可用于多种类型软件系统开发建模的各个阶段,通常我们会结合 UML 图例来表示类与类之间的各种关系

  • 类的层次结构代表类与类之间的关系,类的关系有很多种,包括泛化、实现、依赖、关联、聚合和组合。

  • 在大的类别上还可分为两种:横向关系和纵向关系

    • 横向关系就是泛化、实现,而纵向关系就是剩下的 4 种,他们的强弱关系:依赖 < 关联 < 聚合 < 组合
    • 理解这些类的关系,并应用于类的层次结构设计中,有助于我们更好的进行代码组织结构优化。

泛化

泛化关系就是继承,表示一般与特殊的关系,即 “一般” 是 “特殊” 的泛化

  • 在继承中,“一般类” 就是父类,“特殊类” 就是子类。它指定了子类如何特化父类的所有特征和行为。他们之间是 “is A” 的关系。也就是说如果两个类之间满足 “A is a B” 的关系,则 A 就是 B 的子类

  • 在 UML 类图设计中,继承用一条空心三角箭头的实线表示,从子类指向父类

  • 例如:猫类继承自动物类,即:猫是动物的一种,既有猫的特征也有动物的共性的关系。此时,实现由猫类出发,空心箭头指向动物类。

实现

实现和泛化相似,逻辑上也可以通过 “is a” 表示。

  • 区别在于,实现关系通常是继承自一个抽象类或接口,表示类是接口或者抽象类所有特征和行为的实现, 而泛化关系通常继承一个具体类。

  • 在 UML 类图设计中,实现是用一条带空心三角箭头的虚线表示,从子类指向抽象父类或者接口

  • 例如:鹦鹉具有飞翔的能力,自然也满足 “鹦鹉 is a 能飞”,即鹦鹉是能飞的这样的关系。此时虚线从鹦鹉类触发,空心箭头指向飞翔

依赖

依赖就是一个类 A 使用到了另一个类 B,即一个类的实现需要另一个类的协助。而这种使用关系是具有临时性的、相对弱的。他们之间是 “use a” 的关系。

  • 通常,我们在类 A 中,把类 B 的对象作为方法参数时,方法中使用到了类 B 对象作为局部变量时,提现的就是两者之间的依赖关系。建议避免双向依赖

  • 在 UML 类图设计中,依赖用一条带箭头的虚线表示,从类 A 指向依赖的 B 类

  • 例如:某人需要过河,需要借用一条船,此时,人与船之间的关系就是依赖。即在人类的过河方法中,需要依赖船的对象作为方法的输入参数。此时,肩头有人类出发,指向船。

关联

关联体现的是两个类之间一种强依赖的关系,这种关系比依赖更强,一般是长期性的,是一种拥有的关系,它使一个类知道另一个类的属性和方法。他们之间能用 “has a” 表示。

  • 通常,我们在类 A 中,把类 B 的对象作为类中成员时,体现的就是两者之间的关联关系,

  • 关联可以是单向、双向的

  • 在 UML 类图设计中

    • 双向关联,用一条实现或一条实线 + 两个普通箭头(或实心三角形箭头)表示
    • 单项关联,用一条实线 + 一个普通箭头(或实心三角形箭头)表示
    • 无论单向还是双向,箭头均指向被拥有者

例如:老师和学生是双向关联,一个老师会管理多名学生,一名学生也会有多名授课老师。学生和学号质检室单项关联,一个学生只能对应一个唯一的学号

聚合

聚合关系是一种强的关联关系,它体现的是整体与部分的关系,而且部分可以离开整体而单独存在,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。他们之间也是 “has a” 的关系。

  • 关联和聚合在语法上无法区分,必须结合具体的逻辑场景

  • 在 UML 类图设计中,聚合关系以空心菱形加实线表示,菱形指向整体

  • 例如:学校有很多老师,老师离开学校还可以正常运行

组合

组合也是部分和整体的关系,但是比聚合关系还要强的关系。此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,即要求普通的聚合关系中代表整体的对象,负责代表部分的对象的生命周期。它体现的是一种 “contain-a” 的关系

  • 在 UML 类图设计中,组合关系以实心菱形加实线表示,菱形指向整体
  • 例如:公司和部门是整体和部分的关系,没有公司就不存在部门
上次编辑于:
贡献者: sunzhenyang