如何理解UML2.5.1(04篇)

news2024/11/19 1:23:29

        第一步:

        这里发现UML2.5.1中的一处错误:

 

图四、Figure9.10中的一处错误。

        错误就在于最下面一个关联右端点处的标记redefines,有了这个标记,就应该意味着此关联特化了某个关联,但是如果我们用“A_ownedAttribute_class”搜索本文档,就会得到如下内容:

        11.9.12 A_ownedAttribute_class [Association]

        11.9.12.1 Diagrams

        Classes, Properties

        11.9.12.2 Member Ends

·         Class::ownedAttribute

·         Property::class

        可以看到,其中并无任何其特化其它关联的信息。

        因此可以断定,此处的redefines应该是一处错误,正确的内容应该是:

        subsets ownedMember。

        第二步:

        经过进一步的排查,发现这里不是错误,而是本规范遗漏了一个关联泛化关系(在类图中这个关联泛化关系仍旧存在,只是在上面的文字(11.9.12)中被遗漏了),即关联 A_ownedAttribute_class应该是关联A_ownedAttribute_structuredClassifier的特化。这两个关联的一端都是Property(此端角色名都是ownedAttribute),另一端则分别为Class和StructuredClassifier,它们在这一端的角色名分别为class和structuredClassifier。

        通过这个错误的排查,我们可以发现这样一个现象:同一关联两端的标记如果有多个,则一端的标记和另一端的标记不一定具有一致的前后关系。就以图四为例,如果最下面的关联(Class和Property之间的关联)两端的标记的前后关系一致,则分别应该是:

        {subsets namespace, subsets structuredClassifier, subsets classifier}

        {ordered, subsets attribute, redefines ownedAttribute, subsets ownedMember}

        而不应该是现存的:

        {subsets namespace, subsets structuredClassifier, subsets classifier}

        {ordered, subsets attribute, subsets ownedMember, redefines ownedAttribute}

        这样做可行的原因就在于关联两端的角色名的命名规则可以保证不会发生匹配错误的情况,即使关联两端的标记的前后关系不一致。

        第三步:

        经过进一步的排查,发现这也不是遗漏。

        通过观察,可以发现,如果两个关联之间存在泛化关系,则必须满足关联的一端由关联拥有。如果继承和被继承的关联中至少有一个关联的两端都由关联两端的类拥有,则由于这两个关联中至少有一个在语法上已经不再存在,因此就无法定义这两个关联之间的泛化关系。

        关联两端都由关联拥有是没有任何意义的,因为此时此关联对于关联两端的类而言没有任何用途。

        再举一个更奇葩的例子:

        下图是Figure10.7的一个片段:

 

图五、Figure10.7的一个片段

        在图五中可以看到,BehavioredClassifier与InterfaceRealization之间的二元关联(记为Asso6)中,左侧的标记为两个,而右侧的标记为一个;

        InterfaceRealization和Interface之间的二元关联中(记为Asso7)中,上侧的标记为一个,下侧的标记则为两个。

        经过阅读原文中的文字说明,发现这是本文的一个错误:简单来说,其就是将Asso6右侧的标记与Asso7下侧的标记搞反了。只要将这两处标记对调即可。

        通过这个例子,也给我们一个提示:如果某个类图有匪夷所思的内容,则可以结合相关的“Classifier Descriptions”和“Association Descriptions”中的内容进行复核,如果两者确实一致,则是我们的理解有问题;如果两者不一致,则是原文中的错误。

        下一篇文章将讨论redefines的实现效果,对于这个问题本人有一个解释,但是不能确定这个解释是否正确,因此还欢迎大家踊跃讨论。

参考文献:

UML2.5.1

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

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

相关文章

在Android端集成OpenCV的三种方式

1.Opencv Android SDK 基于Opencv C本地代码,通过Java语言接口使用JNI技术调用C本地方法的SDK开发包。 (1)etc:各类模型文件存储地址 (2)java:Java版本的Android SDK相关文件 (3)native:JNI层…

【QGIS入门实战精品教程】3.4:QGIS创建GeoPackage地理数据库及数据入库案例详解

GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件、与操作系统无关的地理数据库。在QGIS中可以很方便的实现GeoPackage的创建与连接等操作。 一、QGIS创建GeoPackage 1. 创建数据库 QGIS创建GeoPackage的方法与ArcGIS中创建File GDB的类似,选择一个目标文件夹,…

Adobe Acrobat XI 一进去就闪退;解决Acrobat的闪退问题

一、原因分析 闪退是因为网络中校验版权时出现问题 二、解决办法 域名欺骗,添加伪造的host条目 1. 进入C:\Windows\System32\drivers\etc 找到hosts文件 2. 右机hosts,选择属性,在安全选项里,点击高级: 3. 在ho…

Hive+Spark离线数仓工业项目实战--数仓设计及数据采集(1)

数仓设计及数据采集 1. **数据仓库设计** - 建模:维度建模:【事实表、维度表】 - 分层:ODS、DW【DWD、DWM、DWS】、APP - **掌握本次项目中数仓的分层** - ODS、DWD、DWB、DWS、ST、DM 2. 业务系统流程和数据来源 - 数据源…

Webpack5搭建Vue环境 | Webpack

文章目录webpack打包其他资源图片资源file-loader文件的命名规则url-loaderwebpack5 asset方式字体文件的打包PluginCleanWebpackPluginHtmlWebpackPluginDefinePluginCopyWebpackPluginmode配置webpack打包其他资源 图片资源 虽然此时我未安装file-loader 但是我正常显示了图片…

