【UML】第4篇 UML公共机制(补扩展机制)

目录

一、扩展机制

1.1 构造型

1.2 标记值(Tagged Value)

 1.3 约束(Constraint)


上节扩展机制没有讲完,如上图。

一、扩展机制

1.1 构造型

UML中的扩展机制包括约束、构造型和标记值,其中的构造型定义如下:

构造型是一种扩展UML词汇的方法,用于定义新的构造块。简单来说,构造型就是UML中已有的构造块的基础上进行扩展,增加新的含义或特性,从而形成新的构造块。构造型在UML中通常用来表示具有特定语义的元素,这些元素在UML的基本元素中并不存在。

可以这样理解,有时候可能会遇到一些UML标准元素无法满足的特殊需求,这时就可以使用构造型来扩展UML的表达能力。下面是一些构造型的示例:

  1. 角色构造型(<<role>>):在UML中,类图通常用来表示系统中的类及其关系,但有时我们需要强调某些类在特定场景下的角色,这时可以使用角色构造型。例如,在一个在线购物系统中,用户类可能在不同的场景下有不同的角色,如“买家”和“卖家”,这时我们可以在类图上使用角色构造型来表示这些不同的角色。
  2. 边界构造型(<<boundary>>):在表示系统的交互界面时,我们可以使用边界构造型来表示与外部环境进行交互的组件。例如,在一个Web应用程序中,用户界面可能包括多个页面和组件,这些组件可以使用边界构造型来表示。
  3. 控制构造型(<<control>>):在UML中,我们通常使用状态图和活动图来表示系统的动态行为,但有时我们需要强调某些状态或活动在系统中的控制作用,这时可以使用控制构造型。例如,在一个交通管理系统中,交通信号灯的状态可能包括“红灯”、“绿灯”和“黄灯”,这些状态可以使用控制构造型来表示。
  4. 实体构造型(<<entity>>):在数据库建模中,我们经常需要表示实体和它们之间的关系,这时可以使用实体构造型来表示数据库中的实体。例如,在一个电子商务系统中,商品和订单都可以看作是实体,这些实体可以使用实体构造型来表示。

使用构造型时需要注意保持模型的清晰和一致性,避免出现过于复杂的构造型和混淆语义的情况。

1.2 标记值(Tagged Value)

标记值是一种用于为模型元素添加附加信息的机制。这些信息可能无法在UML的标准元素中直接表示,因此需要使用标记值进行扩展。

定义:

标记值是一种与UML元素相关联的键值对,用于存储和传递额外的非标准信息。它由两部分组成:标记(Tag)和值(Value)。标记是一个用于标识信息的关键词或短语,而值是与标记相关联的特定数据或信息。

标记值提供了一种灵活的方式来扩展UML元素的语义,使其能够适应各种特定领域或特定项目的需求。通过为UML元素添加标记值,我们可以传递额外的信息,这些信息可能对于理解模型的特定方面或满足特定的项目需求至关重要。

假设我们正在使用一个UML工具来建模一个Web应用程序,并且我们想要为类图中的某个类添加一个描述性的注释。我们可以使用标记值来实现这个目的。

  1. 首先,我们选择要添加标记值的类元素。
  2. 然后,我们使用UML工具提供的扩展机制来创建一个新的标记值。在这个例子中,我们可以选择"description"作为标记。
  3. 最后,我们将实际的描述性文本作为值与"description"标记相关联。例如,我们可以将值设置为"该类表示用户账户的信息"。

最终,这个标记值将作为类元素的一部分保存在UML模型中,并在需要时可以进行访问和解析。这样,我们就成功地使用标记值扩展了UML元素的语义,以满足特定的项目需求。

需要注意的是,标记值的使用应该谨慎并保持一致性,以避免过度复杂化和混淆语义的情况发生。

 1.3 约束(Constraint)

约束是一种用于限制和规定模型元素行为的规则或条件。通过定义约束,我们可以对UML模型中的元素进行语义上的限制和规定,以确保模型的准确性和一致性。

约束是一种语义上的限制条件,用于规定UML模型中元素的行为和关系。它可以表示为文字表达式、布尔表达式或其他形式的规则,用于限制模型元素的属性、操作或关系。

约束提供了一种机制,用于确保UML模型中的元素符合特定的语义规则和条件。这些规则和条件可以是全局的,也可以是特定于某个元素或关系的。约束可以表示为自然语言文本、形式化语言或其他方式,以便建模者和工具能够理解和验证它们。

约束可以用于表达各种条件和限制,例如:

  1. 属性值的范围限制:例如,一个类的属性可能有一个特定的取值范围,约束可以用于确保属性值在该范围内。
  2. 元素之间的关系限制:例如,两个类之间的关联可能有一个特定的多重性约束,用于规定关联的实例数量和角色。
  3. 行为的限制:例如,一个操作可能有一个前置条件或后置条件,约束可以用于规定操作执行的条件和结果。

