文章目录

  • 1. 可见性符号
  • 2. 类之间的关系
    • 2.1 泛化(Generalization)
    • 2.2 实现(Realization)
    • 2.3 关联(Association)
    • 2.4 依赖(Dependence)
    • 2.5 聚合(Aggregation)
    • 2.6 组合(Composition)

本文介绍Java开发中的软技能之一,UML图。UML 即统一建模语言,它是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
UML 展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。最常用的有:用例图、类图、时序图、状态图、活动图、组件图和部署图等。

下面着重介绍一下 UML 类图,类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。
许多项目立项文档、需求分析文档中,都会有关 UML 类图的涉及。类图基本上是一个系统的静态视图的图形表示,代表应用的不同方面,集合类图就表示整个系统。
画类图需要关注以下几点:

  • 类图中的名称应该是有意义的描述,并且是面向系统的
  • 画类图前应该先确定每个元素之间的关系
  • 类图中每个类职责(属性和方法)应该清晰标明
  • 对于每个类的属性应改精简,不必要的属性将使图表变得复杂

1. 可见性符号

+ public
# protected
- private

2. 类之间的关系

这里先附上类关系表格,可以先跳过这里,看完示例再回过头来看。

关系 表示 图示 解释 结构和语义
泛化(Generalization) A继承B,B为非抽象类 继承结构
实现(Realization) A实现B,B为抽象类或接口 继承结构
聚合(Aggregation) A聚合到B上,B由A组成 表示整体由部分构成的语义。 (不是强依赖:整体不存在了,部分仍然存在)
组合(Composition) A组成B,B由A组成 表示整体由部分构成的语义。 (强依赖:整体不存在了,部分也不存在了)
关联(Association) A知道B,但是B不知道A 不同类的对象之间的结构关系。 不强调方向,表示对象间相互知道。
依赖(Dependence) A依赖于B 描述一个对象在运行期间会用到另一个对象的关系。 应该保持单向依赖,杜绝双向依赖。

首先,我们给出一张具有整体关系的 UML 类图,后面再逐步分解说明。

图1:UML类图整体关系示例

2.1 泛化(Generalization)

泛化即 Java 中的继承关系,是类与类或者接口与接口之间最常见的关系。

图2:泛化关系示例

两个子类 Fish 和 Cat 分别继承自 Animal。

public class Animal {public String name;protected boolean isPet;private String state;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
public class Fish extends Animal {public String fishType;public void swim() {}
}
public class Cat extends Animal{protected boolean hasFeet;public void playToy(Doll doll){}
}

2.2 实现(Realization)

实现即 Java 中类对抽象类或接口的实现关系,是类与接口之间最常见的关系。

图3:实现关系示例

public interface ToyAction {void toyMoved();
}
public class Doll implements ToyAction{public Body body;public Cloth cloth;@Overridepublic void toyMoved() {}
}

2.3 关联(Association)

关联关系是一种比较强的关系,他们的关系是比较持久的、稳定的,而且双方的关系一般是平等的,分单向关联、双向关联等。
表现在代码层面,就是类 B 作为类 A 的属性,也可能是类 A 引用了一个类型为 B 的全局变量。如 Person 类,他拥有一个宠物猫,他们之间是关联关系。

图4:单向关联关系示例

public class Person {public Cat pet;public Head head;
}

(1) 单向关联
用带箭头的实线表示,箭头指向被引用或被包含的类。上面演示的就是一个单向关联关系。

(2) 双向关联
用不带箭头的实线来连接两个类,所谓的双向关联就是双方各自持有对方类型的成员变量。例如 Customer 类中维护一个 Product[] 数组,表示一个顾客购买了哪些商品;在 Product 类中维护一个 Customer 类型的成员变量表示这个产品被哪个顾客所购买。

图5:双向关联关系示例

(3) 自关联
系统中可能会存在一些类的属性对象类型为该类本身,例如二叉树中的 TreeNode 定义。

图6:自关联关系示例

2.4 依赖(Dependence)

就是一个类 A 使用到了另一个类 B ,这种使用关系是具有偶然性的、临时性的、非常弱的,但是类 B 的变化会影响到 A。
表现在代码层面,就是类 B 作为参数被类 A 在某个 method 方法中使用。如 Cat 类的 playToy 方法的参数就引用了 Doll 类,因此他们是依赖关系。

图7:依赖关系示例

2.5 聚合(Aggregation)

聚合关系强调的整体和部分、拥有的关系,即 has-a 的关系,其中部分可以脱离整体而存在,他们可以具有各自的生命周期。
如 Doll 类由 Body 和 Cloth 组成,即使失去了 Cloth,Doll 也可以正常存在。
表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

图8:聚合关系示例

public class Body {}
public class Cloth {}

2.6 组合(Composition)

组合关系也是强调整体和部分的关系,不同的是部分不能脱离整体而存在,它体现的是一种 contains-a 的关系,这种关系比聚合更强,也成为强聚合。
整体的生命周期结束也就意味着部分的生命周期结束,如人和大脑。
表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

图9:组合关系示例

public class Head {}

类关系强度:组合 > 聚合 > 关联 > 依赖

下面我们在 idea 中构建这几个类,将这几个放到同一 package 下,右击 package 选择Diagrams ,看下 idea 自动生成的UML类图:

图10:idea自动生成的UML类图

和我们给出的整体关系 UML 类图基本一致,但是在idea中聚合关系和组合关系都是用实心菱形表示的。这是因为idea只是工具,它不能进行语义级别的判断。比如,Person 和 Head,在现实生活中,我们认为是密不可分的,是组合关系,但是 idea 是没有判断依据的。

Java基础:UML类图相关推荐

