UML Component Diagrams: Guidelines

In the context of software system design, a component diagram can be used to visually depict the structure and organization of components within a system. This type of diagram is particularly useful when it comes to understanding how different components interact with one another and how they contribute to the overall functionality of a software application.

Visual Studio, a popular development environment, allows users to easily create component diagrams that provide a clear view of the system's architecture. For those who are interested in learning more about this feature, there are video tutorials available on Microsoft's website that demonstrate the process of designing the physical structure using component diagrams.

It's worth noting that not all versions of Visual Studio support component diagrams, so it's important to check which versions do offer this capability. You can find information on version support for architecture and modeling tools on Microsoft's official support site.

To create a UML component diagram in Visual Studio, you can start by navigating to the Architecture menu and selecting New UML or Layer Diagram from the drop-down menu. Once you have done this, you can begin adding components to your diagram and connecting them together using provided and required interfaces. The purpose of these interfaces is to define how components communicate and what services they require from each other. As you continue to add components and refine their interactions, you will gain a better understanding of how the entire software system operates.

One benefit of creating component diagrams is that they provide a high level overview of the system's structure, making it easier for developers to understand how different components fit together. Additionally, these diagrams can help identify any potential issues or areas where improvements could be made, ultimately leading to a more robust and efficient software solution

The following are some principles to consider when creating a UML sequence diagram:

- Interaction between a system's components

- Interaction and between the parts inside a component.

For more information, see UML Sequence Diagrams: Guidelines.

A component diagram is a type of UML diagram that can be used to represent your system design in any language or platform that you use. By considering your system as a collection of components with well-defined provided and required interfaces, you improve the separation between the components and make the design easier to understand and change when requirements change. You can use a component diagram to represent your design regardless of what language or platform it uses or will use. Additionally, you can use other diagrams in conjunction with a component diagram to help you discuss and communicate specific aspects of your design. For example, a UML sequence diagram can help you model interactions between a system's components, while a UML class diagram can help you model the structure of classes within your system.

UML is a graphical modeling language used to represent the structure of software applications. There are several types of UML diagrams, each with its own purpose and use case. In this article, we will discuss the basic elements of UML diagrams and provide some tips on how to create them.

Class Diagrams

One of the most common types of UML diagrams is class diagrams. Class diagrams show the relationships between classes, interfaces, and objects. They also include information about the attributes and methods of each class. To create a class diagram, you can start by creating a new UML diagram and then add the classes and their relationships. You can also add notes and annotations to provide more information about each class.

Activity Diagrams

Activity diagrams show the internal processing performed by a component in response to incoming messages. They also include information about the actors involved in the process and the data sent in parameters across the components' interfaces. To create an activity diagram, you can start by creating a new UML diagram and then add the activities and their relationships. You can also add notes and annotations to provide more information about each activity.

Layer Diagrams

Layer diagrams show logical architectural tiers for your components. They are useful when you want to organize your components into logical groups based on their function or ownership. To create a layer diagram, you can start by creating a new UML diagram and then add the layers and their relationships. You can also add notes and annotations to provide more information about each layer.

Basic Steps for Drawing Component Diagrams

To create a component diagram, you can follow these basic steps:

1. On the Architecture menu, click New UML or Layer Diagram.

2. Under Templates, click UML Component Diagram.

3. Name the diagram.

4. Add the components and their relationships using the tools provided in your modeling tool of choice (e.g., Visual Paradigm or IBM Rhapsody).

5. Add notes and annotations to provide more information about each component.

6. Save your diagram as a file (e.g., PNG, PDF, or SVG).

For reference information about the elements on component diagrams, see UML Component Diagrams: Reference. For more information about how to use component diagrams in the process of design, see Model your app's architecture.

在Visual Studio中创建一个新UML建模项目或选择现有建模项目。具体步骤如下:

1. 在解决方案资源管理器中,右键单击“新建项”并选择“UML组件图”,或者点击“文件”>“新建”>“UML组件图”。

2. 这将打开一个新的组件图,其中包含所需的元素和关系。

