首页 > 其他分享 >UML之属性与参数的多重性

UML之属性与参数的多重性

时间:2024-12-27 15:55:22浏览次数:7  
标签:.. 多重性 类图 作者 UML 属性

在UML中,多重性是指一个条目潜在的数量范围。多重性可被用于属性、操作参数、关联关系。UML元模型也使用多重性对元模型元素之间的关系进行约束。多重性总是包含基数值,它是相关条目在现实世界中的确切数量。本文将说明类属性和类操作参数的多重性。

一、属性的多重性

假设我们需要定义一个表示书的Book类,它包含有一系列的属性。我们只选取其中的书名(title)、作者(author)、页数(pages)少数几个属性进行多重性研究说明。在此前提下,Book的相关属性用类图表示如下:

在上图中,书的作者(author)是一个人,但在现实世界中,一本书的作者可能不止一人。为了能让Book类的定义适应大多数情况,我们可以考虑将作者增加到三人,这三名作者分别用属性author1、author2、author3表示,修改后的类图如下:

过,上述设计还是存在一些潜在的问题,下面分别讨论。

首先,一本书的作者数量的限制(上述设计中的3个)是否合理?一些论文期刊允许最多3~5名作者,而许多书的作者则比3个更多,在科学研究领域,一些论文(有些论文本足以作为一本书)的作者超过了3500人。显然3500个作者的情况并不多见,但为了能够实例化作者众多的书籍,必须增加更多的作者属性。但多少个作者是合适的,这是一个难以确定的问题。

其次,定义数量庞大的作者属性而被实例化的书的作者又很少时,由于无法约束必须将作者挨个存储在排在前面的属性中,我们将不得不检查所有的作者属性,显然它的代码实现将是笨重低效的。

最后,可以使用循环简化处理众多的作者属性吗?由于这些属性的名称不同(虽然只是后缀不同,但它们是不同的属性名),对这种名称的循环在大多数编程语言中实现是困难的。

UML为上述问题提供的解决方案是指定属性的多重性,即可通过标记说明作者(author属性)的多重性表达这个属性可以存储多个值。采用多重性的Book类图如下:

在上图中可以看到,属性author在其类型Person后增加“[1..*]”说明,“[1..*]”定义了属性author的多重性,它表明属性author的值可以从1个到无限多个,或者说属性author至少有一个值。多重性使用中括号“[]”说明其允许的数量,在“[1..*]”中,1是下限,*是上限,中间的两个点表示省略的中间值,而*代表无限大,因此在这个类图中,属性author中可存储作者的数量是从1个到无限个,即属性author存储作者的数量没有限制。使用中括号“[]”说明多重性时,上限必须大于等于下限。

通常一本书至少有一名作者,而在某些特殊情况下,书的作者信息可能丢失了(佚名),或者某些电子书的作者故意不留下自己姓名,此时author这个属性的多重性就应当设定为“[0..*]”,表示有零个或者多个作者,修改后的类图如下:

在多重性为“[0..*]”时,因为其值最少可以为零,最多没有限制,表明该属性是一个可选的属性,又是一个可以有多重值的属性。在这种情况下,可以仅使用“*”更简单地表示,即“[*]”。按这种方式表达的类图如下:

了解了属性author的多重性以后,或许有人认为属性pages也应当被指定多重性。pages表示一本书的页数,书的页数确实也是一个范围内的数值,但是对于确定的一本书而言,作者可能有多个,而它的页数却是确定的一个数值。因此属性pages不具备多重值。如果您的意图是限制一本书页数所允许的范围,可以使用约束(constraint)进行指定。

同理,表示书名的属性title也不具备多重性。不过,在UML中,也允许我们使用多重性的表示方法明确指明一个属性仅有一个值。其表示方法是将多重性的上下限均指定为1,即“[1..1]”或“[1]”,故类Book的类图可修改如下,属性title和pages分别使用了上述两种形式限定其值仅有一个。

在UML中,多重性的默认值是“[1]”,即如果一个属性不指定多重性则表明该属性应当有且仅有一个值。因此,上面的两个图是等价的。所以,如果一个属性的值是可选的,即它的值可为0个或1个,此时需要明确标明其多重性,即“[0..1]”。例如一本书交由出版社正式出版时,会有一名编辑负责该书的编辑与审校,而一本书如果是电子书,则可能由作者直接发布而没有编辑。我们为Book类增加属性编辑(editor)时,同时使用多重性“[0..1]”表明其是可选的。修改后的类图如下:

在上图中,我们同时表明了属性pages的约束,约束使用大括号“{}”进行说明,它可以在属性中内嵌说明,也可以在类图中使用一个单独的区块说明,或者也可以在类图的注释中说明。上图采用内嵌说明的方式指定了属性pages的约束。

多重性与约束可同时指定,不过一些UML工具对使用内嵌方式指定这两者支持不足(主要是不支持内嵌方式的约束),此时可将约束放在类图的注释中进行说明。例如同时标明属性pages的多重性及约束时,可使用下图表示:

二、操作参数的多重性

我们也可将多重性应用于操作参数,其用法与在属性上应用相同。当然,如果一个参数的多重性为“[1]”时,我们通常省略不标记。

