UML软件工程组织

UML 建模:创建类图

 

2007-12-07 来源:gceclub.sun.com.cn

 

本教程适用于 Sun Java Studio Enterprise 8 和 8.1 版本。

在本教程中,您将了解如何使用 Sun Java Studio Enterprise 集成开发环境 (Integrated Development Environment, IDE) 的 UML 建模功能来创建类图。本教程说明了用于创建类图元素的各种技术,以及如何生成图的 Java 源代码;其目的旨在介绍 IDE 的一些 UML 建模类图功能以及用于创建类图元素的各种技术。

类图是应用程序的一种可视表示,用于显示应用程序的类及类间关系。当您打开类图时,IDE 会在建模组件面板中显示一组特定的 UML 元素图标。通过使用类图模型,可以描述应用程序中元素的静态结构。IDE 允许您以图形方式创建包含类的图。类是按照共享通用结构及行为的分层结构排列的,并且与其他类相关联。

本教程的目的旨在介绍 IDE 的 UML 建模类图功能,以及使用双向工程功能来创建类图元素的各种技术,而不是向您传授 UML 概念或 Java 编程语言。

要使用本教程,您必须在系统中安装 Java Studio Enterprise IDE,并且应该熟悉 IDE 的基本组成部分。同时,还应该对 Java 编程语言和 UML 建模有基本的了解。要了解 Java Studio Enterprise IDE 的基础知识,请参见联机帮助中的“IDE 基础知识”主题。

目录

使用类图

类可以定义每个元素实例包含的属性以及每个元素执行或经历的操作。通过执行以下任务,您可以在 UML 模型中呈现一个类:

  • 创建表示类的元素
  • 命名类
  • 定义类属性
  • 定义类操作
  • 描绘链接和关联
  • 添加文档

以下部分介绍了如何为一个虚构的银行应用程序创建简单的类图。当您完成教程中介绍的详细步骤后,创建的类图应如图 1 所示。显示的图仅供参考。请根据下一部分开始处的说明绘制类图。

如果步骤标记为“可选”,则表示该步骤用于说明其他任务或执行某项任务的替代方法。不执行可选步骤也能成功完成本教程。

屏幕截图:完成的样例类图
图 1:样例类图

返回页首
 

创建类图并添加元素

本教程将使用 UML 建模:创建用例图教程中创建的 UML 项目。如果您尚未完成此用例教程,则可以在本地系统中创建一个名为 UMLTutorial 的目录,然后在该目录中创建一个名为 UMLTutorialProject 的 Java 平台模型 UML 项目,以便继续执行本教程中的步骤。

本部分说明了 IDE 提供的一些基本 UML 建模任务,这些任务通过类图对简单的应用程序进行建模。本部分包含以下步骤:

返回页首
创建类图
  1. 如果需要,请启动 IDE 并打开以前创建的 UMLTutorialProject 项目。
  2. 在“项目”窗口中,展开 "UMLTutorialProject" 节点,然后右键单击“模型”节点。
  3. 从弹出式菜单中选择“添加”>“图”。
    将打开新建向导,其中显示“创建新图”页。
  4. 在“图类型”列表中选择“类图”。
  5. 在“图名称”字段中,键入 ClassDiagram。
  6. 保留“名称空间”字段中的缺省设置,然后单击“完成”。
    IDE 将执行以下操作:
    • 在“模型”节点下创建 ClassDiagram 节点
    • 在图编辑器中显示新图(此时该图为空图)
    • 打开建模组件面板
返回页首
添加并标记类元素
  1. 从建模组件面板的“基本”类别中,选择 "Class" 图标 "Class" 图标,然后在图编辑器中单击一下鼠标。
    此操作会在图中放置一个类元素。
  2. 在图编辑器中的任意位置单击鼠标右键以取消选择该图标。
    注意:  每次选择图标时,都可以通过多次单击在图编辑器中放置该元素的多个实例。
  3. 通过单击的方式来选择新添加的类元素(如果尚未选择)。
  4. 键入 EntryStation,然后按 Enter 键。
    IDE 将执行以下操作:
    • 将类元素的名称标记为 EntryStation。
    • 创建名为 EntryStation() 的公共操作。
    • 在属性窗口中显示类的属性。
    • 在“项目”窗口的“模型”节点下,添加名为 EntryStation 的类元素。
返回页首
使用弹出式菜单添加属性

