0X JavaSE-- UML、

=# Unified Modeling Language UML 统一建模语言
UML 是一种图形化的语言。

UML 不是专门为 Java 准备的。
只要是面向对象的编程语言,开发前的设计,都需要画 UML 图进行系统设计。

最常用的四个 UML 图是

  • 类图(Class Diagram):描述软件系统中的类、接口、关系和其属性等;
  • 用例图(Use Case Diagram):描述系统的功能需求和用户与系统之间的关系;
  • 序列图(Sequence Diagram):描述对象之间的交互、消息传递和时序约束等;
  • 状态图(Statechart Diagram):描述类或对象的生命周期以及状态之间的转换;

1. 类图

1.1 类图中的具体类、抽象、接口和包

UML 类图中具体类、抽象类、接口和包有不同的表示方法。

1)在 UML 类图中表示具体类

具体类在类图中用矩形框表示,矩形框分为三层:第一层是类名字。第二层是类的成员变量;第三层是类的方法。成员变量以及方法前的访问修饰符用符号来表示:

“+”表示 public;
“-”表示 private;
“#”表示 protected;
不带符号表示 default。
在这里插入图片描述

2)在 UML 类图中表示抽象类

抽象类在UML类图中同样用矩形框表示,但是抽象类的类名以及抽象方法的名字都用斜体字表示。
在这里插入图片描述

3)在 UML 类图中表示接口

接口在类图中也是用矩形框表示,但是与类的表示法不同的是,接口在类图中的第一层顶端用构造型 <>表示,下面是接口的名字,第二层是方法。此外,接口还有另一种表示法,俗称棒棒糖表示法,就是类上面的一根棒棒糖(圆圈+实线)。圆圈旁为接口名称,接口方法在实现类中出现。
在这里插入图片描述

4)在 UML 类图中表示包

类和接口一般都出现在包中。
在这里插入图片描述

1.2 类图中的关系

类和类、类和接口、接口和接口之间存在一定关系,UML类图中一般会有连线指明它们之间的关系。

关系共有六种类型,分别是

  • 实现关系
  • 泛化关系
  • 关联关系
    • 依赖关系
    • 聚合关系
    • 组合关系

在这里插入图片描述
1)Implemention 实现关系

实现关系是指接口及其实现类之间的关系。在 UML 类图中,实现关系用空心三角和虚线组成的箭头来表示,从实现类指向接口。
在这里插入图片描述

2)Generalization 泛化关系

泛化关系是指对象与对象之间的继承关系,因此显然对应 Java 中的 extend 关键字。

如果对象 A 和对象 B 之间的 “is a” 关系成立,那么二者之间就存在继承关系,对象 B 是父对象,对象 A 是子对象。

例如,在学校中,一个教授 “is a” 员工,很显然Professor 对象和 Employee 对象之间存在继承关系,Employee 对象是父对象,Professor 对象是子对象。

在UML 类图中,泛化关系用空心三角和实线组成的箭头表示,从子类指向父类。
在这里插入图片描述

3)Association 关联关系

关联关系是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。

在 Java 中,关联关系的代码表现形式为一个对象含有另一个对象的引用。也就是说,如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。

关联关系有单向关联和双向关联。
如果两个对象都知道(即可以调用)对方的公共属性和操作,那么二者就是双向关联。
如果只有一个对象知道(即可以调用)另一个对象的公共属性和操作,那么就是单向关联。
大多数关联都是单向关联,单向关联关系更容易建立和维护,有助于寻找可重用的类。

在 UML 图中,双向关联关系用带双箭头的实线或者无箭头的实线双线表示。单向关联用一个带箭头的实线表示,箭头指向被关联的对象。

这就是导航性(Navigatity)。
在这里插入图片描述
一个对象可以持有其它对象的数组或者集合。在 UM L中,通过放置多重性(multipicity)表达式在关联线的末端来表示。多重性表达式可以是一个数字、一段范围或者是它们的组合。多重性允许的表达式示例如下:

