Define packages and namespaces
For the latest documentation on Visual Studio 2017 RC, see Visual Studio 2017 RC Documentation.
In Visual Studio, a package is a container for the definitions of UML elements such as classes, use cases, and components. A package can also contain other packages.
In UML Model Explorer, all the definitions inside a package are nested underneath the package. The UML model is a kind of package, and forms the root of the tree.
To see which versions of Visual Studio support this feature, see Version support for architecture and modeling tools.
Packages are useful for separating work into different areas. Each package defines a namespace so that names that are defined in different packages do not conflict with each other.
The qualified name property of each element is the qualified name of the package to which it belongs, followed by the element's own name. For example, if your package is called
MyPackage, a class within the package will have a qualified name like
MyPackage::MyClass. Because every element is contained inside a model, every qualified name begins with the model's name.
A model also defines a namespace, so that the qualified name of every element in a model begins with the name of the model.
Other model elements also define namespaces. For example, an operation belongs to the namespace defined by its parent class, so that its qualified name is like
MyModel ::MyPackage ::MyClass ::MyOperation. In the same manner, an action belongs to the namespace defined by its parent activity.
Packages are containers. If you move or delete a package, the classes, packages, and other things defined inside it are also moved or deleted. The same is true of other elements that define namespaces.
You can create a package either on a UML class diagram, or in UML Model Explorer.
Open a UML class diagram, or create a new one.
Click the Package tool.
Click anywhere on the diagram. A new package shape will appear.
You can click inside an existing package to nest one package in another.
Type a new name for the package.
Open UML Model Explorer. On the Architecture menu, point to Windows, and then click the UML Model Explorer.
Right-click a package or a model to which you want to add a new package.
You can nest a package inside another package.
Point to Add and then click Package.
A new package appears in the model.
Type a new name for the package.
If you have created a package in UML Model Explorer, you can display it on a UML class diagram. You can also display a package on more than one UML class diagram.
Drag the package from UML Model Explorer onto the class diagram.
This creates a view of the package on this diagram. It will not necessarily show all the elements that the package contains. To make sure that you see all of a package's contents, view it in UML Model Explorer.
There are four ways in which you can place model elements inside a package:
Add a new element to a package in UML Model Explorer.
Add classes and other types to packages in a UML class diagram.
Set the LinkedPackage property of a diagram so that new elements created on the diagram are placed inside the package you specify. Class diagrams, component diagrams, and use-case diagrams can be linked to a package in this manner.
Move elements into or out of a package in UML Model Explorer.
An element in a package appears underneath the package in UML Model Explorer, and its qualified name begins with the qualified name of the package. To see the qualified name of any element, right-click the element and then click Properties. The Qualified Name property appears in the Properties window.
Open UML Model Explorer. On the View menu, point to Other Windows, and then click UML Model Explorer.
Right-click a package or a model to which you want to add a new element.
Point to Add, and then click the kind of element that you want to add.
The new element appears underneath the package.
Type a name for the new element.
The new element does not appear on any diagram. To create a view of the new element, you can drag it from UML Model Explorer onto a diagram. The diagram must be a type that will display this kind of element.
Open a class diagram on which the package appears.
Create a new package, if you have not already done this.
To make an existing package appear on a class diagram, you can drag the package from UML Model Explorer onto the class diagram.
Click the tool for a class, interface, or enumeration, or package.
Click the package where you want to put the new element.
The new element appears inside the package.
Create the package, if you have not already done this.
Open a component diagram, use case diagram, or UML class diagram.
Open the properties of the diagram. Right-click in a blank part of the diagram and then click Properties.
In the Linked Package property, choose the package that you want to contain the diagram's content.
Create new elements in the diagram. These will be placed into the package.
The Qualified Name of each element will begin with the package's qualified name.
In UML Model Explorer, each element will appear under the package.
You can move one or more elements in or out of a package.
If you move a package, everything inside it moves with it.
In UML Model Explorer, drag the element into or out of the tree whose root is the package.
The qualified name of the element will change to show its new owning package or model.
- or -
In a class diagram, drag the element into a package shape.
The qualified name of the element will change to show its new owning package.
If you drag an element out of a package into a blank part of the diagram, its owning package does not change. This lets you make a diagram that shows elements from several packages without having to show the packages themselves.
You can paste an element into a package. If you paste a group of related elements into a package, the relationships between them will also be pasted.
On a UML class diagram, select all the elements that you want to copy. Right-click one of them and then click Copy.
Right-click the package and then click Paste.
The package can be on a different diagram.
You can define an import relationship between packages, using the Import tool.
Import means that the elements defined in the imported package, which are the elements at the arrow end of the relationship, are effectively defined also in the importing package. Any elements whose visibility is defined as Package will be visible also in the importing package.
Avoid creating loops in import relationships.
If you want to refer to an element of one package from another, you must use the element's qualified name.
For example, suppose that package
SalesCommon defines type
CustomerAddress. In another package
RestaurantSales, you want to define a type
MealOrder, which has an attribute of type Customer Address. You have two options:
Specify the type of the attribute using the fully qualified name
SalesCommon::CustomerAddress. You should do this can only if
CustomerAddresshas its Visibility property set to Public.
Create an Import relationship from the
RestaurantSalespackage to the
SalesCommonpackage. Then you can use
CustomerAddresswithout using its qualified name.
Each package has the following properties. To see the properties, right-click the package, either on a diagram or in UML Model Explorer, and then click Properties.
|Name||(a new name)||The package name. You can change it either on the diagram or in the Properties window.|
|Qualified Name||Container :: package name||The full name, prefixed by the name of the package or model that contains this package. For more information, see Namespaces.|
|Profiles||(empty)||A list of the profiles linked to this package. These profiles provide stereotypes that can be applied to the elements inside the package. For more information, see Customize your model with profiles and stereotypes.|
|Visibility||Public||The visibility of the package outside its parent package.|
|Work Items||(empty)||A list of linked work items. For more information, see Link model elements and work items.|
|Definition Location||(a name)||The file name where the details of the package are stored. The files are inside the ModelDefinition project folder. This information can be useful for source control purposes.|
|Description||(empty)||A description of the package.|
|Stereotypes||(empty)||Stereotypes that are applied to this package. The list of stereotypes available is determined by the profiles that you have chosen for this package and the packages that contain it. For more information, see Customize your model with profiles and stereotypes.|
When you create a new package, a new .uml file is created in the ModelDefinition project folder. The root model, which is also a package, is also stored in a .uml file.
In addition, each diagram is stored in two files, one that represents the diagram's shapes, and a .layout file that records the positions of the shapes.