Представление универсального метода C# в диаграмме классов UML

У меня есть следующий интерфейс:

public interface IRegisterable
{
   T Register<T>(string username, string passw) where T : User, ICanLogin, new();
}

User — это абстрактный класс, а ICanLogin — это еще один интерфейс.

Теперь я хочу представить вышеуказанный интерфейс с его методом на диаграмме классов UML в Visio.

Как я могу представить вышеуказанный общий метод с его ограничениями на диаграмме классов?


person Andreas Grech    schedule 17.01.2010    source источник


Ответы (3)


UML не поддерживает параметрические методы типов напрямую.

Самое близкое, что вы получите, - это определить вложенный класс, который имеет ограничения типа со стереотипом, который вы будете интерпретировать как означающий, что это параметр типа, и определить операцию Register в терминах этого.

+---------------------------------------------------+
|                   «interface»                     |
|                  IRegisterable                    |
+---------------------------------------------------+
| + Register (string username, string passw) : T    |
+---------------------------------------------------+

    +---------------+           +---------------+
    |  «abstract»   |           |  «interface»  |
    |     User      |           |   ICanLogin   |
    +---------------+           +---------------+
            .                           .
           /_\                         /_\
            |                           .
            +-----------+   .............
                        |   .
                +-------------------+              
                |  «typeParameter»  |
                | IRegisterable::T  |
                +-------------------+           
                | + new()           |
                +-------------------+           

    note: T is a nested class within IRegisterable
person Pete Kirkham    schedule 18.01.2010

Общий класс — это класс Template в UML, см. Как правильно представить классы шаблонов с помощью UML?

Итак, вы не можете использовать свой параметризованный класс в Visio http://etutorials.org/Programming/UML/Chapter+6.+Class+Diagrams+Advanced+Concepts/Parameterized+Class/

person salgo60    schedule 17.01.2010

UML ДЕЙСТВИТЕЛЬНО поддерживает параметрические типы (другие вещи также могут быть параметризованы, и вещи, отличные от типов, также могут использоваться в качестве параметров).

person Community    schedule 27.12.2010
comment
Не могли бы вы привести какой-нибудь надежный источник для этого? Мне просто любопытно узнать больше, особенно об использовании вещей, отличных от типов [...], в качестве параметров. - person Suzanne Soy; 11.09.2013
comment
Для методов и не классов? - person Andrew Scott Evans; 07.01.2017
comment
См. эту запись в блоге как Cliffs Notes , javadoc UML2 API (начиная с TemplateableElement) и выполните поиск в спецификации UML для строк TemplateableElement, TemplateSignature, TemplateParameter, ClassifierTemplateParameter, OperationTemplateParameter. - person Rafael Chaves; 08.01.2017