数字:精确的数量
或者0…:表示0到多个
0…1:表示0或者1个,在 Java 中经常用一个空引用来实现
1…*:表示1到多个

关联关系又分为依赖关联、聚合关联和组合关联三种类型。

3.1 )Dependency 依赖关系

依赖关系是一种弱关联关系。

是一种使用的关系 A “use a” B,即 A 类的实现需要 B 类的协助。
这里要注意“使用”的概念,表达了一个物体需要通过另一个物体来完成工作,但他们之间没有包含的关系,如:
在这里插入图片描述

在 Java 中,依赖关系的代码表现形式为:B 为 A 的构造器或方法中的局部变量、方法或构造器的参数、方法的返回值,或者 A 调用 B 的静态方法。

如果对象 A 依赖于对象 B,则 。比如驾驶员和汽车的关系,驾驶员使用汽车,二者之间就是依赖关系。

在 UML 类图中,依赖关系用一个带虚线的箭头表示,由使用方指向被使用方,表示使用方对象持有被使用方对象的引用。

在这里插入图片描述

下面我们用代码清单1和代码清单2所示的Java代码来演示对象和对象之间的依赖关系。

代码清单1所示的B类定义了一个成员变量 field1,一个普通方法 method1() 和一个静态方法 method2()。

//代码清单1 B.java
public class B {public String field1;   //成员变量public void method1() {System.println("在类B的方法1中");}public static void method2() {                 //静态方法System.out.println("在类B的静态方法2中");}
}
//代码清单2所示的A类依赖于B类,在A类中定义了四个方法,分别演示四种依赖形式。/* 代码清单2 A.javaA依赖于B
*/public class A {public void method1() {//A依赖于B的第一种表现形式:B为A的局部变量B b = new B();b.method1();}public void method2() {//A依赖于B的第二种表现形式: 调用B的静态方法B.method2();}public void method3(B b)  {//A依赖于B的第三种表现形式:B作为A的方法参数String s = b.field1;}//A依赖于B的第四种表现形式:B作为A的方法的返回值public B method4() {return new B();}
}

3.2 )Aggregation 聚合关系与 Composition 组合关系

聚合关系是一种强关联关系。

它体现的是整体与部分的拥有关系,即 “has a” 的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期。

例如,尽管雁群中包含了大雁,但大雁可以脱离雁群而存在。
在这里插入图片描述

在UML图中,聚合关系用空心菱形加实线箭头表示,空心菱形在整体一方,箭头指向部分一方。
在这里插入图片描述

组合关系是一种强关联关系,并且比聚合关系更强。

它同样体现整体与部分间的包含关系,即 “contains a” 的关系。但此时整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。

如果A组合B,则A需要知道B的生存周期,即可能A负责生成或者释放B,或者A通过某种途径知道B的生成和释放。

例如,人包含头、躯干、四肢,它们的生命周期一致。当人出生时,头、躯干、四肢同时诞生。当人死亡时,作为人体组成部分的头、躯干、四肢同时死亡。

在 UML 图中,组合关系用实心菱形加实线箭头表示,实心菱形在整体一方,箭头指向部分一方。
在这里插入图片描述

在 Java 代码形式上,聚合和组合关系中的部分对象是整体对象的一个成员变量。但是,在实际应用开发时,两个对象之间的关系到底是聚合还是组合,有时候很难区别。在Java中,仅从类代码本身是区分不了聚合和组合的。如果一定要区分,那么如果在删除整体对象的时候,必须删掉部分对象,那么就是组合关系,否则可能就是聚合关系。从业务角度上来看,如果作为整体的对象必须要部分对象的参与,才能完成自己的职责,那么二者之间就是组合关系,否则就是聚合关系。

