UML参考手册 第三部分 参 考 资 料 第13章 术 语 大 全 216.多继承(multiple inheritance)泛化的一种语义变体,其中元素可以有多个父。这是U/NL 中的默认设置,在多数情况下是必须的,建模者也可以对使用的元素进行某种设置。对比:单继承。217.多重性(multiplicity)说明允许侯选值范围,如集合可以设定的大小。多重性说明可能用于关联端、组成类中的部分、消息的迭代次数和其他目的等。本质上讲,多重性是非负整数的一个子集(可能无限)。对比:集合的基数。见关联的多重性(multiplicityof association)、类的多重性(multiplicity of class)。语义多重性是对集合大小的说明。概念上,它是非负整数的子集。实际上,它是一个有限的整数集合,是最大值和最小值之间的区域。任何集合必须有限,但上界可以是有限值或者无界(无界的多重性称为"许多")。上界必须大于0;否则多重性就为0。0多重性的用处不大,因为它仅允许空集。多重性用字符串表示。通常,多重性是一个整数范围--有最大值和最小值。但它通常又是不连续的非负整数的集合。整数集合可能是无限的--即上界可能无限(但集合中的每个特定基数是有限的)。在实际中,这一整数集合可以声明为几个互斥,不相连的整数区域。区域是指最大值和最小值之间的连续的整数。有些无限集合不能这样表示,如偶数集合,但这种简化表示不会丢失太多信息。设计中,通常只用有上下限的一个整数区域来描述多重性,因为多重性只用于定义可能需要的最大存储空间。见关联的多重性和类的多重性,以进一步了解这些元素多重性的使用细节。表示法多重性表示为用逗号隔开的整数区域列表的文本形式,区域格式为:最小值..最大值其中最小值和最大值是整数,或者最大值为"*",表示无上界。表达式2..*读做"两个或以上"。区域的格式还可以为:数字数字是表示单个大小区域的整数。包含单个星的多重性表达式*与0..*等价,表示不限制数目("0个或多个,无限制")。这种常见的多重性被称为"许多"。举例0..110..**1..*1..61..3,7,10,15,19..*风格指南* 建议使用递增顺序的区域。如:1..3,7,10比7,10,1..3好。* 2个相连的区域被连成1个。例如0..1比0,1好。讨论多重性表达式可以含有变量,但模型完成后必须替换为整数--必须是参数或常数。多重性与动态数组边界不同,在运行时不能改变。它用于说明集合中可能出现的值的范围(最坏情况),应用程序的数据结构和操作应与之相符合。它是建模时的常数,如果运行时边界可变,应选的多重性为"许多"(0..*)。图中可能省略多重性,但它隐含存在于模型中。完成的模型里,未说明的多重性没有意义。不知道多重性和将它声明为"许多"是一样的,因为此时的待选值可以有任意多个,这与"许多"的定义一样。见未说明的值(unspecified value)。218.关联的多重性(multiplicity of association)关联端声明的多重性。见多重性(multiplicity)。语义定义在关联端的多重性,说明该位置上可以有多少个对象。对于二元关联,目标端的多重性限制了源端的一个对象可以与目标类的多少个对象之间有关联。多重性作为一个整数区域给出(见多重性)。常见的多重性有1、0或1、0个或多个无限制、1个或多个无限制。"0个或多个无限制"被称为"许多"。n元关联中,多重性在每个n-1维端上定义。例如,给定类(A,B,C)之间的三元关联,C端的多重性分别说明C可以有多少个对象参与A和B的关联。如果多重性为(许多,许多,1)则对每个(A,B)对,只有一个C值;对每个(B,C)对可以有许多个A值,但A、B、C的许多值可以参与关联。见n元关联中对n维多重性的讨论。表示法多重性标注在使用它的路径边上 (图13-126)数字范围n1..n2。见多重性,以进一步了解语法和规范说明(可能比多数实际应用所需的内容更广泛)。219.(属性的)多重性(multiplicity (of attribute))每个对象可能有的属性值。语义属性的多重性说明有该属性的对象可以有多少个值。常见的多重性为(1..1),即每个对象的属性有1个值,其他还有0或1(可选或空值)、0个或多个无限制(值的集合)、1个或多个无限制(非空集合)。"0个或多个,无限制"称为"许多"。表示法多重性标在分格中的属性名字之后的括号中,后面有冒号(图13-127),如果没有标出,多重性就为1(默认值)。220.(类的)多重性(multiplicity (of class))类的实例可能的数目范围--同时可以存在多少个实例。语义对于类,多重性说明类可以有多少个实例,默认值是无限多个,但有时确定数目也很有用。特别是在声明单个类--只有1个实例的类时,需要用多重性建立整个系统的内容和参数。合作中也用到类的多重性,它说明类元角色在一个合作实例中可以有多少绑实例。表示法类或类元的多重性是标在矩形右上角的字符串(图13-128)。多重性为许多(无限)时,字符串可以省略。图13-128 类的多重性 221.n元关联(n-ary association)3个以上类之间的关联。对比:二元关联。语义每个关联的实例是来自于相应类的n元组值。一个类可以在关联的多个位置中出现。二元关联是一种特例,有简化的表示法和特有的属性(如导航性),这些属性对n元关联没有意义(至少是相当复杂)。n元关联可以声明多重性,但不像二元关联那么容易理解。关联端的多重性说明了当另外n-1端的值确定时,本端值的数目。这种定义也适用于二元关联。聚集(包括组成)只对二元关联有意义,n元关联的角色不能有组成或聚集。二元关联和只有两端的n元关联没有什么语义区别。有2端的关联被认为是二元关联,有两个以上端的关联被视为n元关联。表示法n元关联表示为一个大菱形(大是相对路径端点而言),以及由菱形引出通向各个参与类的路径。关联的名字(如果有),标在菱形边上。修饰与二元关联一样标在每条路径的端点上。可以有多重性,但不能有资格限定和聚集。可以用虚线将关联类符号与菱形符号相连,以此表示有属性、操作和/或关联的n元关联。举例 图13-129表示一支球队每个赛季的最高记录保持者。记录保持者在赛季期间可以转会,在其他队中留下记录。记录本上,每个连接是独立的。风格指南通常,线从菱形顶点或某边的中点开始画。讨论n元关联中,多重性的定义是按其他n-1维进行的。例如,类之间的三元关联(A,B,C),C端的多重性说明 C与每个A、B对之间的关联中可以有多少个C对象。如果多重性为(许多,许多,1),则对每个可能的(A,B)对只有一个C值。对给定的一个(B,C)对,可以有多个A值。A,B,C各自的许多值参与关联。二元关联中,定义简化为一个关联端对另一端的多重性。只对一端定义多重性没有意义(正如某些作者所提议)。因为对任何有意义的n元关联端,多重性都是许多。否则,n元关联可以化简为一个类和一个包含其他类的关联类之间的二元关联,这样更容易实现。因为二元关联更易实现,且宜导航,最好避免n元关联。只有当需要所有值来确定一条连接时,n元关联才有用。通常,n元关联实现为一个类,类的属性中含有指向参与对象的指针。将它表示元关联是因为关联中没有迭代的连接。考虑学生在学期之内选修某个教授的课程的例子(图13-130)。学生不会多次选修一个教授的同一门课程,但是可以从同一名教授处选修几门不同的课程。一个教授可以教多门课程。图中表示了多重性。Professor的多重性是(0..1),其他多重性是许多(0..*)。每个多重性值是相对于其他端对象对而言。对于(课程,学生)对,可以有0个或1个教授。对(学生,教授)对,可以有许多课程。对(课程,教授)对,有许多学生。注意:如果关联化为类,就可能有多个相同(学生,教授,课程)组成,这是不希望出现的情况。