Диаграмма компонентов

Let's have few examples : Let's have few examples.
WARNING
 This translation need to be updated. 
WARNING

Компоненты

Обозначения компонентов должны быть заключены в квадратные скобки.

Также можно использовать ключевое слово component для объявления компонента. Вы можете объявить алиас с помощью ключевого слова as. Этот алиас может быть использован позже, при объявлении связей.

🎉 Copied!
@startuml

[First component]
[Another component] as Comp2
component Comp3
component [Last\ncomponent] as Comp4

@enduml

Интерфейсы

Для обозначения интерфейса используется символ () (потому что он выглядит как круг).

Также возможно использование ключевого слова interface для объявления интерфейса. Вы можете объявить алиас с помощью ключевого слова as. Этот алиас может быть использован позднее, когда будут задаваться связи.

Далее мы увидим, что задание интерфейсов опционально.

🎉 Copied!
@startuml

() "First Interface"
() "Another interface" as Interf2
interface Interf3
interface "Last\ninterface" as Interf4

@enduml

Простой пример

Отношения между элементами создаются с помощью комбинации точечных линий (..), прямых линий (--) и стрелок (-->).

🎉 Copied!
@startuml

DataAccess - [First Component]
[First Component] ..> HTTP : use

@enduml

Использование заметок

Вы можете использовать ключевые слова note left of , note right of , note top of , note bottom of чтобы задать метки, относящиеся к одному объекту.

Заметка также может быть задана не прикреплённой, используя ключевое слово note, а затем прикреплена к другим объектам, используя символ ...

🎉 Copied!
@startuml

interface "Data Access" as DA

DA - [First Component]
[First Component] ..> HTTP : use

note left of HTTP : Web Service only

note right of [First Component]
  A note can also
  be on several lines
end note

@enduml

WARNING
 This translation need to be updated. 
WARNING

Группирование компонентов

Вы можете использовать несколько ключевых слов package, чтобы группировать компоненты и интерфейсы вместе.
  • package
  • node
  • folder
  • frame
  • cloud
  • database

🎉 Copied!
@startuml

package "Some Group" {
  HTTP - [First Component]
  [Another Component]
}

node "Other Groups" {
  FTP - [Second Component]
  [First Component] --> FTP
}

cloud {
  [Example 1]
}


database "MySql" {
  folder "This is my folder" {
    [Folder 3]
  }
  frame "Foo" {
    [Frame 4]
  }
}


[Another Component] --> [Example 1]
[Example 1] --> [Folder 3]
[Folder 3] --> [Frame 4]

@enduml

Изменение направления стрелок

По умолчанию, связи между классами имею два тире -- и ориентированы вертикально. Можно создавать горизонтальные связи с помощью одного тире (или точки), вот так:

🎉 Copied!
@startuml
[Component] --> Interface1
[Component] -> Interface2
@enduml

Вы также можете изменять направления, перевернув связь:

🎉 Copied!
@startuml
Interface1 <-- [Component]
Interface2 <- [Component]
@enduml

Также, можно изменить направление стрелки добавлением ключевых слов left, right, up или down внутри стрелки:

🎉 Copied!
@startuml
[Component] -left-> left
[Component] -right-> right
[Component] -up-> up
[Component] -down-> down
@enduml

Вы можете сократить запись, используя только первую букву направления (например, -d- вместо -down-) или две первые буквы (-do-).

Пожалуйста, заметьте, что не стоит использовать эту функциональность без особой надобности: Graphviz обычно даёт хорошие результаты без дополнительной настройки.

Use UML2 notation

By default (from v1.2020.13-14), UML2 notation is used.

🎉 Copied!
@startuml

interface "Data Access" as DA

DA - [First Component]
[First Component] ..> HTTP : use

@enduml

Использовании нотации UML1

Команда skinparam componentStyle uml1 используется, чтобы переключиться на нотацию UML1.

🎉 Copied!
@startuml
skinparam componentStyle uml1

interface "Data Access" as DA

DA - [First Component]
[First Component] ..> HTTP : use

@enduml

Use rectangle notation (remove UML notation)

The skinparam componentStyle rectangle command is used to switch to rectangle notation (without any UML notation).

🎉 Copied!
@startuml
skinparam componentStyle rectangle

interface "Data Access" as DA

DA - [First Component]
[First Component] ..> HTTP : use

@enduml

Длинное описание

Для помещения многострочного текста в тело компонента используются квадратные скобки

🎉 Copied!
@startuml
component comp1 [
This component
has a long comment
on several lines
]
@enduml

Индивидуальные цвета

