博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UML类图学习
阅读量:7209 次
发布时间:2019-06-29

本文共 3405 字,大约阅读时间需要 11 分钟。

最近在学习设计模式,接触最多的就是先用UML类图画出这种设计模式。平常看其他人的博客多多少少也碰到UML类图,毕竟再多的文字,都没有一张图来的直白。掌握UML图其实对与java程序员来说,还是很有必要的。

java中的类我们最熟悉不过了。比如我新建了一个下面的类

public class Phone {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    protected void call(){    }}

对应的Phone类的UML图为

img_528cdb351095e3bf3b1cf101273fff26.png

  • 图分为三层:最顶层的为类名,中间层的为属性,最底层的为方法
  • 属性的表示方式为: 【可见性】 【属性名称】 :【类型】 = {缺省值,可选}
  • 方法的表示方式为: 【可见性】 【方法名称】 (【参数列表】):【类型】
  • 可见性都是一样的,'-' 表示private、‘+’表示public、‘#’表示protected

继承关系

继承关系是用于描述父子类之间的关系的,父类又称为基类或者超类。子类又称作派生类。( 记得之前看其他人的博客。看到超类。瞬间懵逼了,后来一查,就是父类,所以基础的东西一定要掌握牢固)

下面定义个Mi和Oppo

public class Mi extends Phone{    private String miVersion;    public void hot(){    }}public class Oppo extends Phone {    private String oppoVersion;    public void beautiful(){            }}

对应的UML类图为

img_2f2dc1a51abfd0727250b9afb60f2a74.png

  • 泛化关系使用带空心三角形的实现来表示

接口

接口 大家平常经常用到,在接口中通常没有属性

public interface  Language {    public void hello();}

对应的UML类图

img_ddaa7e0239733019c1338dff1ec4897a.png

  • 在方法上应当有《interface》,表示是一个接口

实现关系

我们定义了接口,就去实现接口

public class Chinese implements Language {    @Override    public void hello() {        System.out.println("你好");    }}public class English implements Language{    @Override    public void hello() {        System.out.println("hello");    }}

对应的UML类图

img_93dc3931a36122260323951f243aef98.png

  • 使用空心三角形虚线表示

关联关系

关联关系是类与类 之间最常见的一种关系,它是一种结构化的关系。表示一类对象与另一类对象之间有联系。关联关系分单向关联、双向关联 、自关联

单向关联

单向关联指的是 关联只有一个方向,比如 我们程序员拥有电脑

public class Computer {}public class Programmer{    private Computer computer; }

对应的UML类图为

img_8963c40fa27c36bfd5555b94c1becab6.png

双向关联

双向关联的关系就是双向的,比如程序员买电脑 ,反之。电脑也 和程序员关联。这就是双向关联。

public class Computer {    private Programmer programmer;}public class Programmer{    //程序员不止一台电脑    private Computer[] computer; }

对应的UML类图为

img_b87f940c6174c0f0850d0360e35d41be.png

  • 有的地方也会使用双向的箭头表示,碰到的时候 不要纠结于这个
自关联

自关联指的就是对象中的属性为对象本身,我首先就想到了单例模式

public class Singleton {    //构造函数私有化    private Singleton(){    }    private static Singleton instance = new Singleton();    public static Singleton getInstance(){        return instance;    }}

对应的UML类图为

img_05c072dc0b121b431c6326cd9901a57d.png

依赖关系

可以简单理解,就是一个类A使用到了类B.这种使用关系是具有偶然性的、临时性的。但是B的变化会影响到A. 比如,驾驶员(Driver)开车,Driver类的drive()方法将车(Car)的对象作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此也可以说Driver依赖Car

public interface Car{    public void move();}public class Driver{    public void drive(Car car)    {        car.move();    }}

对应的UML类图为

img_1ca966bafcaa73762fef8858740d7b3b.png

  • 用带箭头的虚线表示
  • 依赖关系通常通过三种方式来实现
    • 将一个类的对象作为另一个类中方法的参数
    • 在一个类的方法中将另一个类的对象作为其对象的局部变量
    • 在一个类的方法中调用另一个类的静态方法

聚合关系

聚合关系表示整体与部分的关系,在聚合关系中,成员对象实整体的一部分,但是成员对象可以脱离整体对象独立存在。比如电脑有 cpu,ssd

public class Cpu{}public class Ssd{}public class Computer{    private Cpu cpu;    private Ssd ssd;        public Computer(Cpu cpu, Ssd ssd)    {        this.cpu= cpu;        this.ssd= ssd;    }    }

对应的UML类图

img_e23d7812f6773864a3958fef366c9840.png

  • 用空心菱形直线表示
  • 代码实现聚合关系,成员对象通常以构造方法、Setter方法的方式注入到整体对象之中。

组合关系

组合关系也表示的是一种整体和部分的关系。但是在组合关系中整体对象可以控制成员对象的声明周期,一旦整体对象不存在,成员对象也不存在,有种同生共死的感觉。比如人的 头 和嘴巴、鼻子。嘴巴和鼻子是头的组成部分之一,一旦头没了,嘴巴也没有了(好可怕)。

public class Mouth{}public class Nose{}public class Head{    private Mouth mouth;    private Nose nose;        public Head()    {        mouth = new Mouth();        nose = new Nose();    }    }

对应的UML类图

img_976d210272a2d37a94d01e26c90233f2.png

  • 用实心菱形直线表示

基本上常用的都介绍完了,不过实际应用中,不必完全纠结于细节,合理的利用对象之间的关系给出合理的设计方案即可

对了。我先在画图都是用在线的


最近公司鼓励大家进行写博客写文章。我也对大家提供下我平时写文章用到的工具以及一点总结

  • 用markdown写文章,用了之后就会发现 爽
  • 图片存储的话我现在用七牛云。免费的大约有10G,应该够大家用了吧
  • 我一般不会在csdn 或者 博客园的编辑器里面写。我一般会在在线的 马克飞象中书写,写完之后再粘贴到csdn或者博客园的markdown编辑器中
  • 大家如果平时还维护着微信公众号,大家可以使用这个md2all 转下。我也是刚刚发现这个,之前一直用 这个。
  • 写博客一定要注意文章的格式,如果写的乱七八糟,就如同你看别人写的代码一样的感受
  • 坚持写下去
学习不是要么0分,要么100分的。80分是收获;60分是收获;20分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的0分了。

转载地址:http://cngum.baihongyu.com/

你可能感兴趣的文章
冒泡排序,选择排序,二分法
查看>>
spoj 694 Distinct Substrings
查看>>
Linux查看PCIe版本及速率# lspci -vvv |grep Width -i
查看>>
MySQL配置文件mysql.ini参数详解、MySQL性能优化
查看>>
java中替换文件内容
查看>>
https://github.com/CshBBrain/CshBBrain
查看>>
【转载】8天学通MongoDB——第八天 驱动实践
查看>>
Flex中Form表单遇到的一个小问题
查看>>
需求分析
查看>>
团队作业七
查看>>
迭代器与泛型for
查看>>
在idea中用tomcat远程部署调试
查看>>
HGE引擎改进
查看>>
存储过程执行失败与sql668n
查看>>
Android面试题3之描写叙述下Android的系统架构
查看>>
2014-7-20 谁还认得这几本书?
查看>>
基于django搭建网站
查看>>
c++ 循环程序的作业,2017年10月10日作业题。
查看>>
从C语言结构对齐重谈变量存放地址与内存分配
查看>>
NSTimer_Block封装定时器的target-action成Block回调
查看>>