3. 在组件图中绘制组件。对于系统或应用程序的每个主要功能单元,请创建一个组件(1)。例如,可以是应用程序、硬件设备、Web服务、.NET程序集、程序类或一组类,或者是程序的任何可分离部分。

4. 若要创建组件,请在工具栏中找到“组件”图标,然后单击图表上的空白部分。另外,您还可以复制粘贴现有组件。

5. 要查找现有组件,可以在图表或UML模型资源管理器中找到它。找到所需组件后,右键单击该组件,然后选择“复制”。接下来,打开希望复制的组件出现的图表,右键单击空白部分并选择“粘贴”。这样就会出现一个带有新名称的副本。

6. 最后,单击组件名称以更改其名称。现在已成功创建了一个新的UML组件图。

Click the chevron (5) to see only the component's header.

The Ports of a Component

A port (2, 3) represents a group of messages or operation calls that pass either into or out of a component. This group is described by an interface, which defines the type of the port. A port can either provide an interface or require one.

A port with a provided interface (2) supplies operations that are implemented by the component and can be used by other components. Examples include a user interface, a Web service, a .NET interface, or a collection of functions in any programming language.

On the other hand, a port with a required interface (3) represents a component's requirement for a group of operations or services to be provided by other components or external systems. For instance, a Web browser requires Web servers, or an application add-in requires services from the application.

In general, a component can have any number of ports. To add ports to a component, go to the toolbox and click on the corresponding option.

以下是根据您提供的内容重构后的段落结构,同时保持了原意:

**UML组件图的绘制**

在UML中,组件是一个对象组合的抽象表示。要添加一个组件到另一个组件中,您需要按照以下步骤操作:

1. 首先,在UML编辑器中找到您想要添加的组件。这个组件通常用一个矩形表示,并附带一个加号图标,表示可以向其添加其他组件。单击该组件以选中它。

2. 在选中的组件上单击右键,然后从弹出菜单中选择“Create port”(创建端口)。这将在组件的边界上创建一个新的端口。

3. 接着,您需要确定新接口的类型。在新创建的端口旁边,您应该能看到一个类似于下拉列表的图标。点击它以打开一个对话框,其中列出了所有可能的接口类型。从这里选择您想要的接口类型。

4. 现在,您可以将新创建的接口拖动到组件的其他位置,或者使用其标签(位于端口旁边)来调整其位置。单击标签可以更改其显示内容。标签将显示接口的名称。如果更改了接口名称,实际上也是在更改接口名称。

5. 最后,如果您希望列出接口的属性和操作,可以在UML模型资源管理器中将它们添加到接口中。另外,您还可以将接口从UML模型资源管理器拖放到类图上,然后在那里添加操作和属性。

**组件之间的关联**

在UML中,组件之间可以使用依赖关系来表示一种“依赖关系”。这种关系表明一个组件的需求可以通过另一个组件提供的操作或服务得到满足。要创建这样的链接,请执行以下操作:

The purpose of the provided interface is to demonstrate its ability to fulfill a required interface.

To do this, follow these steps:

1. Open the Toolbox by clicking on "Dependency" in the main menu.

2. Select one component where the required interface can be found on a specific port.

3. Then, select another component and click on the port that has the provided interface.

By doing this, you will show that the provided interface meets the requirements set forth for it.

It's important to note that you should try to prevent dependency loops from occurring. In other words, every component in a group should only depend on other components within that same group, not on all other components in the system as a whole.

Adding a port for an existing interface to a component involves finding the interface in UML Model Explorer or copying and pasting a reference from a diagram into the component. Here's how:

1. To find the interface in UML Model Explorer, locate it within your model and then drag it onto the component.

2. Alternatively, you can Copy and Paste a reference to an interface from a diagram into the component. For class or component diagrams, right-click on the interface and select "Copy". On the component diagram, right-click on the component and then select "Paste Reference".

Once these steps have been completed, the provided interface will appear on the component with an Action tag nearby.

