Posted on 2005-09-05 23:04
Frank Hou 阅读(768)
评论(0) 编辑 收藏 所属分类:
UML
面向对象的建模中3种特别重要的关系:
依赖(dependency)是一种使用关系,多数情况下指的是一个类把另一个类作为自己操作的参数类型,如:

泛化(generalization)是父类和子类之间的关系,也称为“is-a-kind-of”关系。没有父类且最少有一个子类的类称为根类或基类;把没有子类的类称为叶子类。如:

在上图中Shape是基类,Square、Circle、Polygon是叶子类。
关联(association)是一种结构关系,指明了一个事物的对象与另一个事物的对象间的联系。

上图显示的是取自一个学校的信息系统中的一组类。它描述了以下几个内容:
- 每一名学生可以学习任意门的课程,并且每一门课程也可以有任意名学生来学习。
- 每门课至少要有一名教师,每一名教师可以不教课也可以教多门课。
- 一所学校可以没有学生,或有多名学生,一名学生可以是多所学校的学生,通过聚合关系可以知道School是个整体,Student是School的一部分。
- 一所学校可以有一个或多个系,每个系只能属于一个学校,通过聚合关系可以知道School是个整体,Department是School的一部分。
- 在Department和Instructor之间有两个关联。其中一个关联说明一名教师可以被分配到一个或多个系中,并且一个系可以有一名或多名教师,在学校组织中,系比教师的层次要高,所以这里用聚合来建模。另一个关联说明一个系只能有一名教师是系主任。
在UML中对关系建模时,要遵循如下策略:
- 仅当被建模的关系不是结构关系时,才能使用依赖。
- 仅当关系是“is-a-kind-of”关系时,才使用泛化。往往可以用聚合代替多继承。
- 小心不要引入循环的泛化关系。
- 一般要保持泛化关系的平衡;继承的层次不要太深(大约多于5层就应该想一想),也不要太宽(代之以寻找可能的中间抽象类)。
- 在对象间有结构关系的地方,要以使用关联为主。