UML中描述对象和类之间相互关系的方式包括:依赖,关联,聚合,组合,泛化,实现等。java
表示关系的强弱:组合>聚合>关联>依赖c++
相互间关系spa
聚合是代表对象之间的总体与部分关系的关联,而组合是代表总体与部分之间有相同生命周期关系的聚合。而关联与依赖的关系是,依赖描述了对象之间的调用关系,而关联描述了对象之间的结构关系。.net
一、依赖关系也是类与类之间的联结
二、依赖老是单向的。(#add 注意,要避免双向依赖。通常来讲,不该该存在双向依赖。)
三、依赖关系在 Java 或 C++ 语言中体现为局部变量、方法的参数或者对静态方法的调用。code
虚线加箭头对象
关联(Association):元素间的结构化关系,是一种弱关系,被关联的元素间一般能够被独立的考虑。uml中用实线表示Association关系,箭头指向被依赖元素。blog
一、关联关系是类与类之间的联结,它使一个类知道另外一个类的属性和方法。
二、关联能够是双向的,也能够是单向的(#add还有自身关联)。双向的关联能够有两个箭头或者没有箭头,单向的关联有一个箭头。
三、在 Java 或 c++ 中,关联关系是经过使用成员变量来实现的。继承
聚合(Aggregation):关联关系的一种特例,表示部分和总体(总体 has a 部分)的关系。uml中用带空心菱形头的实线表示,菱形头指向总体。接口
一、聚合关系是关联关系的一种,是强的关联关系。
二、聚合是总体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
三、聚合关系也是经过成员变量来实现的。可是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不一样的层次上,一个表明总体,一个表明部分。
四、关联与聚合仅仅从 Java 或 C++ 语法上是没法分辨的,必须考察所涉及的类之间的逻辑关系。生命周期
组合(Composition):组合是聚合关系的变种,表示元素间更强的组合关系。若是是组合关系,若是总体被破坏则个体必定会被破坏,而聚合的个体则多是被多个总体所共享的,不必定会随着某个总体的破坏而被破坏。uml中用带实心菱形头的实线表示Composition关系,菱形头指向总体。
一、合成关系是关联关系的一种,是比聚合关系还要强的关系。
二、它要求普通的聚合关系中表明总体的对象负责表明部分的对象的生命周期。
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。通常化关系是子类指向父类的,或从实现接口的类指向被实现的接口,与继承或实现的方向相反。以下图所示:
通常化关系
泛化(Generalization):一般所说的继承(特殊个体 is kind of 通常个体)关系,没必要多解释了。uml中用带空心箭头的实线表示,箭头指向通常个体。
带空心箭头的实线线表示
泛化表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。
实现(Realize):元素A定义一个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。这个关系最经常使用于接口。uml中用空心箭头和虚线表示,箭头指向定义约定的元素。
实现关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另外一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。