概述
定义
类图(Class Diagram)是用于显示一组类、接口以及它们之间关系的图。
类图用于对系统中的各种概念进行建模,并描绘出它们之间的关系,主要通过系统中的类以及类之间的关系来描述系统的静态结构。
主要模型元素:
类、接口、关系(依赖、泛化、关联和实现)。也可以创建包、注解等。

注意
类图是最复杂的图
类图
对象图
关系
类与类之间的关系最常见,通常有3种:
- 关联(Association)
- 泛化(Generalization)
- 依赖(Dependency)
类与接口之间的关系,一般有两种: - 实现(Realization)
- 依赖(Dependency)
接口之间可以有关联和泛化关系,但较少用。
关联(Association)关系
定义
关联关系表示对象之间的结构关系,指出了一个事物的对象与另一个事物的对象之间的语义上的连接。
关联可以分为单向关联、双向关联。
关联关系靠近类的连接点被称为关联端,有名称、角色、可见性、多重性等特性。

种类
一元关联(自身关联)
一个类与自身的关联

二元关联
两个类之间的关联,最普通、最常用。
N元关联
是在3个或3个以上类之间的关联,用菱形向外引出关联路径。
不建议使用N元关联,大多数N元关联经过细致分析,都可转成二元关联 。
Rose、SU等工具不能直接表示N元关联;EA可以表示。
特性
除了连接类元素的关联路径之外,关联还有名称、角色、多重性、导航性、限定符等可选的特性。
名称
角色(role)
多重性(multiplicity)
构造型(stereotype)
导航性(navigation)
限定符(qualifier)
约束(constraint)
名称
一般使用一个动词或动词短语来命名关联,还可以在关联上标识阅读方向指示符,以消除阅读的歧义。
角色
是指在关联关系中,一个类通过关联对另外一个类所表现出来的职责。
如果在关联上没有标出角色名,则隐含的用类名作为角色名。
多重性
是指在关联关系中,一个类的一个实例与另一个类的多个实例相关。
多重性表示形式:minimum..maximum

分类
1:1 和 1:n 和 m:n
构造型
在关联关系中,也可以根据具体的语义设置一些构造型。
导航性
导航性根据方向不同,分为单向关联和双向关联。
限定符(qualifier)
限定符定义了被参考对象的一个属性,并可以将该属性作为直接访问被参考对象的关键字。
当需要使用某些信息作为关键字,来识别对象集合中的一个唯一对象时可以使用限定符,使用限定符的关联被称为受限关联。
限定符会影响关联的多重性。
解决查找问题

泛化(继承)关系
含义
继承
指一个类继承另一个类的属性和操作;
泛化

泛化就是指一般化的过程。
箭头:子类指向父类
例如:

可以描述为:
- Horse类继承Mammal类
- Mammal类泛化Horse类
一般描述的类被称作父类,特殊描述的类被称作子类。
泛化关系描述的是“is a kind of”的关系。
接口之间也可以存在泛化关系(子接口与父接口)。

继承的识别

泛化关系特点:
特殊事物完全符合一般事物;
在一般事物出现的地方,能够替换成特殊事物;
通过从特殊事物泛化或从一般事物特化可以创建泛化层次。
泛化可能跨越多个层次。一个子类的父类也可以是另一个父类的子类。
用途
自底向上的实例替换。可以使得子类的实例用于任何父类被声明使用的地方,实现多态。
尽管每个子类的
实现方法不同,
但外界调用方式
完全一样。
自顶向下的成员继承。可以让子类共享父类的属性和操作,实现继承。
public、protected属性和操作可被继承。
继承的方式有两种:单继承( C#、Java )和多继承(C++)。

小结

依赖和实现
类与接口可构成(依赖和实现)关系。
依赖关系
依赖表示两个类之间或类与接口之间的使用关系。
类A使用类B的信息和服务,并且提供者类B的变化可能会影响到客户类A。
分类
- 客户类的操作使用提供者类的对象
- 客户类的操作调用提供者类的操作
- 客户类的操作需要提供者类的参数
- 客户类的操作返回提供者类的对象
B类依赖于A类的常见原因:
- A类是B类某数据成员的类型
- A类是B类某方法中的局部变量或参数的类型
- A类向B类发送消息,从而影响B类发生变化
表示
public class Train{
public void move(){}
}
public class Person{
public void move(Train train){
train.move();
}
}
类图表示为
依赖者-->被依赖者

实现关系
实现关系用来表示规格说明与实现之间的关系。
在类图中,实现关系主要用于接口与实现该接口的类之间。
一个类可以实现多个接口,一个接口也可以被多个类实现。
实现关系的两种表示法:
-
当接口以带构造型的类符号表示时,用虚线三角箭头表示。
-
当接口元素以小圆圈方式表示时,用实线表示。


约束

小结

聚合和组合
关联关系有两种非常重要的特殊形式:
聚合(Aggregation)关系
组合(Composition)关系
用于表示整体与部分的关系
聚合关系
聚合(聚集)描述的是部分和整体关系的关联,描述了“has a”的关系。
部分可独立于整体而存在,是松散的关联关系。
聚合(聚集)就像计算机和它的外围设备:
计算机只是很松散地和外部设备关联;
外围设备可有可无;
外围设备可以被其它计算机所共享。
表示

组合关系
组合(组成)关系是更强形式的聚合,描述了“contains a”的关系。
整体与部分一般具有同样的生存期,部分完全依赖于整体。
整体唯一地负责处理它的部分,包括创建和销毁。
组合(组成)就像是树和树叶:
一片树叶只能被一棵树所拥有;
一片树叶不能由几棵树所共享;
当树死去时,它的树叶也随之死去。
要求

不允许部分类游离于整体之外。
表示

异同点:
都是描述部分与整体关系的特殊关联。
聚合松散,组合紧密。
一个部分事物对象可以属于多个聚合对象,但一个部分事物对象仅能属于一个组合对象。
聚合的对象生命周期可以不同,但组合对象则是同存同亡。

