Прежде всего, и не имеет отношения к вашему вопросу: вам не следует использовать разделитель строк между различными группами операций: сохраняйте его, чтобы различать guish свойств и операций.
К сожалению, спецификации UML не совсем понятны в отношении шаблонов и их семантики c.
Семантика определена в разделе 7.3.2. которые определили шаблоны и их привязку как некоторую подстановку.
Он определяет обозначения операций с шаблонами в разделе 9.6.4. Это то, что вы ищете:
MyQuestionFunction < T: Class > (arg:T)
Он также определяет конкретные привязки, если вам придется их использовать:
MyQuestionFunction << T->Component >> (arg: Component)
Но он не предусматривает указания ограничения на аргумент шаблона, говорящий, что T
должно быть Component
. Так что IMHO, похоже, больше соответствует шаблонам C ++, в которых аргументы типа явно не ограничены. Со временем вы могли бы задокументировать общее ограничение UML на естественном языке рядом с вашей функцией: {T extends Component}
Спецификации BNF, представленные в этом разделе, кроме того, документируют, как указать операцию в качестве параметра шаблона, но представляются неполными в отношении основы.
Возвращаясь к диаграмме, обратите внимание также на то, что стандартный профиль UML:
- не использует тип возврата
void
. В строгом UML функция void просто отображается без какого-либо возвращаемого типа. - не знает тип примитива
int
, но вместо этого Integer
.
Но очень часто моделисты используют типы языка реализации, предполагая специфику языка c профиль, который расширил бы основной UML с отсутствующими типами. Если вы выбрали этот подход, вы вполне можете сохранить свою шаблонную функцию такой, как вы ее определили.