UML参考手册 第三部分 参 考 资 料 第13章 术 语 大 全 138.激发(fire)激发一个转换。见运行至完成(run to ,ompletion)、触发(trigger)。语义当转换要求的事件发生时,如果满足监护条件,转换将执行其活动,活动状态改变。对象接收到事件后,如果状态机处于运行至完成这一步骤,则保存该事件。步骤完成后由状态机处理这一事件。如果当前对象所处的状态含有转换,则相应转换被触发。如果是有多个源状态的复杂转换,则转换进行前所有源状态必须是活动的。源状态活动完成后,可以执行完成转换。如果源状态为组成状态,所有直接子状态完成或者达到终态后可以执行完成转换。处理事件后,计算监护条件(如果有的话)。如果条件的布尔表达式为真,转换将激发。激发转换上的活动,转换的目标状态成为活动的(内部转换不改变状态)。在状态变化中,执行对象的原始状态和转换的目标状态最短路径上的任何出口活动和入口活动。注意,原始状态可能是转换源状态的嵌套子状态。如果转换不满足监护条件,则不会激发。可能激发其他监护条件满足的转换。如果有多个转换可以激发,其中只有一个能真正激发。嵌套状态内的转换比外部转换优先。否则转换的选择是不定的,这符合现实世界中的常见情况。实际上,实现可以确定转换激发的顺序。这并不改变语义。合理设置监护条件以保证彼此互斥,可以达到相同的效果。更简单的方法是采用"如果没有进行其他转换,则使用本转换"。延迟事件(Deferred events) 如果某个事件或其祖先在某个状态中被定为延迟的,则它将不触发转换,直到对象进入一个不要求当前事件延迟的状态位置。对象进入新的状态后,原来延迟而现在不延迟的事件成为"pending (有待解决的)",并以不确定的顺序出现。如果第一个待解决事件没有触发转换,则它将被忽略,下一个待解决事件出现。如果事件发生引起了状态的转换,则根据新状态的延迟情况,重新确定尚处于待解决的延迟事件,建立新的待解决事件集。实现可以更严格地规定延迟事件的处理顺序,或者用某种操作来限制顺序。139.流(flow)在不同连续时间点上同一个对象两个版本之间的关系。见成为(become)、复制(copy)。语义流关系联系了同一对象在不同连续时间点的两个版本。它可以连结实例级交互中一个对象的两个值,或者描述符级交互中同一对象的两个类元角色。它代表对象从一个状态到另一个状态的转换,可以代表值、控制状态、位置改变。流依赖关系的构造类型有成为(become)和复制(copy),用户可以增加其他构造类型。表示法 流关系用带有构造类型的虚线箭头表示,构造类型不能省略。标准元素成为、复制140.控制焦点(focus of control)顺序图中的一个符号,表示对象直接或者间接(通过子程序)执行一个活动的一段时间。见激活(activation)。141.字体使用(font usuage)用不同字体或者其他图形标志来区分正文。见图形标志(graphic marker)。讨论斜体字表示抽象类、属性、操作。其他字体用于强调或者区别表示语法中的不同部分。建议对于类元名字、关系名字用黑体字;对于内容,属性、操作、角色名等用正常字体。分格的名字用特殊字体,选择权在于编辑工具。工具可以选择字体来强调元素、区分保留字、表示元素的特定属性。也可以允许用户选择字体。对于颜色有类似的考虑,有色盲的人可以不用颜色区分。上述所有内容是对于本书所述表示法的扩展。142.分叉(fork)复杂转换中,一个源状态可以转入多个目标状态,使活动状态的数目增加。反义词:结合。见复杂转换(complex transition)、复合状态(composite state)、结合(join)。语义分叉是指有一个源状态和多个目标状态的转换。如果在源状态活动时出现触发事件,所有目标状态将成为活动的。目标状态必须是并行组成状态中的不同区域。表示法分叉表示为有一个转入箭头和多个转出箭头的粗线,它可以带有转换标签(监护条件、触发事件和活动)。图13-101是进入并行组成状态的明显分叉。 图13-101 分叉143.形式参数(formal argument)见参数(parameter)144.框架(framework)为某个域中的应用程序提供可扩展模板的泛化结构。见包(package)。145.友元一种使用依赖关系,允许用户访问服务提供者。见访问(acess)、导入(import)、可视性(visibility)语义友元依赖关系用于保证一个操作或者一个类对使用类的内容的许可,虽然从另外角度看来许可不够充分。它通常是规则中的异常,这种功能要小心使用。表示法从得到许可的类或者操作向提供内容的类引一条虚线表示友元依赖关系;构造类型关键字《friend》标在箭头上。146.完整描述符(full descreptor)一个直接实例的完整隐含描述。一个完整描述符通过继承其所有祖先组装而成。见直接类、继承、多类元。语义实际上,对于类或者其他元素的声明只是其实例的部分描述,称为类片断(class segment)。通常类的对象含有比它的直接类所描述的更多的结构。对实例所有的属性、操作和关联的描述称为完整描述符,它通常不由模型或程序表示。继承规则的目的就是提供一种自动将类片断组成为完整描述符的方法。理论上有不同的实现方式,称为元对象协定(metaobject protocol)。UML为继承定义的一系列规则,涵盖了大多数程序设计语言,也可用于建立概念模型。注意,可能存在其他可能性,如CLOS语言等。147.功能视图(functional view)这种视图将系统分解为功能或者提供功能的操作。通常认为功能视图不是面向对象的,可能导致不易维护的结构。传统开发方法中,数据流图是功能视图的核心。UML不直接支持这种视图,但是活动图中有一些功能特性。148.可泛化元素(generalizable element)可以参与泛化关系的模型元素。见 泛化(generalization)、继承(inheritance)语义可泛化元素可以有父和子。被类元成带有元素的变量可以带有该元素后代的实例。可泛化元素包括类、用例、其他类元、关联、状态和合作,它们继承其祖先的特征。每种可泛化元素的哪个部分是继承来的,要看元素的种类。例如类继承属性、方法、操作、关联中的地位和约束;关联继承参与类(本身可被特化)和关联端的特性;用例继承属性、操作、与参与者的关联、与其他用例的扩展和包含关系、行为序列。状态继承转换。见泛化(generalization)、关联泛化(association generalization)、用例泛化(use case generalization)。结构可泛化元素的属性声明它可以在泛化关系中的何处出现。抽象 说明可泛化元素是描述直接实例的,还是抽象元素的。True表示元素是抽象的(不能有直接实例);false表示它是是体(可以由直接实例)。抽象元素的实体后代才能使用。带有无方法操作的类是抽象的。叶 说明可泛化元素是否可以特化。True表示元素不能有后代(叶);false表是可以有后代(无论当前是否有后代)。作为叶的抽象类只能起组织全局属性和操作的作用。根 说明元素是否必须为无祖先的根。True表示元素必须为根;false表是不必为根,可以有祖先(无论当前是否有祖先)。注意:声明叶或者根不影响语义,但这种声明可以给设计者提示。如果能避免对全局变量的分析或者对多态操作的全局保护,就可以有更高的编译效率。标准元素叶149.泛化(generalization)一个较广泛化的元素和一个较特殊的元素之间的类元关系。特殊化的元素完整的包含了广泛化的元素,并含有更多信息。特殊化的元素的实例可以用于任何使用广泛化元素的地方。见泛化关联(association generalization)、继承(inheritance)、可替换规则(substitutability principle)、用例泛化(case generalization)。语义泛化是两个同类的可泛化元素之间的直接关系。其中一个元素被称为父,另一个为子。对类而言,父称为超类(superclass),子成为子类。父所说明的直接实例带有所有子的共同特点,子所说明的实例是上述实例的子集,不仅有父的特征,还有独有的特征。泛化是一种反对称关系。按照一个方向转变成为父,另一个方向引向子。在父方向上经过一个或几个泛化关系的元素称为祖先;在子方向上经过一个或几个泛化关系的元素称为子。不允许出现泛化环,一个类不能既是自己的祖先又是自己的后代。在最简单的情况下,类(或者其他可泛化元素)有单一的父。在复杂情况下,子有多个父。子继承了父的所有结构、行为和约束,称为多重继承(或者多重泛化)。父元素对子元素有可视性。关联、类元、状态、事件和合作都可以泛化。关于关联的泛化的应用,见关联泛化。关于用例的泛化的应用,见用例泛化。节点和构件类似于类,它们的泛化与类类似。约束约束可以应用于一列泛化关系,以及有同一个父的子。可以规定下列属性:互斥 一个祖先不能有两个子(多重继承时),实例不能同时成为两个子的间接实例(多重类元语义)重叠 一个祖先可以有两个或者更多的子,实例可以属于两个或者更多的子。完整 列出了所有可能的子,不能再增加。不完整 没有列出所有可能的子,有些已知子没有声明,还可以增加新的子。表示法 类元之间的泛化关系表示为子元素(如子类)到父元素之间的实线路经,路径指向更广泛的元素的一端带有空心的三角形(图13-102)。指向父的线可以是组成或者树(图13-102)。图13-102 泛化关系 图13-103 树形泛化关系泛化还可以应用于关联,但是太多的线条可能使图很乱。为了标明泛化箭头,可以将关联表示为关联类。如果图中没有标出模型中存在的类,应该在相应位置上用省略号(...)代替。(这不表示将来要加入新的类,而是说明当前已经有类存在。这种方发表示忽略的信息,而不是语义元素)。一个类的子类表示为省略号说明当前至少有一个子类没有在视图中标处。省略号可以有描述符。这种表示法是由编辑工具自动维护的,不用手工输入。表示选项到一个超类的一组泛化路径可以被表示为有一段公用路经(包括三角形)的树,树枝指向子类。这只是一种表示法,不代表n维关系。在当前模型中,每对超类--子类之间有一个泛化关系。弧分开来画没有语义上的区别。如果在几个子类公用的泛化三角形上带有文本标签,则标签适用于所有路径。换言之,是所有子类共享的属性。举例图13-104是泛化关系上声明的约束。图中表示了"树形"泛化(路径为平行线,有公用的箭头);同时表示了"二元形"泛化(每一对父--子关系有独立的箭头)。图13-104 泛化约束 定义泛化关系中的元素时不用了解这一元素,但是子元素必须知道父元素的结构。通常,父元素就是为了供子元素扩展而设计的,因此设计时应了解预期的子元素。泛化关系的优点之一就在于经常可以出现设计父元素时没有想到的子元素,这带来了更强的功能。实现关系与泛化关系类似,不过仅仅继承了行为说明。如果说明的元素没有属性、关联,而只有抽象操作,则泛化和实现是相同的。实现关系不生成用户,因此操作必须在用户中,或者从其他元素处继承来。标准元素完整,互斥,实现,不完整,重叠150.图形标记(graphic marker)一种标记元素,如几何图形、纹理、填充模式、字体、颜色等。见字体使用(font usage)表示法表示符号是由不同的图形标记构成的。一个图形标记本身没有语义作用,但是表示法的目的就是尽可能多地组成使用图形标记。有些图形标记用于构造预定义的UML符号,而其他不用于标准表示。颜色没有被赋予含义,因为有些打印机不支持彩色,有些人不能分辨色彩。这些未定义的图形标记可以按照建模者或者工具的需求供编辑工具使用。UML表示法只允许有限的图形扩展。图标或图形标记(如纹理、颜色)可以与构造类型联系起来。UML没有定义图形说明的格式,但是有很多位图和格式可供图形编辑器使用(虽然其可移植性很难满足)。图标说明及其替代表示的一般形式易于理解,我们也允许工具开发者溶入自己的想象--注意,扩展性的过度使用可能会造成工具可移植性的减弱。151.监护条件(guard condition)进行相关转换之前必须满足的一个条件。见分支(branch)、条件线程(conditional thread)、结合状态(junction state)、转换(transition)语义监护条件是一个布尔表达式,它是转换说明的一部分。收到转换的触发事件之后,系统保存该事件直到状态机已经完成任何运行至完成步骤,随后进行事件处理,计算监护条件。如果条件为真,则可以进行转换(如果有多个转换可以进行,只能进行一个)。事件处理时进行测试。如果此时条件为假,除非触发事件再次出现,否则不再重新计算监护条件。监护条件必须是一个询问--它不能修改系统的值或者状态的值,又不能有副作用。完成转换也可以有监护条件,此时,它选择一个分支执行。表示法监护条件是转换字符串的一部分,它是用方括号括住的布尔表达式[布尔表达式]表达式中用到的名字必须是转换内部可见的,可以是触发事件的参数或者当前对象的属性。152.书名号(guillemets)(《》)在法语,意大利语和西班牙语中表示引用。在UML表示表示法中表示关键字和构造类型。许多字体中都有,必要时可以用两个尖括号代替。(<< >>)。见字体使用。153.历史状态(history state)一种伪状态,说明当前的内部组成状态记得它存在之后曾经有的活动子状态。见组成状态、伪状态、状态机、转换语义历史状态允许顺序组成状态记住从组成状态发出的转换之前组成状态的最后一个活动子状态。转向历史状态的一个转换将使前一个活动子状态再次成为活动的,并执行相应的入口活动和出口活动。历史状态可以有来自外部状态或者初始状态的转换。可以有一个没有标签的向外转换,该转换表示原先保存的历史状态。当没有保存的状态时,转向历史状态就会转向它。历史状态不能有来自组成状态内部的其他转换。历史状态可以记忆浅历史和深历史。浅历史状态保存并激活与历史状态在同一个嵌套层次上的状态。如果一个转换从嵌套子状态直接退出组成状态,将激活组成状态中顶级的终止子状态。深历史状态记忆组成状态中更深的嵌套层次的状态。要记忆深状态,转换必须直接从深状态中转出。如果一个转换是从深状态转换到一个浅状态,并由此转出组成状态,将被记忆的将是浅状态的转换。到一个新历史状态的转换恢复任何层次上曾激活的状态。在这个过程中,如果入口活动出现在包含所记住状态的内层状态上,则执行该入口活动。组成状态可能同时有深浅两种历史状态,进入的转换必须连到二者之一。如果组成状态进入终态,则它将丢弃所有保存的历史状态,好像从没进入过此状态一样。表示法浅历史状态用带有H的小圆圈表示,如图13-105所示。深历史状态是带有H*的圆圈。图13-105 历史状态154.超级链接(hyperlink)两个表示元素之间可以通过某些命令穿越的不可见连接。见图(diagram)。表示法纸面上的表示法不包含隐藏信息。但是计算机屏幕上的表示法可以带有附加的不可见的超级链接,它们在静态图中不出现,但是在动态图上可以被激活