取经

学习Java的过程犹如唐玄奘西天取经的过程,不经历各种困难是无法取得成功的。
posts - 8, comments - 1, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

使用UML建模时的3种关系

Posted on 2005-09-05 23:04 Frank Hou 阅读(767) 评论(0)  编辑  收藏 所属分类: UML

面向对象的建模中3种特别重要的关系:
依赖(dependency)是一种使用关系,多数情况下指的是一个类把另一个类作为自己操作的参数类型,如:

dependency.gif

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

generalization.gif


在上图中Shape是基类,SquareCirclePolygon是叶子类。

关联(association)是一种结构关系,指明了一个事物的对象与另一个事物的对象间的联系。

association.gif


上图显示的是取自一个学校的信息系统中的一组类。它描述了以下几个内容:

  1. 每一名学生可以学习任意门的课程,并且每一门课程也可以有任意名学生来学习。
  2. 每门课至少要有一名教师,每一名教师可以不教课也可以教多门课。
  3. 一所学校可以没有学生,或有多名学生,一名学生可以是多所学校的学生,通过聚合关系可以知道School是个整体,StudentSchool的一部分。
  4. 一所学校可以有一个或多个系,每个系只能属于一个学校,通过聚合关系可以知道School是个整体,DepartmentSchool的一部分。
  5. DepartmentInstructor之间有两个关联。其中一个关联说明一名教师可以被分配到一个或多个系中,并且一个系可以有一名或多名教师,在学校组织中,系比教师的层次要高,所以这里用聚合来建模。另一个关联说明一个系只能有一名教师是系主任。

UML中对关系建模时,要遵循如下策略:

  • 仅当被建模的关系不是结构关系时,才能使用依赖。
  • 仅当关系是“is-a-kind-of”关系时,才使用泛化。往往可以用聚合代替多继承。
  • 小心不要引入循环的泛化关系。
  • 一般要保持泛化关系的平衡;继承的层次不要太深(大约多于5层就应该想一想),也不要太宽(代之以寻找可能的中间抽象类)。
  • 在对象间有结构关系的地方,要以使用关联为主。

只有注册用户登录后才能发表评论。


网站导航: