UML静态图-类图

概述

静态图包含类图、对象图和包图的主要目的是在系统详细设计阶段,帮助系统设计人员以一种可视化的方式来理解系统的内部结构和代码结构,包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。

一、类图的表示法

类图(Class Diagram)是描述类、接口、协作及它们之间关系的图,用来显示系统中各个类的静态结构。类图是定义其他图的基础,在类图基础上,可以使用序列图、协作图、组件图和部署图等进一步描述系统其他方面的特性。
类图包括6个元素:类(Class)、接口(Interface)、泛化关系(Generalization)、关联关系(Association)、依赖关系(Dependency)及实现关系(Realization)。

1.类图的表示法
类的名称是每个类中所必有的构成元素,用来区分其他的类。类名是一个字符串,称为简单名字。路径名字是在类名前加包含类的包名为前缀。例如 User、java::uti::List 都是合法的类名。
类的 UML表示为一个长方形垂直地分为3个区。顶部区域显示类的名字,中间区域列出类的属性变量,底部区域列出类的操作函数。当在一个类图上画一个类元素时,必须要有顶端的区域,下面的两个区域是可选择的(当图描述仅仅用于显示分类期间关系的高层细节时,下面的两个区域是不必要的)。
在这里插入图片描述
对应代码为:

public class User{
}

2.类图属性的表示法

类的属性(中部区域)在分隔线上列出每一个类的属性,类可以有任意多个属性,也可以没有属性。按照 UML的约定,单字的属性名需要小写。如果属性名包含多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。在类图中属性只要写上名字就可以了,如图3-2所示。

对于属性,还需要了解以下3个方面。
1)属性类型
也可以在属性名后通过冒号来执行属性的类型,如图3-3所示
在这里插入图片描述
对应的类代码为:

public class User {private String username;private String password:
}

2)属性默认值
也可以在属性名后跟上类型甚至默认值,如图3-4所示:
在这里插入图片描述
对应的类代码为:

public class User {private String username = "admin';private String password = "123";
}

3)属性的可见性
类中属性的可见性主要包括:

  • 公有,使用关键字 public。
  • 受保护,使用关键字 protected.
  • 私有,使用关键字 private。
  • 默认,不使用关键字。

4种可见性如图 3-5 所示。

在这里插入图片描述
3.类图操作的表示法
类的任意一个实例对象都可以调用操作,并可能影响该对象行为的实现。类操作记录在类图长方形的第3个(最低的)区域中,它也是可选择的。与属性一样,类的操作以列表格式显示,如3-6 所示。
在这里插入图片描述
操作的命名与属性类似,第一个单词的首字母小写,后续每一个单词的首字母要大写。操作也拥有不同的可见性,默认的可见性为public的,与属性相似,它也可以设置如下4种可见性:

  • 公有,使用关键字public。
  • 受保护,使用关键字 protected。
  • 私有,使用关键字 private。
  • 默认,不使用关键字。

4种可见性显示的图标分别为如图3-7所示的 getUsername()、setUsername()、getPassword()和setPassword()前的图标。
在这里插入图片描述

二、接口的表示法

接口与类相似,它仅仅包含操作但不包含属性,且它没有对外界可见的关联。它直接对应于 Java中的一个接口类型。接口可用如图3-8所示的两种图来表示,两条竖线的上方为接口名,下方为接口的操作列表。
在这里插入图片描述
以上对应的 Java 类代码如下:

public interface MyInterface {public void insertUser();
}

接口除了没有属性外,其他的定义都与类相同,这里就不再重复介绍。

三、类图之间的 4 种关系

类之间存在4种关系:

  • 泛化关系(Generalization)表示类的继承。
  • 关联关系(Association)表示类的变量,还包括聚合和组合
  • 依赖关系(Dependency)表示局部变量。
  • 实现关系(Realization)–表示接口的实现。

1. 泛化关系(Generalization)–表示类的继承
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。泛化关系是从子类指向父类的,或从实现接口的类指向被实现的接口,与继承的方向相反,如图3-10所示。
在这里插入图片描述
泛化关系在 Java 语言中可以直接使用关键字 extends 表示,描述类与类、接口与接口之间的泛化。以上的泛化可以表示为如下的代码:

public class ClassA extends ParemtClass {}
public class ClassB extends ParemtClass {}

2.关联关系(Association)-表示类的变量
关联关系是类与类之间的连接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。

  • 双向的关联可以有两个箭头或者没有箭头,通常不鼓励使用双向的关联。
  • 单向的关联有一个箭头,表示关联的方向,单向的关联使用更为普遍。

每一个关联都有一个名字,如图3-11所示。
在这里插入图片描述
在Java 代码中,关联关系是表示变量的引用。例如上面的例子中,类 User 拥有一个 Book 类型的变量 book,这个变量实现了这两个类之间的关联关系。以上的关联可以用下面的代码表示:

