UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。c++
依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A;类属关系和实现关系在语义上讲也是依赖关系,但因为其有更特殊的用途,因此被单独描述。uml中用带箭头的虚线表示Dependency关系,箭头指向被依赖元素。c#
泛化(Generalization):一般所说的继承(特殊个体 is kind of 通常个体)关系,没必要多解释了。uml中用带空心箭头的实线线表示Generalization关系,箭头指向通常个体。ide
实现(Realize):元素A定义一个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。这个关系最经常使用于接口。uml中用空心箭头和虚线表示Realize关系,箭头指向定义约定的元素。spa
关联(Association):元素间的结构化关系,是一种弱关系,被关联的元素间一般能够被独立的考虑。uml中用实线表示Association关系,箭头指向被依赖元素。orm
聚合(Aggregation):关联关系的一种特例,表示部分和总体(总体 has a 部分)的关系。uml中用带空心菱形头的实线表示Aggregation关系,菱形头指向总体。对象
组合(Composition):组合是聚合关系的变种,表示元素间更强的组合关系。若是是组合关系,若是总体被破坏则个体必定会被破坏,而聚合的个体则多是被多个总体所共享的,不必定会随着某个总体的破坏而被破坏。uml中用带实心菱形头的实线表示Composition关系,菱形头指向总体。继承
其中依赖(Dependency)的关系最弱,而关联(Association),聚合(Aggregation),组合(Composition)表示的关系依次加强。换言之关联,聚合,组合都是依赖关系的一种,聚合是代表对象之间的总体与部分关系的关联,而组合是代表总体与部分之间有相同生命周期关系的聚合。接口
而关联与依赖的关系用一句话归纳下来就是,依赖描述了对象之间的调用关系,而关联描述了对象之间的结构关系。生命周期
后面的例子将针对某个具体目的来独立地展现各类关系。虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。ci
一、依赖关系也是类与类之间的联结
二、依赖老是单向的。(#add 注意,要避免双向依赖。通常来讲,不该该存在双向依赖。
三、依赖关系在 Java 或 C++ 语言中体现为局部变量、方法的参数或者对静态方法的调用。
class Person { void buy(Car car) { ... } }
表示方法:虚线加箭头
特色:当类与类之间有使用关系时就属于依赖关系,不一样于关联关系,依赖不具备“拥有关系”,而是一种“相识关系”,只在某个特定地方(好比某个方法体内)才有关系
一、关联关系是类与类之间的联结,它使一个类知道另外一个类的属性和方法。
二、关联能够是双向的,也能够是单向的(#add还有自身关联)。双向的关联能够有两个箭头或者没有箭头,单向的关联有一个箭头。
三、在 Java 或 c++ 中,关联关系是经过使用成员变量来实现的。
class 徒弟 { }; class 唐僧 { protected: list<徒弟> tdlist; };
表示方法:实线箭头
特征:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码能够用实例变量来表示。
一、聚合关系是关联关系的一种,是强的关联关系。
二、聚合是总体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
三、聚合关系也是经过成员变量来实现的。可是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不一样的层次上,一个表明总体,一个表明部分。
四、关联与聚合仅仅从 Java 或 C++ 语法上是没法分辨的,必须考察所涉及的类之间的逻辑关系。
class 引擎 { }; class 轮胎 { }; class 汽车 { protected:引擎 engine; protected:轮胎 tyre[4]; };
表示方法:空心菱形头
特征:属因而关联的特殊状况,体现部分-总体关系,是一种弱拥有关系;总体和部分能够有不同的生命周期;是一种弱关联;
一、合成关系是关联关系的一种,是比聚合关系还要强的关系。
二、它要求普通的聚合关系中表明总体的对象负责表明部分的对象的生命周期。
class 肢 { }; class 人 { protected: 肢 limb[4]; };
通常是实心菱形加实线箭头表示
特征:属因而关联的特殊状况,也体现了体现部分-总体关系,是一种强“拥有关系”;总体与部分有相同的生命周期,是一种强关联;
通常化关系(泛化和实现):表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。通常化关系是子类指向父类的,或从实现接口的类指向被实现的接口,与继承或实现的方向相反。以下图所示:
图:通常化关系
泛化(图H)表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。图H
1.1.6 实现(Realization):空心箭头和虚线表示
实例(图I)关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另外一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
图I