级别: 中级 Rajeshwari Rajendra (rajeshwari.r@in.ibm.com), 软件工程师, IBM India
2008 年 1 月 28 日 学习如何利用 IBM® Rational® Modeling Extension for .NET(该扩展也可以在 IBM® Rational® Software Modeler、Rational Systems Developer 和 Rational Software Architect 中使用)对 Microsoft® .NET C# 应用程序进行建模。本文假设您熟悉基本的 UML 建模概念,以及 Rational 建模工具的用法。
IBM Rational Modeling Extension for Microsoft .NET 使 .NET 应用程序开发人员能够使用 Rational 建模工具来设计应用程序。该扩展可以在 IBM® Rational® Software Modeler、IBM® Rational® Systems Developer 和 IBM® Rational Software Architect 中使用,并且它包含对 C# 应用程序建模的支持。本文,系列的第 1 部分,利用该扩展中的 C# 用户配置档案和类型库来介绍了 C# 结构和概念的建模。此处的实例利用该库对以下这些元素建模:
要对 C# 应用程序建模,您需要使用 Rational Modeling Extension for .NET 提供的 C# 用户配置档案和类型库。要这样做,您要遵照这些基本步骤,后面的部分将更详细地阐述这些步骤:
- 创建空的 UML 模型。
- 导入 C# 基本类型库。
- 应用 C# 用户配置档案。
C# 基本类型库提供 C# 语言中的基本数据类型,例如 long、byte、short,等等。C# 用户配置档案包括各种适用于 UML 类、属性、操作等等的原型。通过利用那些原型,您可以设计 C# 结构。用户配置档案中可用的原型的实例是 <<CSharpIndexer>> 和
<<CSharpDelegate>>。
注意:
一般的 UML 概念,例如泛化、实现,和可见性,有相同的含义,本文中不做阐述。然而 UML 中的 Package 可见性映射为 C# 中的 internal 可见性。
步骤 1. 创建新模型
注意:
此处使用的实例只是为了举例说明概念,而可能不代表任何应用程序的真实设计。
开始设计一个简单的图形库:要这样做,您需要利用 New UML Project 向导(图 1)在新的 UML 工程中创建空的模型。
图 1. New UML Project 向导
步骤 2. 导入用户配置档案和类型库
- 现在,在 Modeling 透视图中,从 Project Explorer 中选择模型。
- 单击右键,并在弹出菜单中选择 Import model library(图 2)。
图 2. 导入模型库的弹出菜单
- 从 Deployed Library 列表中选择 C# Primitive Types(图 3)。
图 3. 导入 C# 基本类型库
步骤 3. 应用 C# 用户配置档案
- 要应用 C# 用户配置档案,在 Project Explorer 中选择模型。
- 在 Properties 视图中,选择 Profiles 选项卡并单击 Add profile。
- 在 Deployed Profile 列表中选择 C# profile(参见图 4。)。
图 4. 向模型应用 C# 用户配置档案
如何对各种类型建模
您可以使用 Rational 建模扩展对各种类型建模,其中包括类、结构、委托,和枚举。以下的子部分介绍了基本的过程。
对类和接口建模
将 C# sharp 类简单地建模为一个 UML 类。然而,要使用 C# 专用的修饰符,例如 new、protected internal、static,和 unsafe,您需要应用 <<CSharp class>> 原型,并且设置其属性值。图 5 中的实例使用了应用了 <<CSharp Class>> 的 GraphicObject 类,只是为了说明。因为我们不使用任何原型属性,所以我们保持默认值。
注意:
只有当您设置至少一个原型属性值时,使用来自 C# 用户配置档案的原型。
图 5. 对 C# 类建模
类似地,将 C# 接口 建模为 UML 接口。同样,如果您需要使用专用的修饰符,例如 new、protected
internal,和 unsafe,您可以使用 <<CSharp Interface>> 原型。
对结构建模
应用 <<CSharp
Struct>> 原型将 C# 结构(struct)建模为 UML 类。C# 专门的修饰符,例如 new、protected internal,和 unsafe 是 <<CSharp
Struct>> 中可用的 Boolean 原型属性。图 6 中的实例应用 <<CSharp
Struct>> 对 C# point 结构建模。
图 6. 对 C# struct 建模
对委托建模
应用 <<CSharp Delegate>> 将 C# 委托(delegate)建模为 UML 类。同 struct 类型一样,C# 专用的修饰符,例如 new、protected internal,和 unsafe 是可用的 Boolean 字符串属性。原型化为 <<CSharp Delegate>> 的 UML 类应该不包含任何属性。
另外,在这样的 UML 类中,应该有一个单独的 UML 方法与委托类同名。该方法的标记应该与为其相应的 C# 委托而声明的标记相同。对于图 7 中的实例,我们通过将 <<CSharp Delegate>> 原型应用于 UML 类来对名为 <<handleResize>> 的 C# 委托建模。该类有一个名为 <<handleResize>> 的 UML 方法,它有两个 Point 类型的参数,并且返回 C# bool 类型。
图 7. C# 委托:bool handleResize(Point start,Point end)
要给示例委托建模:
- 首先,创建 UML 类,并将其命名为
handleResize。
- 现在,向其应用
<<CSharp Delegate>> 原型。
- 添加 UML 操作,并将其命名为
handleResize。
- 现在选择新添加的方法,在 Properties 视图中,打开 Parameters 选项卡,并插入新的参数。
- 将该参数命名为 start,并将其方向设置为 In,然后在 Browse type 对话框中,选择 Point struct 作为类型。
- 利用相同的过程添加另一个参数,并将其命名为
end。
- 添加另一个参数,设置其方向为 Return。在导入的 CSharpPrimitiveTypes 库中浏览类型,将其类型设置为 bool。
图 8. 从导入的 C# 基本类型库中选择类型
对枚举建模
将 C# 枚举(enum)建模为 UML 枚举。当您需要设置 new 或 protected internal 修饰符时,可以应用 <<CSharp Enum
>> 原型。该原型还允许您指定不同于隐含默认值的枚举基本类型。要这些做,您需要将 <<CSharp Enum >> 中的原型 implementation_type 属性设置为列出的枚举基本类型中的一个,例如 int、byte,或 short。枚举常量可以随意地拥有表示相应的 C# 枚举常量的常量默认整数值。
要对示例枚举建模:
- 首先创建 UML 枚举,并将其命名为
Colors。
- 向其应用
<<CSharp Enum >> 原型,以便您可以指定不同的基本类型,例如 short。如果您不想要设置任何原型属性,那么您不需要应用原型。
- 添加枚举常量 RED,并将其值设置为 10。
- 类似地,添加枚举常量 BLUE 和 GREEN,值分别为 20 和 30。
图 9. C# enum:包含 RED、BLUE,和 GREEN 枚举常量的 Color
对字段建模
将 C# field 建模为 UML 属性,从而作为 UML 属性或联系端。此外,当您需要设置 new、protected internal、unsafe、volatile,和 const 修饰符时,可以应用 <<CSharp Field >> 原型。其他的修饰符,例如 static 和 readonly 是在 UML 属性的一般的属性区中是可用的。
用 <<CSharp Field >> 原型将 C# constant 建模为 UML 属性,并将 Boolean 原型属性常量设置为 true。
对于此实例,在 Point 结构中将示例字段和常量建模:
- 创建 UML 属性 X,在 C# 基本类型库中,像前面介绍的那样,将其类型设置为 int。
- 类似地,创建另一个 UML 属性 Y,将其类型设置为 int。这形成了两个 UML 属性 X 和 Y,及 C# 字段。
- 要创建 C# 常量,就添加 int 类型的 UML 属性 ORIGIN_X,应用
<<CSharp Field >> 原型,并设置原型属性为 constant=true。
- 设置默认值为 0。
- 添加另一个 int 类型的 ORIGIN_Y 常量,默认值为 0,应用同样的原型,并将属性设置为 constant=true。现在,ORIGIN_X 和 ORIGIN_Y 代表 C# 常量。(参见图 10。)
图 10. 拥有字段 X 和 Y,及常量 ORIGIN_X 和 ORIGIN_Y 的 struct Point
对方法建模
用可选的 <<CSharp
Method>> 原型将 C# method 建模为 UML 方法。如果您想要设置修饰符时,例如 new、override、extern、 virtual、protected internal,和 unsafe,您需要应用原型。您可以设置 UML 方法的一般属性区中的其他的修饰符,例如 abstract 和 static。如果您需要在方法上设置 sealed 修饰符,那么选择(启用)方法的 Leaf 属性。
将 void method 建模为无返回类型的。按以下方法设置方法引起的异常:
- 右键单击 UML 方法,然后打开 UML Properties 菜单。
- 选择 Raised Exceptions 区,插入各种异常。
对于此实例,为名为 display 的简单的 C# 方法建模,其返回类型为 bool,包含 GraphicException。该方法的参数类型为 DrawingSurface。
- 创建两个 UML 类,
DrawingSurface 和 GraphicException,分别用做示例方法的参数类型和异常类型。
- 在
Point 类中创建名为 display 的 public UML 方法,在 C# 基本类型库中,像前面介绍的那样,将返回类型设置为 bool。
- 向方法添加名为
surface 的参数,并将类型设置为 DrawingSurface。
- 在 Project Explorer 中,右键单击 UML 方法,并选择 UML Properties 菜单。
- 在 RaisedException 部分中,单击 Insert,插入新的异常类型。
- 选择 GraphicException 类作为要添加的异常(参见图 11 和图 12。)
图 11. C# 方法 display(),返回类型为 bool,且参数类型为 DrawingSurface
图 12. 向方法 display() 中添加异常类型
下一部分
本文介绍了如何使用 Rational Modeling Extension for Microsoft .NET 中的 C# 用户配置档案和类型库。当完成这些练习之后,您应该能够创建包含 C# 类、struct、委托、接口、枚举、字段,和方法的简单模型。本系列的 第 2 部分 将介绍 C# 指示器、属性、构造方法、析构方法,和操作符的建模。
参考资料 学习
获得产品和技术
讨论
关于作者  | 
|  | Rajeshwari Rajendra IBM 印度软件实验室的软件工程师,她在 Rational Systems Developer 团队中工作。她的专家经验包括 XML 查询技术,例如 XPath 和 XQuery,以及 UML 建模和转换(尤其是 C# 和 C++)。她在印度 Bangalore University 取得硕士学位(MCA)。 |
对本文的评价
|