Как показать использование статических методов Диаграмма классов UML

Как показать использование статических методов в диаграмме классов UML?

class A{
    public static void test(){
    }
}

class B{
    public void b(){
    A.test();
    }
}

Как бы выглядела диаграмма классов, которая показывает взаимосвязь? UML 2.0 будет подготовлен, если есть разница.

Ответ 1

Чтобы показать статический метод, вы подчеркиваете имя статического метода - посмотрите здесь для получения более подробной информации.

Что касается навигации по этим отношениям; class B зависит от существования class A. Можно сказать, что класс B имеет "зависимость использования" от класса A

class B ----uses----> class A

Надеюсь, что это поможет.

Ответ 2

@RobertMS имеет право.

Другая альтернатива - использование стереотипов:

..............................................................
....+----------------------------------------------------+....
....|                StringUtilityClass                  |....
....+----------------------------------------------------+....
....| [+] void: lowerCase()              <<non virtual>> |....
....| [+] void: upperCase()              <<non virtual>> |....
....| [+] String: toString()                <<override>> |....
....+----------------------------------------------------+....
....| [+] String: LowerCaseCopy(String Value) <<static>> |....
....| [+] String: UpperCaseCopy(String Value) <<static>> |....
....| [+] String: ReverseCopy(String Value)   <<static>> |....
....+----------------------------------------------------+....
..............................................................

Примечание Некоторые примеры лучших языков программирования, особенно те, которые содержат синтаксис, чувствительный к регистру, используют статические функции и оставляют в верблюжьем нижнем регистре остальные функции.

Приветствия.

Ответ 3

Чтобы показать статические методы и атрибуты, вы подчеркиваете их в диаграмме классов UML: см. UML Distilled с .66 или раздел 7.3.19 (Feature ) Спецификация суперструктуры UML:

Статические элементы подчеркнуты.

Чтобы показать взаимосвязь между классами B и A (где B использует только статические методы в A), вы используете зависимость, а не ассоциацию. Связи всегда между экземплярами классов на каждом конце, как в разделе 7.3.3 (Ассоциация) спецификации суперструктуры UML:

Ассоциация определяет семантические отношения, которые могут произойти между типизированными экземплярами.

Но класс B зависит от класса A, как в разделе 7.3.12 спецификации:

Зависимость - это отношение, которое означает, что один или множество элементов модели требуют других элементов модели для их спецификации или реализации.

Возможно, стоит уточнить характер зависимости со стереотипом. Вы можете использовать стереотип use, но это очень общее и фактически включает стандартные ассоциации между экземплярами (хотя вы, очевидно, обычно используете ассоциации, чтобы их явно показывать). Как говорит Фаулер в UML Distilled,

Многие отношения UML подразумевают зависимость. Судоходная ассоциация от Заказ Заказчика [в одном из его примеров...] означает, что Заказ в зависимости от клиента.

Кажется, нет никакого стандарта на какой стереотип использовать. Я использовал usesStatically для ясности в отношении характера зависимостей; то есть

B --usesStatically--> A

(Если, в качестве альтернативы, класс B имел экземпляр A в качестве статического поля, я бы использовал что-то вроде B--containsStatically--> A, если я явно представляю B в диаграмме классов, иначе просто имеет подчеркнутый статический атрибут типа A в B.)