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

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

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

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

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


person Nicolas    schedule 26.06.2012    source источник


Ответы (3)


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

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

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

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

person RobertMS    schedule 26.06.2012
comment
Вы уверены, что это отношения зависимости, а не ассоциация? - person Nicolas; 26.06.2012
comment
Ассоциация — это отношение между двумя (или более) типами, которые связаны экземпляром(ами). Таким образом, чтобы ClassB имел ассоциацию с ClassA, он должен иметь ссылку на него, возможно, через свойство или поле. Но поскольку в вашем примере это не так, я бы сказал, что у вас есть зависимость, а не ассоциация. Я думаю, что определение в этой ссылке показывает, что у вас есть зависимость. - person RobertMS; 26.06.2012

@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>> |....
....+----------------------------------------------------+....
..............................................................

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

Ваше здоровье.

person umlcat    schedule 26.06.2012

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

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

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

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

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

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

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

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

Кажется, не существует стандарта относительно того, какой стереотип использовать. Я использовал usesStatically, чтобы прояснить природу зависимости; это

B --usesStatically--> A

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

person Community    schedule 12.03.2015
comment
Я подумал, что ответ @RobertMS стоит расширить, но поместил его как ответ вики сообщества, поскольку он «просто» объясняет некоторые нюансы его ответа (и ссылается на более «официальные» ссылки). - person Stuart Rossiter; 12.03.2015