UML学习笔记之类图与对象图

什么是类图?

类图显示了系统的静态结构,标识了不同的实体(人、事物和数据)是如何彼此相关联的。在类途中不仅包含为系统定义的各种类(其中包含了类的属性和操作),也包含了他们之间的关系,如关联、依赖和聚合等。

类图和对象图是用于描述系统静态结构的两种重要手段。类图从抽象的角度描述系统的静态结构,特别是模型中存在的类、类的内部结构以及他们与其他类之间的相互关系,而对象是类的实例化表示,对象图是系统静态结构的一个快照。

定义:

类图中包含各种概念,这些概念包括真实世界中的概念、抽象的概念、实现方面的概念和计算机领域的概念。类图就是用于对系统中的各种概念进行建模,并描绘出他们之间关系的图。这些现实生活中的概念抽象到类图中就分别对应了类、接口、数据结构以及构件。在UML中,这些类型统称为类元(Classifer)。类元是对有实例且有属性形式的结构特征和操作形式的行为特征的建模元素的统称。所以,创建类图的目的之一就是显示建模系统的类型。

一个类图通过系统中的类以及个各类之间的关系来描述系统的静态方面。类不仅描述了系统内部信息的结构,也包含了系统的内部行为,系统通过自身行为与外部事物进行交互。

类图中一共包含了以下几种模型元素,分别是:类(class)、接口(Interface)、依赖(Dependency)关系、泛化(Generalization)关系、关联关系(Association)以及实现(Realization)关系。

类图的组成:

类是面向对象中系统组织结构的核心,在此不再赘述,相信学习过C++或者JAVA任何一个面向对象语言的读者都能了解类是什么。在UML中,类被表述成为具有相同结构、行为和关系的一组对象的描述符号。

UML的图形表示中,类的表示法是一个矩形,这个矩形由三个部分组成,分别是类的名称,类的属性和类的操作。如图:

对于类的组成不再赘述,和面向对象中类的构成大致相同。

类之间的关系:

类之间的关系主要包含依赖关系,泛化关系,关联关系和实现关系四种。

依赖关系:

依赖表示的是两个或多个模型元素之间语义上的连接关系。提供者的某些变化会要求或指示依赖关系中客户的变化,即依赖关系将行为和实现与影响其他类的类联系起来。

依赖关系分为以下五种类型:

绑定依赖

实现依赖

使用依赖

授权依赖

抽象依赖

我们主要讨论前四个,抽象依赖不讨论。

绑定依赖:对于绑定依赖,只包含绑定关系一种。绑定是将数值分配给模板的参数。它是具有精确语义的高度结构化关系,它表明对目标模板使用给定的实际参数进行实例化。例如:模板容器类和这个类的实例之间的关系被模型化为绑定依赖。绑定包括一个映射到模板的形式参数到实际参数的列表。

实现依赖:对于实现来说,实现是类元之间的语义关系,关系中的一个类元描述了另一个类元(接口或者抽象类)实现的契约。也就是说,实现关系中的一个类只具有行为的定义,而具体的结构和行为,则是由另一个类来给出,例如我们在使用C++进行编程的时候可以定义一个包含虚函数的父类,父类本身不实现虚函数,只做一个声明,在子类继承父类过后对父类中的虚函数进行实现,他们之间就存在了一个实现依赖,对于JAVA来说,接口和继承接口的类也是一个实现依赖,在其他编程语言中,抽象类和子类也可以构成实现依赖。如图所示:


使用依赖:

使用依赖都是非常直接的,通常表示客户使用提供者提供的服务以实现自身的行为。使用依赖关系包含使用、调用、参数、发送和实例等:使用表示的是一个元素的行为或实现会影响另一个元素的行为或者实现。调用表示一个类中的方法调用另一个类的操作;参数表示类中的一个操作和它参数之间的关系;发送表示一个类中的方法把信号发送到相关接受目标;实例表示一个类的方法创建了另一个类的实例。举个例子:比如说编译器在编译程序的时候在编译A类的时候因为A类用到了B类,所以要对B先进行定义,A和B之间就存在了一个使用依赖关系。

