如何理解UML2.5.1(03篇)

news2025/3/10 18:35:01

        下面先简单列举一下subsets和redefines的特点:

        关联端点具有标识subsets表明subsets一端的对象集合是被subsets一端的对象集合的子集。此时,subsets一端的类与被subsets一端的类之间必须存在继承关系。同时,subsets一端的角色名一定与被subsets一端的角色名不同。

        关联端点具有标识redefines表明这是对被redefines的关联端点的重定义。此时,有两种情况:如果关联一端由类拥有,则redefines一端的类与被redefines一端的类之间一定有继承关系;如果关联一端由关联拥有,则redefines一端的关联与被redefines一端的关联之间一定有继承关系。同时,redefines一端的角色名一定与被redefines一端的角色名相同(当然实际上不相同也可以,但是一律设置为相同也不会有错误,并且这样还会使类图更加清晰)。

        标识subsets和redefines的作用范围是关联端点,而不是关联。因此会出现关联的两个端点之中出现不同标识的情况。

        一个特殊情况:

        如果具有继承关系的两个关联联接的是两个相同的类,则如果希望一组同一侧的关联端点之间有重定义关系,则这组关联端点必须是关联拥有,而不能是(关联所联接的)类拥有。原因也很简单,因为一个端点类内部不存在继承关系,在这种情况下,有继承关系的只能是都以此类作为一个端点的两个关联。图一中的下面两个关联之间就是这种情况;

        在继承路径上,subsets标识和redefines标识可以交替出现:

        标识subsets所修饰的角色名是其所在关联端点之前的那一个关联端点的角色名。

        证明这一点的一个例子是Figure7.5,Namespace和NamedElement之间有一个组合关联(记为Asso1)(其继承自Element的递归组合关联,记为Asso0),而Namespace和Constraint之间的组合关联(记为Asso2)则继承自Asso1,但是,Asso2两端的标记分别是{subsets namespace}和{subsets ownedMember},这是Asso1两端的角色名,而不是{subsets owner}和{subsets ownedElement},这是Asso0两端的角色名。

        标识redefines所修饰的角色名也是其所在关联端点之前的那一个关联端点的角色名。

        举个例子,假定有如下继承序列:

        B继承自A,C继承自B,D继承自C,E继承自D,F继承自E,G继承自F。它们都是一组二元关联同侧的角色名。

        此时可以有如下subsets和redefines的序列:

        B subsets A、C subsets B、D redefines C、E subsets D、F subsets E、G subsets F;

        如果一个关联Asso3的所有直接特化关联在Asso3的同侧的标记都是subsets,则Asso3此侧的标记可以包含{readOnly, union}。证明这一点的一个例子在Figure7.13和Figure8.4:

        前一个图中,Constraint和ValueSpecification之间的二元关联(记为Asso4)直接继承自上文中的Asso0,并且其两端的标记都是subsets,但是,后一个图中,IntervalConstraint和Interval之间的二元关联(记为Asso5)继承自Asso4,而Asso5两侧的标记都是redefines,这意味着两个事实:

        Asso0的标记{readOnly, union}并未受到影响;

        Asso4不可能再有标记{readOnly, union}。

        出现在关联端点处的redefines标记,有四种可能:

        P1、一对类之间的两个关联(关联拥有端点)的情况:端点(E1)由关联(A1)拥有(即A1的E1端既无实心黑点,也无导航箭头),另一个关联A2在E1一侧的端点也由A2拥有。同时,A1和A2在E1一侧可以具有相同的角色名,也可以不具有相同的角色名,这一点并不重要,重要的是redefines所重定义的角色名要与被重定义的角色名一致。

        在图一的左右两个类之间,在其中下面三个关联中,它们左侧的角色名都是templateParameter,并且最下面的关联在左侧有标记redefines templateParameter,那么这个redefines重定义的是其上两个关联中的哪个关联的左端点?观察最下面的一个关联,其右侧的标记中包含“subsets default”,而其上的两个关联中,只有紧邻其上的那个关联的右侧的角色名是“default”,因此最下面的关联继承自紧邻其上的那个关联;

        P2、一对类之间的两个关联(类拥有端点)的情况:关联(A1)的此端点(E1)由类(C1)拥有(即A1的E1端既有实心黑点,也有导航箭头,或者仅有实心黑点),另一个关联A2在E1一侧的端点也由C1拥有。同时,A1和A2在E1一侧可以具有相同的角色名,也可以不具有相同的角色名,这一点并不重要,重要的是redefines所重定义的角色名要与被重定义的角色名一致。

         图一、摘自Figure7.3 Template,P1、P2的例子。

        P3、两对类之间的两个关联(关联拥有端点)的情况:端点(E1)由关联(A1)拥有(即A1的E1端既无实心黑点,也无导航箭头),另一个关联A2在E1一侧的端点也由A2拥有。重要的是:A1所联接的两个类必须要是A2所联接的两个类的子类。同时,A1和A2在E1一侧可以具有相同的角色名,也可以不具有相同的角色名,这一点并不重要,重要的是redefines所重定义的角色名要与被重定义的角色名一致。

        在图二中:

        Duration继承自ValueSpecification(见Figure8.3);

        DurationInterval继承自Interval;

        因此Duration和DurationInterval之间的两个关联(A1和A2)就重定义了ValueSpecification和Interval之间的两个关联(A3和A4)。其中A1和A2在durationInterval一侧的情况就与A3和A4在interval一侧的情况完全相同,即都是关联拥有关联端点。

        并且,这还意味着A1继承自A3,A2继承自A4。

        P4、两对类之间的两个关联(类拥有端点)的情况:关联(A1)的此端点(E1)由类(C1)拥有(即A1的E1端既有实心黑点,也有导航箭头,或者仅有实心黑点),类C2为另一个关联A2的端点类,并且A2在E1一侧的端点也由C2拥有。重要的是:A1所联接的两个类必须要是A2所联接的两个类的子类。同时,A1和A2在E1一侧可以具有相同的角色名,也可以不具有相同的角色名,这一点并不重要,重要的是redefines所重定义的角色名要与被重定义的角色名一致。

        在图二中:

        Duration继承自ValueSpecification(见Figure8.3);

        DurationInterval继承自Interval;

        因此Duration和DurationInterval之间的两个关联(A1和A2)就重定义了ValueSpecification和Interval之间的两个关联(A3和A4)。其中A1和A2在Duration一侧的情况就与A3和A4在ValueSpecification一侧的情况完全相同,即都是类拥有关联端点。

        并且,这还意味着A1继承自A3,A2继承自A4。

        图二、摘自Figure8.4,P3、P4的例子。

        标记subsets的含义比较简单,就不举例说明了。

        最后再给大家出一个曾经困扰了本人很久的问题:

        在UML2.5.1中,关联的一个端点如果由关联拥有,则只有当关联此端有{redefines}标记时,才存在关联的泛化关系。但是直觉看,关联此端有{subsets}时,说明subsets的一端的对象集合是被subsets一端的对象集合的子集,这是一种继承关系,因此关联此端有{subsets}标记才应该被看作是有关联泛化的存在。为什么UML2.5.1没有采用符合直觉的方案?

        对于这个问题欢迎大家讨论留言。

        下一篇文章将通过一个看似是Bug而实际上不是Bug的例子和一个看似不是Bug而实际上是Bug的例子来从不同的角度说明如何理解“UML2.5.1”。