假设我们有一个类图,其中包含一个表示用户的类和一个表示订单的类。我们想要确保每个用户只能创建一定数量的订单。为了实现这个需求,我们可以使用约束来限制用户和订单之间的关系。

  1. 首先,我们在类图中选择用户类和订单类之间的关联关系。
  2. 然后,我们使用UML工具提供的扩展机制来创建一个新的约束。在这个例子中,我们可以创建一个名为"MaxOrdersPerUser"的约束。
  3. 接下来,我们定义约束的具体规则。例如,我们可以将规则设置为"每个用户最多只能创建10个订单"。这可以通过使用布尔表达式或其他形式的规则来表示。
  4. 最后,我们将这个约束与用户类和订单类之间的关联关系相关联。

这样,当我们在模型中创建用户和订单实例时,UML工具将自动验证这个约束是否得到满足。如果某个用户试图创建超过10个订单,工具将会提示错误或警告信息,从而帮助我们确保模型的准确性和一致性。

通常,约束没有名称。它们是由其主体的内容来标识的。某些常用约束是由名称来标识的,因此,不必重复它们的主体的内容。当多个关联连接至同一个类时,就会应用 XOR 约束。

约束是通过用花括号({})将文本括起来的形式来表示的,并且包含在右上角被折叠的一个矩形中。

可以指定用来编写约束主体的语言,以便阅读该约束的其他人更容易理解它的条件或限制。可以使用下列语言来编写约束主体:

  • 自然语言(例如,英语)
  • 编程语言
  • 数学表示法
  • 对象约束语言(OCL)

需要注意的是,约束的使用应该谨慎并保持一致性,以避免过度复杂化和混淆语义的情况发生。同时,建模者需要仔细考虑约束的定义和验证方式,以确保它们能够有效地满足项目的需求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

yo!这里是Linux信号相关介绍

目录​​​​​​​ 前言 基本介绍 概念 信号列表 信号处理 产生(发送)信号 通过按键产生 系统函数产生 软件条件产生 硬件异常产生 阻塞信号 信号状态 sigset_t 状态相关函数 1.sigprocmask 2.sigpending 捕捉信号 内核态与用户态 捕捉过程 sigaction 后…

分库分表及ShardingShpere-proxy数据分片

为什么需要分库&#xff1f; 随着数据量的急速上升&#xff0c;单个数据库可能会QPS过高导致读写耗时过长而出现性能瓶颈&#xff0c;所以需要考虑拆分数据库&#xff0c;将数据库分布在不同实例上提升数据库可用性。主要的原因有如下&#xff1a; 磁盘存储。业务量剧增&…

nodejs项目设置全局变量(global)

文章目录 前言一、使用global二、解决type typeof globalThis has no index signature.ts问题1、新建 /types/global.d.ts文件2、或者直接在入口文件/src/index.ts定义 三、最终效果鼠标放在global上&#xff0c;可显示global的类型生效了~ ![在这里插入图片描述](https://img-…

I.MX RT1170双核学习(2):双核相互激活和启动流程

RT1170这个芯片带有双核&#xff1a;Cortex-M7和Corterx-M4&#xff0c;两个核都可以独立地运行&#xff0c;当然双核也可以同时运行。在上一篇文章中&#xff0c;介绍了一下在RT1170中消息模块MU的使用&#xff1a;双核通信之MU消息单元详解&#xff0c;因为这是双核之间用来通…

05 python数据容器

5.1 数据容器认识 5.2 python列表 5.2.1 列表的定义 演示数据容器之&#xff1a;list 语法&#xff1a;[元素&#xff0c;元素&#xff0c;....] #定义一个列表List List [itheima,uityu,gsdfg] List1 [itheima,6666,True] print(List) print(List1) print(type(List)) pr…

smartKettle离线部署及问题记录

目录 &#x1f4da;第一章 前言&#x1f4d7;背景&#x1f4d7;目的&#x1f4d7;总体方向 &#x1f4da;第二章 部署&#x1f4d7;源码下载&#x1f4d7;后端部署&#x1f4d5;导入后端项目&#x1f4d5;修改settings.xml(自动下载相关jar包)&#x1f4d5; 编译&#x1f4d5; …

0x13 链表与邻接表

0x13 链表与邻接表 数组是一种支持随机访问&#xff0c;但不支持在任意位置插入和删除元素的数据结构。与之相对应&#xff0c;链表支持在任意位置插入或删除元素&#xff0c;但只能按顺序依次访问其中元素。我们可以使用一个struct来表示链表的节点&#xff0c;其中可以存储任…

MySQL线上死锁案例分析

