⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umlsemantics008.htm

📁 软件开发文档大全
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<head><meta NAME="&acute;&iexcl;&atilde;&Iacute;&acirc;&Egrave;&iacute;&frac14;&thorn;&sup1;&iexcl;&egrave;&sup3;&Igrave;" Content="Author:Asia Alien"><title>UML语义(中文)</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link REL="stylesheet" HREF="../../newcss.css" TYPE="text/css"></head><body>  <b><font face="Arial" size="5"><h3><font face="Arial" size="7">  <img border="0" src="i/umldilver.gif" WIDTH="606" HEIGHT="15"></font></h3>         <h3></font></b><font size="5">7. </font><a name="7"></a>结构化元素:类型&nbsp;    <b><a href="umlsemantics001.htm">返回目录</a></b></h3>          <blockquote>            <font face="Times New Roman" size="3"><p></font><img border="0" src="i/image8.gif" WIDTH="619" HEIGHT="479"></p>           <b><font face="Arial" size="5"><p></font></b><font size="5">7.1<a name="7.1]"></a> </font>描述</p>              <p>本图描述了UML中类型的语义,包含下列元模型类:</p>              <blockquote>                <p>属性 参见第六节。</p>                <p>形参 形参是函数原型到参数集合的组合聚集。参数是函数原型/操作的形参。形参的Kind属性指定了参数的方向。</p>                <p>成员 成员是类型的一部分,表示属性或操作。</p>                <p>成员                成员是类型到成员集合的组合聚集。这些成员是类型的成员。类型的范围是与类型或实例相关的成员的范围。visibility属性表示相关联的成员在其所属类型之外是否可见。Direction属性表示成员被它所在的成员提供还是需求。</p>                <p>模型元素 参见第二节。</p>                <p>名字 参见第二节。.<font face="Times New Roman"></p>                </font><p>嵌套 嵌套是类型到类型集合的组合                聚集。一个类型可以被嵌套在另一个类型中。嵌套的visibility属性表示相关联的类型在包含它的外围类型之外的可见性。</p>                <p>操作 操作是工作单元向外界表现的公有界面。</p>                <p>参数 参数是无界限的表达式。</p>                <p>信号 参见第五节。</p>                <p>信号                信号是类型到信号集合的共享聚集。这里的信号集合包括类型所接收或发送的信号。信号的Direction属性表示信号被它所在的类型接收还是发送。</p>                <p>类型 参见第五节。</p>                <p>值 参见第五节。</p>                <font face="Times New Roman"><p></font> <font face="Times New Roman"></p>     </blockquote>     </font><p>本图还介绍下列关系:</p>     <blockquote>       <p>行为 行为是类型到行为集合的组合聚集。行为是类型的行为。</p>       <p>扩展点       扩展点是类型到名字集合的组合聚集。名字是类型的扩展点。</p>       <p>形参 形参是函数原型到参数集合的组合聚集。参数是函数原型/操作的形参。</p>                <p>一般化 属性是成员的子类型。</p>                <font face="Times New Roman"><p></font>成员是模型元素的子类型。</p>                <font face="Times New Roman"><p></font>操作是成员的子类型。</p>                <font face="Times New Roman"><p></font>参数是模型元素的子类型。</p>                <font face="Times New Roman"><p></font>值是模型元素的子类型。</p>                <p>成员                成员是类型到成员集合的组合聚集。这些成员是类型的成员。</p>                <p>嵌套                嵌套是类型到类型集合的组合聚集。一个类型可以被嵌套在另一个类型中。</p>                <p>信号                信号是类型到信号集合的共享聚集。这里的信号集合包括类型所接收或发送的信号。</p>                <p>模板参量                模板参量是类型到值集合的组合聚集。值是参数到模板类型的模板参量。</p>                <p>模板参数                模板参数是类型到参数集合的组合聚集。参数是模板类型的模板参数。</p>              </blockquote>              <b><font face="Arial" size="5"><p></font></b><font size="5">7.2<a name="7.2"></a> </font>基本语义</p>              <p>类型的责任是指定论域及应用于其中的行为。类型的isTemplate属性是一个布尔值,它指定了类型实例是否模板。模板类型实例是一种类型,它不被具体实现(所以没有实例),但必须首先确定边界。模板类型实例可以具有参数但不能有参量,非模板类型实例不能有参数,可以有或没有参量(只有在非模板类型实例体现模板类型实例的实例化时才可以有参量)。isTemplate的默认值为假。</p>              <p>嵌套是类型到类型实例集合的组合聚集。嵌套的责任是声明嵌套类型实例。嵌套的visibility属性指定了相关联的嵌套类型实例在包含它的类型实例之外的可见性。visibility的默认值为公有。每个嵌套类型实例被一个类型实例所拥有,而每个类型实例可以拥有零个或多个嵌套类型实例。嵌套支持递归,即嵌套类型实例本身可以拥有嵌套类型实例。由于每个类型实例定义了一个命名空间,在同一嵌套层中每个嵌套类型实例的名字必须唯一。</p>              <p>行为是类型实例到行为类实例集合的组合聚集。行为的责任是指定类型实例的行为。</p>              <p>参数是模型元素的子类型,是无界限的表达式,其责任是指定参数的名字、类型和默认值。参数实例的名字值不能为空。参数实例的type属性是类型表达式实例,它被用作指定参数的类型;参数的defaultValue属性未解释,只应用于对给定参数无法匹配的情况。defaultValue属性的类型必须与参数实例的类型相容。</p>              <p>模板参数是从类型实例到参数实例集合的组合关联。只有isTemplate属性为真的类型实例可以具有模板参数。模板参数中的每个参数实例都是零个或一个类型实例的一部分,而每个类型实例可以有零个或多个参数实例。参数实例的名字实例变成了对模板类型实例可见的名字,并且在符合参数实例的类型的情况下可以用在模板的范围内。</p>              <p>值是模型元素的子类型,是表达式的有界值。值的责任是具体实现一个数值。</p>              <p>模板参量是类型实例到值实例集合的组合聚集。只有非模板类型实例才可以有模板参量,即只有在类型实例体现模板类型实例的实例化时才可以有模板参量。模板参量的责任是提供绑定模板参数的值实例集合,这些模板参数属于实例化为非模板类型实例的无界限的模板类型实例。非模板类型实例的模板参量的值实例必须与模板类型实例的模板参数的参数实例匹配,以(而且必须)在类型上完全符合(但不需要在名字上符合)。另外,非模板类型实例的模板参量的值实例只能包括那些对非模板类型实例可见的类型实例。</p>              <p>信号是命名的事件。信号的责任是命名一个体现在时空中重要发生的可能的事件。</p>              <p>信号是类型实例到信号实例集合的共享聚集。信号的责任是指定给定类型实例有责任响应的或类型实例发出的信号实例。信号的direction属性是一个枚举,指定相关联信号实例的方向。信号实例的默认方向是接收。被类型实例接收的信号实例是类型实例有责任处理的信号实例;而由类型实例发送的信号实例是可以由类型实例发送给其客户的信号实例。一个给定的类型实例可以接收或发送零个或多个信号实例,而一个给定的信号实例可以被零个或多个类型实例接收或发送。</p>              <font face="Times New Roman"><p></font>UML没有指定这样的机制:信号实例广播到类型实例,以及类型实例如何接收及发送信号实例。</p>              <p>成员是模型元素的抽象子类。成员的责任是表示属性实例或操作实例。</p>              <p>成员是类型实例到成员实例集合的组合聚集。成员的责任是指定类型的成员。一个给定的类型实例可以有零个或多个成员实例,而每个成员实例只属于一个类型实例。成员的isTypeScope属性是一个布尔值,它指定了相关联成员实例的范围。isTypeScope属性的默认值是假,表示成员实例是实例范围的。实例范围的成员实例对类型实例的实例是唯一的,而类型范围的成员实例对类型实例的所有实例是共享的。成员的visibility属性是一个布尔值,它指定了相关联成员对其外围的类型实例的可视性。visibility属性的默认值是公有。成员的direction属性是一个枚举,它指定了相关联成员实例的方向。成员的默认方向是提供,表示成员实例在类型实例中声明。被请求的成员实例是类型实例为保留其语义而请求的。指定一个被请求的成员实例可以将该成员实例引入到类型实例中,但不构成对成员实例的声明。与模板参数不同,被请求的成员实例的规格说明并不介绍模板成员实例,而是声明类型实例的界面的语义,在界面中指定了要使用的成员实例。</p>              <p>属性是成员的子类型。属性的责任是指定类型实例的结构化特征。与属性实例相关联的名字实例是属性名;它的值不能为空。属性实例的Type属性指定了属性的类型,属性实例的initialValue属性指定了初始值(如果没有另外指定或构造)。初始值的类型与属性实例的类型相容。</p>              <p>操作是成员的子类型。操作的责任是指定类型实例的行为特征。与操作实例相关联的名字实例是操作名;它的值不能为空。操作实例的isPolymorphic属性是一个布尔值,它指定了操作实例是否为多态的;多态操作实例表示子类型可以重新引入和提供替换的方法实例,这样,在操作实例被调用时,使用重载的行为。isPolymorphic属性的默认值为真。在继承关系图中,一旦isPolymorphic被设为假,继承关系较低的同名操作的这一属性就不能被设为真。操作实例的isQuery属性是一个布尔值,它指定了操作实例是否保留实例状态的行为。isQuery属性的默认值为假,表示操作实例的语义允许类型实例的实例的状态被修改。isQuery取值为真表示操作的语义必须保证类型实例的实例状态不被修改。属性isAbstract是一个布尔值,它指定了操作实例是否有相应的实现。isAbstract的默认值为假,表示存在相应的实现;isAbstract取值为真表示相应的实现不存在(也不能存在)。isAbstract为真的具有一个或多个提供操作的类型实例在现实世界中可以不具有直接的实例,虽然在模型实例中,对应体现其子类型之一的原型实例的抽象类型实例可以具有实例。</p>              <p>扩展点是类型实例到名字实例集合的组合聚集。每个类型实例可以有零个或多个扩展点,而每个名字可以是不超过一个类型实例的扩展点。与类型实例相关联作为扩展点的名字实例必须具有唯一的名字。</p>              <p>形参是由操作实例到参数实例集合的有序的组合关联。形参中的每个参数实例是零个或一个操作实例的一部分,而每个操作实例可以有零个或多个参数实例。参数实例的名字实例成为对操作实例作为形参可见的名字,并且可以用在操作的范围内,但要求它必须符合参数实例的类型。形参的kind属性是一种枚举,其责任是指定形参的种类。输入表示参数的性质可以观察,但不能修改;输出表示参数的性质不能观察,但可以修改;输入输出表示参数的性质既可以观察,又可以修改;返回与输出的语义相同,但指明了参数可以用于包含有相应操作实例的表达式中。kind属性的默认值是输入输出。一个给定的操作实例可以有任意多个这些类型(包括返回,尽管通常一个操作实例只会有零个或一个参数实例)的参数实例。</p>              <b><font face="Arial" size="5"><p></font></b><font size="5">7.3<a name="7.3"></a> </font>导出语义</p>              <p>名字和模型元素语义参见第二节。</p>              <p>行为的语义参见第九节和第十节。</p>              <p>形参、成员、嵌套和信号不是模型元素的子类型。</p>              <p>如第五节所述,用例是类型的子类型。所以,本节所述的类型实例的所有性质对用例实例同样有效,只是用例实例不能嵌套。</p>              <p>如第5.4节所述,责任是应用于类型的预定义标志值,它指定了所在类型实例的约定或义务。在类型实例的生存期内,这些责任被求精,并最终被类型实例的成员实现。引入一个目标为责任实例,源为责任所在的类型实例的成员实例的追踪依赖,可以指定一个由责任到实现它的成员实例的确定的追踪。</p>              <p>如第五节所述,类型实例指定了由类实例实现的界面。类型和类的分离构成了UML中的说明/实现关系。这种关系已在第五节中介绍。</p>              <p>如第5.4节所述,可以有一个源为类型实例或类实例,              目标为类型实例的求精依赖实例。求精的目标是指定一个界面,而这个界面指定了源的角色。总之,所有源为给定类型实例的求精依赖实例的目标类型实例都被称为类型实例的角色。角色的这个概念与第六节所述的关联角色的语义相互作用。对于一个参加在多重关联实例中的关联角色实例的给定的类型实例,每个这样的关联角色实例指定了类型实例的一个角色,这个类型实例与指定界面的另一个类型实例形式相同。一个类型实例的完整的角色必须是类型实例参加的关联角色的超集。</p>              <p>这些语义产生了说明/实现层次结构。特别是,一个给定的类实例可以是体现类实例角色的多个类型实例的求精,而一个给定的类型实例可以被多个类实例求精。这些角色是类实例的类型。如果一个给定的类实例不是任何类型实例的求精,那么类型和类实例的类相同。</p>              <p>求精的语义也和实例的语义相互作用。如第五节所述,实例类的实例可以有到类型实例集合的关联,体现了实例类实例的直接角色。实例类实例的角色必须符合相应类型实例的可能角色。</p>              <p>如第6.2节所述,类型是可一般化元素,因此类型实例可以指定为抽象的。</p>              <p>如第4.2节所述,限制名字的形式由包的名字和限制域构成。嵌套类型实例被其它类型实例所拥有,所以引入了第二种限制域的需求,由下面的产生式规则指定:</p>              <font face="Courier New"><p></font>限制域 ::= 类型_名字 {“::” 限制域}<font face="Courier New"></p>              </font><font face="Times New Roman"><p></font> <font face="Times New Roman"></p>     </font><p>如第六节所述,类型实例可以参加一般化和关联关系(如第三节所述,依赖关系)。模板类型实例也可以。</p>     <p>实例化类型实例到模板类型实例的参数/值绑定体现了一种本质/现象关系对。而操作的实参到形参的绑定,值实例到参数实例的绑定引入了实例化类型实例和与值实例相关联类型的关联关系,以便一旦所有的绑定被分解时,与模板类型实例中相应的参数实例的形式一致。</p>     <p>类型和属性持久性的语义参见第5.4节。</p>     <p>如第五节所述,信号是类的子类型。这样,如第六节所述,信号实例是可一般化元素实例,也可以参加关联关系。这意味着可以为信号实例的层次结构建模。如果信号实例S被指定为被给定类型实例接收的信号,则类型有义务响应S的实例以及S的子类型的实例。</p>     <p>因为信号是类的子类型,信号实例可以有成员实例,包括属性实例(但很少包括操作实例)。这些属性实例基本上是信号实例的形参,而且,如第十节所述,这些形参可以在动作实例的上下文中和实参匹配。</p>     <p>可视性的语义参见第二节。</p>     <p>信号和成员的direction属性允许对由类型实例提供的角色及类型实例需求的角色进行详细说明。由类型实例提供的角色指定了类型实例有义务响应指定为接收的信号实例以及声明指定为提供的成员实例。类型实例可以类似地指定实例需求的角色。在这种环境中,需求的角色是与参加成员实例的给定类型实例的角色相对的所有关联角色构成的全集的子集。这允许在模型的类型实例中进行闭包求值。特别是,如果一个给定的类型实例发送一个给定的信号实例,其它类型实例可以接收相同的信号实例。类似地,一个给定的类型实例可以提供某些被其它类型实例需求的成员实例。UML并未指定任何关于提供角色和需求角色的强语义,但允许对它们的详细说明,支持它们的匹配。这些语义的基本原理是,强匹配语义只可能用于完整、自一致和不改变的模型,然而绝大多数模型本质上是不完整、非自一致和经常改变的。</p>     <p>由于一个类型实例定义一个命名空间,由一个类型实例声明的所有属性实例的名字必须是唯一的。类似地,由一个类型实例声明的所有操作实例的函数原型也必须是唯一的;由于对于操作而言,类型实例的名字空间规则应用于函数原型,但不应用于名字,所以由一个类型实例声明的多个操作实例可以具有相同的名字实例,但必须可以通过参数的名字和类型进行区分。</p>     <p>类型/实例、参数/值、属性/实例、信号/消息、操作/消息都构成了本质/现象对。</p>     <p>成员是模型元素的子类型,所以成员实例可以有构造型、标志值、附注和限制条件(以及参加依赖关系)。成员实例这些性质的两个更普遍的用途是提供不同种类成员的划分(通过附在每个成员实例上的构造型实例),以及将操作实例连接到它们的方法实例上(通过求精依赖),然后把方法实例连接到它们的代码体上(通过由方法实例到包含文件构件实例的附注的依赖)。方法和构件的语义参见第八节。</p>     <p>属性在语义上与严格限定为由类型到属性的组合聚集等价。</p>     <p>导出属性是并未实现但可以由其它成员实例的语义导出的属性。导出属性是第2.4节所描述的导出依赖的源。</p>     <p>如第八节所述,与类型/类构成本质/现象结构一样,操作/方法也构成了这样的结构:操作实例体现了工作单元的界面,方法实例体现了操作实例的现象。如第5.4节所述,方法实例和操作实例之间的关系是求精,即,方法实例是操作实例的求精。这些语义划分出了说明/实现层次结构。一个给定的方法实例只可以是一个操作实例的求精,而一个操作实例可以被许多不同的方法实例求精。如果一个给定的方法实例不是任何操作实例的求精,工作单元的界面和实现被压缩为一个结构,即,方法实例。</p>     <p>如第六节所述,类型实例可以参加一般化关系。类型实例是另一个继承了它们超类型所有性质的类型实例的子类型,这些性质包括构造型、性质、附注、限制条件、信号和成员(包括属性和操作)实例,以及相应的关系和体现(通过协同实例)。子类型通常可以添加新的结构化性质以及重载行为化性质(例如继承的操作实例和继承的状态机实例,提及后者的原因是类型实例可以被通过协同实例表示,协同实例可以有行为类实例,而行为类实例包括状态机实例)。继承的语义对操作和状态机实例有特殊的意义。特别是,超类型实例的操作可以被子类型实例中相应的操作实例重载,当且仅当超类型操作实例被标为多态(它的isPolymorphic属性必须为真)。子类型的操作实例必须符合超类型操作实例的函数原型,但是可以重载超类型操作实例的行为。在超类型类型实例的操作实例和类型实例的子类型的相应操作之间没有明确的关系。然而,这些通过函数原型匹配:具有相同函数原型的操作实例被看作匹配。</p>     <p>激发一个信号实例的实例或激发一个操作实例的实例的语义参见第十节和第十一节。通过设置isPolymorphic属性为真标记为多态的操作实例可以通过动态查找得到。</p>     <p>如上所述,类型实例可以有相关联的行为类的实例;这些行为类实例可以用来指定类型实例对外的行为。然而,如第九节所述,类型和操作实例也可以被协同实例体现。对于类型实例,这一点可以表达抽象的用语,指定类型实例对外的行为。另外,如第十节和第十一节所述,状态机和交互作用都是行为类的子类型,因此可以用于描述这些语义。特别是,状态机的实例可以用作指定类型实例的动态语义,交互作用的实例可以用于通过一系列提出类型实例行为原型化示例的场景来反映动态语义。</p>     <p>在操作实例中,操作的语义可以在协同中表达,它包括行为的参加者以及协同的动态语义,这些动态语义可以由状态机实例指定,也可以有交互作用实例反映。</p>     <p>这些语义对于用例实例特别重要。如第五节所述,用例实例指定了一些场景,场景是动作的序列。这样,用例实例(不要和对应于用例实例的实例混淆)由协同实例体现,协同实例具有相应的行为类实例集合,行为类实例指定了用例实例所有可能的场景。如第五节所述,它对应的实例是场景,场景是匹配可能动作流的单个动作流。</p>     <p>形参到实参的匹配规则参见第十节。操作实例到参数实例的关联引入了操作实例和在参数实例的类型中引用的类型实例之间的隐含关联。除非另外指定,关联中两个角色的multiplicity都是0..1。     <font face="Times New Roman"></p>     </font><p>可以指定由操作实例到信号实例的确定的发送依赖,其中的信号表示在激发操作时所发送的信号。这个发送依赖的源是操作实例,而目标是信号实例,它们必须是相同类型实例的成员和信号。</p>     <p>扩展点的语义和第六节所述的扩展构造型的语义相互作用。特别是,类型实例或用例实例(扩展只能应用于这两种元素实例)的扩展点定义了一个可以被其它类型或用例实例扩展的点,在这里,扩展表示实例的行为可以被中断,只能由扩展行为的类型或用例继续。这样,扩展点不过是与类型或用例实例相关联的操作时序上的一个标记,这些类型或用例实例命名了可以被其它类型或用例实例扩展的空间。</p> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -