在UML类图中,常见的有以下几种关系:

  • 泛化(Generalization):继承的关系,实线带三角形箭头,指向父类。
  • 实现(Realization):实现的关系,虚线带三角形箭头,指向接口。
  • 关联(Association):拥有的关系,实线带普通箭头,指向被拥有者。
  • 聚合(Aggregation):整体与部分的关系。实线带空心菱形,指向整体。
  • 组合(Composition):整体与部分的关系,但不能离开整体而单独存在。实线实心菱形,指向整体。
  • 依赖(Dependency):使用的关系,即一个类的实线需要另一个类的协助。虚线普通箭头,指向被使用者。

1.泛化(Generalization)

【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种。

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

2.实现(Realization)

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

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

3.关联(Association)

【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子。关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

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

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

上图为自身关联。

4.聚合(Aggregation)

【聚合关系】:是整体与部分的关系。如车和轮胎是整体和部分的关系。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量

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

5.组合(Composition)

【组合关系】:是整体与部分的关系。没有公司就不存在部门,组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

【代码体现】:成员变量

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

6.依赖(Dependency)

【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖。

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

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

总结

各种关系的强弱顺序:

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

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

原文链接:https://blog.csdn.net/tianhai110/article/details/6339565

最新文章

  1. Android-Notification-简单的demo
  2. TSQL查询45道题
  3. [WPF系列]-DataBinding 绑定计算表达式
  4. 一个php的爬虫,将笔趣阁的书可以都下载下来。
  5. Android Studio生成javadoc出错的解决办法
  6. java 单例模式总结
  7. OpenStack: 安装准备
  8. 2015第40周一Node学习
  9. PCB敷铜小结
  10. nodejs使用connect-mongodb报错(Please ensure that you set the default write concern)
  11. 当<script>中的type等于text/html的妙用
  12. 微信支付之02------整个微信支付功能----------Java实现
  13. ElasticSearch集群环境搭建
  14. 修改tomcat命令黑窗口的名字
  15. rabbitmq heartbeat missing with heartbeat = N seconds原因总结
  16. iOS.Animation.CAMediaTiming
  17. Java语言编写MD5加密方法,Jmeter如何给字符串MD5加密
  18. centos7下Redis-Sentinel安装和配置
  19. [IDE123] Intellij Idea 快捷键
  20. 【Coursera】经验风险最小化

热门文章

  1. python中模块制作、发布、安装
  2. 3.3V转5V原理图
  3. H5: 表单验证失败的提示语
  4. mysql的下载和安装详细教程(windows)
  5. Java中JSONArray转换成int[]的办法
  6. 写入MySQL中文乱码问题
  7. YC-Framework版本更新:V1.0.6
  8. linux中查看端口号使用情况
  9. 自家APP打开微信小程序,可行吗?
  10. RTSP可用网络流