定义包和命名空间
在 Visual Studio 旗舰版中,“包”是一个用于容纳 UML 元素(例如类、用例和组件)定义的容器。 包还可以包含其他包。
在 UML 模型资源管理器中,包内的所有定义均嵌套在包的下方。 UML 模型是一种包,用于构成树的根。
主题内容
命名空间
创建和查看包
在包中创建模型元素
将元素移入或移出包
将元素粘贴到包中
导入包之间的关系
从一个命名空间对另一个命名空间的引用
包的属性
命名空间
包对于将工作分隔为多个不同的区域十分有用。 每个包定义一个命名空间,以便在不同包中定义的名称不会相互冲突。
每个元素的限定名属性就是其所属包的限定名,后跟该元素自己的名称。 例如,如果您有一个名为 MyPackage 的包,那么该包中类的限定名将类似于 MyPackage::MyClass。 由于每个元素都包含在模型中,因此每个限定名都以模型的名称开头。
模型也会定义命名空间,因此模型中每个元素的限定名都以模型的名称开头。
其他模型元素也会定义命名空间。 例如,如果一个操作属于其父类定义的命名空间,那么其限定名将类似于 MyModel ::MyPackage ::MyClass ::MyOperation。 同样,操作属于其父活动定义的命名空间。
包是容器。 如果移动或删除包,则包内定义的类、包及其他元素也会被移动或删除。 此规则对于其他定义命名空间的元素同样适用。
创建和查看包
可以在 UML 类图或 UML 模型资源管理器中创建包。
在 UML 类图中创建包
打开一个 UML 类图或新建一个 UML 类图。
单击**“包”**工具。
在关系图上的任意位置单击。 随即出现一个新包的形状。
可以通过在现有包中单击将一个包嵌套到另一个包中。
为该包键入新名称。
在 UML 模型资源管理器中创建包
打开**“UML 模型资源管理器”。 在“体系结构”菜单上,指向“窗口”,再单击“UML 模型资源管理器”**。
右击要向其中添加新包的包或模型。
备注
可以将一个包嵌套到另一个包中。
指向**“添加”,再单击“包”**。
一个新包随即在模型中出现。
为该包键入新名称。
如果您已在 UML 模型资源管理器中创建了一个包,则可以让它显示在 UML 类图上。 还可以让一个包在多个 UML 类图上显示。
在 UML 类图中显示现有包
将包从 UML 模型资源管理器中拖到类图上。
备注
此操作将会在此关系图上创建包的视图。但不一定会在关系图中显示包中包含的所有元素。若要确保能看到包中的所有内容,请在 UML 模型资源管理器中进行查看。
在包中创建模型元素
可以通过以下四种方法将模型元素放置到包中:
在 UML 模型资源管理器中向包中添加新元素。
在 UML 类图中向包中添加类和其他类型的元素。
对关系图的**“LinkedPackage”**属性进行设置,以便将在该关系图上创建的新元素放入您指定的包中。 可以通过这种方式将类图、组件图和用例图链接到包。
在 UML 模型资源管理器中将元素移入或移出包。
在 UML 模型资源管理器中,包中的元素将显示在包的下方,其限定名以包的限定名开头。 若要查看任何元素的限定名,请右击该元素,再单击**“属性”**。 **“限定名”属性将显示在“属性”**窗口中。
在 UML 模型资源管理器中创建包中的元素
打开**“UML 模型资源管理器”。 在“视图”菜单上指向“其他窗口”,再单击“UML 模型资源管理器”**。
右击要向其中添加新元素的包或模型。
指向**“添加”**,再单击要添加的元素的种类。
新元素将显示在包的下方。
为新元素键入名称。
备注
新元素不会显示在任何关系图上。若要创建新元素的视图,可以将其从 UML 模型资源管理器中拖到关系图上。关系图必须为将用于显示此类元素的类型。
在 UML 类图中创建包中的元素
打开显示包的类图。
创建一个新包(如果您尚未执行此操作)。
要使现有包显示在类图上,可以将该包从**“UML 模型资源管理器”**中拖到类图上。
单击用于类、接口、枚举或包的工具。
单击要在其中放入新元素的包。
新元素将显示在包中。
在指定的包中创建关系图的所有元素
创建包(如果您尚未执行此操作)。
打开组件图、用例图或 UML 类图。
打开关系图的属性。 在关系图的空白部分右击,再单击**“属性”**。
在**“Linked Package”**属性中,选择要用于包含关系图内容的包。
在关系图中创建新元素。 这些元素将被放入包中。
每个元素的**“限定名”**都将以包的限定名开头。
在**“UML 模型资源管理器”**中,每个元素都会显示在包的下方。
将元素移入和移出包
可以将一个或多个元素移入或移出包。
如果移动某个包,则其内部的所有元素都将随之一起移动。
将元素移入或移出包
在 UML 模型资源管理器中,可以将元素拖入或拖出根为包的树。
元素的限定名将进行相应更改,以表明其新加入的包或模型。
- 或 -
在类图中,将元素拖到包的形状中。
元素的限定名将进行相应更改,以表明其新加入的包。
备注
如果将一个元素从包中拖出,放到关系图中的空白部分,那么其所属的包不会更改。这样一来,您就可以创建一个显示多个包中的元素,而不必显示包本身的关系图。
将元素粘贴到包中
可以将元素粘贴到包中。 如果将一组相关的元素粘贴到包中,那么这些元素之间的关系也会随之被粘贴。
在 UML 类图上将元素粘贴到包中
在 UML 类图上,选择要复制的所有元素。 右击其中一个元素,再单击**“复制”**。
右击包,再单击**“粘贴”**。
备注
包可以位于另一个关系图上。
导入包之间的关系
可以使用**“导入”**工具定义包之间的导入关系。
导入意味着在导入的包中定义的元素(关系箭头端的元素),也会在导入包中进行有效定义。 任何可见性定义为**“包”**的元素在导入包中也同样可见。
避免在导入关系中创建循环。
从一个命名空间对另一个命名空间的引用
如果要从一个包中引用另一个包中的元素,则必须使用元素的限定名。
举例来说,假设包 SalesCommon 定义了类型 CustomerAddress。 在另一个包 RestaurantSales 中,您要定义类型 MealOrder,该类型具有 Customer Address 类型的一个特性。 可以使用以下两种方法实现:
使用完全限定名 SalesCommon::CustomerAddress 指定特性的类型。 仅在 CustomerAddress 的**“可见性”属性设置为“公共”**时,才能使用此方法。
创建从 RestaurantSales 包到 SalesCommon 包的导入关系。 然后,您可以直接使用 CustomerAddress,而无需添加其限定名。
包的属性
每个包都具有以下属性。 若要查看属性,请在关系图或 UML 模型资源管理器中右击包,再单击**“属性”**。
属性 |
默认值 |
说明 |
---|---|---|
名称 |
(新名称) |
包的名称。 您可以在关系图或“属性”窗口中更改该名称。 |
Qualified Name |
容器 :: 包名称 |
以包含此包的包或模型的名称为前缀的全名。 有关更多信息,请参见命名空间。 |
配置文件 |
(空) |
已链接到此包的配置文件的列表。 这些配置文件提供了可应用于包内元素的构造型。 有关更多信息,请参见使用配置文件和构造型自定义模型。 |
可见性 |
Public |
其父包外部的包的可见性。 |
工作项 |
(空) |
已链接的工作项的列表。 有关更多信息,请参见链接模型元素和工作项。 |
定义位置 |
(名称) |
存储包详细信息的文件的名称。 这些文件位于 ModelDefinition 项目文件夹内。 在进行源控制时这些信息非常有用。 |
说明 |
(空) |
对包的描述。 |
构造型 |
(空) |
应用于此包的构造型。 可用构造型的列表由您为此包以及包含此包的包选择的配置文件确定。 有关更多信息,请参见使用配置文件和构造型自定义模型。 |
如何存储包
创建新包时,将在 ModelDefinition 项目文件夹中创建新的 .uml 文件。 根模型(它同样是一个包)也存储在 .uml 文件中。
此外,每个关系图都存储在两个文件中,一个文件表示关系图的形状,而另一个 .layout 文件记录形状的位置。