Remember, if you use "Paste" instead of "Paste Reference", a new interface with a unique name will be created

要创建必需的接口,请按以下步骤操作:选中 Action 标签,然后点击 Convert to Required Interface。

展示组件的内部部分

您可以将部分(3)放在组件(1)中,以显示它是由相互交互的较小组件组成的。

插图中的图表表明,“晚餐现在Web服务”的每个实例都包含一个“客户服务器”实例和一个“厨房服务器”实例。

部分是其父组件的属性,类似于普通类的属性。部分具有自己的类型,通常也是组件。部分的标签与普通属性的形式相同:+ partName : TypeName。

在父组件内,每个部分显示为其类型定义的提供和必需的接口(4,5)。一个部分所需的操作或服务可以由另一个提供。您可以使用 Part Assembly 连接器来显示部分之间的连接方式(6)。

To create a new part in an existing component, follow these steps:

1. Create a part for each major functional unit that you consider to be a part of the parent component. This can be done by clicking on the "Component" tool in the toolbox and then clicking inside the parent component. A new part will appear inside the parent component.

2. If you want to add parts to a component that already exists in UML Model Explorer, you can drag an existing component onto the parent component. This will create a new part inside the parent component, and its type will be the same as the component you dragged from UML Model Explorer.

3. To show that an interface of the parent component is actually provided or required by one of its parts, you can use a delegation relation (9). Connect a port of the parent to a port of an internal part of the same kind (provided or required), and ensure that their interface types are compatible.

By following these steps, you should be able to create new parts in an existing component with ease.

. 在UML模型中,选中一个组件,可以是在图中的组件或者在UML模型资源管理器里的组件。

2. 右键点击选中的组件,然后选择“复制”。

3. 在父组件上右键点击,然后选择“粘贴引用”。此时,一个新的部分(3)会出现在父组件内部。这个新部分的类型就是你刚刚复制的组件。

4. 点击新部件的名称,可以改变它。但是不能改变它的类型。

5. 可以向新部件添加所需的接口(4)和提供的接口(5)。点击工具栏上的“所需接口”或“提供接口”,然后点击部件即可。

6. 或者,你可以从UML模型资源管理器中拖拽现有的接口到部件上。这样,接口会被添加到部件的类型中,并出现在部件本身上。如果需要的话,父组件会自动调整大小。

7. 将部件连接到彼此:使用“依赖”工具连接不同部件的端口(6)。

8. 将部件连接到父组件的端口:首先,在父组件上创建一个或多个端口(7)。接着,点击工具栏上的“所需接口”或“提供接口”,然后点击父组件。

To delegate the port to one or more parts, you need to follow these steps:

1. Click on the Delegation tool.

2. Select a port on the parent component.

3. Select a port on a part.

4. Connect the selected ports in the same way that they provide or require interfaces.

Once you have decomposed a component into parts, you can decompose each of the part types into their own internal parts. This is done by right-clicking on the part and selecting Properties. In the Properties window, you will find the fully qualified name of the part's type listed under the Type field. To locate the part's type in UML Model Explorer, click on View, point to Other Windows, and then click UML Model Explorer. Expand the project and any package(s) to which the type belongs. The type will be listed as a Component, and you can change its name if desired. Finally, open or create another component diagram and drag from the type in UML Model Explorer onto the diagram.

This view of the type appears as a component in the diagram and has the same interfaces as you have defined for the part. You can now add parts inside it to create a more complex design. To describe how the parts collaborate, you can draw a sequence diagram that shows how they work together in response to a message that arrives at the parent component. The use of these diagrams is beneficial both in explaining an existing component and in designing a new one.

If you are still in the process of designing the component, you can start by drawing sequence diagrams before deciding on its specific features. These diagrams can be utilized to experiment with different parts, required interfaces, and message sequences. It is essential to focus on the most frequent and important incoming messages and create corresponding lifelines within your component using these diagrams.

