Денис, спасибо за помощь. Продолжим?
1. Почему "Owner" у вас написано рядом с изображением класса юзер? Или это "стереотип" использования связи, который говорит, что в этой связи User выступает владельцем для Team. да?
Owner - это роль. Как и Player. Из условия задачи видно, что User может быть по отношению к команде как игроком (player), так и владельцем (owner)
Наверное, я плохо описал задачу. User - это владелец и игрок в одном лице. нет отдельной роли "игрок". Если он владелец, то он и игрок. Кроме того, не стоит задача поиска команды по её ИД. Т.е. ваша ассоциация, наверное, не нужна.
пункты 2-4 - вроде прояснились, как я понимаю, ввиду того, что роли Player - реально нет, то верхнюю ассоциаци можно бы и убрать. Да?
5. Что такое квалификатор "Id", как его нужно читать?
Это значит, что в классе, на другом конце ассоциации (team) есть поле id, зная значение которого можно снизить кратность на полюсе ассоциации.
надо осмыслить...
в той книге, что я читаю, перед полем (Id) ставиться имя класса, потом точка, а уже потом имя поля, т.е. так: Team.Id - получается вроде немного понятнее, чем просто Id... а смысл по идее тот же самый.
Но в любом случае, это обозначение (квалификатор) означает, что на другом конце ассоциации есть соответствующее поле, по которому можно найти соответствующий объект. да?
Но где хранится значение "поля Id" на "этом" конце ассоциации, т.е. внутри объекта класса User? Как с точки зрения программиста читать диаграмму, чтобы реализовать классы User и Team?
Давайте ещё раз:
А.
А.1. Нижняя ассоциация на ваших диаграммах показывает связь команды и её владельца по полю UserId, которое хранится в экземплярах класса Team. Верно?
А.2. В правой части ассоциации можно было бы поставить "1", но по умолчанию 1 можно и не ставить, так?
А.3. В левой, как у вас и стоит "0..1" - так и остаётся.
А.4. По идее, для этой ассоциации тоже можно создать квалификатор Team.UserId (или просто UserId) и отобразить его со стороны класса User?
А.5. Мне кажется, что здесь неплохо было бы использовать DirectedAssociation (стрелочка в сторону класса User)?
А.6. Данная ассоциация представляет, что User является владельцем Team, т.о. можно обозвать левый краяй ассоциации как "Owner", верно?
(на моём новом рисунке данная ассоциация показана снизу).
Б.
Выше (в п.А) мы описали, каким образом класс Team ссылается на класс User. А теперь, наверное, стоит описать и тот факт, что класс User может иметь метод, который возвращает список объектов класса Team, верно? С точки зрения программной реализации задачи, такой метод должен быть.
Б.1. Я так думаю, что чем нагружать уже существующую ассоциацию, то лучше ввести новую, верно? Если нет, то почему и как тогда надо предстваить ассоциацию?
Б.2. Как отобразить ассоциацию, если есть необходимость показать разработчику, что такой метод должен быть членом класса User, а его реализация метода предполагает обращение к статическому метода GetTeamsByUser(User user) класса Team, который содержит все объекты своего типа в некотором статическом контейнере и при обращении отбирает те элементы, которые удовлетворяют некоему условию (в данном случае team.UserId=user.Id)
list<Team> User::GetUserTeams(){ return Team.GetTeamsByUser(user); }
В этом случае, я так думаю, необходимо также указать DirectAssociation (стрелка направлена к классу Team) с обозначением "0..*" со стороны класса Team. Верно?
Б.3. Нужно ли для этой ассоциации указывать квалификатор, т.е. обозначить, что поиск объектов класса Team будет (должен) происходить по полю UserId?
Б.4. А что, если необходимо "заказать" разработчику такую реализацию метода User.GetUserTeams, реализация которой предполагает обращение к мапперу объектов на получение списка объектов. Как я понимаю, в этом случае на диаграмме надо будет отобразить класс (а может даже экземпляр) маппера, и указать связь класса User с данным маппером, и маппера с классом Team, да?
В. Я думаю, что имея две описанных ассоциации, именно та, что описана в п.п. "А" отображает суть "владелец", т.е. у класса Team существует поле UserId, которое обозначает владельца, поэтому именно эту ассоциацию нужно обозначать ролью "Owner", верно?
На картинке показано моё видение диаграммы без использования п. "Б.4"