一、概述

UML类图用来定义系统中的类,包括描述类的结构和类之间的关系。类图的主要作用于描述系统的静态结构

  类图的基本模型元素如下:

  我们可以看到,一个类图表示为长方形,分为3部分,最上面是类名,中间是类的属性,下面是类的操作。描述信息使用 << >> 包裹。

类图中的实体如下:

1、类名:

正体字说明类是可被实例化的,斜体字说明类为抽象类。

2、属性

  如图:

属性一般通过如上的格式表示——<访问权限><属性名>:<属性类型>=<初始值>

对于可见性 :  

  1. +表示public,
  2. -表示private,
  3. #表示protected,
  4. 没有符号表示默认包访问权限

(如果一个属性只在类的内部使用,一般称为Attribute。若提供了相应的get、set方法,一般称为Property)

3、方法

  如图:

方法一般通过如上格式表示——<访问权限><方法名>:(<参数1名>:<参数1类型>,<参数2名>:<参数2类型>):<返回值类型>

静态方法用下划线表示。

抽象方法,整条操作都用斜体表示。

4、接口

接口是一系列操作的集合,它指定了提供的一系列服务。

  • 接口
  • 抽象类

抽象类和接口都是类名用斜体表示,接口还可以用一个圆圈表示。

二、关系

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

  • 依赖(Dependency)
  • 关联(Association)
  • 聚合(Aggregation)
  • 组合(Composition)
  • 泛化(Generalization)
  • 实现(Realization)

各种关系的强弱顺序

(耦合度依次增强)

依赖 < 关联 < 聚合 < 组合 < 泛化 < 实现 

1. 依赖(Dependency)

依赖关系是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.(偶然的弱关系)

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

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

2. 关联(Association)

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

【代码体现】:成员变量

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

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

下图为自身关联:

3. 聚合(Aggregation)

聚合关系是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。(Has-A )

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

【代码体现】:成员变量

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

4. 组合(Composition)

组合关系是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。。(Has-A )

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

【代码体现】:成员变量

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

5. 泛化(Generalization)

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

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

6. 实现(Realization)

实现关系是一种类与接口的关系,表示类是接口所有特征和行为的实现.例如:大燕是飞翔的关系。

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

三、应用举例

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

UML类图介绍的更多相关文章

  1. 北风设计模式课程---20、UML类图介绍

    北风设计模式课程---20.UML类图介绍 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生 ...

  2. UML 类图介绍

    UML 类图介绍 一. UML 简介 UML ( Unified Modeling Language )即统一建模语言,是 OMG ( Object Management Group )发表的图标式软 ...

  3. UML类图介绍&类的六大关系

    UML类图介绍&类的六大关系 官方定义 UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,用于帮助软件开发人员进行思考和记录思路的方式 UML 图形化的语言 基本介绍 UML图: ...

  4. UML类图介绍以及PlantUML使用方法

    类的UML表示方法 UML介绍 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图.它形象的描述出了系统的结构,帮助人们理解系统. 类图是 ...

  5. UML类图介绍(转载)

    UML类图详细介绍   类图主要描述程序对象以及他们之间的关系.一般来说,类.接口.抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理 ...

  6. UML类图介绍及简单用法

    原文链接 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和em ...

  7. UML类图新手入门级介绍

    UML类图新手入门级介绍 举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法. 首先,看动物矩形框,它代表一个类(Class).类图分三层,第一层显示类的名称,如果是抽象类,则就用 ...

  8. [转帖]UML类图新手入门级介绍

    UML类图新手入门级介绍 2010-11-12 19:45:00 monkey_d_meng 阅读数 27230  收藏 文章标签: umlinterfaceclass编程扩展更多 分类专栏: 软件工 ...

  9. UML类图的6大关系

    <小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...

随机推荐

  1. 如何取到el-select中的label

    在el-select中我们一般都是取到value的值,但是有时候我们需要value和label都需要.那怎么方便的取到呢 在网上经常有ref="cascader"这个方法,但是经过 ...

  2. [转帖]进程上下文频繁切换导致load average过高

    进程上下文频繁切换导致load average过高 2016年6月26日admin发表评论阅读评论 http://www.361way.com/linux-context-switch/5131.ht ...

  3. PAT(B) 1044 火星数字(Java)进制转换

    题目链接:1044 火星数字 (20 point(s)) 题目描述 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, ...

  4. mouseenter 与 mouseover 区别于选择

    mouseover事件, 箭头在子元素移动会触发冒泡事件,  子元素的鼠标箭头可触父元素方法, 相反,mouseenter事件功能与mouseover类似, 但鼠标进入某个元素不会冒泡触发父元素方法. ...

  5. 怎样安装ipython

    ipython 是一个python的交互式shell, 比默认的python shell更好用, 支持自动补全 / 上下翻等功能.  下面是按照方法: # 通用安装方法 pip install ipy ...

  6. Spring Cloud Alibaba学习笔记(13) - Spring Cloud Stream的监控与异常处理

    Spring Cloud Stream监控 Spring Boot Actuator组件用于暴露监控端点,很多监控工具都需要依赖该组件的监控端点实现监控.而项目集成了Stream及Actuator后也 ...

  7. js的for循环中出现异步函数,回调引用的循环值总是最后一步的值?

    这几天跟着视频学习node.js,碰到很多的异步函数的问题,现在将for循环中出现的异步函数回调值的问题总结如下: 具体问题是关于遍历文件夹中的子文件夹的,for循环包裹异步函数的代码: for (v ...

  8. VS.NET(C#)--2.8HTML服务器控件

    HTML服务器控件 服务器不处理HTML控件,例如:<h1>.<a>超链接.<input>,直接送到客户端,由浏览器呈现. 把HTML控件转换成HTML服务器控件, ...

  9. Java集合源码阅读之HashMap

    基于jdk1.8的HashMap源码分析. 引用于:http://blog.stormma.me/2017/05/31/Java%E9%9B%86%E5%90%88%E6%BA%90%E7%A0%81 ...

  10. day14-python之集合函数字符串格式化

    1.集合 #!/usr/bin/env python # -*- coding:utf-8 -*- # s=set(['alex','alex','sb']) # print(s) # s=set(' ...