对象模型中类与类间的关系

来源:互联网 发布:数据显示为undefined 编辑:程序博客网 时间:2024/06/03 12:16

类与类之间通常有关联、聚集、泛化(继承)、依赖和细化4种关系

1.关联
      关联表示两个类的对象之间存在某种语义上的联系。
(1) 普通关联
       只要在类与类之间存在连接关系就可以用普通关联表示。普通关联的图示符号是连接两个类之间的直线,如下图所示。
关联是双向的,可在每一个方向上为关联起一个名字(也可不起名字)。为避免混淆,在名字前面(或后面)加一个表示关联方向的黑三角。在表示关联的直线两端可以写上重数(multiplicity),它表示该类有多少个对象与对方的一个对象连接。

2.聚集

聚集也称为聚合,是关联的特例。聚集表示类与类之间的关系是整体与部分的关系。使用的“包含”、“组成”、“分为……部分”等字句,意味着存在聚集关系。有共享聚集和组合聚集两种特殊的聚集关系。
(1) 共享聚集
    如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。下图中,一个课题组包含许多成员,每个成员又可以是另一个课题组的成员,则课题组和成员之间是共享聚集关系。一般聚集和共享聚集的关联关系用空心菱形表示。

(2) 组合聚集
    如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失(或失去存在价值了),则该聚集称为组合聚集(简称为组成)。

3.泛化

UML中的泛化关系就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。
在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。
泛化关系指出在类与类之间存在“一般--特殊”关系。泛化可进一步划分成普通泛化和受限泛化。
(1) 普通泛化

    没有具体对象的类称为抽象类。抽象类通常作为父类,用于描述其他类(子类)的公共属性和行为。图示抽象类时,在类名下

附加一个标记值{abstract}。

与抽象类相反的类是具体类,具体类有自己的对象,并且该类的操作都有具体的实现方法。

(2) 受限泛化

给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化。预定义的约束有4种:多重、不相交、完全和不完全。这些约束都是语义约束。

多重继承指的是,一个子类可以同时多次继承同一个上层基类,右图中的水陆两用类继承了两次交通工具类。与多重继承相反的是不相交继承,即一个子类不能多次继承同一个基类(这样的基类相当于C++语言中的虚基类)。如果图中没有指定{多重}约束,则是不相交继承,一般的继承都是不相交继承。
完全继承指的是父类的所有子类都已在类图中穷举出来了,图示符号是指定{完全}约束。

不完全继承与完全继承恰好相反,父类的子类并没有都穷举出来,随着对问题理解的深入,可不断补充和维护,这为日后系统的扩充和维护带来很大方便。不完全继承是一般情况下默认的继承关系。

4.依赖和细化

(1) 依赖关系

    依赖关系描述两个模型元素(类、用例等)之间的语义连接关系: 其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。
    在UML的类图中,用带箭头的虚线连接有依赖关系的两个类,箭头指向独立的类。在虚线上可以带一个版类标签,具体说明依赖的种类。

(2) 细化关系

    当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。
    假设两个模型元素A和B描述同一个事物,它们的区别是抽象层次不同,如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。细化的图示符号为由元素B指向元素A的、一端为空心三角形的虚线(注意,不是实线),如下图所示。细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层次的模型之间的相关性,常常用于跟踪模型的演变。


0 0
原创粉丝点击