转自:http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html
UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。
其中依赖(Dependency)的关系最弱,而关联(Association),聚合(Aggregation),组合(Composition)表示的关系依次增强。换言之关联,聚合,组合都是依赖关系的一种,聚合是表明对象之间的整体与部分关系的关联,而组合是表明整体与部分之间有相同生命周期关系的聚合。
而关联与依赖的关系用一句话概括下来就是,依赖描述了对象之间的调用关系,而关联描述了对象之间的结构关系。
后面的例子将针对某个具体目的来独立地展示各种关系。虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。
1、依赖关系也是类与类之间的联结
2、依赖总是单向的。(#add 注意,要避免双向依赖。一般来说,不应该存在双向依赖。)
3、依赖关系在 Java 或 C++ 语言中体现为局部变量、方法的参数或者对静态方法的调用。
class Person { void buy(Car car) { ... } }
|
虚线加箭头
1、关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法。
2、关联可以是双向的,也可以是单向的(#add还有自身关联)。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
3、在 Java 或 c++ 中,关联关系是通过使用成员变量来实现的。
class 徒弟 { };
class 唐僧 { protected: list<徒弟> tdlist; }; |
1、聚合关系是关联关系的一种,是强的关联关系。
2、聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
3、聚合关系也是通过成员变量来实现的。但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。
4、关联与聚合仅仅从 Java 或 C++ 语法上是无法分辨的,必须考察所涉及的类之间的逻辑关系。
class 引擎 { };
class 轮胎 { };
class 汽车 { protected:引擎 engine; protected:轮胎 tyre[4]; };
|
1、合成关系是关联关系的一种,是比聚合关系还要强的关系。
2、它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
class 肢 { };
class 人 { protected: 肢 limb[4]; }; |
一般是实心菱形加实线箭头表示
一般化关系(泛化和实现):表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化关系是子类指向父类的,或从实现接口的类指向被实现的接口,与继承或实现的方向相反。如下图所示:
图:一般化关系
泛化(图H)表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。图H
1.1.6 实现(Realization):空心箭头和虚线表示
实例(图I)关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
图I
时序图中的Common Operators for Interaction Frames
Operator |
Meaning |
alt |
Alternative multiple fragments; only the one whose condition is true will execute. |
opt |
Optional; the fragment executes only if the supplied condition is true. Equivalent to an alt with only one trace. |
par |
Parallel; each fragment is run in parallel. |
loop |
Loop; the fragment may execute multiple times, and the guard indicates the basis of iteration. |
region |
Critical region; the fragment can have only one thread executing it at once. |
neg |
Negative; the fragment shows an invalid interaction. |
ref |
Reference; refers to an interaction defined on another diagram. The frame is drawn to cover |
sd |
Sequence diagram; used to surround an entire sequence diagram, if you wish. |