类型是对一个元素能够拥有的值的描述。类型可能是一个无限的集合,例如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. Edge缓存清理操作说明

    1. 打开Edge浏览器 2. 点击屏幕右上角三个点的按钮 3. 在出现的菜单里面选择"设置" 4. 在出现页面里面左侧选择"隐私.搜索和服务",然后右侧点击& ...

  2. JuiceFS CSI:Mount Pod 的平滑升级及其实现原理

    当集群中需要升级 Mount Pod 时,目前推荐的方式是更新配置后重新挂载应用 Pod 进行滚动升级,但这种升级方式的问题在于需要业务重启. 如果对业务的使用模式很清楚时,比如没有数据写入等,也可以 ...

  3. WPS Excel中配置下拉多选(VBA)

    网上找到两种方案,一种利用数据选择其他单元格,也就是在其他单元格建数据.需求是模板,不合适 这里我用的VBA,踩了挺多坑,详细说下 首先更新WPS为最新版,确保可用VBA和JSA 确定使用VBA还是J ...

  4. cnblogs的GitHub同步markdown文件的blog如何识别文章的唯一性(身份ID如何判定)

    本篇blog是写在GitHub的对应的仓库中的. cnblogs会给终身用户提供一个把GitHub仓库中的markdown文件同步到cnblogs上的一个服务,本文就是使用这个服务同步到个人blog地 ...

  5. AI千恋万花(java调用api实现)附完整项目及注释)重置版)

    感觉博客的第一版质量有点低下了,删了重置一下,希望能给其他人的代码带来一些灵感 前情提要:https://www.cnblogs.com/h4o3/p/18523151 由于是匆忙制作的老婆系统,主界 ...

  6. .NET现在可以做什么,有哪些公司在用的?

    前言 本文大姚和大家一起来分析一下.NET现在可以做什么,.NET未来的发展趋势在哪,有哪些公司在使用的. .NET简单介绍 .NET是一个开源(MIT License).免费.跨平台的开发人员平台框 ...

  7. Excel 导入解析数据 NPOIExcelHelper

    前端代码 html <link href="~/lib/bootstrap-fileinput/css/fileinput.min.css" media="all& ...

  8. IPC-7093A-CN 中文 2020底部端子元器件(BTCs)设计和组装工艺的实施

    IPC-7093A 标准为实施底部端子元器件(BTCs)提供了基本的设计和组装指南.具体而言,IPC-7093A 提供了与 BTCs 相关的关键设计.材料.组装.检查.维修.质量和可靠性问题的指南. ...

  9. C#/.NET/.NET Core技术前沿周刊 | 第 14 期(2024年11.18-11.24)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  10. Spring + EHcache配置

    需要使用Spring来实现一个Cache简单的解决方案,具体需求如下:使用任意一个现有开源Cache Framework,要求可以Cache系统中Service或则DAO层的get/find等方法返回 ...