【UML】详解六种关系

UML中包含六中关系,分别是:关联(Association)、聚合(Aggregation)、组合(Composition)、泛化(Generalization)、依赖(Dependency)、实现(Realization)

一、

1关联关系(Association)

关联关系表示两个类之间存在某种语义上的联系。例如,一个人为一家公司工作,一家公司有许多办公室。我们就认为人和公司、公司和办公室之间存在某种语义上的联系。

关联关系提供了通信的路径,它是所有关系中最通用、语义最弱的。在UML中,用一条实线表示关系关系。例如:

关联关系中,有两种比较特殊的关系:聚合和组合。

1.2聚合关系(Aggregation)

聚合关系是一种特殊形式的关联。聚合表示类之间的关系是整体与部分的关系。聚合关系的含义是“聚”在一起的意义,也就是表示“部分”可以独立于“整体”而存在。在UML模型中用一个空心菱形的实线表示,空心菱形指向的是代表“整体”的类。如

1.3组合关系()

如果发现“部分”类的存在是完全依赖于“整体”类的,那么就应该用“组合”关系来描述。也就是组合关系比聚合关系更强,也称为强聚合。此时整体和部分是不可分的,整体的生命周期结束意味着部分的生命周期结束。在UML模型中,组合关系是用带有实心菱形的实线表示的。实心菱形指向的方向是代表“整体”类。如易于理解的例子“订单”与“订单项”之间的关系,如果订单不存在,订单项也就没有意义了,因此必然是组合关系。如图:

2泛化关系(Generalization)

泛化关系描述的一般事物与该事物中特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类中继承的,而父类则是子类的泛化。

在UML中,对泛化关系有3个要求:

1)子类应与父类完全一致,父类所具有的关联、属性和操作,子类应都具有。

2)子类中除了与父类一致的信息外,还包括额外的信息。

3)可以使用父类实例的地方,也可以使用子类实例。

在UML模型中,用带空心箭头的实线表示,箭头指向父类。泛化关系基本上是由事物本身的特性决定的。例如,“动物”和“哺乳动物”、“卵生动物”之间是泛化关系。

3实现关系()

实现关系是用来规定接口和实线接口的类或组件之间的关系。接口是操作的集合,这些操作用于规定类或组件的服务。换言之,实线关系指定两个实体之间的一个合同,一个实体定义了一个合同,而另一个实体履行该合同。如

4依赖关系(Dependency)

有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,责成元素Y依赖于元素X。在UML中,用带箭头的虚线表示依赖关系。依赖关系是一种偶然性的、临时性的非常弱的关系。例如某人想过河,需要借用一条船,此时人和船就是依赖关系。如图

二比较

组合和聚合:组合和聚合的应用要根据应用场景来判断部分类和整体类之间的关系。例如:“电脑”是一个整体类,而“主板”是一个整体类,而“主板”、CPU等则是相对于它的部分类。那它们之间关系是整体类还是部分类?如果是在固定资产管理系统中,可能适合的就是“组合”;而如果对于在线的DIY系统,两者之间显然是“聚合”关系。因此

判断是聚合还是组合关系,关键在于要放到具体的应用场景中讨论。

综合:关联关系中两个类处于同一等级上,而聚合和组合关系中两个类处于不同等层上。从某种意义上来说,前面说的关联和泛化以及实现关系都属于依赖关系的一种,但是它们有更具特别的语义和影响,因此定义了其自己的名字和详细的语义。总体来说,几种关系

组合>聚合>关联>依赖

在作图时应尽量使用较强关系,这样表达也更准确。

时间: 2024-11-05 15:51:42

【UML】详解六种关系的相关文章

UML详解

学习c++必不可少UML,UML从考虑系统的不同角度出发,定义了用例图.类图.对象图.状态图.活动图.序列图.协作图.构件图.部署图等9种图.这些图从不同的侧面对系统进行描述.系统模型将这些不同的侧面综合成一致的整体,便于系统的分析和构造.尽管UML和其它开发工具还会设计出许多派生的视图,但上述这些图和其它辅助性的文档是软件开发人员所见的最基本的构造. 用例图. 用例图是用来描述用户需求的,从用户的角度来描述系统的功能,并指出各个执行者.强调谁在使用,系统的执行者是谁. [用途]:帮助开发团队以

[Java学习]面向对象-package;内部类;UML图表示六种关系

package 软件包 类名前加入命名空间(包),解决命名冲突问题. 定义格式:公司域名倒叙.项目名.模块名; package语句写在文件第一行 使用import语句导入package java.lang; 软件包下的所有类系统自动导入. 编译 javac -d 生成路径 java源文件路径 运行 java 完整类名 内部类 基本 定义:类里面的类. 好处:内部类可以访问其外部类的私有数据. 分为 :静态内部类,成员内部类,局部内部类,匿名内部类 静态内部类 调用静态内部类的静态方法: Oute

(三)详解对象-关系映射文件

一.Hibernate中持久化类编写规范 -必须提供无参数的默认构造方法.因为程序运行时,Hibernate会运用java的反射机制,创建实体类的实例. -所有属性必须提供public访问控制符的set get方法 -属性应尽量使用基本数据类型的包装类型(如Integer) 基本数据类型无法表达null值,所有基本数据类型的默认值都不是null,这样就有很大的缺陷. 例如有一个score属性,表示学生分数,如果为0,那么是表示该学生未参加考试还是说该学生成绩为0呢? 这时候如果用包装类型,就可以

JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用

Hibernate框架概述 什么是Hibernate? 框架:软件的半成品,完成部分代码的功能. Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思想来操作数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet/JSP的web应用程序中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成

【转】UML类图与类的关系详解

UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition).下面我们结合实例理解这些关系. 基本概念 类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类

UML类图与类的关系详解--转

http://www.uml.org.cn/oobject/201104212.asp 原文地址 UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition).下面我们结合实例理解这些关系. 基本概念 类图(

【UML 建模】在线UML建模工具 ProcessOn 使用详解

总结 : -- 推荐理由 : 最近从 Windows 操作系统 转到 MAC 上, 正在看设计模式 和 重构, 找不到好用的 UML 工具, 因此在网上找了一款可以在线使用的 UML 工具, 用起来发现还不错, 推荐给大家; -- 工具地址 : https://www.processon.com/ ; 一. UML 使用流程 1. 创建 UML 图 创建 UML 图 : 点击主页的右上角的 "+" 按钮, 即可弹出创建页面; -- 创建按钮 : -- 创建页面 : -- 选择模板 :

tiny_cnn代码详解(3)——层间继承关系

在上一篇博文中我们顺利将tiny_cnn的程序调试通过,在这篇博文中我们尝试从整体角度给出对tiny_cnn这个深度学习框架的解读,重点论述一下其各个层直接类封装的继承关系. 一.卷积神经网络快速入门 tiny_cnn作为卷积神经网络的一种实现形式,在探讨其框架结构之前,首先需要简要介绍一些卷积神经网络相关的知识.首先,给出经典卷积神经网络的网络结构: 这个是经典的LeNet-5的网络结构图,五层网络.最早用于支票上的手写数字识别,也是最早的商业化的深度学习模型.从上图中可以看出,卷积神经网络主

Dynamics CRM2013 1:N关系 sub-grid中的“添加现有项”和“添加新建项”功能详解

CRM2013中sub-grid的样式和2011中有了较大的变化,2013和2011界面对比如下 在2011的时候按钮是在ribbon区,1:N的父子关系实体直接点击添加新纪录就可以,但2013就不行了点加号首先会有个下拉框把现有的子实体数据列出来,你可以选择现有的也可以新建 既然你的关系实体是1:N的父子实体,那子的存在肯定是依赖于与父实体的,所以这个地方就压根不存在关联现有实体一旦关联就会报错,所以纯碎新建的话这边的步骤就繁琐了,同时也会给用户带来迷惑 所以这个地方这种情况下完全没必要添加现