Допустим, у меня есть следующий код:
class A {
public:
void doSomething(B* b);
}
class B {
}
Как бы я описал это в диаграмме UML? Сначала я подумал, что A использует B, поэтому должна быть пунктирная линия от A до B. Но в некоторых школьных документах (это очень маленькая часть отчета о школьных заданиях) они, кажется, используют символ агрегирования (пустой ромб и сплошная линия).
Это не кажется мне правильным — если A фактически содержит указатель на B как член, это кажется правильным. Но когда только некоторые методы используют указатель на B и не сохраняют его в каких-либо переменных-членах, это кажется неправильным.
Что здесь?
(Я мог бы спросить своих учителей, но они обычно очень долго отвечают на вопросы такого типа … и, честно говоря, я больше доверяю коллективному интеллектуальному доверию Stackoverflow :))
Вы должны использовать простую зависимость между A и B:
A просто использует B в качестве параметра в операции. Если у вас есть какой-либо атрибут типа B, вы должны использовать ассоциацию. Агрегация дает лишь небольшую дополнительную семантику, и вы можете (/ должны) ее исключить, если вы не знаете, что хотите передать какую-то конкретную информацию.
Там не должно быть никакой стрелки между class A
а также class B
, Стрелки между классами используются для обозначения «ассоциаций».
Ассоциация указывает, что система, которую вы разрабатываете, хранит
ссылки какого-то рода между экземплярами связанных типов.
Источник: Свойства ассоциаций на диаграммах классов UML
Чтобы захватить / представить void doSomething(B* b);
Вы можете попробовать использовать диаграмму активности, для более подробной информации эта ссылка.