项目场景 项目开发中有两张表&#xff1a;c_bill(账单表)&#xff0c;c_bill_detail(账单明细表)&#xff0c;他们的表结构如下&#xff08;这里只保留必要信息&#xff09;&#xff1a; CREATE TABLE c_bill_detail (id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 主…

Gin之GORM 查询语句

前期工作可以看之前的&#xff08;连接数据库&#xff1b;以及确定要操作的库&#xff09; Gin之GORM 操作数据库&#xff08;MySQL&#xff09;-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134948202?spm1001.2014.3001.5502这次我们操作gin库下的另外一个…

Lenovo联想拯救者Legion Y9000X 2021款(82BD)原装出厂Windows10系统

链接&#xff1a;https://pan.baidu.com/s/1GRTR7CAAQJdnh4tHbhQaDQ?pwdl42u 提取码&#xff1a;l42u 联想原厂WIN10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&am…

记录汇川:套接字TCP通信-梯形图

H5U集成一路以太网接口。使用AutoShop可以通过以太网方便、快捷对H5U进行行监控、下载、上载以及调试等操作。同时也可以通过以太网与网络中的其他设备进行数据交互。H5U集成了Modbus-TCP协议&#xff0c;包括服务器与客户端。可轻松实现与支持Modbus-TCP的设备进行通讯与数据交…

Redis哨兵模式:什么是哨兵模式、哨兵模式的优缺点、哨兵模式的主观下线和客观下线、投票选举、Redis 哨兵模式搭建

文章目录 什么是哨兵模式哨兵模式的优缺点主观下线和客观下线投票选举哨兵模式场景应用Redis version 6.0.5 集群搭建下载文件环境安装解压编译配置文件启动关闭密码设置 什么是哨兵模式 哨兵模式是Redis的高可用解决方案之一&#xff0c;它旨在提供自动故障转移和故障检测的功…

数据分析基础之《numpy(3)—基本操作》

一、基本操作 1、adarray.方法() 2、np.函数名() 二、生成数组的方法 1、生成0和1的数组 为什么需要生成0和1的数组&#xff1f; 我们需要占用位置&#xff0c;或者生成一个空的数组 &#xff08;1&#xff09;ones(shape[, dtype, order]) 生成一组1 shape&#xff1a;形…

STM32读取EEPROM存储芯片AT24C512故障然后排坑记录

背景&#xff1a; 有一个项目用到STM32F091芯片去读取 AT24C512C-SSHD EEPROM 芯片&#xff0c;我直接移植了之前项目的IIC库&#xff0c;结果程序运行后&#xff0c;读不出EEPROM里面的数据。 摘要&#xff1a; 本文主要介绍一个基于STM32F091芯片和AT24C512C-SSHD EEPROM芯片…

Java面向对象思想以及原理以及内存图解

文章目录 什么是面向对象面向对象和面向过程区别创建一个对象用什么运算符?面向对象实现伪代码面向对象三大特征类和对象的关系。 基础案例代码实现实例化创建car对象时car引用的内存图对象调用方法过程 成员变量和局部变量作用范围在内存中的位置 关于对象的引用关系简介相关…

6、生产者压缩算法面面观

生产者压缩算法面面观 1、怎么压缩&#xff1f;2、何时压缩&#xff1f;2.1、生产者端2.2、Broker 端 3、何时解压缩&#xff1f;4、各种压缩算法对比 压缩的思想&#xff0c;实际就是用时间去换空间的经典 trade-off 思想&#xff0c;在 Kafka 中&#xff0c;就是用 CPU 时间去…

Linux | 多线程

前言 本文主要介绍多线程基础知识&#xff0c;以及使用多线程技术进行并发编程&#xff1b;最后会介绍生产者消费者模型&#xff1b; 一、线程基本认识 1、什么是线程 如果你是科班出生&#xff0c;你肯定听过线程相关概念&#xff1b;但是你可能没有真正搞懂什么是线程&#…

十八)Stable Diffusion使用教程:艺术二维码案例

今天说说怎么样使用SD生成艺术二维码。 我们直接上图。 方式有三种,分别如下: 1)方式一:直接 contronet 的tile模型进行控制 使用QRBTF Classic生成你的二维码。 首先输入网址,选择喜欢的二维码样式(推荐第一种就行): 然后选择相应参数,这里推荐最大的容错率,定…

Linux 安装图形界面 “startx”

———————————————— 报错&#xff0c;如下&#xff1a; bash :startx command not found ———————————————— 解决方法&#xff1a; 1.先安装 — X Windows System&#xff0c;输入以下命令&#xff1a; yum groupinstall “X Window System”…

第一个“hello Android”程序

1、首先安装Android studio&#xff08;跳过&#xff09; Android Studio是由Google推出的官方集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于Android应用程序的开发。它是基于JetBrains的IntelliJ IDEA IDE构建的&#xff0c;提供了丰富的功能和工具&#xff0…