2013-12-11 4 views
1

Является ли мое отношение агрегации моего класса (между ArrayCoordinate и Tile) правильным (особенно направление стрелки)? Если нет, не могли бы вы дать краткое объяснение?Является ли моя Агрегация и состав правильной?

Примечание: Я прочитал статью на эту тему, и я чувствую, что не могу полностью понять этот вопрос. Заранее спасибо.

My class diagram

enter image description here

enter image description here

EDIT: Краткое описание о схеме: Это мой класс от моей плитки стратегии игры на основе. Класс Tile представляет каждую плиту на моей «игровой доске» для хранения объектов, которые могут содержать плитки (например, символ, дерево и т. Д.). И ArrayCoordinate представляет индексирование плитки для целей итерации (аналогично классу Point C#).

РЕДАКТИРОВАТЬ 2: В разделе «Плитка и массив», краткое описание отношений: каждая плитка имеет ArrayCoordinate, а плитки без ArrayCoordinate нет. И у каждой Плитки всегда есть как минимум 1 TileObject, у которых также есть ArrayCoordinate, чтобы получить доступ к его местоположению напрямую, не обращаясь сначала к Плитке. (Извините, если мое объяснение сбивает с толку, пожалуйста, не стесняйтесь спросить

+0

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

+0

Я отредактировал мое сообщение, чтобы разместить описание. Пожалуйста, взгляните на второй взгляд. Спасибо за ваш пост :) –

ответ

1

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

О ваш вопрос:.

является ли моя агрегация отношения моего класса (между ArrayCoordinate и плитки) является правильным (особенно направление стрелки)?

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

Ответ зависит от того, как вы интерпретируете свои собственные UML. В большинстве случаев, когда существует связь 1-n между классом A и классом B, есть стрелка, идущая из класса A, указывающая на класс B, она может иметь * близкий класс B (указывая, что существует много те B) и может также включать имя в стрелку, указывающее имя поля, которое поддерживает эту агрегацию. Если имя указано в стрелке, обычно вы можете удалить его из полей UML, чтобы у вас не было избыточной информации (репликации). Однако ваш UML не имеет ни имени на стрелке, ни поля, которое может указывать на то, что отношения действительно существуют.

Во-вторых, и в соответствии с моими рассуждениями, то UML представление агрегации между TileObject и Tile в неправильном направлении или оно отсутствует, и на самом деле существует, но UML, поскольку это не дает эту информацию (расширение вашего TileObject класс помог бы).

EDIT: О вашем новом TileObject UML я бы сказал, что там не хватало поле, которое поддерживает отношения с Tileоднако кажется, что Visual Studio представляет собой 1-п отношения с заполненным ромбом и не включают в себя поля, которые поддерживают эти отношения. Также кажется, что иногда визуальная студия представляет отношения 1-1, а другие - нет; в вашем примере это отношение между Tile и BattleManager с незаполненным ромбом, однако оно не делает этого между TileObject и ArrayCordinate. И если это правда, то мне интересно, почему существует n-n отношение между Tile и TileObject. (должно ли это быть 1-n отношения вместо?)

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

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

Наконец, и отвечая на Ваш вопрос: Ваше отношение между ArrayCordinate и Tile это хорошо, потому что вы заявили следующее:

ArrayCoordinate представляет индексацию плитки, для итерации

Это означает, что должно быть существует соотношение 1-n между ArrayCoordinate и Tile.

+0

1. Я добавил TileObject, надеюсь, вы сможете расширить свое объяснение. 2. На Tile и ArrayCoordinate приписанное отношение: каждый элемент имеет ArrayCoordinate и нет рамки без ArrayCoordinate. –

+0

Для более подробного объяснения, пожалуйста, ознакомьтесь с разделом «EDIT 2». –

+0

@MosesAprico, пожалуйста, см. Мой обновленный ответ от начала. –

Смежные вопросы