Вы можете задать цвет после определения компонента.

🎉 Copied!
@startuml
component  [Web Server] #Yellow
@enduml

Использование Sprite в стереотипах

Можно использовать спрайты внутри компонентов стереотипа.

🎉 Copied!
@startuml
sprite $businessProcess [16x16/16] {
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFF0FFFFF
FFFFFFFFFF00FFFF
FF00000000000FFF
FF000000000000FF
FF00000000000FFF
FFFFFFFFFF00FFFF
FFFFFFFFFF0FFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
}


rectangle " End to End\nbusiness process" <<$businessProcess>> {
 rectangle "inner process 1" <<$businessProcess>> as src
 rectangle "inner process 2" <<$businessProcess>> as tgt
 src -> tgt
}
@enduml

Skinparam

Вы можете использовать команду skinparam для изменения шрифтов и цветов диаграммы

Вы можете использовать данную команду :

Вы можете задать цвет и шрифт для компонентов и интерфейсов с заданными шаблонами.

🎉 Copied!
@startuml

skinparam interface {
  backgroundColor RosyBrown
  borderColor orange
}

skinparam component {
  FontSize 13
  BackgroundColor<<Apache>> Red
  BorderColor<<Apache>> #FF6655
  FontName Courier
  BorderColor black
  BackgroundColor gold
  ArrowFontName Impact
  ArrowColor #FF6655
  ArrowFontColor #777777
}

() "Data Access" as DA

DA - [First Component]
[First Component] ..> () HTTP : use
HTTP - [Web Server] << Apache >>

@enduml

🎉 Copied!
@startuml
[AA] <<static lib>>
[BB] <<shared lib>>
[CC] <<static lib>>

node node1
node node2 <<shared node>>
database Production

skinparam component {
    backgroundColor<<static lib>> DarkKhaki
    backgroundColor<<shared lib>> Green
}

skinparam node {
borderColor Green
backgroundColor Yellow
backgroundColor<<shared node>> Magenta
}
skinparam databaseBackgroundColor Aqua

@enduml

WARNING
 This translation need to be updated. 
WARNING

Specific SkinParameter

componentStyle

  • By default (or with skinparam componentStyle uml2), you have an icon for component

🎉 Copied!
@startuml
skinparam BackgroundColor transparent
skinparam componentStyle uml2
component A {
   component "A.1" {
}
   component A.44 {
      [A4.1]
}
   component "A.2"
   [A.3]
   component A.5 [
A.5] 
   component A.6 [
]
}
[a]->[b]
@enduml

  • If you want to suppress it, and to have only the rectangle, you can use skinparam componentStyle rectangle

🎉 Copied!
@startuml
skinparam BackgroundColor transparent
skinparam componentStyle rectangle
component A {
   component "A.1" {
}
   component A.44 {
      [A4.1]
}
   component "A.2"
   [A.3]
   component A.5 [
A.5] 
   component A.6 [
]
}
[a]->[b]
@enduml

[Ref. 10798]

Hide or Remove unlinked component

By default, all components are displayed:

🎉 Copied!
@startuml
component C1
component C2
component C3
C1 -- C2
@enduml

But you can:
  • hide @unlinked components:

🎉 Copied!
@startuml
component C1
component C2
component C3
C1 -- C2

hide @unlinked
@enduml

  • or remove @unlinked components:

🎉 Copied!
@startuml
component C1
component C2
component C3
C1 -- C2

remove @unlinked
@enduml

[Ref. QA-11052]

Hide, Remove or Restore tagged component or wildcard

You can put $tags (using $) on components, then remove, hide or restore components either individually or by tags.

By default, all components are displayed:

🎉 Copied!
@startuml
component C1 $tag13
component C2
component C3 $tag13
C1 -- C2
@enduml

But you can:
  • hide $tag13 components:

🎉 Copied!
@startuml
component C1 $tag13
component C2
component C3 $tag13
C1 -- C2

hide $tag13
@enduml

  • or remove $tag13 components:

🎉 Copied!
@startuml
component C1 $tag13
component C2
component C3 $tag13
C1 -- C2

remove $tag13
@enduml

  • or remove $tag13 and restore $tag1 components:

🎉 Copied!
@startuml
component C1 $tag13 $tag1
component C2
component C3 $tag13
C1 -- C2

remove $tag13
restore $tag1
@enduml

  • or remove * and restore $tag1 components:

🎉 Copied!
@startuml
component C1 $tag13 $tag1
component C2
component C3 $tag13
C1 -- C2

remove *
restore $tag1
@enduml

[Ref. QA-7337 and QA-11052]