用UML描述Java类 - 编程入门网
来考虑下面的代码片断,它增加了一个对Organization实例 的引用:
引用的名称是employer,意味着这里的Organization代表着Person的雇主。图 四显示了如何在UML中描述这种关系: 图四 两个类之间的关联关系 两个类之间的连线表示Person类对Organization类有一种依赖关系。这条线是 一条实线(而不是虚线),表示这种依赖关系是一种关联。 如有必要,关联关系可显示出角色、多重性、关联方向等属性。图四的关联关 系显示出Organization对象在该关系中是雇主的角色,“0..1”表示每一个 Person类的对象最多和一个Organization类的对象有关系,也可能和0个 Organization对象有关系(即Person对Organization的引用可设置为null)。开 叉的箭头表示Person类拥有对Organization的引用,而不是Organization拥有对 Person的引用。 多重性 多重性回答这样一个问题:在一个关系中,每个类各有多少对象参与其中?常 见的多重性如图五所示。 图五 常见的多重性及其含义 用UML描述Java类(4)时间:2011-05-25 Ahaoz前面我们已经看到了Java代码中0..1多重性的实例。不难猜测,多重性为“1 ”意味着一个类对另一个类的引用不能为null(一般是这样一种情形:引用的值 在构造函数中初始化,且在所有相关的set方法中禁止把该引用设置为null)。 值为“1..*”和“0..*”的多重性稍微复杂一点。在Java中,实现这类多重性 的途径之一是使用某种集合类,例如Vector,来保存可能需要用到的多个引用: 多重性回答这样一个问题:在一个关系中,每个类各有多少对象参与其中?常 见的多重性如图五所示。前面我们已经看到了Java代码中0..1多重性的实例。不 难猜测,多重性为“1”意味着一个类对另一个类的引用不能为null(一般是这样 一种情形:引用的值在构造函数中初始化,且在所有相关的set方法中禁止把该引 用设置为null)。值为“1..*”和“0..*”的多重性稍微复杂一点。在Java中, 实现这类多重性的途径之一是使用某种集合类,例如Vector,来保存可能需要用 到的多个引用:
对于“1..*”多重性,Java程序必须确保Vector至少包含一项内容。 在有些关系中,多重性的值可以是某个精确的范围或数字。例如,一个小孩最 多有两个生物学意义上的健在双亲,即它的多重性可表示为“0..2”。用Java代 码描述这种关系时,程序必须带有确保Parent对象实例少于或等于2个的约束。 一个UML关联加上多重性、角色、关联方向之后,能够描述出大量信息,远比 一大堆Java源代码简洁和直观。虽然UML图没有说明关系的具体实现方式,但它能 够充分地说明关系的意义和作用。图六显示了标注多重性、角色名称之后的雇佣 关系,它表示一个Person可以为多个Organization工作,一个Organization可以 雇佣多个Person。 图六 双向关联关系 聚合与合成 关联只是UML中的关系之一。下面我们来看看UML中的其他两种关系——聚合( Aggregation)和合成(Composition),它们实际上是关联关系的不同变种。聚合 是这样一种关联关系,在这种关系中一个类的对象代表着另一个类的对象的一部 分,有的人因此也把聚合关系叫做“全体-部分”关系。聚合关系用实线空心菱形 箭头表示,箭头由表示Part的类指向表示Whole的类,参见图七。 图七 聚合与合成 那么,在Java程序中聚合关系又是什么样的呢?答案是:这要看你在问谁。聚 合是一个有争议的概念,表达的是一种生命周期依赖关系。有人根据习惯认为, 聚合意味着Whole类必须负责 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |