0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UML类图符号等详细介绍

jf_78858299 来源:CSDN 作者:duanxz 2023-05-05 10:41 次阅读

UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。

  • 依赖 Dependency :元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A;类属关系和实现关系在语义上讲也是依赖关系,但由于其有更特殊的用途,所以被单独描述。uml中用带箭头的虚线表示Dependency关系,箭头指向被依赖元素。
  • 泛化( Generalization :通常所说的继承(特殊个体 is kind of 一般个体)关系,不必多解释了。uml中用带空心箭头的实线线表示Generalization关系,箭头指向一般个体。
  • 实现( Realize :元素A定义一个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。这个关系最常用于接口。uml中用空心箭头和虚线表示Realize关系,箭头指向定义约定的元素。
  • 关联( Association :元素间的结构化关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。uml中用实线表示Association关系,箭头指向被依赖元素。
  • 聚合( Aggregation :关联关系的一种特例,表示部分和整体(整体 has a 部分)的关系。uml中用带空心菱形头的实线表示Aggregation关系,菱形头指向整体。
  • 组合( Composition :组合是聚合关系的变种,表示元素间更强的组合关系。如果是组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏。uml中用带实心菱形头的实线表示Composition关系,菱形头指向整体。

1.1.1 依赖(Dependency):虚线箭头表示

1、依赖关系也是类与类之间的联结 2、依赖总是单向的。(#add 注意,要避免双向依赖。一般来说,不应该存在双向依赖。) 3、依赖关系在 JavaC++ 语言中体现为局部变量、方法的参数或者对静态方法的调用。

(软件开发中,往往会设计一些公用类,供别的类调用,如果这些公用类出问题了,那调用这些公用类的类都会因此而出问题。两个元素之间的一种关系,其中一个元素(提供者)的变化将影响另一个元素(客体),或向它提供所需信息 显示一个类引用另一个类)

方法参数示例:

public class Person
{
    void buy(Car car)
   {
       ...
    }
}

图片

表示方法:虚线加箭头

特点:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。

依赖关系可以分为以下四类:

1) 使用依赖(Usage)表示客户使用提供者提供的服务以实现它的行为,包括:

  • 使用<>--声明使用一个类时需要用到已存在的另一个类。
  • 调用<>--声明一个类调用其他类的操作的方法。
  • 参数<>--声明一个操作和它的参数之间的关系。
  • 发送<>--声明信号发送者和信号接收者之间的关系。
  • 实例化<>--声明用一个类的方法创建了另一个类的实例。

2) 抽象依赖(Abstraction)表示客户与提供者之间用不同的方法表现同一个概念,通常一个概念更抽象,一个概念更具体。包括:

  • 跟踪<>--声明不同模型中的元素之间存在一些连接但不如映射精确。
  • 精化<>--声明具有两个不同语义层次上的元素之间的映射。
  • 派生<>--声明一个实例可以从另一个实例导出。

3) 授权依赖(Permission)表达提供者为客户提供某种权限以访问其内容的情形。包括:

  • 访问<>--允许一个包访问另一个包的内容。
  • 导入<>--允许一个包访问另一个包的内容并为被访问包的组成部分增加别名。
  • 友元<>--允许一个元素访问另一个元素,不管被访问的元素是否具有可见性。

4) 绑定依赖(Binding)较高级的依赖类型,用于绑定模板以创建新的模型元素,包括:

  • 绑定<>--为模板参数指定值,以生成一个新的模型元素。

1.1.2 关联(Association):实线箭头表示

1、关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法。2、关联可以是双向的,也可以是单向的(#add还有自身关联)。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。3、在 Java 或 c++ 中,关联关系是通过使用成员变量来实现的。

public class 徒弟
{  

}

public class 唐僧
{
     protected: list<徒弟> tdlist;
}

图片

表示方法:实线箭头

特征:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示。(A类有一个成员变量保存的是B类的一个引用,也就是说由A类可以找到B类)

1.1.3 聚合(Aggregation):带空心菱形头表示

1、聚合关系是关联关系的一种,是强的关联关系。2、聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。3、聚合关系也是通过成员变量来实现的。但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。4、关联与聚合仅仅从 Java 或 C++ 语法上是无法分辨的,必须考察所涉及的类之间的逻辑关系。

public class 引擎
 {

 }
public class 轮胎
 {

 }
public class 汽车
{
        protected:引擎 engine;
        protected:轮胎 tyre[4];
}

图片

表示方法:空心菱形头

特征:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;

1.1.4 组合(Composition):带实心菱形头的实线表示

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

class{
 }
 class{
        protected:  肢   limb[4];
 }

图片

表示方法:一般是实心菱形加实线箭头表示

特征:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;

1.1.5 泛化(Generalization):

带空心箭头的实线线表示

泛化(下图)表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。

泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。如下图:

图片

img

1.1.6 实现(Realization):空心箭头和虚线表示

实例( 图I )关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。表达一种说明元素与实现元素之间的关系;

图片

图I

二、相互之间的区别

1.聚合与组合

(1)聚合与组合都是一种结合关系,只是额外具有整体-部分的意涵。

(2)部件的生命周期不同

聚合关系中,整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。

(3)聚合关系是“has-a”关系,组合关系是“contains-a”关系。

图片

img

  • “弱”包含表示如果部门没有了,员工也可以继续存在;
  • “强”包含表示如果部门没有了,员工也不再存在;

在做软件需求时,往往会将所有的包含关系画成“弱”包含,后面发现某些关系可以表示为“强”包含是,才转为实心菱形。

2.关联和聚合

(1)表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

(2)关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的。

(3)关联是一种结构化的关系,指一种对象和另一种对象有联系。

(4)关联和聚合是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。

3.关联和依赖

(1)关联关系中,体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。

(2)依赖关系中,可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。

4.泛化和实现

实现表示类对接口的实现关系,表示方式:用一条带有空心三角箭头的虚线指向接口。

泛化表示类与类之间的继承关系、接口与接口之间的继承关系,表示方式一条带有空心三角箭头的实线指向基类(父接口)。

5.综合比较

这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:

组合>聚合>关联>依赖

其中依赖(Dependency)的关系最弱,而关联(Association),聚合(Aggregation),组合(Composition)表示的关系依次增强。换言之关联,聚合,组合都是依赖关系的一种,聚合是表明对象之间的整体与部分关系的关联,而组合是表明整体与部分之间有相同生命周期关系的聚合。

而关联与依赖的关系用一句话概括下来就是,依赖描述了对象之间的调用关系,而关联描述了对象之间的结构关系。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2965

    浏览量

    104691
  • UML
    UML
    +关注

    关注

    0

    文章

    122

    浏览量

    30858
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73609
收藏 人收藏

    评论

    相关推荐

    原理图符号和PCB封装有什么不同?

    “  原理图符号及PCB封装是电子设计中最基本的要素。本文针对刚踏入电子设计的新人,介绍了原理图符号与PCB封装区别,以及在KiCad中两者的对应关系。 ” 什么是原理图符号? 原理
    的头像 发表于 12-04 18:13 880次阅读
    原理<b class='flag-5'>图符号</b>和PCB封装有什么不同?

    照明电路图符号大全

    照明电路图符号大全
    发表于 11-01 16:34 6.8w次阅读
    照明电路<b class='flag-5'>图符号</b>大全

    汽车电路图符号大全

    汽车电路图符号大全 汽车电路图是利用图形符号和文字符号,表示汽车电路
    发表于 03-30 16:00 3.6w次阅读
    汽车电路<b class='flag-5'>图符号</b>大全

    电工电路图符号大全

    电工电路图符号大全
    发表于 03-31 10:14 3.8w次阅读
    电工电路<b class='flag-5'>图符号</b>大全

    数字电路图符号解析

    电子发烧友为大家提供了数字电路图符号解析,希望对您有所帮助!像是多种场效应管的电路图符号,电位器符号等等。
    发表于 07-23 09:49 1.4w次阅读
    数字电路<b class='flag-5'>图符号</b>解析

    电路图符号大全【PDF】

    电路图符号大全【PDF】
    发表于 01-14 12:52 216次下载

    常用电路图符号大全

    本文主要介绍了常用电路图符号大全。汇聚基本的电路图符号,例如:电池、接地线、二极管,可以满足基础电路的绘制需求。基本的电路符号,用于连接各
    发表于 03-26 13:49 96.7w次阅读
    常用电路<b class='flag-5'>图符号</b>大全

    基于图元结构的电气早图符号识别

    针对手绘草图符号不规则以及模糊的特点造成对其识别难度较高的问题,对手绘电气草图符号的特点、符号的笔划分割、图元类型的判别、图元间的结构关系、符号间相似度的类型等方面进行了研究,提出了一
    发表于 03-01 14:58 2次下载

    电子元器件电路图符号详细资料合集免费下载

    本文档的主要内容详细介绍的是电子元器件电路图符号详细资料合集免费下载。
    发表于 05-23 08:00 38次下载
    电子元器件电路<b class='flag-5'>图符号</b>的<b class='flag-5'>详细</b>资料合集免费下载

    电气接线和电路图符号大全

    电路图符号是指用一种书画图形代表一种电子元件(比如:电容、电阻、二极管、三极官、集成电路等等)的符号,有了电路图符号我学习、演示、设计就可以轻松的在图纸上完成。电路图符号大全。
    发表于 11-13 08:00 28次下载

    电路图符号大全

    电路图符号是指用一种书画图形代表一种电子元件(比如:电容、电阻、二极管、三极官、 集成电路等等)的符号,有了电路图符号我学习、演示、设计就可以轻松的在图纸上完成。
    发表于 08-13 09:36 22次下载

    电路图符号大全!

    电路图符号是绘制电路图的基础,只有了解对应的电路图符号,才能轻松上手绘制。电路图符号数量众多,大致可以分为四个类别:传输路径、集成电路组件、限定符号、开关和继电器
    的头像 发表于 02-01 11:11 3.1w次阅读

    UML简介与图详解

    本篇介绍UML图的基础知识,包括2种和6种关系,并通过visio软件,演示如何画出一个UML
    的头像 发表于 05-05 09:07 4075次阅读
    <b class='flag-5'>UML</b>简介与<b class='flag-5'>类</b>图详解

    电路图符号大全

    电路图是用来表示电路连接和元件的图形符号。下面是一些常见的电路图符号
    的头像 发表于 10-27 11:13 3.5w次阅读
    电路<b class='flag-5'>图符号</b>大全

    分享电路图符号大全

    电子发烧友网站提供《分享电路图符号大全.pdf》资料免费下载
    发表于 11-21 11:28 23次下载
    分享电路<b class='flag-5'>图符号</b>大全