正文
综述
类图(Class Diagram)是显示了模型的静态结构,特别是模型中存在的类,类的内部结构以及它们与其他类的关系等。
UML中描述对象和类之间相互关系的方式包括:
- 依赖(Dependency),
- 关联(Association),
- 聚合(Aggregation),
- 组合(Composition),
- 泛化(Generalization),
- 实现(Realization)
依赖(Dependency)虚线箭头表示
元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A;
- 依赖关系也是类与类之间的联结
- 依赖总是单向的。(#add 注意,要避免双向依赖。一般来说,不应该存在双向依赖。)
- 依赖关系在 Java 或 C++ 语言中体现为局部变量、方法的参数或者对静态方法的调用。
class Person
{
void buy(Car car){
}
}
表示方法:虚线加箭头
特点:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。
关联(Association)实线箭头表示
元素间的结构化关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。uml中用实线表示Association关系,箭头指向被依赖元素
- 关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法。
2、关联可以是双向的,也可以是单向的(#add还有自身关联)。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
3、在 Java 或 c++ 中,关联关系是通过使用成员变量来实现的。
class 徒弟
{
};
class 唐僧
{
protected: list<徒弟> tdlist;
};
表示方法:实线箭头
特征:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示。
聚合(Aggregation):带空心菱形头表示
关联关系的一种特例,表示部分和整体(整体 has a 部分)的关系。uml中用带空心菱形头的实线表示Aggregation关系,菱形头指向整体。
- 聚合关系是关联关系的一种,是强的关联关系。
- 聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
- 聚合关系也是通过成员变量来实现的。但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。
- 关联与聚合仅仅从 Java 或 C++ 语法上是无法分辨的,必须考察所涉及的类之间的逻辑关系。
class 引擎
{
};
class 轮胎
{
};
class 汽车
{
protected:引擎 engine;
protected:轮胎 tyre[4];
};
表示方法:空心菱形实线箭头头
特征:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;
组合(Composition):带实心菱形头的实线表示
组合是聚合关系的变种,表示元素间更强的组合关系。如果是组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏。uml中用带实心菱形头的实线表示Composition关系,菱形头指向整体。
- 合成关系是关联关系的一种,是比聚合关系还要强的关系。
- 它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
class 肢
{
};
class 人
{
protected: 肢 limb[4];
};
表示方法:实心菱形加实线箭头
特征:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;
泛化(Generalization)带空心箭头的实线
泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。
public abstract class Employee{ } public class Professor extends Employee{ }
实现 (Realization):空心箭头和虚线表示
对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
public interface CollegePerson{ } public class Professor implements CollectPersion{ }
总结
没什么好总结的,多用多查,记得就行。。。。。。