public class User {...private Book book;...
}

在关联的两端可以使用一个数字表明该端可以有几个实例,数字可以有以下4种用法:

  • 0…1–表示零个或一个实例。
  • 0…或者–表示对实例的数目没有限制。
  • 1–表示只有一个实例。
  • ] *_-表示至少有一个实例。

如图 3-12所示,它表示每一个User 实例可以拥有任意数量的 Book 实例。
在这里插入图片描述
一个关联关系往往可以进一步确定为聚合关系或者合成关系。

1)聚合关系(Aggregation)
聚合关系表示整体和部分关系的关联,聚合关系描述了“hasa”的关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成 Java中的一个实例作用域变量。聚合是一种单向关系,聚合与关联的区别在于聚合的两个类之间的关系在概念层次上不是一个级别的,一般来说聚合中的类关系总是一个类比另一个类要高级一些,而关联基本上是平级的。例如电脑是 CPU、主板、机箱的聚合。

2)组合关系(Compostion)
组合关系是聚合关系中的一种特殊情况,是更强形式的聚合,又被称为强聚合。在组合中,成员对象的生命周期取决于聚合的生命周期。组合也是非共享的,所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。例如,人是大脑、四肢、躯干的组合。

3.依赖关系(Dependency)-表示局部变量
依赖关系也是类与类之间的连接,它是单向的关系。依赖关系表示一个类依赖于另一个类。例如 User 需要办理图书证 BookCard,则它就依赖于类 BookCard,其表示关系如图 3-13 所示。
在这里插入图片描述
以上的关联可以用下面的代码表示:

public class User {...public void handleBookCard(BookCard bookcard) {...}...
}

在 Java 中依赖关系体现为局部变量、方法的参数,以及对静态方法的调用,也就是说,如果类A的某一个局部变量类型是类 B,那么类A就依赖于类 B。如果类A的一个方法包含有B类型的参数,或A调用了B中的一个静态方法,那么A都应该依赖于B。
如果B出现在A的实例变量中,那么依赖关系就会扩大为关联关系,因此,泛化关系>关联关系>依赖关系。

4.实现关系(Realization)–表示接口的实现
实现关系表示类对接口的实现关系。实现关系是从子类指向接口类的,实现的方向相反,如3-14 所示。
在这里插入图片描述
实现关系在 Java 语言中可以直接使用关键字 implements 表示,描述类与接口之间的实现。以上的实现可以表示为如下的代码:

public class ClassC implements Paremtlnterface {}
public class ClassD implements ParemtInterface {}

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

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

相关文章

轴承阀门5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

轴承阀门5G智能工厂工业物联数字孪生平台作为其中的佼佼者,以其高效、智能、灵活的特点,为制造业的数字化转型提供了强有力的支撑。数字孪生技术,作为智能制造的重要一环,通过构建虚拟与现实相结合的数字化模型,实现了…

离散数学答疑 1

全功能连接词组: 最小全功能联结词组: C:祈使句 6->8是叫条件转化(置换)吗 反证法: 结论取反作为条件,并且在推理过程中,既推出有B也有反B,则推理成功 反证法算是间…

轻松追剧不费力:短剧小程序引领观剧新潮流

随着时代的进步和科技的发展,人们的娱乐方式也在不断变化。如今,短视频、短剧等碎片化内容正逐渐成为人们日常生活中的一部分。而短剧小程序,以其便捷、高效、内容丰富的特点,正在引领一场观剧新潮流。 一、短剧小程序的崛起 在快…

能获取淘宝商品简化链接的浏览器书签

零.冗长的商品链接 访问网页版本淘宝时,浏览器的地址栏显示的链接太长就像这样(此链接非真实商品): 于是使用如下方法 一.使用浏览器书签获取淘宝商品简化链接 1.新建书签 Chrome - 打开书签管理器(CtrlShiftO) - 左侧选择书签…

【python - 函数】

一、纯函数和非纯函数 纯函数(Pure functions):函数有一些输入(参数)并返回一些输出(调用返回结果)。 >>> abs(-2) 2 可以将内置函数 abs 描述为接受输入并产生输出的小型机器。 ab…

C# Onnx E2Pose人体关键点检测

C# Onnx E2Pose人体关键点检测 目录 效果 模型信息 项目 代码 下载 效果 模型信息 Inputs ------------------------- name:inputimg tensor:Float[1, 3, 512, 512] --------------------------------------------------------------- Outputs ---…

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率:电商API接口允许不同的应用程序之间高效地进行交互,节省了大量的人力物力成本,使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性:通过对数据进行安全加密,API接口实现了对数据的保护…