例如,汽车与轮胎,汽车作为整体,轮胎作为部分。如果用在二手车销售业务环境下,二者之间就是聚合关系。因为轮胎作为汽车的一个组成部分,它和汽车可以分别生产以后装配起来使用,但汽车可以换新轮胎,轮胎也可以卸下来给其它汽车使用。如果用在驾驶系统业务环境上,汽车如果没有轮胎,就无法完成行驶任务,二者之间就是一个组合关系。再比如网上书店业务中的订单和订单项之间的关系,如果订单没有订单项,也就无法完成订单的业务,所以二者之间是组合关系。而购物车和商品之间的关系,因为商品的生命周期并不被购物车控制,商品可以被多个购物车共享,因此,二者之间是聚合关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS

ESP32-C3因为其性价比高&#xff0c;价格便宜性能又好一直是量产的首选芯片&#xff0c;随着量产项目扩大&#xff0c;对接云服务器的情况也增加了&#xff0c;接下来小启给大家分享下启明云端ESP32-C3模组——WT32C3系列模组/开发板连接AWS亚马逊云方法。 WT32C3系列模组 WT3…

笨方法自学python(一)

我觉得python和c语言有很多相似之处&#xff0c;如果有c语言基础的话学习python也不是很难。这一系列主要是学习例题来学习python&#xff1b;我用的python版本是3.12 代码编辑器我用的是notepad&#xff0c;运行py程序用cmd 现在开始写第一个程序&#xff1a; print ("…

ViLT 浅析

ViLT 浅析 论文链接&#xff1a;ViLT 文章目录 ViLT 浅析创新点网络结构总结 创新点 本文先分析了4种不同类型的Vision-and-Language Pretraining(VLP) 其中每个矩形的高表示相对计算量大小&#xff0c;VE、TE和MI分别是visual embedding、text embedding和modality interact…

Excel 根据分类及组内序号进行编码

例题描述和简单分析 Excel 记录课程数据&#xff0c;未排序&#xff0c;部分如下&#xff1a; ABC1CourseDateTime2Word1-Sep-209:003Word1-Sep-209:004PowerPoint1-Sep-209:005Word1-Sep-2012:006PowerPoint1-Sep-2012:007Excel1-Sep-2012:008Word1-Sep-2012:00 现在要新增…

【CAD建模号】学习笔记(四):工作平面

工作平面介绍 CAD建模号右侧导航栏提供了很多便捷的工具&#xff0c;有测量工具、坐标系、模型和图层切换、视图切换等。 1. 测量工具组 测量工具可以测量图形的几何体积&#xff0c;长度&#xff0c;角度等。工具组包含如下&#xff1a; 测量几何&#xff1a;可以测量图形的面…

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时&#xff0c;你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…

【Python】IPython 魔法命令使用指南

依然记得从你口中 说出再见坚决如铁 昏暗中有种烈日灼身的错觉 黄昏的地平线 划出一句离别 爱情进入永夜 依然记得从你眼中 滑落的泪伤心欲绝 混乱中有种热泪烧伤的错觉 黄昏的地平线 割断幸福喜悦 相爱已经幻灭 &#x1f3b5; 周传雄《黄昏》 %run - 运行…

面向对象的三大特性:封装、继承、多态

一、封装 封装是面向对象的核心思想。是以类为载体&#xff0c;将对象的属性和行为封装起来&#xff0c;对外隐藏其实现细节。 封装保证了类内部数据结构的完整性&#xff0c;使得外部&#xff08;使用该类的用户&#xff09;不能轻易地直接操作此数据结构&#xff0c;只能执…

考了PMP后,NPDP到底还有没有必要考?NPDP通关宝典来啦!

NPDP和PMP相比&#xff0c;两者的相同点都是由美国发起的&#xff0c;都是管理行业的证书。区别也很大&#xff0c;PMP是项目经理国际认证证书&#xff0c;NPDP是产品经理认证证书&#xff0c;不过PMP已经由外专局引入国内二十多年了&#xff0c;在市面上知名度更高&#xff0c…

svg 元素 getBoundingClientRect() 数值为 0

问题 在页面在刷新时&#xff0c;想要立即获取页面中 svg 元素的宽高&#xff0c;做进一步的计算。发现通过 getBoundingClientRect 获取会有一定几率获取值为 0。 解决方案 监听 svg 元素的 load 事件&#xff0c;在回调中再获取。 svgElem.addEventListener("load&…

Vite创建Vue3项目识别 ../ 与 @/ 引入路径

在使用vite脚手架生成项目时,会出现一些引入路径失败的错误 例子:router中用 component引入路径时 引入 ../ 路径失败 找不到模块“../views/login/index.vue”或其相应的类型声明 {path: "/login",name: "login",component: () > import("../v…

鸿蒙开发接口Ability框架:【(窗口扩展能力)】

窗口扩展能力 WindowExtensionAbility基于ExtensionAbility&#xff0c;WindowExtensionAbility中展示的内容作为一个控件(AbilityComponent)内容展示在其他应用窗口中&#xff0c;实现在一个窗口中展示多个应用程序内容的功能。 说明&#xff1a; 本模块首批接口从API versio…

互斥锁和自旋锁的实现机制

本文介绍互斥锁和自旋锁的实现原理和工作过程 一、互斥锁 1.内存标记——线程id 互斥锁会记录下访问锁的线程的id&#xff0c;用于进行线程切换、组织阻塞队列等操作 2.阻塞队列 当多个线程试图获取同一把互斥锁&#xff0c;没有获取的锁的线程会被组织到阻塞队列中&#…

Keysight 是德 N1077B 光/电时钟恢复设备,收藏保存

Keysight N1077B是一款光/电时钟恢复设备&#xff0c;支持115 MBd至24 GBd的数据速率范围&#xff0c;适用于多模和单模光信号以及电信号。该设备能够处理PAM4和NRZ两种类型的数据信号&#xff0c;并提供符合标准的时钟恢复功能。 N1077B具备可调峰值和环路带宽&#xff08;高…

leetcode206-Reverse Linked List

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 分析 用一个指针记录当前位置&#xff0c;另外一个指针记录当前位置的前一个位置&#xff0c…

【经验分享】图片自适应窗口大小css;CSS实现背景图片全屏铺满自适应的方式

目录 设置背景颜色和边距 设置背景图片 调整背景图片尺寸和位置 完整代码 使用效果如下&#xff08;展示&#xff09; 网页版图片效果展示 手机版图片效果展示 如何使用 CSS 创建网页背景效果 在网页设计中&#xff0c;背景是一个重要的视觉元素&#xff0c;它可以为网…

39-5 入侵检测系统(IDS)- 安装配置IDS(注意我没安装成功,阅读需谨慎)

官网:Snort Rules and IDS Software Download 参考: (这位大佬分享了安装包下载链接):https://www.cnblogs.com/taoyuanming/p/12722263.html (安装过程参考这位大佬):Snort 安装与配置(CentOS 7)_centos 7 snort-CSDN博客一、安装 IDS(我这里在 CentOS 7 虚拟机中安…

【高校科研前沿】北师大陈晋教授团队在遥感顶刊发表最新成果:ClearSCD模型:在高空间分辨率遥感影像中综合利用语义和变化关系进行语义变化检测

01文章简介 论文名称&#xff1a;The ClearSCD model: Comprehensively leveraging semantics and change relationships for semantic change detection in high spatial resolution remote sensing imagery&#xff08;ClearSCD模型&#xff1a;在高空间分辨率遥感影像中综合…

深度访谈:为何满意度调查中重点客户推荐企业选择此方式?

在竞争激烈的市场环境中&#xff0c;企业为了不断提升服务质量、巩固客户关系&#xff0c;常常需要进行满意度调查。然而&#xff0c;传统的问卷调查和电话访问虽便捷&#xff0c;却难以触及客户的真实感受与期望。尤其对于重点客户而言&#xff0c;他们的需求和反馈更是企业持…

DNS之区域文件

区域文件 BIND&#xff08;Berkeley Internet Name Domain&#xff09;是最广泛使用的DNS服务器软件&#xff0c;它可以将人类可读的网站名称转换为互联网上的IP地址。在BIND中&#xff0c;你可以创建和编辑区域文件&#xff0c;以定义DNS服务器应如何解析特定的域名。 区域文件…