В UML представляет собой передачу объекта в качестве параметра для создания экземпляра другого объекта (само по себе) использование первого? - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь представить следующую ситуацию, касающуюся создания графического интерфейса в C ++, с использованием UML 2:

  • A имеет программу, написанную на C ++, которая имеет класс MainWindow, который создает экземпляр класса GameManagementInterfacePanel во время построения.

  • Конструктор MainWindow требует в качестве параметра ссылки на объект GameManager.

  • То, на что ссылается GameManager, это то, что передано конструктору GameManagementInterfacePanel.

  • Интерфейс объекта GameManager никогда не используется MainWindow. Хотя я еще этого не сделал, я считаю, что объект GameManager может (должен!) Быть объявлен вперед (в C ++).

У меня вопрос: в контексте UML , класс MainWindow, в настоящее время использует или даже , зависит от класса GameManager?

Согласно глоссарию 2-го издания справочника UML, «использование» определяется как:

Зависимость, в которой один элемент (клиент) требует присутствия другого элемента (поставщика) для его правильного функционирования или реализации.

В разделе Термины и понятия в Руководстве пользователя UML (второе издание) функция стереотипа зависимости "использовать" определяется следующим образом:

Указывает, что семантика исходного элемента зависит от семантики публичной части цели

Первое описание, кажется, указывает на то, что оно должно отображаться как зависимость использования (со стереотипом <<use>>). Второе мне кажется менее четким, поскольку MainWindow не зависит от "публичной части" GameManager.

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

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

Мне просто любопытно, что другие люди считают правильным.

Ответы [ 3 ]

1 голос
/ 02 марта 2012

Из того, что я понял:

  • MainWindow не использует GameManager, но зависит от него

  • MainWindow не только использует GameManagementInterfacePanel, но и создает его(поэтому вы можете использовать стереотип создания)

  • Я не могу сказать, использует ли GameManagementInterfacePanel GameManager, но это по крайней мере зависит от него.

В целом, любое отношение между элементом A и элементом B является зависимостью, если изменение B вызовет изменение A:

"Отношение зависимости указывает, что изменения одного элемента модели (поставщика или независимогоэлемент модели) может вызвать изменения в другом элементе модели (клиент или зависимый элемент модели). Элемент модели поставщика является независимым, поскольку изменение клиента не влияет на него. Элемент модели клиента зависит от поставщика, поскольку изменение поставщикавлияет на клиента.( source )

Можно добавить дополнительную информацию о типе отношений, поскольку вы можете иметь несколько типов зависимостей: << use >> (если A использует publicинтерфейс B), << instantiate >> (если A экземпляр B), << bind >> (если данные A связаны с данными B) и т. д ... Также возможно добавить другие стереотипы за пределы Стандартный профиль UML , чтобы специализировать отношения зависимости A -> B с некоторой другой семантической информацией.

Итак, ИМО, да, полезно также передать эту информацию читателю вашей диаграммы.Например, со следующими отношениями:

  • MainWindow -> GameManager (простая зависимость, но вы также можете написать MainWindow - import -> GameManager, например, если вы хотите выделить это конкретное отношениечитателю)

  • MainWindow - << create >> -> GameManagementInterfacePanel

  • GameManagementInterfacePanel - << использовать?>> -> GameManager

1 голос
/ 05 марта 2012

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

A зависимость использования (<<use>>) и не нормальная зависимость , это то, что я должен использовать, чтобы указать отношения между MainWindow и GameManager классы.

Первоначально, я не был уверен из-за (казалось бы) противоречивой информации в текстах, цитируемых в вопросе. (Это было довольно тревожно, так как оба текста были написаны Бухом, Рамбо и Якобсоном!).

Прочитав вопрос Тони, я начал думать, что только что ослеп к реальности, что я должен просто использовать зависимость. Затем я перешел по ссылке на исходный материал, предоставленный Тони , и несколько раз прочитав определение «Зависимость», стало ясно, что в данном случае эти отношения просто не подходят.

... изменения в одном элементе модели ... могут вызвать изменения в другом элементе модели ...

Помимо изменения имени класса GameManager, его изменение не повлияет на MainWindow.

(Этот источник интересен, потому что, по крайней мере, для меня это не просто ссылка на UML, поскольку это всего лишь страница справки для продукта IBM. Как оказалось, это не имеет значения, поскольку практически не отличается от из справочника.)

Просматривая этот список, в конце концов приходит к отношениям «Использование»

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

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

Тогда я начал задаваться вопросом, потому что вспомнил кое-что любопытное в Visual Paradigm для UML; У него есть два инструмента для создания зависимостей использования:

enter image description here

(Можно выбрать инструмент Dependency, а затем добавить стереотип <<use>>.)

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

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

Я наконец решил проверить последнюю UML-спецификацию от OMG, чтобы попытаться положить все это на отдых. Последним доказательством, позволяющим поставить заключение без сомнения, были описание и семантика, указанные для двух отношений из разделов 7.3.12 и 7.3.54.

Зависимость:
Семантика

... изменение поставщика может повлиять на элементы модели клиента. Зависимость подразумевает, что семантика клиента (sic?) Не полна без поставщика.

Использование:
Описание

Использование - это отношение, в котором одному элементу требуется другой элемент (или набор элементов) для его полной реализации или работы. В метамодели использование - это зависимость, в которой клиент требует присутствия поставщика.

Семантика

Зависимость использования не определяет, как клиент использует поставщика, кроме факта, что поставщик используется в определении реализации клиента.

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

Наконец, подсказка о духе, в котором следует использовать зависимости использования, является следующим утверждением из справочного руководства (p64):

(в отношении необходимости использования отношений зависимости:

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

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

Уф!

0 голосов
/ 01 марта 2012

Ну, Майк,

Когда вы сначала рисуете или читаете любую диаграмму UML, у вас должна быть «четкая цель».

Это не что-то «вам нравится» или «что-то»другим нравится ".

Вы и ваша" команда "- единственные, кто решает, что показ зависимости поможет вашей цели [которая мотивирует, почему вы рисуете диаграмму], или усложнит диаграмму.

У вас есть «точно умственная сила», чтобы решить это, потому что вы пишете это программное обеспечение.Все артефакты UML предназначены для помощи вам при написании программного обеспечения.

Но, как правило:

Если вы попадаете в ситуацию, подобную

  • , должен я показать это илине
  • о, я должен использовать расширение или включение (или любую другую нотацию uml)
  • хорошо, это правильная нотация UML

и при рисовании вашей диаграммы и васпотратьте больше 15 минут на эти вещи, это означает, что вы не думаете о своем проекте (какой должна быть чертежная схема UML), вы делаете UML Masturbation ...

Как и всемужчины делают это в его / ее раннем или, возможно, более позднем возрасте, и иногда это хорошо, это не должно быть образом жизни ...

В результате будьте прагматичны ... Сосредоточьтесь на ценности, а не на "картине"рисунок "...

Надеюсь, я смогу разобраться ...

...