科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用UML描述Java类(2)

用UML描述Java类(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

虽然从历史和基本理念方面来探讨UML非常吸引人,但我们还是直接从Java代码开始,看看UML如何描述Java类,再在叙述过程中插入一些历史和基本理念方面的知识。

作者:Ahaoz.CoM 来源:51CTO.com整理 2007年9月3日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
多重性

多重性回答这样一个问题:在一个关系中,每个类各有多少对象参与其中?常见的多重性如图五所示。



图五 常见的多重性及其含义
 
前面我们已经看到了Java代码中0..1多重性的实例。不难猜测,多重性为“1”意味着一个类对另一个类的引用不能为null(一般是这样一种情形:引用的值在构造函数中初始化,且在所有相关的set方法中禁止把该引用设置为null)。

值为“1..*”和“0..*”的多重性稍微复杂一点。在Java中,实现这类多重性的途径之一是使用某种集合类,例如Vector,来保存可能需要用到的多个引用:
 
多重性回答这样一个问题:在一个关系中,每个类各有多少对象参与其中?常见的多重性如图五所示。前面我们已经看到了Java代码中0..1多重性的实例。不难猜测,多重性为“1”意味着一个类对另一个类的引用不能为null(一般是这样一种情形:引用的值在构造函数中初始化,且在所有相关的set方法中禁止把该引用设置为null)。值为“1..*”和“0..*”的多重性稍微复杂一点。在Java中,实现这类多重性的途径之一是使用某种集合类,例如Vector,来保存可能需要用到的多个引用:
 
 ClassA{

...

Vector classB; // 保存B类对象引用的Vector

...

}


对于“1..*”多重性,Java程序必须确保Vector至少包含一项内容。

在有些关系中,多重性的值可以是某个精确的范围或数字。例如,一个小孩最多有两个生物学意义上的健在双亲,即它的多重性可表示为“0..2”。用Java代码描述这种关系时,程序必须带有确保Parent对象实例少于或等于2个的约束。

一个UML关联加上多重性、角色、关联方向之后,能够描述出大量信息,远比一大堆Java源代码简洁和直观。虽然UML图没有说明关系的具体实现方式,但它能够充分地说明关系的意义和作用。图六显示了标注多重性、角色名称之后的雇佣关系,它表示一个Person可以为多个Organization工作,一个Organization可以雇佣多个Person。



图六 双向关联关系
 
聚合与合成

关联只是UML中的关系之一。下面我们来看看UML中的其他两种关系——聚合(Aggregation)和合成(Composition),它们实际上是关联关系的不同变种。聚合是这样一种关联关系,在这种关系中一个类的对象代表着另一个类的对象的一部分,有的人因此也把聚合关系叫做“全体-部分”关系。聚合关系用实线空心菱形箭头表示,箭头由表示Part的类指向表示Whole的类,参见图七。



图七 聚合与合成
 
那么,在Java程序中聚合关系又是什么样的呢?答案是:这要看你在问谁。聚合是一个有争议的概念,表达的是一种生命周期依赖关系。有人根据习惯认为,聚合意味着Whole类必须负责创建和拆除Part类的对象;但也有人为聚合关系下了更宽松的定义。到底应该怎么理解,你最好能够在合作者之间取得一致意见和约定,避免混淆。

合成是一种较强的聚合关系。这两种关系基本相似,不同之处在于,在合成关系中,Part的对象任何时候只能从属于一个Whole对象,也就是说,必须用Java代码确保这种唯一的从属关系。

前面我们已经看到,类的属性、操作以及各个类之间的关系可以用UML类图来描述。然而,对于Java类里面的对象引用,什么时候应该把它当作关联关系、什么时候把它当作属性,这一点还没有搞清楚。答案是:要在哪一个层次交流信息,UML图就应该具体到哪一个层次。有些时候,即使是简单的对象,也最好画出它的类图,把其他类对它的引用描述成关联关系;另一些时候,可能需要把对象引用表示成属性,甚至从类图完全省略对该对象的引用,以便在类图中突出显示其他更重要的类和关系。大多数的UML工具软件都提供了隐藏UML类图各种细节信息的机制。

获得UML图一般有两种办法,手工设计UML图(在此基础上可由UML工具生成Java应用的骨架代码),或者用工具分析Java源代码(甚至字节码)获得UML图。一些优秀的UML工具能够在你绘制UML图的同时生成Java代码,在你编辑Java代码的同时更新UML图。例如TogetherSoft的Together ControlCentre,本文的UML图就是用这个工具绘制的,有免费版Together Community Edition可供试用。
 
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章