现在,您已绘制并标记了 EntryStation 元素,接下来需要描述其属性。

  1. 在图编辑器中选择 EntryStation 元素(如果尚未选择)。
  2. 右键单击“属性”一词,然后从弹出式菜单中选择“插入属性”。
    将打开一个单行编辑器,并显示以下信息:
    可视性 类型 名称[范围]=initialValue {名称=值}
  3. 键入 stationID,然后按 Enter 键。
    EntryStation 类中将显示一个类型为 int 的属性 stationID,并且还会在该类中创建以下操作:
    public int getStationID()
    
    public void setStationID(int val)

    请注意,由于保留了缺省设置,因此会创建 get 和 set 操作。
返回页首
 
添加操作
  1. 在图编辑器中,选择 EntryStation 类元素。
  2. 右键单击“操作”一词,然后从弹出式菜单中选择“插入操作”。
    将打开一个单行编辑器,并显示以下信息:
    可视性 returnType 名称(参数) {属性, ...}
    
  3. 键入 validateEntryStation,然后按 Enter 键。
    IDE 将创建一个新的操作。
返回页首
(可选)编辑属性或操作

双击类中的属性或操作时,将打开一个组合框编辑器,如下图所示。

屏幕截图:属性的组合框编辑器

当单击属性或操作的每一部分时,该部分的标签将在组合框中以粗体字型显示。如果适用,操作或属性的选定部分还会有一个值的下拉列表。

例如:

  1. 双击 EntryStation 类中的 stationID 属性。
  2. 单击 "private" 一词。
    请注意,可见性一词将以粗体字型显示。
  3. 按 Ctrl+向下方向键。
    将打开一个下拉列表,其中显示了可以为可见性属性选择的值。
  4. 从下拉列表中选择一个新值,然后按 Enter 键。
    属性将被更新为新值。
     
    注意:  您也可以直接在编辑器中键入新值。如果下拉列表中没有您需要的值,则可以使用向右和向左方向键来定位光标,然后键入适当的值。
  5. 对于本教程,请使用值 private,然后按 Enter 键以关闭编辑器。
返回页首
添加并定义其他的类

现在,您需要添加更多的类来完成简单的银行应用程序类图。添加类后,请根据下面描式的技术,对类进行标记并添加属性和操作。

  1. 从建模组件面板的“基本”类别中,选择 "Class" 图标 "Class" 图标,然后在图编辑器中单击五次以放置其他类元素,如下图所示。

    屏幕截图:含有几个未命名元素的类图
     
  2. 单击鼠标右键以取消选择 "Class" 图标。
    注意:  您可以选择并拖动新的类元素来排列它们(如上图所示),以便您可以在图中清楚地看到每个元素。
  3. 选择位于 EntryStation 元素下面的第一个未命名类元素,然后将其命名为 ATM。
  4. 在 ATM 类元素仍处于选定状态下,根据下面的内容添加属性:
    private float cashOnHand
  5. 向 ATM 类中添加第二个属性,并根据下面的内容进行定义:
    private float dispensed

    类图中将显示这些属性。
    注意:  向类中添加属性和操作时,类元素的大小会增加。要改进图的外观,请根据需要移动类元素,以使您可以清楚地看到每个元素。在执行此操作时,请务必选择类元素,而不是单个属性或操作。
  6. 选择位于 ATM 类下面的第一个类元素,然后将其命名为 Consortium。
  7. 向 Consortium 类中添加操作。添加操作与添加属性类似。右键单击“操作”一词,然后选择“插入操作”。
  8. 键入 validateAccountInfo,然后按 Enter 键。
    IDE 将创建新的操作,如下所示:
    public void validateAccountInfo()
  9. 选择位于 ATM 类右侧的类元素,然后将其标记为 CashierStation。
  10. 为此类添加两个操作,如下所示:
    public int verifyCard()
    
    public float verifyAmountAvailable()
     
  11. 将其余的两个类元素标记为 Branch 和 User。
    对于 User 类,不添加任何属性或操作。
  12. 对于 Branch 类,添加一个属性,如下所示:
    private char connected
返回页首
 

生成并编辑 Java 源代码

本部分说明了如何为上一部分刚创建的类图生成 Java 源代码。创建 UML 模型后,您可以为其生成相应的 Java 源代码。如果修改了模型,则可以使用 UML 建模的生成代码功能来重新生成 Java 源代码。

本部分包含以下步骤:

生成 Java 源代码

