UML中的类图及常见类图关系

UML(统一建模语言,Unified Modeling Language),是用来设计软件蓝图的可视化建模语言。从目标系统的不同角色出发,分为用例图,类图,对象图,状态图,活动图,时序图,协作图,构件图,部署图等9种图
最近重新研究了设计模式,在整理总结时,用到了类图,发现经常混淆类图的关系,所以特意做下整理。

类、接口、类图

类(class)是指具有相同属性,方法,和关系的对象的抽象,封装了数据和行为,具有封装、继承、多态等三大特性.在UML中,类使用包含类名、属性和操作且带有分隔符的矩形来表示。

  • 类名(name)是一个字符串,例如User
  • 属性(attribute)是指类的特性,即类的成员变量.UML按照以下格式表示 [可见性]属性名:类型 例如: -name:String

    可见性表示该属性对类外的元素是否可见,也就是我们常说的作用范围,分为public(+),private(-),protected,(#)friendly(~)

  • 操作(operations)是指类的任意一个势力对象都可以使用的行为,简单点就是方法.UML格式为: [可见性]名称(参数列表)[:返回类型],例如 +getName():String

下图为person类的UML:
Person类UML

接口

接口(interface)是一种特殊的类,包含抽象抽象,但不包含属性.在UML中,接口通常用带有名称的小圆圈表示(目前有些软件并不是这样来表示)

类图

用来显示系统中的类、接口、协作以及他们之间的静态结构和关系的一种静态模型.

类之间的关系

根据类与类之间的耦合度从弱到强排列,UML中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系、实现关系.其中泛化和实现的耦合度相等,是最强的.

依赖关系

  • 描述

    依赖(dependency),在代码中,某个类的方法通过局部变量,方法参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些任务.
    通俗的讲,一个类A使用到了另一个类B,但是这种使用关系是具有偶然性的、临时性、非常弱的,但是B类的变化会影响到A,是一种使用关系

  • 代码:方法的参数,局部变量
  • UML:一条虚线,箭头从使用类指向被依赖的类
    依赖关系

关联关系

  • 描述

    关联(association)关系,用于表示一类对象与另一类对象之间的联系,使一个类知道另一个类的属性和行为.关联关系有单向关联,双向关联,自关联

  • 举例:比如老师和学生,老师知道班里的学生信息,学生不知道老师的信息,老师和学生就是一种单向的关联关系.老师知道学生信息,学生知道老师信息,两者之间就是双向关联关系.老师知道同行老师的信息,老师和老师就是自关联关系.

  • 代码:通常是将一个类的对象作为另一个类的成员变量来实现.

  • UML:双向关联可以用带两个箭头或者没有箭头的实现来表示.单向关系用带一个箭头的实现从实用类指向被关联类
    双向关联
    单向关联
    自关联

聚合关系

  • 描述

    聚合(aggregation)关系是关联关系的一种,是强关联关系,是整合和部分的关系,是has-a的关系.
    聚合关系也是通过成员对象来实现,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象单独存在.

  • 举例:学校与老师关系,学校中包含老师,如果学校停办了,老师依然存在.

  • UML:聚合关系通常用带空心的菱形实线来表示,菱形指向整体.
    聚合关系

组合关系

  • 描述

    组合(composition)关系也是关联关系的一种,也是表示整体和部分的关系,整体对象控制部分对象的生命周期,一旦整理对象不存在,部分对象也将不存在.部分对象不能脱离整理对象单独存在.

  • 举例:头和嘴的关系,没了头,嘴也就不存在了.
  • UML:组合关系用带实心的菱形实线来表示,菱形指向整体.
    组合关系

泛化关系

  • 描述

    泛化(generalization)关系是对象之间耦合度最大的关系,是父类与子类的继承关系,是is-a的关系

  • 举例:学生类和老师类都是person类的子类.
  • UML:泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类
    泛化关系

实现关系

  • 描述

    实现(realization)关系是接口与实现类之间的关系.

  • UML:实现关系使用带空心的三角箭头虚线来表示,箭头从实现类指向接口
    实现关系
作者

Jonathan

发布于

2019-06-13

更新于

2019-06-14

许可协议