  1. java uml 类图 加号_UML建模基础 UML类图的组成元素和关系解析

    本文和大家重点讨论一下在UML建模中UML类图的java代码表现,主要包括UML类图元素和关系两大部分内容,相信通过本文的介绍你对UML类图的概念一定会与明确的认识. 在UML建模中UML类图的jav ...

  2. Java画UML类图

    1.在Eclipse中安装插件. 1.1 安装和使用AmaterasUML 安装AmaterasUML前,需要先安装GEF 第一种:采用eclipse在线安装方式安装就好. eclipse在线安装GE ...

  3. Java设计模式—UML类图

    个人感觉总结很好的UML类图,转http://blog.csdn.net/u013467442/article/details/41808501 UML类图几种关系的总结 在UML类图中,常见的有以下 ...

  4. Java程序设计——UML类图

    目录(仅供参考) 一.定义 二.类图示例 三.类之间的关系 类与类一共有如下几种关系:泛化(Generalization).实现(Realization).依赖(Dependence).关联(Asso ...

  5. java集合UML类图 总览

    Java集合框架主要包括两种类型的容器, 一种是集合(Collection),存储一个元素集合, Collection 接口又有 3 种子类型,List.Set 和 Queue. 另一种是图(Map) ...

  6. Java之UML类图的六种关系

    UML类图 UML图概念 UML--Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果. ...

  7. 【Java】UML类图详解-详细易懂

    基本介绍 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML 从目标系统 ...

  8. Java设计模式——UML类图

    一.引言 UML -- Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果. 在我们的 ...

  9. java uml类图举例,uml类图(uml类图实例作业)

    原发布者:dzq21cn 第4章UML类图[学习目标]·定义类图·为什么要建模类图·类图的主要标记符号·如何建模类图4.1UML基本类图面向对象设计的基础就是使用类.. UML是统一建模语言,一般用来 ...

  10. UML类图和关系--idea使用PlantUML插件画类图

    UML类图和关系 类图 - 依赖关系(Dependence) **应用案例** **Java代码** **UML类图 + PlantUML代码** **小结** 类图 - 泛化关系(generaliz ...

最新文章

  1. 【CVPR2020-中科院计算所】多模态GNN:在视觉信息和场景文字上联合推理
  2. wireshark tcp data中文_TCP的可靠传输
  3. 加载gif动图_【知乎编辑技巧】GIF动图 的插入 2020.05
  4. DotNET企业架构应用实践-系列目录
  5. MySQL--安装linux(5.6版本)
  6. mysql根据ID的顺序查找_求救:mysql 如何根据给定的 ID顺序查找结果?
  7. Python模块——HashLib(摘要算法)与base64
  8. django 1.8 官方文档翻译: 1-2-5 编写你的第一个Django应用,第5部分
  9. 吴军:站在浪潮之巅,5G 和 IoT 才是未来 10 年的浪潮 | 人物志
  10. HighChart 体验之旅 (后台传递JSON参数和数据的方法)
  11. mysql企业版安装_mysql企业版怎么安装图解
  12. 如何提高团队开发质量
  13. 创建APPLEID 和申请成为开发者
  14. 发表SCI或EI类英文文章的投稿经验
  15. 安装wordcloud库的方法
  16. Think Pad L480充电蓝屏问题解决
  17. 分享137个ASP源码,总有一款适合您
  18. 全卷积网络FCN与卷积神经网络CNN的区别
  19. TimescaleDB的结构初识
  20. 操作Excel之“=VLOOKUP(V2,Sheet2!J:K,2)”公式解读

热门文章

  1. matlab详解newff(前馈反向传播网络)
  2. 2023年楼宇设备行业研究报告
  3. 日本开发出会洗烘摺衣服的机器人
  4. 【mindgo】 爱问财策略回测框架(分钟级回测)
  5. 【机器学习】机器学习算法之——K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解...
  6. 干货 | 几种常见的开关电源工作原理及电路图详解
  7. 学学jscode的超酷HTML5时钟
  8. jquery换一换效果
  9. vivox6s Android7.1,vivo计划为7款机型升安卓7.1 今日公测
  10. 【ES实战】索引mapping的动态设置