Я работаю над диаграммой классов для своей стажировки. Я столкнулся с ситуацией, с которой раньше не сталкивался, и меня не совсем устраивает выбранный мной подход. Вот отношения, которые мне нужно смоделировать:
Миссия сотрудника и заказа:
Сотрудник и отдел:
Я был бы очень признателен за любые рекомендации или предложения о том, как правильно смоделировать эти отношения в диаграмме классов.
это то, что я пробовал.
Спасибо за ваш ответ, в каждом классе я назвал свойства. Я назвал ассоциации просто для большей наглядности.
Кратности, похоже, были введены в поля имени свойства. Подсказка — знаки плюс, показывающие видимость. Названия ассоциаций, которые у вас есть, будут более понятными на концах, противоположных подлежащим предложениям.
Свойства с типами, которые не являются типами данных, должны быть преобразованы в свойства конца ассоциации.
Как сказал Джим. Я предполагаю, что Кристоф скоро даст хороший ответ. Для меня уже слишком поздно...
Я буду использовать Mission вместо MissionOrder или OrderMission.
Прежде всего, сотрудник МОЖЕТ нести ответственность или МОЖЕТ сопровождать Миссию. Это означает, что не все сотрудники обязательно связаны с миссией (подумайте, например, о новых сотрудниках до того, как они получат роль в своей первой миссии). Следовательно, на конце Миссии кратность должна быть 0..*
(или ярлык *
).
Мы понимаем, что любая Миссия требует ответственного, поэтому 1 — это нормально. Но в каждой ли миссии есть сопровождающие? Более того, в жизненном цикле миссии, когда создается новая миссия, известны ли сопровождающие лица с самого начала? Если ответ на любой из этих вопросов отрицательный, кратность на стороне Сотрудника должна быть 0..*
.
На сотруднике/отделе то же самое. 1 на стороне работы отдела в порядке. Но из вашего повествования неясно, должен ли в отделе быть хотя бы один сотрудник. Предположим, что руководитель также работает в отделе 1..*, это нормально. Если вы не уверены (например, можно создать отдел, а начальник назначить позже), выберите 0..*
.
С ассоциацией поваров не все в порядке: не все сотрудники руководят отделом. Итак, в конце отдела должно быть 0..1
.
Знак + в конце ассоциации предназначен для публичного просмотра. Если вы хотите его использовать, лучше добавьте имя роли, то есть имя, которое вы дали бы свойству класса на противоположном конце, которое будет ссылаться на класс в конце ассоциации. Другими словами, гораздо менее двусмысленно написать department
рядом с + в конце главной ассоциации класса Department, чем иметь атрибут Department:Department.
Большое спасибо, очень полезно! Я зафиксировал кратности в ассоциациях. Чтобы быть уверенным, что я правильно понял последнюю часть, посвященную публичной видимости, я удалил атрибут Department: Department из класса Сотрудник, а также атрибуты сотрудники: Список<Сотрудник> и шеф-повар: Сотрудник из класса Отдел. И я заменил их следующими ассоциациями: (Employee Class) * employee ----- 1 department (Department Class)
и (Employee Class) 1 chief ----- 0..1 chiefOf (Department Class)
Также еще один вопрос: часто ли 2 класса могут иметь более 1 ассоциации?
«Предполагая, что руководитель также работает в отделе…» Обязательное ограничение для ассоциации «начальник»: работают подмножества.
@YassineRiahi Да, это обычное дело. У вас есть хороший пример. Я вам скажу другое: Человек может управлять Машиной в данный момент времени, но тот же Человек может также владеть Машиной, и это не обязательно одна и та же машина (например, арендовать машину в путешествии, владея автомобилем, который остался в аэропорту). Единственное, с чем вам нужно быть осторожным, это если две ассоциации не одинаковы (например, обратная связь).
@user6580165 user6580165 ты справился! Действительно, это прекрасный способ решить эту проблему и избежать несоответствий, если это предполагаемая семантика. Потому что я встречал и такую конструкцию, когда начальник одного отдела (например ИТ-отдел) сам был закреплен за входящим в него отделом (например дирекция управления), т.е. начальник не работал в том отделе, в котором он работал. удалось. Это способ показать иерархию, в которой у каждого, включая руководство, всегда есть начальник, которому он подчиняется (кроме генерального директора).
Семантика может быть такой: 1) в этом отделе должен работать руководитель (это ограничение выражено); 2) в этом отделе не должен работать руководитель (это еще одно ограничение); 3) руководитель может работать в любом отделе (без ограничений). Выбор семантики остается за автором вопроса. «1)» может выражаться одним объединением, тогда сотрудников следует разделить на начальников и прочих (по специализации или признаку).
Обязательное ограничение: не более одного начальника на отдел.
Большое спасибо всем, кто ответил (особенно @Christophe). Я не знал, куда обратиться за помощью, поэтому подумал, что, возможно, пришло время попробовать Stack Overflow. Я рад, что сделал!
Вместо присвоения имен ассоциациям следует размещать имена свойств там, где они принадлежат.