SHOP++ V9.1商城系统:可视化装修,0基础也能打造高颜值商城!

SHOP B2B2C商城系统新版本V9.1 新增的店铺装修功能是一款针对电商的DIY装修工具。可以快速装修店铺。能同时满足不同用户的使用需求。 一、页面可视化编辑组件 电商大潮异军突起的今天,如何让你的商品页面快速的抓住顾客的眼球,是促成订单转化的重要因素…

项目实战之旅游网(二)后台用户管理(上)

目录 一.管理员列表 二. 新增管理员 三.修改管理员 四.管理员详情 一.管理员列表 后台用户也称为管理员,每个管理员能在后台进行的操作不同,所以不同的管理员有不同的权限。在项目中,权限表的设计为用户-角色多对多,角色权限多对多&…

四、网络层(四)IPv6

目录 4.1 IPv6的主要特点 4.2 IPv6地址 4.3 从IPv4到IPv6过渡 4.1 IPv6的主要特点 解决IP地址耗尽问题的措施有以下3种 采用无分类域间路由,使IP地址的分配更加合理。采用网络地址转换NAT以节省全球IP地址。采用具有更大地址空间的新版本的IP协议IPv6。&am…

力扣(LeetCode)199. 二叉树的右视图(C++)

迭代 按照层序遍历,每一层最右边的元素就是二叉树右视图的元素。迭代算法需要队列保存二叉树每一层的所有结点,并且在遍历下一层时,上一层的所有结点已经出队。在遍历下一层之前,记录队列大小,即为二叉树当前层的结点…

三.keepalived介绍及工作原理

keepalived介绍及工作原理keepalived介绍及工作原理一、keepalived的介绍二、Keepalived服务的重要功能1、管理LVS负载均衡软件2、实现对LVS集群节点健康检查功能(healthcheck)3、作为系统网络服务的高可用功能(failover)三、Keep…

Redis 集合(Sorted Set)方法使用详解

目录一、简介二、常用方法2.1、ZADD2.2、ZREM2.3、ZSCORE2.4、ZINCRBY2.5、ZCARD2.6、ZRANK、ZREVRANK2.7、ZRANGE、ZREVRANGE2.8、ZRANGEBYSCORE、ZREVRANGEBYSCORE2.9、ZCOUNT2.10、ZREMRANGEBYRANK2.11、ZREMRANGEBYSCORE2.12、ZINTERSTORE、ZUNIONSTORE2.13、ZRANGEBYLEX、…

day 9 模拟和高精度

P4924 [1007]魔法少女小Scarlet 题目描述 Scarlet 最近学会了一个数组魔法,她会在 nn 二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转 90∘。 首先,Scarlet 会把 1 到 n^2 的正整数按照从左往右,从上至下的顺序填入初始的二维数组中…

带您认识spreadsheet专属的数据仓库,助力报表开发好帮手

业务主题是针对业务的一个概念,它将同一数据源中属于同一个分析主题的表或表中的字段组合在一起,为进一步的可视化数据集提供基本元素。 业务主题我们看作是 Smartbi 产品中的数据仓库,主要应用于可视化数据集等操作。 业务主题的应用场景有如…

佳缘线上超市网站

成品详细信息 开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 基于SPRINGBOOTE的佳源线上超市管理系统的设计与实现 模块划分:公告类型模块、公告信息模块…

【Pycharm教程】在 PyCharm 中使用 Emacs 作为外部编辑器

Emacs是一个高级的文本编辑器,可以让你全面地操作你的代码。使用 Emacs 意味着可以根据您用于编码的语言进行完全可调整的编辑。 本文介绍了如何将 Emacs 添加到 PyCharm 并使用它来修改您的代码。 最新版本的 Emacs 可以从官网下载安装。 将 Emacs 配置为外部编…

介绍在全志A40i Ubuntu系统上定制文件系统的操作过程

为了给客户的测试和开发提供便利,飞凌嵌入式的开发板产品一般都支持多种操作系统,以基于全志T507H处理器设计研发的OKT507-C开发板为例,它支持三种操作系统,分别是:Linux、Android 和 Forlinx Desktop(Ubun…

stm32cubemx hal学习记录:电机控制

一、基础配置 1、配置RCC、SYS,SYS的Timebase Source选择TIM6 2、配置USART1、时钟84MHz 3、激活FreeRTOS,选择CMSIS_V1,Config parameters种USE_TIMERS选择ENABLE 二、编码器及电机驱动引脚配置 1、选用TIM3的编码器模式 2、驱动使用L2…

以数据赋能业务,qlik为企业搭建透明绩效管理平台

自从各类金融APP出现以来,分支机构网络的性质已经发生了巨大的变化。下一代分支机构通常是围绕着深化客户关系的愿景建立起来的,这些愿景包括理财方面的建议,以及企业和家庭贷款等更大的承诺,同时提供现金和交易设施。由于分支机构…

2022-12-23 工作记录--CSS-超出多行显示省略号ios真机偶失效问题

CSS-超出多行显示省略号ios真机偶失效问题 一、前言 最近帮同事解决一个了bug:在ios真机上,超出多行显示省略号的文本内容,偶然会出现未显示问题。 最开始,我没往 超出多行显示省略号 样式方面进攻,还以为是react渲染…

离散数学图论的练习题详解

文章目录学习技巧图论练习学习技巧 坚持 图论练习 一颗树有2个2度结点,1个3度结点和3个4度结点,则1度结点数为() 知识点:握手定理:所有节点度数之和等于边数的两倍解答:221334x2(213x−1)2\…