参考文献:

UML2.5.1

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

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

相关文章

Spring与web整合

创建maven的web项目 这个项目src下没有test等文件——手动创建 关于web-app version"3.0" 的问题 如何改成推荐使用的web-app 4.0&#xff1f; 再添加 就是默认4.0版本的了 配置监听器 <?xml version"1.0" encoding"UTF-8"?> <we…

[附源码]JAVA毕业设计线上导医系统(系统+LW)

[附源码]JAVA毕业设计线上导医系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

大学生期末网页大作业:基于HTML+CSS+JavaScript蓝色的汽车设备营销企业网站模板13页面

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

计算机视觉之SSD改进版本(平滑L1范数损失与焦点损失)《4》

在 计算机视觉之单发多框检测(Single Shot MultiBox Detector)模型《3》中我们使用到的是L1范数损失&#xff0c;L1范数损失也叫做平均绝对误差&#xff08;MAE&#xff09;&#xff0c;目标值与预测值之差的绝对值的和&#xff0c;表示的是预测值的平均误差幅度。它的缺点就是…

U3D中使用SPINE疑难杂症和解决办法

我使用的SPINE是3.8.99&#xff0c;项目当中SPINE需要使用特别多&#xff0c;网上都千篇一律&#xff0c;找不到一些实际遇到的问题&#xff0c;下面都是我遇到的一些稀奇古怪的问题。 1.SPINE导入U3D&#xff0c;拖到场景里&#xff0c;可以选择创建为2D或者UGUI组件&#xf…

