UML之类型
类型是对一个元素能够拥有的值的描述。类型可能是一个无限的集合,例如Integers类型(整数),理论上它的值有无限个;也可能是一个有限的集合,例如Boolean类型(布尔),它只有True和False两个值。
定义了属性的类也是类型,因为类的值(即类的实例)也是一个特定的集合,我们自己定义的类可以看作是自定义类型。
1.类 VS 数据类型
有时候我们会难以分清类和数据类型,它们都是类型,但是它们的行为不同,其主要区别在于身份的一致性。
想象一下,你有两本相同的书(同一版次的两册书),它们的所有“属性”都相同,但有两个“实体”,这本和那本,我们会说你有“两本书”。这两本书内在的属性都完全相同,但在现实世界中,你有两本书,而不是一本,在计算机世界中,有两个书的实例,而不是一个。这是类的情况。
而两个数据类型的“实例”如果相同,即数值相同,那它们就是同一个。对于简单的基本数据类型尤为如此。例如“一个”整数99与“另一个”整数99,它们是相等的,整数的集合里并不存在两个99;“一个”2024年和“另一个”2024年也是相同的,年份中也只有一个2024年。对于复杂类型,比如自定义的数据类型,情况是类似的。
2.基本类型
在UML中定义了为数不多的几个基本类型,它们分别是Integer、String、Boolean和Real,部分UML工具中提供的基本类型还包括Date和Time。

UML中的类型不与任何实际的编程语言相匹配。例如,Integer类型的存储长度,在编程语言中可能是2字节、4字节或者8字节,而在UML中它是任意长度;Boolean类型的长度不是1、4或8位,值不是0或者1,它就是True或False;String也是任意长度,不需要用null(0)表示字符串结束。
当然,如果在UML工具中使用了自动生成程序代码的功能,那么通常工具会提供相应编程语言的基本数据类型供使用,或者我们先完成模型设计再选择编程语言,那么UML工具将选择最接近编程语言中定义的数据类型完成代码生成。
3.枚举(Enumeration)
枚举是有限定值的数据类型,这些限定值是一个预先定义好的字面值,它与大多数编程语言中的枚举非常相似。定义枚举时,在图形上部区域需使用《enumeration》表明版型,并指定枚举名称;然后在其下的区域(标准名称为“literals”)中定义枚举中的各个成员。
例如我们定义一个名为VisibilityKind的枚举用于表示UML中相关对象的属性和操作的可见性,如下图所示,它有四个被允许的值Public、Private、Protected和Package,同时我们使用注释说明了这四个值在UML中的符号表示。

再如我们定义一个名为TrafficLightColorKind的枚举用于表示交通信号灯的颜色,如下图所示,它的值的限定范围则是交通信号灯的绿、黄、红三个颜色。

注:在UML规范中,枚举名称应以“Kind”作为后缀,通常我们应遵循这些规范,除非您有充足的理由使用自己定义的规则。
枚举值仅在其所属的枚举类型中有唯一标识且可被识别,不同枚举类型之间的值不具有可比性。例如有一个名为PrimaryColorKind的枚举,如下图所示,它定义了三个值:Red、Green和Blue。尽管PrimaryColorKind和TrafficLightColorKind中都定义了Green和Red,但它们并不相等(即PrimaryColorKind.Green ≠ TrafficLightColorKind.Green),甚至它们不能进行比较,因为它们是不同的类型,故而不具有可比性。

枚举也可以被继承或者泛化,就像类的继承与泛化一样。例如以下枚举DirectionalTrafficLightColorKind继承于前面定义的枚举TrafficLightColorKind。

枚举DirectionalTrafficLightColorKind定义了三个允许的值,而它又继承于定义了三个值的枚举TrafficLightColorKind,因而枚举DirectionalTrafficLightColorKind类型可用的值一共有六个。
枚举中定义的值在使用中应当被视为常量,即它不可以被改变。我们不应将其放在表达式的左侧为其赋值来改变它的值。
在UML中,我们无需关注枚举值的内部表示,它可以是字符串,由0、1或者其他值开始的整数。在代码生成工具中,一般会允许你指定这些值,但是这些并不是UML规约中的内容。
4.自定义类型(DataTypes)
前面我们介绍了基本数据类型和枚举,正如在面向对象的编程中仅使用基本数据类型和枚举是很难体现“面向对象”的,所以我们可以根据需要定义自定义类型。UML提供了这种能力与支持。
自定义类型使用版型《dataType》定义,例如下图表示我们定义表示日期的Date类型。

在Date类型中,我们指定了三个public的字段year、month、day分别用于表示年、月、日,并且通过“{}”给出了这三个字段的取值约束。为了方便Date类型的运算,也同时定义了四个public的操作。
关于自定义类型中字段的约束,更正式的表示是在一个独立的区域中说明,例如Date类型的定义如下图所示。

