UML类图简介

讲道理,UML总在接触,但是每次看到实在打不起兴趣好好看,总觉得略显复杂,就没有看下去的欲望,后来发现设计模式越学图越多,拉倒吧,那就记录一下这UML到底是个什么玩意。

什么是 UML

统一建模语言Unified Modeling Language,缩写 UML)是非专利的第三代建模规约语言UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。

摘自维基百科

UML是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标准。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。

乍一看,觉得还是挺抽象的,其实简单来说,就是用一种图形化的语言来对软件中对象关系进行建模,UML从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等9种图。

这里只介绍类图,毕竟作为Java coder,其他的也不咋太关心,有兴趣的就自行了解其他的吧。

类和接口

我们结合着一个简单的Java类来说

public class JavaCode {

    private String name;

    private int age;
  
    private Double salary;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
  
    public Double getSalary() {
      return salary;
    }
   
    public void setSalary(Double salary) {
      this.salary = salary;
    }
}

要用UML表示这样一个类,该怎么画呢:

UML类

这就是一个最简单的UML类图了,下面我们来具体看看图上都有些个啥。

访问限定符

可以看到,图上有一些+、-这些是啥呢,这个其实就是类图中用来表示访问限定符的,有以下常用的限定符:

  • +:表示public
  • -:表示private
  • #:表示protected
  • ~:表示default
  • _:表示static

上面这张图,也就对应了一个JavaUser,我们可以看到它分了三个部分即

  • 类名:是一个字符串,对应我们的Java类名

  • 属性:指类具备的一些属性,也就是我们说的类中的成员变量,它一般用以下格式表示

    [可见性] 属性名:类型[=默认值] // 默认值可有可无
    
  • 方法:也称为操作,它指的是类对象的一些行为,即类的成员方法,它可以这么表示

    [可见性] 名称(参数列表):[返回值类型]
    

接口

那接口怎么表示呢,我们看这样一个接口:

public interface Employee {
    public Double getSalary();
}

标准的UML图中我们用一个圆和横线来表示,如下图:

UML接口1

但是在更多的使用中,我们还会用如下方式:
UML接口

这里类似上面的类,只是用<<interface>>来表示接口,同时没有属性列表。

类图

在软件系统中,类不是孤立存在的,类与类之间存在各种关系。根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。

实现

实现关系便是Java中的类实现接口的这种实现关系,它的表示方法与泛化关系类似,只是它所用的是虚线,比如我们的JavaCoder是一个员工接口Employee的实现,表示如下图:

UML实现

泛化

泛化关系其实就是我们Java中的继承关系,它的表示方法就是,用实线和空心三角形,由子类指向其被继承的父类,比如JavaCoderCoder的子类,表示如下图:

UML泛化

依赖

依赖关系是一种较弱的关系,这种关系是指比如在局部变量、方法参数、静态方法调用等等这类方式使用其他类中的某些方法来完成某些功能。比如,作为一个搬砖工的我想加工资了,那么我需要用电脑发个邮件申请,这就可以理解为一种依赖关系。那么如何表示这种关系呢,就是用一个带箭头的虚线,由依赖者指向被依赖者,表示如下图:


UML依赖

关联

关联关系则强于依赖关系,他表示对象之间的关系是一种引用关系。关联关系又分为一般关联关系、聚合、组合。

一般关联关系

一般的关联关系即是对象存在一种引用关系,而这种关系可以是相互的也可以是单向的。就是可以是双向关联关系,也可以是单向关联关系。比如一个咱程序汪属于某个部门,但是并不是每个部门都有程序汪,这可以理解为一种单向关联关系。再比如你今天高兴带了个实习生,那么你们之间相互产生关系,则可以理解为一种双向关联关系。单向关联用实线带箭头,由关联着指向被关联者来表示,而双向关联则是没有箭头的实线来表示,如下图:


UML双向关联

UML单向关联

聚合

聚合是另一种关联关系,它是一种整体与部分的关系,比如员工之于公司,公司没了换家咱还是那个熟悉的程序汪不是,那么这种关系该如何表示呢,用空心菱形加实线,由部分指向整体,如下图所示:


UML聚合

组合

组合是一种更强的关联关系,他也是一种部分与整体的关系,但是部分不能脱离整体而存在。比如这天你又想加薪了,准备写邮件申请,总得用手写吧,手总不能自己独立去写吧,不然想想也怪可怕的。他的表示与聚合类似,只是用的为实心菱形。如下图:


UML组合

结语

这里只是介绍了UML图中的类图,且只是介绍了常用的一些,更多的用法需要再实际使用过程中慢慢积累了。

参考维基百科

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • 看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系; 能看懂类图中各个类之...
    youzhihua阅读 86评论 0 0
  • 前言 平常在阅读一些源码类,设计模式,架构类文章时,经常会遇到 UML 类图。因此,懂得一些常用的 UML 类图表...
    Whyn阅读 721评论 0 2
  • 1、基本认识 UML——Unified modeling language UML (统一建模语言), 是一种用于...
    wangDavid939i阅读 1,179评论 0 3
  • UML的历史 面向对象的分析与设计(OOA&OOD)方法的发展在20世纪80年代中出现了一个高潮,UML就是这个高...
    oneape15阅读 2,494评论 0 16
  • 周末,带着亲友到蓝源山支山农场吃家常菜,荷叶裹着湖着泥巴的煨鸡,香滑可口;刚坎下来的竹子锯断裹着调好的糯米饭...
    江夏月阅读 182评论 0 0