您可以对 Java 应用程序进行建模,然后为模型生成相应的 Java 源代码。要生成源代码,您需要创建 Java 项目,该项目用于存储为 UML 项目生成的代码。

  1. 从主菜单中,选择“文件”>“新建项目”,然后执行以下操作:
     
    1. 在“类别”下选择“常规”。
    2. 在“项目”下选择“Java 应用程序”。
    3. 单击“下一步”。
  2. 在“项目名称”字段中,键入 JavaPrj1。
  3. 对于“项目位置”,单击“浏览”,然后选择目录 UMLTutorial。
  4. 清除“设置为主项目”和“创建主类”复选框。
  5. 单击“完成”。
    将显示一个进度对话框。创建 JavaPrj1 项目后,该项目会显示在“项目”窗口中。
  6. 在“项目”窗口中,右键单击 "UMLTutorialProject" 节点,然后从弹出式菜单中选择“生成代码”。
  7. 在“生成代码”对话框中,单击“浏览”。
  8. 在“选择目标源文件夹”对话框中,找到刚创建的 JavaPrj1 项目的源文件夹。
    例如:C:\Temp\UMLTutorial\JavPrj1\src
  9. 单击“选择”。
  10. 返回至“生成代码”对话框后,取消选中“备份现有的源文件”复选框,然后单击“确定”。
  11. 在“授权保存 UML 项目”对话框中,单击“确定”。
    IDE 将生成 Java 源代码,并且输出窗口会显示代码生成过程的进度。
  12. 在“项目”窗口中,展开 "JavaPrj1" >“源包”节点,然后双击 "<缺省包>" 节点。
    请注意,该文件夹包含与在 ClassDiagram 模型中创建的类元素同名的 Java 源文件。
返回页首
使用 Java 源代码编辑器添加属性

现在,将使用源代码编辑器来添加 EntryStation 的另一个属性。修改 Java 源文件后,您将使用逆向工程功能在相应的 UML 模型元素中反映所做的更改。

  1. 在“项目”窗口中,展开 "UMLTutorialProject" 节点和“模型”节点(如果需要)。
  2. 右键单击 "EntryStation" 节点,然后从弹出式菜单中选择“导航至源”。
    将出现一个标记为 EntryStation.java 的源代码编辑器标签,其中显示了类的源代码。
  3. 在源代码编辑器中,在第一个属性下面键入以下代码:
    private boolean isOperating;
  4. 按 Ctrl-S 组合键以保存所做的更改。
  5. 在源代码编辑器中单击鼠标右键,然后从弹出式菜单中选择“逆向工程”。
    将显示“逆向工程”对话框。
  6. 在“逆向工程”对话框中选择“使用现有的 UML 项目”,然后选择 UMLTutorialProject 作为目标项目。
  7. 单击“确定”以启动逆向工程过程。
  8. 在“模型元素覆盖授权”对话框中,单击“是”以覆盖 EntryStation 类的现有模型。
  9. 单击 "ClassDiagram" 标签以将焦点返回至图编辑器。
    EntryStation 类元素中会显示 isOperating 属性。
    注意:  单击图工具栏上的“适应窗口大小”按钮 “适应窗口大小”图标的图像 可以将图置于窗口的中心位置。此按钮允许您根据需要调整缩放级别,以便读取标签或留出空间在图中放置更多的元素。
返回页首
 

查找图元素

您可以使用多种方法在图中或“项目”窗口中快速查找对象。在图编辑器中为类元素添加的所有属性和操作都会显示在“项目”窗口中。属性由属性图标 属性图标 表示。操作由操作图标 操作图标 表示。

通过“项目”窗口查找图编辑器中的对象
  • 在“项目”窗口中,双击 "EntryStation" 节点。
    在图编辑器中,将选定并居中放置 EntryStation 类元素。
通过图编辑器查找“项目”窗口中的对象
  1. 在图编辑器中,选择 Consortium 类,然后单击鼠标右键。
  2. 从弹出式菜单中选择“在模型中选择”。
    在“项目”窗口中,将突出显示目标对象的名称。
返回页首
 

为类和图生成文档

您可以采用三种不同的方法来选择从何时输入类、属性、操作和图的描述性文档。本部分包含以下步骤,它们对这三种方法进行了介绍:

使用 UML 文档窗口
  1. (可选)如果未显示“UML 文档”窗口,请选择“窗口”>“UML 建模”>“UML 文档”。
  2. 在图编辑器中,选择 EntryStation 类元素。
  3. 在 UML 文档窗口的文本框内单击鼠标左键。
  4. 键入 Describes the actions of the EntryStation class。
  5. 右键单击 EntryStation 类元素,然后从弹出式菜单中选择“生成代码”。
  6. 在“生成代码”对话框中,单击“确定”。
  7. 在“授权保存 UML 项目”对话框中,单击“确定”。
    将生成新的 Java 代码。
  8. 单击 "EntryStation.java" 源代码编辑器标签。
    您会看到在文档窗口中键入的文本已被添加到 EntryStation.java 源文件中。
