Есть несколько способов сделать это, в зависимости от того, что вы хотите представить.Если вы хотите использовать шаблоны, то для этого есть синтаксис UML (пунктирная линия, перекрывающая верхний правый угол класса, позволяет вам представлять параметризацию шаблона).Таким образом, вы можете указать класс шаблона List таким образом, который затем можно параметризировать как тип для «действий» (в UML этот тип называется «связанным элементом»).Есть несколько способов представления связанных элементов, но UML допускает синтаксис c ++, используя Foo<T>
, как у вас.Таким образом, что-то вроде actions: List<string>[0..*]
будет означать несколько экземпляров атрибута 'actions', каждый из которых является List<string>
.В качестве альтернативы вы можете указать действия так, как у вас есть actions: List<List<string>>
, который является одним атрибутом «действий».Другим способом было бы определить обычный класс, который инкапсулирует структурную логику вашего массива, и напечатать «действия» с этим.Я не видел синтаксис типа actions: string[0..*][0..*]
, но я посмотрю его и выясню, поддерживает ли UML его.