分片上传—webloader

最近研究大文件上传方案的时候偶然间发现的一个百度开源的工具&#xff1a;webloader&#xff0c;用了一下&#xff0c;确实还不错&#xff0c;下面带着大家一起使用一下。 1.引入资源 使用Web Uploader文件上传需要引入三种资源&#xff1a;JS, CSS, SWF。 所以我们需要先下…

tomcat学习笔记

1.tomcat使用的方法有很多种&#xff0c;我这边使用的是直接解压使用的版本 tomcat 9.0.45版本免安装版下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1c6NN2Z-McuN4uw6JGWZmrA?pwdrl7t 提取码&#xff1a;rl7t 2.启动方式是在bin目录下找到startup.bat运行&…

用HTML+CSS做一个漂亮简单的花店网页【免费的学生网页设计成品】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

学习笔记-4-ANN-1-Preliminaries

细节内容请关注微信公众号&#xff1a;运筹优化与数据科学 ID: pomelo_tree_opt Outline 1. ANN与SVM 2. ANN的数学基础 3. ANN history 4. Deep neural network ------------------------------ 1. ANN与SVM的区别 SVM, SVR中有很多数学推导的过程&#xff0c; 例如pri…

Spring 使用指南 ~ 3、Spring 中 bean 的生命周期详解

Spring 中 bean 的生命周期详解 一、bean 的生命周期图解 二、bean 创建时使用 Spring 的资源 实现 aware 类型接口的 bean&#xff0c;可以在 bean 实例化的时候获取到一些相对应的资源&#xff0c;如实现 BeanNameAware 的 bean&#xff0c;就可以获取到 beanName。Spring …

[附源码]JAVA毕业设计无人驾驶汽车管理系统(系统+LW)

[附源码]JAVA毕业设计无人驾驶汽车管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

[附源码]JAVA毕业设计西藏民族大学论文管理系统(系统+LW)

[附源码]JAVA毕业设计西藏民族大学论文管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 …

KubeSphere v3.3.1 权限控制详解

作者&#xff1a;周文浩&#xff0c;青云科技研发工程师&#xff0c;KubeSphere Maintainer。热爱云原生&#xff0c;热爱开源&#xff0c;目前负责 KubeSphere 权限控制的开发与维护。 KubeSphere 3.3.1 已经发布一个多月了。 3.3.1 版本对于 KubeSphere 来说只是一个小的 Pat…

ADI Blackfin DSP处理器-BF533的开发详解10:SPORT-IIS口驱动和应用(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 接口功能介绍 ADSP-BF533上有两个 SPORT 口&#xff0c;SPORT&#xff08;synchronous serial ports&#xff09;接口是 ADSP-BF53x 上速度最快的…

执法仪物联卡在哪里采购靠谱

在这个万物互联的时代&#xff0c;针对于企业设备联网的物联卡就显得格外重要了&#xff0c;而共享单车&#xff0c;移动支付&#xff0c;智慧城市&#xff0c;自动售卖机等企业采购物联卡会面临着各种问题&#xff0c;低价陷阱&#xff0c;流量虚假&#xff0c;管理混乱&#…

基于LSTM递归神经网络的多特征电能负荷预测(Python代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Kubernetes 系统化学习之 集群安全篇(七)

Kubernetes 作为一个分布式集群管理的工具&#xff0c;保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介&#xff0c;也是外部控制的入口&#xff0c;所以 K8s 的安全机制就是围绕保护 API Server 来设计的。K8s 使用了认证&#xff08;Authentic…

计算机毕业设计springboot+vue基本微信小程序的大学生竞赛信息发布与报名小程序

项目介绍 大学生竞赛是提升大学生综合能力和专业素质的重要手段和途径,越来越受到广大高校师生的关注与重视。大学生学科竞赛活动不仅有利于提升大学生的专业素养,也有利于提升大学生的创新、实践能力、竞争意识与团队精神。 各类学科竞赛汇总、信息发布、信息收集、报名、备赛…

针对前端项目node版本问题导致依赖安装异常的处理办法

Mac如何切换版本 前端项目开发过程中&#xff0c;多人开发会遇到由于node版本不同造成的依赖不适配。 比如: node 16.xx 大多都会遇到依赖版本与node版本不适配导致安装报错等问题&#xff0c;并且你不管如何更新还是使用稳定版本的node.js都不起作用&#xff0c;此时你需要修…