类型是对一个元素能够拥有的值的描述。类型可能是一个无限的集合,例如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之类型的更多相关文章

  1. UML建模类型(转载)

    区分UML模型, UML建模用于不同类型的不同的图.有三个重要类型的UML建模: 结构建模: 系统结构建模捕捉静态功能.它们包括下列各项: 类图 对象图 部署图 包图 复合结构图 组件图 结构模型代表 ...

  2. UML的类型

    分类 UML从考虑系统的不同角度出发,定义了用例图.类图.对象图.包图.状态图.活动图.序列图.协作图.构件图.部署图等10种图. 常见的UML图有用例图(Use Case Diagram).类图(C ...

  3. 使用Visio进行UML建模

    http://www.qdgw.edu.cn/zhuantiweb/jpkc/2009/rjkf/xmwd/Visio_UmlModel.htm#_Toc80417837 内容提纲: 1.VISIO中 ...

  4. UML 教程

    UML 教程 关键词:部署图, 组件图, 包图, 类图, 复合结构图, 对象图, 活动图, 状态机图, 用例图, 通信图, 交互概述图, 时序图, 时间图 简介 部署图 组件图 包图 类图 复合结构图 ...

  5. 使用包图 (UML Package Diagram) 构建模型架构

    包图用于以包包含层次结构的形式显示模型的组织方式.包图还可以显示包包含的模型元素以及包与其包含的模型元素之间的依赖关系. 在项目开发中,模型元素可能会很快达到大量数量,因此需要以某种方式构建它们,即使 ...

  6. DataUml Design 教程5-代码模板介绍(甚于T4模板技术)

    DataUml Design 代码模板全然基于C#语言来编写的. 不懂写模板的能够请教作者,随时欢迎. 以下是一段模板代码,这段代码能够获取一个类结构的全部信息.             <#@ ...

  7. IntelliJ IDEA 还能画思维导图,果然最强 IDE!

    最近栈长发现 IntelliJ IDEA 居然还能画思维导图,太牛逼了! 当然这得借助 IDEA 的 UML 插件,因为它本身也是一个 UML 图,所以这篇就从 UML 图开撕,看 IDEA 怎么画思 ...

  8. 类图示例-订单系统 / Class Diagram - Order System

    类图示例-订单系统 / Class Diagram - Order System 什么是类图? 类图通过显示它的类和它们之间的关系来概述系统.类图是静态的 - 它们显示交互的内容,但不显示交互时会发生 ...

  9. UML图基本类型

    use case model用例模型 analysiss model分析模型 design model设计模型 implementation model实现模型 deployment model部署模 ...

  10. UML课程复习重点

    第一章 一.UML图示建模工具 二.UML--统一建模语言,以图形符号为基础,描述软件模型既简洁又清晰.它不是开发方法,是独立于任何开发方法之外的语言.它用于描述软件系统分析.设计和实施中的各种模型. ...

随机推荐

  1. NIO聊天室

    SocketChannel 和 ServerSocketChannel ServerSocketChannel 用于创建服务器端套接字,而 SocketChannel 用于创建客户端套接字.它们都支持 ...

  2. php如何快速入门

    PHP交流群  656679284  为PHP广大爱好者提供技术交流,有问必答,相互学习相互进步! 学习教程 学习前期,首要的WEB前端基础知识,比如html5/css3/java/jquery有个简 ...

  3. 做AI运动小程序有哪些解决方案,如何进行选型?

    引言:随着深度学习技术的发展进步,已经不再依赖强大的GPU算力,便可实现AI推理了,让AI技术渗透到了电脑.手机.智能设备等各类设备.体育.健身行业也不例外,阿里体育等IT大厂,推出的乐动力.天天跳绳 ...

  4. CommonsCollections3(基于ysoserial)

    环境准备 JDK1.7(7u80).commons-collections(3.x 4.x均可这里使用3.2版本).javassist(3.12.1.GA) JDK:https://repo.huaw ...

  5. 关于linux 终端的小命令

    Ubuntu 为例 ctrl alt t   新开一个终端(默认工作目录) ctrl shift t 在当前终端开一个tab (工作目录和当前tab一致 当你进入一个很深的目录的时候需要新开一个命令行 ...

  6. Python打包工具之pyinstaller

    前言: 近期使用PySimpleGUI开发了一款开发者工具X-助手工具,意打造成平常开发助手,无论是图片还是网址的处理等等都需要这一个工具即可,无需在网上找各个网站去找解决方案, 对于GUI的打包工具 ...

  7. Mybatis【10】-- Mybatis属性名和查询字段名不同怎么做?

    很多时候我们有这样的需求,数据库的字段名与实体类的属性名不一致,这个时候我们需要怎么做呢?有两种解决方案,第一种:直接在查询的时候使用别名,将别名设置成与实体类的属性名一致.第二种:使用resultT ...

  8. 升级Linux内核版本

    ```shell# 查看内核版本,jw版本ceph默认format=2, 2.x 及之前的的内核版本需手动调整format=1# 4.x之前要关闭object-map fast-diff deep-f ...

  9. JPAAS整合宝蓝德

    现在软件国产化的需求成了刚需了,因此在实施的过程中,我们整合了宝蓝德,我将过程写一下. 1.宝蓝德提供的程序包. 包名 说明 bes-actuator-spring-boot-2.x-starter- ...

  10. Adobe PS 2024 软件分享 torrent

    Adobe-Photoshop-2024-25.5.0.375 下载工具建议使用 qBittorrent-enhance,qBittorrent, Transmission, uTorrent 等. ...