Как представить общий параметр в методе UML?

Я должен преобразовать некоторые классы из приложения Java в диаграмму классов UML 2. Пока все хорошо, я нашел способ представления шаблонов классов для всего класса, как это предложил Джон Скит:Как правильно представлять классы шаблонов с помощью UML?, С помощью этой информации я разработал класс, подобный этому:

public class Foo {
    //class fields and methods...
}

Теперь у меня возникла дилемма, когда я пытаюсь провести обратный инжиниринг класса, в котором только метод содержит общий параметр:

public class OtherFoo {
    public  boolean bar(T x, T y) {
        //fancy code goes here...
    }
}

Знаете ли вы, как достичь независимо от любого инструмента UML 2? Я просто хочу понять концепцию.

 NINCOMPOOP13 мая 2013 г., 17:48
+1, хороший вопрос !!!!!

Ответы на вопрос(1)

Решение Вопроса

Я неЯ не знаю, как это сделать в выбранном вами инструменте, но на уровне модели он работает точно так же, как и для классов. Вы создаете шаблонную операцию с вашей подписью.

Глава 17.4.14 изUML2 надстройка указывает это для обозначения:

Параметры шаблона и привязка параметров шаблона операции шаблона - это два списка между именем операции и параметрами операции. * <

видимость> <имя> «<» <шаблон-список параметров> «>» «<<» <связывающие список_выражения> ‘>>’ ‘(‘ <параметр> [‘,’ <параметр>] ** ‘)’ [‘:’ <Свойство строки>]

В вашем случае, давайтесначала увидеть простой случай

public  boolean bar(T x, T y)

Это будет соответствовать

+ бар <T> (x: T, y: T): логическое значение

Ваш оригинальный пример выглядит немного сложнее, потому что параметр шаблона ограничен другим классом, Comparable, который, в свою очередь, также является шаблоном, чей параметр (I ')назовем это T1) связано с операциейпараметр в свою очередь. Это дает нам

+ бар <T> Сопоставимые <T1-> T >> (x: T, y: T): логическое значение



Заметка: (Немного углубленного продвижения вперед) Шаблоны, определенные в UML (и в некоторой степени в C ++), сильно отличаются от универсальных в Java. Они выглядят более или менее одинаково, но есть - иногда тонкие - различия в их семантике, которые могут затруднить их сопоставление. Самый важный в UML это:

Шаблон не может использоваться так же, как не шаблонный элемент того же вида. Элемент шаблона может использоваться только для генерации связанных элементов (например, класс шаблона не может использоваться как тип типизированного элемента) или как часть спецификации другого шаблона (например, класс шаблона может специализировать другой класс шаблона).

Это означает, что в UML OtherFoo тоже должен быть шаблоном - то есть иметь подпись шаблона (с 0 параметрами). Чтобы затем правильно использовать шаблон операции вне области действия шаблона, т. Е. Вызывать его в действии или аналогичном, выСначала я должен связать его с конкретной операцией, которая используется вместо этого. В случае вашего примера это означает:

Привязка шаблона OtherFoo к (анонимному) связанному классу.Шаблон операции привязки панели к операции в связанном классе.
 IARI02 июн. 2017 г., 01:21
это выражение "+ бар <T> Сопоставимые <T1-> T >> (x: T, y: T): Boolean " выглядит странно для меня. Является ли первый большой знак после Т действительно правильным? не должен»это скорее будет "->"?
 Luiggi Mendoza14 мая 2013 г., 17:36
Я нахожу эту информацию очень полезной, ясной как кристалл, спасибо. Для будущих читателей было бы здорово, если бы вы могли добавить графическое изображение двух последних примеров, как это сделал JonSkeet в своем ответе (проверьте ссылку на мой вопрос).
 Carsten02 июн. 2017 г., 10:01
Нет, "->" обозначает привязку параметра шаблона, тогда как ">" обозначает ограничение типа для параметра шаблона. Так что в этом случае это незначит "связать T с сопоставимым ", но "ограничить T подтипами Comparable ", Смотрите раздел надстройки UML "Шаблон классификатора "/"Notation» (раздел 9.3.4 для UML 2.5) для деталей.

Ваш ответ на вопрос