[跟我学UML] UML中的对象图

缩略语
    UIS      UML Infrastructure Specification   UML基础结构规范
    UML    Unifed Modeling Language            统一建模语言
    USS    UML Superstructure Specification  UML上层结构规范

参考资料
     《UML Infrastructure Specification, v2.2》
     《UML Superstructure Specification, v2.2》
     《 UML类图中的关联、聚合和组合
     《 UML类图中的依赖
     《 UML类图中的泛化
     《 UML类图中的类
     《 UML包图中的包和命名空间

1 对象图
    对象图用于描述被建模系统的模型元素实例之间的结构化信息,其所表达的是特定时间被建模系统在结构上的部分或是所有视图。一个对象图主要集中在特定的对象实例和其槽,以及实例之间的链接。同一个类图所对应的对象图能够有多个,多个对象图合在一块儿共同展现了随着时间的推移,在不一样时间点系统的对象状态。与类图的抽象性相比,对象图是具体的,其一般用来提供所对应类图的结构示例,或者做为所对应类图的测试用例。应当说每一幅对象图都有其侧重点,于是,每一幅对象图应当只侧重表达其所侧重内容。
   
    在UML中,对象实例是采用实例规范(instance specification参见1.1)来表示的,对象实例所具备的结构化特性(feature)是采用槽(slot,参见1.2)来表示的,对象实例与对象实例之间的关系则是采用链接(link,参见1.3)来表示。与类图相对比,实例对应于类对象,槽对应于类属性的实例,而链接则对应于类与类之间关联的实例。有了这些对应关系,在掌握了类图的状况下,就更加的容易理解和掌握对象图了。
   
    图 1.1是对象图相关建模元素在UML规范中的语法定义,后面在讲解具体的概念时咱们会更加具体的说明。


图 1.1 类图元素在UML规范中的语法

1.1 实例规范

    实例规范(instance specification,参见USS的7.3.22节)是用于表示被建模系统中的实例实体,它描述了模型实例实体的部分或是所有。咱们平时编程时,口头上所说的实例,在UML中就称之为实例规范。实例规范所描述的内容可能包括:
    1)一个或是多个实例所属的分类器。在实例规范中一个分类器若是是类,那么它所描述的是这个类的对象;若是一个分类器是关联,那么它所描述的是这个关联的一个链接。
    2)结构化特性的值。结构化特性对应于类的属性用于描述类的结构组成,在类图中行为化特性是采用操做(operation)来表示的,而在对象图中并不表示类的行为特性。在实例规范中,咱们并非必定要表示全部实例的全部结构化特性。
    3)如何计算、推导或是构造实例。
   
    一个实例规范用于指示被建模系统中存在的实体,在实例规范中其信息能够是不完整的,其只侧重于表达所关心的信息。从图 1.1能够获得如下信息:
    1)一个实例规范是一个可打包元素,由于一个InstanceSpecification“是一个”PackageableElement。
    2)一个实例规范能够包含任意多个的槽,这从其slots组成属性能够看出。
    3)一个实例规范最多能够包含一个值规范(value specification,参见USS的7.3.54节),这从其specification组成属性能够看出。简单地说,值规范就是表示对于一个对象的可取值范围是什么。
    4)一个实例规范能够包含任意多个的分类器,这从其classifiers关联属性能够看出。
   
    一个实例规范能够包括槽,而每个槽其实是一个结构化特性的表达。实例规范是一个或是多个分类器的对象实例,所以,它是遵循分类器所定义的结构或是(和)行为规范的。一个没有槽的实例规范,并非表示它没有结构化的特性,由于有可能那些结构特性并非这一对象图所关心的。
   
    须要注意的是实例规范并非被建模系统运行时的精确描述,而只是一个示例,其只是表示了相关的结构信息。咱们不能从实例规范中推导任何的运行时对象结构方面的详细信息。
   
    图 1.2是一个使用实例规范的一个例子,其中每个矩形框都是一个实例规范。图 1.3是其所对应的类图。其中my_car是一个不带有槽的实例,而其它的Window实例都是带有两个槽。你会注意到,实例规范的表示方法与类图中的类是类似的,但也有如下的区别:
    1)其名称下面具备一根下划线,在线上标明了这一实例的名称以及其所属的分类器),实例名与分类器之间采用‘:’进行分割,而若是有多个所属分类器,那么分类器之间采用逗号分开。图 1.2中全部的实例规范都只有一个分类器,好比my_car所属分类器是Car类,也就是说my_car是Car类的一个实例,而front_left、front_right、rear_left和rear_right都分别是Window类的一个实例。
    2)槽对应于类中的属性,但其在实例规范中都会有值。若是没有值那么一般不用在实例规范中表示出来。

图 1.2 使用实例规范的一个例子

图 1.3 图 1.2对象图所对应的类图
    图 1.2是一个相对简单的对象图,而在现实应用中,咱们能够经过多个对象图来展示一样的实例在不一样时间点时各实例的状态,不一样的状态是经过槽的不一样值来表达的。好比,咱们能够采用对象图来表示一个算法,而对于同一算法在不一样时间点各实例的状态(表如今槽的值不一样)采用不一样的对象图来表示。

1.2 槽

    槽(slot,参见USS的7.3.48节)是用于表示实例规范中被建模实体结构特征的值,槽对应于类图中类的属性,是类属性的实例,而属性是类的结构化特性的描述。从图 1.1中能够看出,一个槽具备三个属性:
    1)definingFeature表示这一槽所对应的结构化特性是什么。
    2)owningInstance表示这一槽是属于哪个实例规范的。
    3)value指示槽的值是多少。
   
    图 1.2中每个Window实例规范都有两个槽。其中name槽的definingFeature应当就是窗口名称,显然name槽的owningInstance是各 Window实例,而value对于每个Window实例就不一样了,有的叫“front left”,也有的叫“rear left”。相相似地,is_automatic槽用于表示每个车窗是否是自动的。

1.3 链接

    在UML规范中没有专门用于介绍链接(link)的章节,但在实例规范章节中有所说起。其定义了实例规范之间的关系,从类图的角度来看,一个链接就是一个关联关系的实例。图 1.2中示例了Car类实例规范与Window类实例规范之间的四个链接。对比图 1.2和图 1.3咱们能够发现,图 1.2中的四个链接都是图 1.3中关联关系的实例。

2 总结

    对象图用于表示被建模系统中不一样对象在不一样时间点的结构状态快照,其所表达的是类图中更为细化的结构化信息。当咱们掌握了类图后,学习对象图就相对的简单了许多。

致读者

    若是你想参与讨论UML相关的话题,请加入UML技术圈( g.51cto.com/UltraUML)。
相关文章
相关标签/搜索