返回页首
使用属性窗口为属性生成文档
  1. 单击 "ClassDiagram" 标签以将焦点返回至图编辑器。
  2. 在“项目”窗口中,展开 "EntryStation" 节点。
  3. 选择标记为 private boolean isOperating 的属性节点。
    将在 UML 属性窗口中显示其属性。
  4. 在属性窗口中,单击位于“文档”行的省略号按钮 (...)。
    将打开一个定制编辑器,如下图所示。

    屏幕截图:带有“确定”和“取消”按钮的定制编辑器
     
  5. 键入文本 Maintains if EntryStation is operating,然后单击“确定”。
  6. 在图编辑器中,右键单击 EntryStation 类元素,然后从弹出式菜单中选择“生成代码”。
  7. 在“生成代码”对话框中,单击“确定”。
  8. 在“授权保存 UML 项目”对话框中,单击“确定”。
    将生成新的 Java 代码。
  9. 单击 "EntryStation.java" 源代码编辑器标签。
    您会在紧靠 isOperating 属性上方的源代码中看到键入的文本。
返回页首
使用 "Comment" 图标为图生成文档

您可以使用位于建模组件面板中的 "Comment" 图标为图中的选定元素添加一些描述特定信息的注释。

  1. 单击 "ClassDiagram" 标签以返回至图编辑器。
  2. 从建模组件面板的“注释”类别中,选择 "Comment" 图标 "Comment" 图标
  3. 在 CashierStation 元素的右侧或正上方单击一下鼠标。
    将在图中放置一个注释元素。
  4. 在图编辑器中的任意位置单击鼠标右键以取消选择该图标。
  5. 在注释元素处于选定状态下,键入 Cashier stations have limited funds,然后按 Enter 键。
    注释元素中将显示该文本。
  6. 从建模组件面板的“注释”类别中,选择 "Link Comment" 图标 "Link Comment" 图标
  7. 在 CashierStation 内单击鼠标左键,然后在注释元素内再次单击鼠标左键。
    注释元素和类元素之间将出现一条链接。
  8. 在图编辑器中的任意位置单击鼠标右键以取消选择该图标。
  9. 对 Branch 类元素重复执行步骤 2-8,以在图中放置并链接第二个注释元素。
    请使用以下文本:A branch belongs to a Member Institution.
返回页首
 

描绘链接和关联

关联用于描述一组共享通用结构和通用语义的链接。UML 建模功能不仅支持关联,而且还支持关联的多重性。“多重性”用于指定一个类的多少实例可以与关联类的单个实例相关。“多重性”对相关组件的数量有所约束。本部分包含以下步骤:

描绘类关联
  1. 从建模组件面板的“关联”类别中,选择 "Aggregation" 图标 "Aggregation" 图标
  2. 在 ATM 元素内单击鼠标左键,然后单击 Consortium 元素。
    将在两个类之间绘制一条链接。
  3. 在图编辑器中的任意位置单击鼠标右键以取消选择该图标。
    “项目”窗口中体现了这两个类之间的关系,如下图所示。

    屏幕截图:“项目”窗口中的“聚合”节点
     
  4. 选择 ATM 和 Consortium 之间的聚合链接。
    选定该链接时,其颜色会变为蓝色。
  5. 将光标置于靠近选定线条的中间位置,然后单击鼠标右键。
  6. 从弹出式菜单中选择“标签”>“链接名称”。
  7. 在名称字段中键入 AccountVerification,然后按 Enter 键。
    链接将被标记为下图所示的内容。

    屏幕截图:带有标签的聚合链接
  8. 从建模组件面板的“关联”类别中,选择 "Association" 图标 "Association" 图标,然后由 CashierStation 至 Branch 绘制一条链接。
  9. 在图编辑器中的任意位置单击鼠标右键以取消选择该图标。
返回页首
描绘限定关联

限定关联用于关联两个类和一个限定符。限定符是一个用于降低关联有效多重性的特殊属性。您将以小框的方式来描绘限定关联,该框位于靠近其限定类的关联线的末尾。

下面的步骤说明了如何在 ATM 类和 Consortium 类之间创建限定关联。

  • 右键单击连接 Consortium 类的聚合链接,然后选择“显示限定符”。在 Consortium 类元素上将附着一个限定符,如下图所示。

    屏幕截图:ATM 和 Consortium 类之间的限定关联
返回页首
设置关联的多重性