JVM参数配置

JVM参数的三种表示方法 在jvm中,jvm虚拟机参数有以下三种表示方法: 标准参数(-)所有的JVM实现都必须实现这些参数的功能,而且向后兼容非标准参数(-X),默认jvm实现这些参数的功能&…

罗永浩创业史!普通人也能逆袭!2024轻资产创业项目!2024普通人的出路! 2024普通人做什么行业赚钱!

罗永浩出身草根,一路打拼至今,虽然屡屡受挫但是从未妥协,罗永浩真正的诠释了什么叫“彪悍的人生不需要解释”! 回顾罗永浩的传奇创业史: 1. 从新东方出来做牛博网--失败 2.创办老罗英语培训学校--失败 3.致敬乔布斯做锤子科技-…

写一个盲盒模拟器

最近想写一个小程序,随便写一个玩吧,先想了下功能: 1.有很多盲盒,可以选择模拟开启 2.自定义盲盒,我们可以自定义制作盲盒自己玩 3.用户界面,记录盲盒历史,可以给坏越提意见 所用技术栈&…

django 旅游服务系统-计算机毕业设计源码88939

摘 要 旅游服务系统采用采用django框架、python语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分,管理员管理主要功能包括:首页、轮播图(轮播图管理)、公告信息管理(公告信息)、资源管理&…

开源模型应用落地-LangSmith试炼-入门初体验-监控和自动化(五)

一、前言 在许多应用程序中,特别是在大型语言模型(LLM)应用程序中,收集用户反馈以了解应用程序在实际场景中的表现是非常重要的。 LangSmith可以轻松地将用户反馈附加到跟踪数据中。通常最好提供一个简单的机制(如赞成和反对按钮)来收集用户对应用程序响…

neo4j入门并使用案例说明

1、neo4j是什么 Neo4j是一个高性能的NoSQL图形数据库,它将结构化数据存储在网络(在数学角度称为图)上,而不是传统的表中。Neo4j是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。它因其高性能、轻量级、易嵌入和…

大模型时代的具身智能系列专题(九)

NYU Lerrel Pinto团队 Lerrel Pinto是NYU Courant的计算机科学助理教授,也是用机器人和人工智能实验室(CILVR小组)的一员。在加州大学伯克利分校读博士后,在CMU机器人研究所读博士,在印度理工学院古瓦哈蒂读本科。研究目标是让机器人在我们生…

Linux 35.5 + JetPack v5.1.3@FUEL编译安装

Linux 35.5 JetPack v5.1.3FUEL编译安装 1. 源由2. 编译&安装Step 1:依赖库安装Step 2:建立工程Step 3:编译工程Step 4:安装工程 3. 问题汇总3.1 fuel_planner/exploration_manager - dw3.2 fuel_planner/plan_env - OpenCV库…

找不到d3dx9_43.dll怎么修复?这个几种修复方法轻松解决

在计算机使用过程中,我们常常会遇到一些错误提示,其中之一就是“d3dx943.dll丢失”。这个问题通常会导致某些游戏或应用程序无法正常运行。为了解决这个问题,我总结出了以下五种解决方法,希望能对遇到类似问题的朋友们有所帮助。 …

QNX 7.0.0开发总结

1 QNX编译 1.1 基本概念 QNX可以直接使用Linux Makefile编译库和二进制,在Makefile文件中指定CCaarch64-unknown-nto-qnx7.0.0-g,或者CCx86_64-pc-nto-qnx7.0.0-g,保存退出后,运行source /qnx_sdk_path/qnxsdp-env.sh,…

前端canvas绘图,利用canvas在图片上面绘制标记以及给canvas添加点击事件。

前端canvas绘图&#xff0c;利用canvas在图片上面绘制标记以及给canvas添加点击事件。 需要实现的效果如下图: 首先需要一个承载的核心画布 <canvas id"canvas" width"800" height"600"></canvas>全部代码&#xff1a; <!DOCT…

LabVIEW减压阀和温控阀综合测试系统

在使用LabVIEW开发阀门测试软件时&#xff0c;特别是针对减压阀和温控阀&#xff0c;测试内容和注意事项包括以下方面&#xff1a; 测试内容 压力测试&#xff1a; 入口压力&#xff1a;测量阀门在不同入口压力下的表现。 出口压力&#xff1a;确保减压阀能够将出口压力控制在…

systemctlm-cosim-demo项目分析

概述 systemctlm-cosim-demo项目是Xilinx的systemc库的demo工程。 环境安装 qemu安装 cd xilinx_proj/Downloads git clone https://github.com/Xilinx/qemu.git cd qemu git checkout 74d70f8008# Configure and build # zynq7000 # ./configure --target-list"arm-s…