图 2. C# 单目、双目,和转换操作符
三. 对属性(property)建模
C# 属性(propertie)被建模为带有UML属性<<CSharp Property>> 原型的 UML 属性(UML attribute 或关联端)。UML属性应该与其相应的 C# 属性具有相同的名称和类型。C# 属性的修饰符作为 Boolean 原型属性。举例来说,abstract、virtual、extern 和 override 在 <<CSharp Property>>原型属性中都有。
除了修饰符,原型还拥有名为 accessors 的属性,可以将该属性设置为以下值之一:read-only、write-only 或 read & write。在相应的 C# 属性只有 get accessor 方法时应该使用 read-only 值。类似的,在相应的 C# 属性只有set accessor 时,应该使用 write-only。当 C# 属性有get 和set 存取器时,应该使用read & write 值。
抽象属性被建模为带有 <<CSharp Property>> 原型的 UML 属性,它的 abstract 原型属性被设置为 true。对于此实例,您将为 Point 结构对名为 distance 的 C# 属性建模。该属性表示从原点到该点之间的距离。因为距离是由 X 和 Y 坐标计算的,所以您将把它建模为只读属性。要做这些,依据以下步骤(也参见图 3):
四. 对索引器建模
C#索引器(indexer)被建模为带有 <<CSharp Indexer>>原型的UML操作。表示索引器的UML操作应该总是被命名为this。C# 索引器的形式参数成为相应的UML操作的参数,而索引器的类型成为UML 操作的返回类型。索引器修饰符,像 new、virtual、extern 等等用作原型属性。通过选择相应的 UML 操作的 Leaf 属性来表示 sealed 索引器。<<CSharp Indexer>> 拥有名为 accessors 的属性,其取值为:read-only、write-only 和 read & write,这依据 C# 索引器是否只有get accessor set accessor 或者分别拥有get和set accessors。这非常类似于<<CSharp Property>> 的accessors 属性。
对于本实例(图 4),将对 DrawingSurface 类中的只读索引器建模(因而它只有get 存取器)。该索引器将有两个 int 类型的参数,并且它将返回 Point 类型。本质上,该索引器的目的是返回一个与绘制面上已知的行和列相对应的点。依据以下步骤:
1. 向 DrawingSurface 类添加名为this的UML 操作。
2. 向您在前面步骤中添加的操作应用<<CSharp Indexer>>原型。
3. 向操作添加两个int类型的参数,并将其命名为row 和column。
4. 将操作的返回类型设置为Point 结构。
图 4. C#索引器 Point this[int row, int column]
C# 事件(event)被建模为带有 <<CSharp Event>> 原型的 UML 属性(UML attribute 或关联端)。UML 属性应该和其相应的 C# 事件有相同的名称。UML 属性的类型应该是带有 <<CSharp Delegate>> 原型的UML类。C#事件的修饰符作为 Boolean 原型属性。举例来说 example、abstract、virtual、extern override,和其它修饰符在<<CSharp Event>> 原型属性中可用。如果事件有它的存取器(add 或 remove)的话,将 accessors 原型属性设置为 true,否则将其设置为 false。
该实例(图 5)将 handleResize() 委托用于 DrawingSurface 类中的名为 mouseDrag 的事件。要这样做:
1.向DrawingSurface 类添加 public UML 属性,并应用 <<CSharp Event>> 原型。
2.将属性的 type 设置为表示 handleResize 委托的 UML 类。
3.将 accessors 原型属性设置为 true,从而说明将指定 add 和 remove accessors。
<< 上一页 [21] [22] [23] [24] 下一页