您可能希望设置此关联的多重性。但是在缺省情况下,这些标签是隐藏的。请使用以下步骤来显示关联链接中的标签。

  1. 右键单击 Consortium 和 ATM 之间的链接,然后选择“标签”>“两个端点的多重性”。
    将关闭弹出式菜单,并且显示链接的标签。
  2. 右键单击位于聚合链接上面部分(靠近 ATM 元素)的小菱形,然后选择“设置多重性”。
    注意:  如果未能显示正确的弹出式菜单,请将 Consortium 元素移至距离 ATM 元素远一些的位置,以便延长聚合箭头。
  3. 选择 "1..*"。
    请注意,链接的下面部分将被标记为 1,如下图所示。

    屏幕截图:已添加多重性标记的聚合链接
  4. 采用类似的步骤,为 CashierStation 和 Branch 之间的关联链接设置多重性,如下图所示。

    屏幕截图:已设置多重性的关联链接
返回页首
描绘泛化和继承

泛化是一个类与其一个或多个完善版本之间的关系。正被完善的类称为超类,而每个完善后的版本称为子类。超类的属性和操作可以显示在其子类中,因此每个子类都将继承超类的功能。您可以使用继承来组织类,以便共享通用结构。泛化链接表示一个类可以继承来自父类的一组属性和操作。

  1. 从建模组件面板的“基本”类别中,选择 "Generalization" 图标 "Generalization" 图标
  2. 在 ATM 类元素内单击鼠标左键,然后单击 EntryStation 类元素。
    将显示“选择要重定义的方法”对话框。
  3. 选中位于 "ATM" 节点旁边的复选框以选择所有方法,然后单击“确定”。
    选定的方法将被添加到 ATM 类元素中,并且这两个类元素之间会出现一条泛化链接。
  4. 通过以下方法绘制另一个泛化链接:首先单击 CashierStation,然后再单击 EntryStation。
  5. 在“选择要重定义的方法”对话框中,选中位于 "CashierStation" 节点旁边的复选框以选择所有方法,然后单击“确定”。
  6. 在图编辑器中的任意位置单击鼠标右键以取消选择 "Generalization" 图标。
  7. 完成的图应如下图所示。

    屏幕截图:完成的类图
返回页首
 

创建依赖关系图

通过使用 UML 建模功能,您可以创建一个显示类元所有依赖关系的图。依赖关系图中描绘了以下关系类型:

  • 泛化
  • 关联
  • 实现
  • 包含给定类类型参数的操作
  1. 在“项目”窗口中,右键单击 "ATM" 节点。
  2. 从弹出式菜单中选择“生成依赖关系图”。
    将创建一个名为 "ATMDependencies" 的依赖关系图,并在图编辑器中打开该图,如下图所示。

    屏幕截图:依赖关系图
返回页首

保存图并更新 Java 源文件

要保存完成的图并重新生成图的 Java 源文件,请执行以下步骤:

  1. 完成图后,右键单击 "ClassDiagram" 标签,然后从弹出式菜单中选择“保存文档”。
    将关闭菜单并保存类图。
  2. 在“项目”窗口中,右键单击 "UMLTutorialProject" 节点,然后从弹出式菜单中选择“生成代码”。
  3. 在“生成代码”对话框中,接受缺省的 JavaPrj1 源文件夹位置,并备份现有的源文件。
    或者,您可以单击“浏览”以查找并使用其他源文件夹。
  4. 单击“确定”。
    IDE 将生成代码,并且输出窗口会显示代码生成过程的进度。JavaPrj1 项目的 Java 源文件夹应被更新以反映您对图所做的更改。
    注意:  在下列情况下,JavaPrj1 项目的源文件夹还会包含创建的备份文件:在“生成代码”对话框中选中了“备份现有的源文件”复选框,并且选择使用相同的源文件夹。备份文件的名称与原始文件类似,只是文件扩展名包含数字。例如,ATM.java 的备份文件会被命名为 ATM.java1。
返回页首
 

小结

在本教程中,您了解了如何为简单的银行应用程序创建类设计。具体执行的任务如下所示:

  • 创建类图
  • 使用建模组件面板中的图标向图添加元素
  • 在类元素中添加并定义属性和操作
  • 为图和图元素生成文档
  • 描绘类元素之间的链接和关联
  • 创建依赖关系图
  • 为图生成 Java 源代码文件
  • 保存图

有关 Java Studio Enterprise UML 建模的详细信息,请参阅 IDE 中的联机帮助并访问 Java Studio Enterprise 开发者资源门户,以获取相关教程、视频和其他资源。

返回页首