注:在UML规范中,每个约束用一对“{}”包含,其中“..”表示中间省略的一个区间。
UML之类型的更多相关文章
- UML建模类型(转载)
区分UML模型, UML建模用于不同类型的不同的图.有三个重要类型的UML建模: 结构建模: 系统结构建模捕捉静态功能.它们包括下列各项: 类图 对象图 部署图 包图 复合结构图 组件图 结构模型代表 ...
- UML的类型
分类 UML从考虑系统的不同角度出发,定义了用例图.类图.对象图.包图.状态图.活动图.序列图.协作图.构件图.部署图等10种图. 常见的UML图有用例图(Use Case Diagram).类图(C ...
- 使用Visio进行UML建模
http://www.qdgw.edu.cn/zhuantiweb/jpkc/2009/rjkf/xmwd/Visio_UmlModel.htm#_Toc80417837 内容提纲: 1.VISIO中 ...
- UML 教程
UML 教程 关键词:部署图, 组件图, 包图, 类图, 复合结构图, 对象图, 活动图, 状态机图, 用例图, 通信图, 交互概述图, 时序图, 时间图 简介 部署图 组件图 包图 类图 复合结构图 ...
- 使用包图 (UML Package Diagram) 构建模型架构
包图用于以包包含层次结构的形式显示模型的组织方式.包图还可以显示包包含的模型元素以及包与其包含的模型元素之间的依赖关系. 在项目开发中,模型元素可能会很快达到大量数量,因此需要以某种方式构建它们,即使 ...
- DataUml Design 教程5-代码模板介绍(甚于T4模板技术)
DataUml Design 代码模板全然基于C#语言来编写的. 不懂写模板的能够请教作者,随时欢迎. 以下是一段模板代码,这段代码能够获取一个类结构的全部信息. <#@ ...
- IntelliJ IDEA 还能画思维导图,果然最强 IDE!
最近栈长发现 IntelliJ IDEA 居然还能画思维导图,太牛逼了! 当然这得借助 IDEA 的 UML 插件,因为它本身也是一个 UML 图,所以这篇就从 UML 图开撕,看 IDEA 怎么画思 ...
- 类图示例-订单系统 / Class Diagram - Order System
类图示例-订单系统 / Class Diagram - Order System 什么是类图? 类图通过显示它的类和它们之间的关系来概述系统.类图是静态的 - 它们显示交互的内容,但不显示交互时会发生 ...
- UML图基本类型
use case model用例模型 analysiss model分析模型 design model设计模型 implementation model实现模型 deployment model部署模 ...
- UML课程复习重点
第一章 一.UML图示建模工具 二.UML--统一建模语言,以图形符号为基础,描述软件模型既简洁又清晰.它不是开发方法,是独立于任何开发方法之外的语言.它用于描述软件系统分析.设计和实施中的各种模型. ...
随机推荐
- kotlin类与对象——>嵌套类与内部类、枚举类
1.嵌套类,类可以嵌套在其他类中: class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } val demo = ...
- nginx配置tomcat的负载均衡记录
实现效果 (1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均在 8080和 8081 端口中. 准备工作 (1)准备两台 tomcat 服 ...
- Linux基础-学会使用命令帮助
概述 使用 whatis 使用 man 查看命令程序路径 which 总结 参考资料 概述 Linux 命令及其参数繁多,大多数人都是无法记住全部功能和具体参数意思的.在 linux 终端,面对命令不 ...
- .NET 8 高性能跨平台图像处理库 ImageSharp
前言 传统的 System.Drawing 库功能丰富,但存在平台限制,不适用于跨平台开发..NET 8 的发布,ImageSharp 成为了一个更好的选择. ImageSharp 是一个完全开源.高 ...
- 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现六
一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...
- ARC133D Range XOR
ARC133D Range XOR 题目链接:[ARC133D] Range XOR 非常好数位 dp. 思路 根据异或的前缀和,我们可以把式子化成这样. \[\sum_{i=l}^r\sum_{j= ...
- Java多线程设计模式之线程池模式
前序: Thread-Per-Message Pattern,是一种对于每个命令或请求,都分配一个线程,由这个线程执行工作.它将"委托消息的一端"和"执行消息的一端&qu ...
- python开发包之远程隧道链接sshtunnel
缘起: 公司很多的数据库的链接都是本地连接或者指定ip地址可以访问, 如果你没有该ip权限, 但是你可以登录该数据库所在的服务器, 这个时候就可以使用ssh链接上这个服务器,以此为跳板进行数据库的链接 ...
- 使用 JsonSchema 校验 JSON数据
有时候JSON 数据格式需要校验是否合法,我们可以使用 JsonSchema 来校验数据是否合法. 引入 pom.xml https://json-schema.org/ <dependency ...
- Node.js 介绍和特点
1.node.js是什么 node.js不是一门语言,而是一个开发平台,是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 何为开发平台:有对应的语言和实现特定功能的api 2. ...