436
UML SysML и пр. / Re: Ассоциации + квалификаторы
« : 14 Июля 2008, 14:11:12 »
Budda
>Наверное, я плохо описал задачу. User - это владелец и игрок в одном лице. нет отдельной роли "игрок". Если он владелец, то он и игрок. Кроме того, не стоит задача поиска команды по её ИД. Т.е. ваша ассоциация, наверное, не нужна.
Если роли "игрок" нет, но значит ассоциация не нужна.
>пункты 2-4 - вроде прояснились, как я понимаю, ввиду того, что роли Player - реально нет, то верхнюю ассоциаци можно бы и убрать. Да?
В общем да, но тебе надо решить, как ты покажешь, что
"У одного игрока может быть либо 0 команд, либо одна, либо множество."
Или здесь "игрок" = "владелец"? Если так - добавь кратность на полюс Team
>5. Что такое квалификатор "Id", как его нужно читать?
>Это значит, что в классе, на другом конце ассоциации (team) есть поле id, зная значение которого можно снизить кратность на полюсе ассоциации.
Да
>Улыбающийся надо осмыслить... Улыбающийся
>в той книге, что я читаю, перед полем (Id) ставиться имя класса, потом точка, а уже потом имя поля, т.е. так: Team.Id - получается вроде немного
>понятнее, чем просто Id... а смысл по идее тот же самый.
Тот же самый. Пиши как нравится
>Но в любом случае, это обозначение (квалификатор) означает, что на другом конце ассоциации есть соответствующее поле, по которому можно найти соответствующий объект. да?
Найти один объект, несколько объектов или не найти ничего
>Но где хранится значение "поля Id" на "этом" конце ассоциации, т.е. внутри объекта класса User?
Нигде не хранится.
Смотри, ассоциация между user и team подразумевает, что user знает про team и наоборот.
Если тебе не нравится, что team знает про user, то нарисуй стрелку на конце ассоциации, показав тем самым направление возможной навигации.
Реализовывается ассоциация например с помощью ссылок или указателей. Т.е. в твоем случае в классе User будет член класса - например, map объектов типа team.
О чем, говорит квалификатор? что если у тебя имеется Объект типа user (а в нем естественно заполненный массив с team), то зная ключ (квалификатор), ты быстро найдешь или не найдешь нужную тебе команду (команды).
Ключ при этом НЕ хранится в User. Он приходит извне.
>Как с точки зрения программиста читать диаграмму, чтобы реализовать классы User и Team?
см. выше. Но вообще ты занимаешься проектированием, а не реализацией.
Обычно программисту одной статики (диаграммы классов) мало. Нужна динамика. Например, диаграммы последовательности, на которых ты опишешь основные варианты использования данных классов. МОжешь представить их в виде коопераций, если захочется.
>Наверное, я плохо описал задачу. User - это владелец и игрок в одном лице. нет отдельной роли "игрок". Если он владелец, то он и игрок. Кроме того, не стоит задача поиска команды по её ИД. Т.е. ваша ассоциация, наверное, не нужна.
Если роли "игрок" нет, но значит ассоциация не нужна.
>пункты 2-4 - вроде прояснились, как я понимаю, ввиду того, что роли Player - реально нет, то верхнюю ассоциаци можно бы и убрать. Да?
В общем да, но тебе надо решить, как ты покажешь, что
"У одного игрока может быть либо 0 команд, либо одна, либо множество."
Или здесь "игрок" = "владелец"? Если так - добавь кратность на полюс Team
>5. Что такое квалификатор "Id", как его нужно читать?
>Это значит, что в классе, на другом конце ассоциации (team) есть поле id, зная значение которого можно снизить кратность на полюсе ассоциации.
Да
>Улыбающийся надо осмыслить... Улыбающийся
>в той книге, что я читаю, перед полем (Id) ставиться имя класса, потом точка, а уже потом имя поля, т.е. так: Team.Id - получается вроде немного
>понятнее, чем просто Id... а смысл по идее тот же самый.
Тот же самый. Пиши как нравится
>Но в любом случае, это обозначение (квалификатор) означает, что на другом конце ассоциации есть соответствующее поле, по которому можно найти соответствующий объект. да?
Найти один объект, несколько объектов или не найти ничего
>Но где хранится значение "поля Id" на "этом" конце ассоциации, т.е. внутри объекта класса User?
Нигде не хранится.
Смотри, ассоциация между user и team подразумевает, что user знает про team и наоборот.
Если тебе не нравится, что team знает про user, то нарисуй стрелку на конце ассоциации, показав тем самым направление возможной навигации.
Реализовывается ассоциация например с помощью ссылок или указателей. Т.е. в твоем случае в классе User будет член класса - например, map объектов типа team.
О чем, говорит квалификатор? что если у тебя имеется Объект типа user (а в нем естественно заполненный массив с team), то зная ключ (квалификатор), ты быстро найдешь или не найдешь нужную тебе команду (команды).
Ключ при этом НЕ хранится в User. Он приходит извне.
>Как с точки зрения программиста читать диаграмму, чтобы реализовать классы User и Team?
см. выше. Но вообще ты занимаешься проектированием, а не реализацией.
Обычно программисту одной статики (диаграммы классов) мало. Нужна динамика. Например, диаграммы последовательности, на которых ты опишешь основные варианты использования данных классов. МОжешь представить их в виде коопераций, если захочется.