在PlantUML中绘制约束条件。

3

How to draw a constraint like this in PlantUML

Example from https://www.uml-diagrams.org/constraint.html

1个回答

2

PlantUML技巧1

这很难做到,因为PlantUML没有提供一种语法来关联行。你能达到的最好效果是:

enter image description here

您可以通过关联两个元素并创建一对相同的元素,例如(Account, Person)来实现这一点。这将创建一个由点相关的两条线段的组合元素。然后您可以使用...来关联两个对以获得虚线,并通过添加尾随的: {xor}来命名此关系:

@startuml
skinparam style strictuml
class Account
class Person
class Corporation 
Account -- Person 
Account -- Corporation 
(Account,Person) ...  (Corporation,Account) : {xor}
@enduml

PlantUML技术2

另一种选择是使用注释框来包含约束条件。这通常是将约束条件附加到元素时的惯用符号。然后,您可以将配对技术与附加到每个配对的注释相结合(参见:此法语教程):

@startuml
skinparam style strictuml
class Account
class Person
class Corporation 
Account -- Person 
Account -- Corporation 
note "{xor}" as N #white
(Account,Person) .. N  
N .. (Account,Corporation)  
@enduml 

UML 设计改进

实际上,应该尽可能减少这些约束条件,因为它们通常只是隐藏了一个缺失的抽象。因此,我不会使用 {xor},而是考虑:

enter image description here

顺便说一下,多继承关系的分组也是通过配对来实现的,如此处所述。


关联中的点看起来不像 strictuml 哦 ;-) - qwerty_so
@qwerty_so 我完全同意。据我所知,这个点最初是为了建模关联类(A,B)..C而引入的,在这种情况下看起来不那么令人震惊。将其用于分组专业化已经是重复(误用?)符号以达到另一个目的的技巧。另一方面,我发现很遗憾在plantuml中没有更好和更自然的方法来显示泛化组。 - Christophe
嗯,主要是一种绘图工具。虽然不算太糟糕,但肯定有其(好的)用途。 - qwerty_so
1
这个链接更接近于OP的图表。 - Fuhrmanator
第一个选项是“正确的”。 - user877329

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接