Как представить ограничение типа для шаблонной функции в UML - PullRequest
3 голосов
/ 09 января 2020

Предположим, у меня есть такая функция:

public AddComponent<T extends Component>(type: T) {
    //do stuff
  }

Как бы это представить на диаграмме UML? Для нормальной функции я написал бы что-то вроде этого:

 +AddComponent(object: Component): void

edit: Чтобы сделать мой вопрос немного яснее, вот пример класса в моем UML-листе.

ExampleClass in my UML sheet

(извините, сейчас я только учусь это делать)

1 Ответ

1 голос
/ 10 января 2020

Прежде всего, и не имеет отношения к вашему вопросу: вам не следует использовать разделитель строк между различными группами операций: сохраняйте его, чтобы различать 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 с отсутствующими типами. Если вы выбрали этот подход, вы вполне можете сохранить свою шаблонную функцию такой, как вы ее определили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...