授权依赖:

授权依赖用来表示一个事物对另外一个事物进行访问的能力。提供者通过设定客户类的相关权限控制和限制对其内容访问的方法。授权依赖关系包含访问、导入、友元等依赖关系:访问允许一个包引用另一个包中的元素;导入指的是提供者包中的元素名称被加入到客户包的命名空间中;友元是指允许客户访问提供者中的内容,即使客户没有足够的访问提供者的可见性。

2.泛化关系:

泛化关系用来描述类的一般和具体之间的关系。类似于面向对象语言中的继承,具体描述建立在对类的一般描述的基础之上,并对其进行了扩展,因此在具体描述中不仅包含一般描述中所拥有的所有特性、成员和关系、而且还包含了具体描述的补充信息,例如小客车,汽车都是交通工具的一种。

在泛化关系中,一般描述的类被称作父类,具体描述的类被称为子类,这些也和面向对象语言中的继承概念类似,再此不再赘述。


3.关联关系:

关联关系是一种结构关系,指出了一个事物的对象与另一个事物的对象之间的语义上的连接,例如,类(library)图书馆类和(book)书类,就是一种一对多关联,这表明每个Book实例仅被一个library实例所拥有。此外,给定book是能够找到他所属的library,给定library,能够找到他的全部book。

由于类是抽象的,所以类也可以与它本身相关联,当一个类关联到他本身时,并不意味着类的实例与他本身相关,而是类的一个实例与类的另一个实例相关。

关联关系还拥有两种非常重要的形式,就是聚集(aggregation)关系和组成(composition)关系。

聚集关系描述的是部分与整体关系的关联,简单地说,他将一组元素通过关联组成一个更大更复杂的单元,这种关联关系就是聚集。

例如对于一个学校来说,聚集关系可以这么理解:一个学校有很多系部,很多系部组成一个学校,那么UML图就应该这么画:

组成关系则是一种更强行驶的关联,在整体中拥有管理部分特有的指责,又是也被称为强聚合关系。在UML中组合关系使用带实心菱形头的实线来表示,其中头部指向整体,例如主机 CPU和主板的组成关系就是主机类包含CPU类和主板类。

在Rational Rose中,对关联关系的表示,还有下列几种特性应用于关联端来修饰关联关系,分别是名称、角色、多重性、构造型和导航性等。


(1)名称:关联关系可以有自己的名称,用来描述关系的性质。在通常情况下使用一个动词或动词短语来命名关联,以表明源对象在目标对象上执行的动作。

(2)角色:角色指的是在关联关系中,一个类通过关联对另外一个类表现出来的职责。当类出现在关联的一端时,该类就在关联关系中扮演一个特定的角色。

(3)多重性:多重性是指在关联关系中,一个类的多个实例与另外一个一个类的一个实例相关。在UML中,多重性是使用一个“..”进行分开的两个数值区间来表示的,其格式为minimun..maximum,其中minimun和maximum都是整数。当一个端点给出多少赋值时,就表示该端点可以有多个对象与另一个端点的一个对象进行关联。

什么是对象图?

对象图中包含对象和链,其中对象是类的特定实例,链是类之间关系的实例,表示对象之间的特定关系。对象图所建立的对象模型描述的是某种特定的情况,而类图所建立的模型描述的是通用的情况。

对象是类的实例,创建一个对象通常可以从以下两种情况来考虑:第一种情况将对象作为一个实体,他在某个时刻具有明确得知;另一种情况是作为一个身份的持有者,不同的时刻有不同的值。

链:链是两个或多个对象之间的独立连接,它是对象引用元祖,是关联的实例。对象必须是关联中相应位置处类的直接或间接实例。一个关联不能有来自同一关联的迭代连接,即两个相同的对象引用元祖。链其实就是表示了对象之间的特定关系,例如:

李明和专业英语之间就存在一个特定关系,选择课程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章