Once you have decided on the specifics of your component, you can create the parts based on the lifelines you have established. By doing so, you can effectively assess how the system's work is spread between the different components. In summary, drawing sequence diagrams allows you to experiment with various configurations, identify key interactions, and ultimately design a more cohesive and efficient component architecture.

If too much is heaped on one part, the application will probably be more difficult to update than if the work is evenly spread out. Similarly, if the work is too thinly spread with many interactions, the system might perform poorly and be challenging to understand. To draw a sequence diagram that shows collaboration between parts of a system, follow these steps:

1. Create a new sequence diagram.

2. Create a lifeline for an external component, user, device, or other actor (1) that sends messages to this component. You can set the Actor property of this lifeline to true, to indicate that it is external to the component under consideration. A stick figure appears above the lifeline.

3. Create a lifeline for the provided interface (2) of this component to which the chosen actor sends messages.

4. Create a lifeline for each part (3) of the component.

5. Create a lifeline for each required interface (4) of the component.

The following is an example of the UML sequence diagram for a component:

1. Draw messages from the external actor (5). Show how the message is passed to the parts, and how they collaborate to respond to the message. Where necessary, show messages sent to a required interface (6). Do not show any detail within execution of the message.

```mermaid

sequenceDiagram

participant Component as comp

participant ExternalActor as extAct

comp->>extAct: Message

part1 --> comp: Message

part2 --> comp: Message

part3 --> comp: Message

```

2. Is the Component More than its Parts? In some cases, a component is no more than a name given to a collection of parts. All the work is done by the parts, and at run time there is no code or other artifact that represents the component. You can indicate this in the model by setting the `Is Indirectly Instantiated` property of the component. In this case, all the component's interfaces should be on ports, with delegations to internal parts.

```markdown

## Is the Component More than its Parts?

- A component is no more than a name given to a collection of parts.

- At run time, there is no code or other artifact that represents the component.

- To indicate this, set the `Is Indirectly Instantiated` property of the component.

- All the component's interfaces should be on ports, with delegations to internal parts.

```

3. Describing the Process Inside Each Part You can use activity diagrams to show how a component processes each incoming message. For more information, see UML Activity Diagrams: Guidelines. Use an Accept Event Action (1) to show that an incoming message starts a new thread.

```mermaid

sequenceDiagram

participant Component as comp

participant ExternalActor as extAct

participant Thread as thread1

participant Thread as thread2

participant Thread as thread3

comp--Accept->thread1: Message1 { thread1.doSomething() }

part1--Accept->thread2: Message2 { thread2.doSomethingElse() }

part2--Accept->thread3: Message3 { thread3.executeTask() }

```

在本文中,我们将介绍如何使用对象节点和输入/输出引脚来表示信息流以及存储信息的地点。示例中,我们使用了对象节点(2)来展示线程之间缓冲的项目。首先,让我们定义数据和类。你可以使用UML类图来描述组件的详细内容:当向组件添加requires或provides端口时,UML模型资源管理器中会出现接口。你可以将此接口拖放到UML类图中以显示其属性、操作以及与其他接口的关系。

其次,在接口的操作参数中传递的数据。最后,在组件中存储的数据,例如在活动图表中的对象流程中所示。此外,还可以利用组件图仅显示设计的主要部分及其相互依赖关系。使用Dependency工具绘制依赖关系。这表示一个组件的设计依赖于另一个组件。

以下是重构后的内容:

依赖关系通常包括以下几种类型:

- 组件调用另一个组件中的代码。

- 一个组件实例化了一个在另一个类中定义的类。

- 一个组件使用另一个组件创建的信息。

你可以通过依赖关系的名称箭头来表示特定的用途。要设置名称,请右键单击箭头,然后单击"Properties",在属性窗口中设置"Name"字段。

相关参考资料:

- UML模型和图表编辑指南(UML Component Diagrams)

- UML序列图参考(UML Sequence Diagrams)

- UML用例图参考(UML Use Case Diagrams)

- UML类图参考(UML Class Diagrams)

- UML组件图参考(UML Component Diagrams)

视频教程:通过使用组件图设计物理结构。