比较常用UML类图几种关系的小结

 更新时间:2015年10月14日 11:06:12   投稿:mrr  
本文给大家总结了UML类图中几种比较常用的关系小总结,需要的朋友可以参考下

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。

在UML类图中,比较常用的几种关系有:泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency),接下来,通过本篇文章给大家一一做下详解,具体详情如下:

1.       泛化(Generalization)

【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性.

【箭头指向】:带三角箭头的实线,箭头指向父类

 

2. 实现(Realization)

【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现.

【箭头指向】:带三角箭头的虚线,箭头指向接口

3. 关联(Association)

【关联关系】:是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者

上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

上图为自身关联:

 

4. 聚合(Aggregation)

【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体

5. 组合(Composition)

【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.

       组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

6. 依赖(Dependency)

【依赖关系】:是一种使用的关系,  即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

 

各种关系的强弱顺序:

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

下面这张UML图,比较形象地展示了各种类图关系:


以上内容就是本文的全部叙述,希望大家喜欢。

相关文章

  • IDEA快速生成实体类的示例教程

    IDEA快速生成实体类的示例教程

    这篇文章主要介绍了IDEA快速生成实体类的示例教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Java JVM虚拟机调优详解

    Java JVM虚拟机调优详解

    JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的,本文主要介绍了jvm调优,感兴趣的小伙伴们可以参考一下<BR>
    2022-07-07
  • Java INPUTSTREAM如何实现重复使用

    Java INPUTSTREAM如何实现重复使用

    这篇文章主要介绍了Java INPUTSTREAM如何实现重复使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • spring AOP的Around增强实现方法分析

    spring AOP的Around增强实现方法分析

    这篇文章主要介绍了spring AOP的Around增强实现方法,结合实例形式分析了spring面向切面AOP的Around增强具体步骤与相关操作方法,需要的朋友可以参考下
    2020-01-01
  • springboot controller 增加指定前缀的两种实现方法

    springboot controller 增加指定前缀的两种实现方法

    这篇文章主要介绍了springboot controller 增加指定前缀的两种实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java实现线程同步的四种方式总结

    Java实现线程同步的四种方式总结

    Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式,需要的可以参考一下
    2022-09-09
  • Java中的switch新特性与使用详解

    Java中的switch新特性与使用详解

    这篇文章主要介绍了Java中的switch新特性与使用详解,Switch语句可以实现根据某一变量选则执行代码块,当然直接使用If语句也可以做到,但是有时候使用Switch语句往往更加简洁优美,需要的朋友可以参考下
    2023-11-11
  • Spring Boot 集成 ElasticSearch应用小结

    Spring Boot 集成 ElasticSearch应用小结

    这篇文章主要介绍了Spring Boot 集成 ElasticSearch应用小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • 使用@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑记录

    使用@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑记录

    这篇文章主要介绍了使用@TableField(updateStrategy=FieldStrategy.IGNORED)遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Springboot2.1.6集成activiti7出现登录验证的实现

    Springboot2.1.6集成activiti7出现登录验证的实现

    这篇文章主要介绍了Springboot2.1.6集成activiti7出现登录验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论