Java基础:UML类图
文章目录
- 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类图相关推荐
- java uml 类图 加号_UML建模基础 UML类图的组成元素和关系解析
本文和大家重点讨论一下在UML建模中UML类图的java代码表现,主要包括UML类图元素和关系两大部分内容,相信通过本文的介绍你对UML类图的概念一定会与明确的认识. 在UML建模中UML类图的jav ...
- Java画UML类图
1.在Eclipse中安装插件. 1.1 安装和使用AmaterasUML 安装AmaterasUML前,需要先安装GEF 第一种:采用eclipse在线安装方式安装就好. eclipse在线安装GE ...
- Java设计模式—UML类图
个人感觉总结很好的UML类图,转http://blog.csdn.net/u013467442/article/details/41808501 UML类图几种关系的总结 在UML类图中,常见的有以下 ...
- Java程序设计——UML类图
目录(仅供参考) 一.定义 二.类图示例 三.类之间的关系 类与类一共有如下几种关系:泛化(Generalization).实现(Realization).依赖(Dependence).关联(Asso ...
- java集合UML类图 总览
Java集合框架主要包括两种类型的容器, 一种是集合(Collection),存储一个元素集合, Collection 接口又有 3 种子类型,List.Set 和 Queue. 另一种是图(Map) ...
- Java之UML类图的六种关系
UML类图 UML图概念 UML--Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果. ...
- 【Java】UML类图详解-详细易懂
基本介绍 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML 从目标系统 ...
- Java设计模式——UML类图
一.引言 UML -- Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果. 在我们的 ...
- java uml类图举例,uml类图(uml类图实例作业)
原发布者:dzq21cn 第4章UML类图[学习目标]·定义类图·为什么要建模类图·类图的主要标记符号·如何建模类图4.1UML基本类图面向对象设计的基础就是使用类.. UML是统一建模语言,一般用来 ...
- UML类图和关系--idea使用PlantUML插件画类图
UML类图和关系 类图 - 依赖关系(Dependence) **应用案例** **Java代码** **UML类图 + PlantUML代码** **小结** 类图 - 泛化关系(generaliz ...
最新文章
- 【CVPR2020-中科院计算所】多模态GNN:在视觉信息和场景文字上联合推理
- wireshark tcp data中文_TCP的可靠传输
- 加载gif动图_【知乎编辑技巧】GIF动图 的插入 2020.05
- DotNET企业架构应用实践-系列目录
- MySQL--安装linux(5.6版本)
- mysql根据ID的顺序查找_求救:mysql 如何根据给定的 ID顺序查找结果?
- Python模块——HashLib(摘要算法)与base64
- django 1.8 官方文档翻译: 1-2-5 编写你的第一个Django应用,第5部分
- 吴军:站在浪潮之巅,5G 和 IoT 才是未来 10 年的浪潮 | 人物志
- HighChart 体验之旅 (后台传递JSON参数和数据的方法)
- mysql企业版安装_mysql企业版怎么安装图解
- 如何提高团队开发质量
- 创建APPLEID 和申请成为开发者
- 发表SCI或EI类英文文章的投稿经验
- 安装wordcloud库的方法
- Think Pad L480充电蓝屏问题解决
- 分享137个ASP源码,总有一款适合您
- 全卷积网络FCN与卷积神经网络CNN的区别
- TimescaleDB的结构初识
- 操作Excel之“=VLOOKUP(V2,Sheet2!J:K,2)”公式解读
热门文章
- matlab详解newff(前馈反向传播网络)
- 2023年楼宇设备行业研究报告
- 日本开发出会洗烘摺衣服的机器人
- 【mindgo】 爱问财策略回测框架(分钟级回测)
- 【机器学习】机器学习算法之——K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解...
- 干货 | 几种常见的开关电源工作原理及电路图详解
- 学学jscode的超酷HTML5时钟
- jquery换一换效果
- vivox6s Android7.1,vivo计划为7款机型升安卓7.1 今日公测
- 【ES实战】索引mapping的动态设置