例如在下图中,类Ride中有一个设定骑行日程的schedule操作,它包含标明多重性的三个参数:参数for的多重性为“[1..*]”,表示参与骑行的骑手至少有一个;参数itinerary的多重性为“[2..*]”,表示路线至少有两个点(起点与终点,还可包含若干途经点);参数isSharedRide的多重性为“[0..1]”,表示它是一个可选参数,即该骑行日程是否可分享,通常一个参数如果是可选参数,应为其指定缺省值。

类图Marriage是另外一个例子,不同于上述示例中各参数多重值个数不定,其操作wed中前三个参数都有严格限定的值的个数。

多重性还可应用于其他一些行为元素中,其用法大抵一致,使用时可以举一反三,本文不再赘述。

属性与参数的多重性 – 光头颜说ITicon-default.png?t=O83Ahttps://gtyan.com/archives/181UML之图框架标题类型之谬-CSDN博客

UML之类与类图-CSDN博客

UML之修饰符-CSDN博客

UML之类型-CSDN博客

UML之包与包图-CSDN博客

UML之包的导入与访问-CSDN博客

UML之模型、包及包的版型(构造型)-CSDN博客

标签:..,多重性,类图,作者,UML,属性
From: https://blog.csdn.net/mboy2008/article/details/144770952

相关文章

  • Nginx配置之全局配置属性
    nginx全局属性的配置usernobody;#主模块命令,指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行。worker_processes1;#指定Nginx要开启的进程数。worker_rlimit_nofile100000;#worker进程的最大打开文件数限制error_loglogs/error.log;error_loglogs......
  • css中表示颜色相关的属性有哪些?
    在CSS中,表示颜色相关的属性有多种,以下是一些主要的颜色属性及其表示方法:颜色名称:CSS预定义了一系列颜色名称,可以直接使用这些名称来表示颜色。例如,“red”代表红色,“green”代表绿色,“blue”代表蓝色等。这些预定义颜色名称提供了简便的方式来指定常见颜色。RGB(红绿蓝):RGB是......
  • 兼容性预览及边框、阴影、背景属性
    兼容性-webkit- :chrome(谷歌) Safari(苹果)-moz- :firefox(火狐)-o- :opera(欧朋)-ms- :IE边框圆角半径:border-radius   一个用于设置所有四个边框-*-半径属性的速记border-top-left-radius :左 上border-top-right-radius :右 上border-b......
  • Vue-跨域、计算属性、监听属性
    跨域同源策略:同源策略会引起跨域问题,是浏览器中的安全协议,主机、协议、端口只要有一个不一致,就会引起同源策略,从而引起跨域问题解决办法:1.放开后台(不安全)2.利用script标签中的src属性不受同源策略影响的特点,这种方式叫做JSONP(也需要跟后台配合)3.配置代理(在本地起一个服务,再去......
  • 本地启动 PlantUML 服务并解除图片大小限制
    本地启动PlantUML服务配置Java环境,如已有忽略下载Java运行环境,如openjdk-11.0.2_windows-x64_bin.zip,将其解压。使用picoweb启动PlantUML服务在Releases·plantuml/plantuml上下载最新版plantuml.jar文件。使用以下命令启动PlantUML服务java-jarplantu......
  • grid布局有哪些属性?
    Grid布局,又称为CSS网格布局,是W3C提出的一个二维布局系统,允许开发者以行和列的形式来布局网页内容。它提供了丰富的属性和方法来精确控制布局的各个方面。以下是Grid布局的主要属性:一、容器属性(应用于网格容器)display:设置元素为网格容器,可选值为grid(块级网格)或inline-grid(行内网......
  • html中video标签的poster属性如何铺满video标签?
    在HTML中,<video>标签的poster属性用于指定视频加载时显示的封面图像。要使poster图像铺满整个<video>标签,你可以使用CSS样式来设置。下面是一个示例,展示如何使poster图像铺满<video>标签:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><......
  • 你有使用过object-fit属性吗?说说你对它的理解
    是的,我使用过object-fit属性,这是一个在前端开发中非常有用的CSS属性。以下是我对object-fit属性的理解:作用与用途:object-fit属性用于指定替换元素(如<img>或<video>)的内容应如何适应其容器框(即父元素)的尺寸。它提供了更细致的控制,使内容在不同尺寸的容器中能够正确显示,特别在......
  • JavaScript的对象属性描述符有哪些?分别有什么作用?
    在JavaScript中,对象的属性描述符主要分为两类:数据描述符和存取描述符。它们都具有以下属性:数据描述符:具有值的属性,该值可能是可写的,也可能不是。数据描述符具有以下属性:value:属性的值。默认是undefined。writable:当且仅当属性的值可能改变时为true。默认是false。enumer......
  • video标签的webkit-playsinline属性有什么作用?
    webkit-playsinline是一个非标准的HTML属性,主要用于iOS设备上的<video>元素。这个属性的主要作用是控制视频在iOS设备上是否全屏播放。默认情况下,在iOS设备上,当用户点击一个<video>元素开始播放视频时,视频会全屏播放。然而,如果你给<video>元素添加了webkit-plays......