【UML用户指南】-14-对高级结构建模-实例

发布于:2024-06-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

1、实例的组成结构

1.1、类型

1.2、名称

1.3、操作

1.4、状态

1.5、其他特征

1.5.1、主动对象

1.5.2、链

1.5.3、静态属性

1.6、标准元素


实例是抽象的具体表现,可以对它施加一组操作,而且它可能有一组状态,来存储操作的结果。

术语“实例”与“对象”在很大程度上是同义的,因而,在大多数情况下二者可以互换使用

在 UML 中可以表示抽象和它们的实例。UML 中的几乎每一个构造块(最显著的是类、构件、

结点和用况)都可以对它们的本质方面或者对它们的实例方面建模。在大多数情况下是把它

们作为抽象。当要对具体的表现建模时,就要用它们的实例。

UML为实例提供了图形表示,如图所示。这种表示法允许将具名实例以及匿名实例可视化

在图形上,用带下划线的名字表示实例规约

实例使用一个冒号

包的限定名用两个冒号

        在对实例建模时,要把它们放在对象图中(若想可视化它们的结构细节),

放在交互图和活动图中(若想可视化它们在动态情景中的参与情况)

如果要显式地表示对象与它的抽象之间的关系,可以把对象放在类图中

1、实例的组成结构

1.1、类型

        一个实例有一个类型。实例的类型必须是具体的类目,但是一个实例规约(不表示单个实例)可以有一个抽象类型。在表示法上,实例的名称后跟一个冒号再加上类型,例如:t :Transaction。

1.2、名称

        实例可以有一个在其语境中与其他实例相区别的名称。通常,对象存在于一个操作、一个构

件或一个结点的语境中。名称 (name)是一个文字串,例如上图中的t和myCustomer。单

独的一个名称叫做简单名 (simple name)。

实例的抽象可以是简单名,例如Transaction;

也可以是路径名( path name),例如Multimedia::AudioStream,它是以抽象所在的包名为前缀的抽象名。

在很多情况下,只有对象所在的计算机知道该对象的实际名称,在这种情况下,

可以给出一个匿名对象(例如:AudioStream)。匿名对象的每次出现都被认为是有别于所

有其他出现。

1.3、操作

        对象不仅是通常在现实世界中占有空间的事物,而且可以对它做某些事。在对象的抽象中声

明了可以在对象上进行的操作。例如,如果类 Transaction定义了操作 commit,那么给定一

个实例t : Transaction,就可以写出像t.commit()这样的表达式。这个表达式的执行意味

着对象t由操作commit进行操纵。在与Transaction相关的继承网格结构中,这个操作可能

被多态地调用,也可能不被多态地调用

1.4、状态

        由对象的所有性质加上每个性质当前的取值(也可以根据你的观点包括链和相关的对象)组成。这些性质包括对象的属性和链以及所有它的组成部分。对象的状态因此是动态的。所以,当可视化对象的状态时,实际上是在给定的时间空间点上描述对象的状态值。在同一张交互图中,可以通过多次显示一个对象来表明它的状态变化,但每次出现都表示一个不同的状态。

状态的改变可以是对象中任意属性的值发生变更

        当操作对象时,通常要改变对象的状态;当查询对象时,则不会改变它的状态。例如,在预

订飞机票时(用对象 r : Reservation 表示),可以设置它的一个属性的值(例如 price=395.75)

如果改变了预订,比如增加了一段新航程,那么对象的状态要发生变化(例如price =1024.86)。

        如图所示,可以用UML表明对象的属性值。例如,显示myCustomer的属性id值是

“432-89-1783”。这个例子中,显式地给出了 id 的类型(SSN),但是这是可以省略的(正如active = True),因为其类型可以在myCustomer的类中对id的声明中找到。
 

可以把一个状态机和一个类联系起来,在对事件驱动的系统建模或者对类的生命期建模时,

这是特别有用的。在这些情况下,也可以显示状态机对于给定对象在某一给定时刻的状态。

把状态展示在类型后面的方括号内。

如上图所示,对象 c(类 Phone 的实例)处于状态WaitingForAnswer,它是一个在Phone的状态机中定义的命名状态。

由于一个对象可以同时处于几个状态,所以也可以显示该对象当前状态的一个列表。

1.5、其他特征

1.5.1、主动对象

进程和线程是系统交互视图的重要元素,所以UML提供了区别主动元素(它是进程或线程的

一部分,表示控制流的根)与被动元素的可视化提示。可以声明使进程或线程具体化的主动

类,也可以辨别主动类的实例,

每个主动对象代表一个控制流的根,可用于命名不同的流。

1.5.2、链

关联的实例称为链。链是对象之间的语义联系。像关联一样,把链表示成一条直线,但能把链与关联区别开来,因为链连接的是对象。

1.5.3、静态属性

另一种实例是静态(类范围内的)属性。实际上,静态属性是类拥有的对象,类的所有实例都可以访问这个对象。因此,可以在类声明中把它表示为带有下划线的属性

1.6、标准元素

UML 中的所有扩展机制都可应用到对象上。然而,通常不直接地将实例衍型化,也不给出实

例的标记值。相反,对象的衍型和标记值可从它的抽象中所定义的衍型和标记值派生出来。

例如,如图所示,可以显式地指明对象的衍型以及它的抽象。

(1)实例(instanceOf) 描述了客户对象是供应者类目的一个实例。它很少以图形的形

式来表示,通常用一个后跟冒号的文本表示法来表示它。

(2)实例化(instantiate) 描述了客户类创建了供应者类的实例。