实例和对象在很大程度上是同义的,实例是抽象具体的表现,可以对它施加一组操作,而且可能有一组状态,来存储操作的结果。UML为实例提供了图形表示,可以有署名实例与匿名实例。
1.术语和概念
实例(instance)是抽象的具体表现,在图形上,用带下划线的名字表示实例规约。一般来说,类的具体表现为对象。对象是类的实例,因此说所有的对象都是实例,然而有些实例不是对象,如关联的实例不是真正的对象,仅仅是一个实例,也称为链。
实例不单独存在,它们总是联系着一个抽象。用UML建模的大多数实例都是类的实例,尽管也可以 有构件、结点、用况和关联等事物的实例。在UML中,实例很容易与抽象区别,它的名称下面画一条横线。
对象是这样一种事物:它在现实世界或概念世界中占有空间,并且能够对它做一些事情。例如,结点实例通常是一个确确实实要放在房间中的计算机;构件实例在文件系统中占据一定空间;客户记录实例要占用一些物理内存。类似地,飞机的飞行极限数据实例是一些可以用数学方法处理的东西。
在对实例建模中,要把它们放在对象图中(可视化它们的结构细节),或者放在交互图和活动图中(可视化它们在动态情景中的参与情况)。如果要显式地表示对象与它的抽象之间的关系,也可以把对象放在类图中,尽管通常不这么做。
一个实例有一个类型。例如: t: Transaction。 实例的类目通常是静态的。也就是一旦创建了类的实例,在该对象生命周期内对象的类就不会改变。
名称是字符串可以是具名或匿名
对象不仅是在现实世界中占有空间的事物,而且可以对它做某些事情。在对象的抽象中声明了 可以在对象上进行的操作。如类Transaction定义了操作commit,那么给定一个实例t:Transaction,就可以写出像t.commit()这样的表达式。
对象也有状态,它由对象的所有性质加上每个性质当前的取值组成。
进程和线程是系统交互视图的重要元素,所以UML提供了区别主动元素(进程或线程的一部分,表示控制流的根)与被动元素的可视化。可以声明使进程或线程具体化的主动类,也可以辨别主动类的实例,如下图,
UML中还有两种可以有实例的元素。一种是关联,关联的实例称为链。链是对象之间的语义联系。把链表示成一条直线,链连接着对象。
另一种实例是静态属性。实际上,静态属性是类拥有的对象,类的所有实例都可以访问这个对象。
UML定义了两个应用于对象之间和类之间的依赖关系的标准衍型:
1)某个实例instanceOf
2) 实例化instantiate
3.常用建模技术
对具体实例建模时,要遵循如下策略:
- 识别对被建模问题的可视化、详述、构造或文档化是充分而又必要的实例;
- 在UML中把这些对象表示成实例;
- 显露对于建模问题充分而又必要的每个实例的衍型、标记值和属性;
- 在对象图或适合于这种实例的其他图中,表示出这些实例以及它们的关系。
例如,信用卡验证的执行对象图,
4. 提示和技巧:
一个结构良好的实例,应满足如下的要求:
- 明确地联系到一个特定的抽象。
- 有一个问题域中提取的唯一名称。
在用UML绘制实例时,要遵循如下策略:
- 显示实例所属的抽象的名称,除非在语境中是明显的。
- 根据在语境中理解对象的需要,显示实例的衍型和状态。
- 当属性及其值列表很长时,就按种类分组。