У меня есть требование к UML: множественность ассоциации может меняться в зависимости от времени. У меня есть некоторые мнения по этому поводу, например, использовать список для хранения истории множественности, создать новую ассоциацию, как только множественность изменится. Но кажется, что все они не являются хорошим выбором. Так может ли кто-нибудь дать мне несколько предложений? Большое спасибо.
Может ли множественность ассоциации меняться со временем?
Ответы (2)
Следует рассмотреть два случая: изменение множественности может произойти как часть (непредвидимой и непредвиденной) эволюции программной системы или если оно может быть известно (например, 2..5 по пятницам и 1..3). оставшееся время) и быть частью требований к системе, которую необходимо спроектировать и построить.
Если изменение множественности является частью (непредвидимой) эволюции программной системы, то вы не можете сделать для него проект и, следовательно, вы можете только приспособить его к модели вашей системы, когда оно произойдет. Эволюция программной системы в основном связана с эволюцией ее требований. Но когда вы моделируете систему, у вас есть только текущие требования в качестве основы для создания информационной модели с классами, ассоциациями и множествами. Эволюция требований подразумевает соответствующую эволюцию информационной модели, включая множественности ассоциаций. Таким образом, со временем вы получите историческую последовательность моделей, описывающих/определяющих вашу систему.
Если временные изменения кратности известны во время разработки, то единственный способ уловить это в модели — это использовать наименее щедрое ограничение кратности, допускающее вариацию (например, 1..5), и описать вариацию (в простой форме). английский) в поле ограничения, прикрепленном к соответствующему концу ассоциации.
Ну, это довольно просто: достаточно присвоить ассоциации кратность. Если нижняя и верхняя границы не указаны, это будет 0..*
. Если у вас есть минимум, например. 1 было бы 1..*
. То же самое касается верхнего предела (замените *
на то, что должно быть).
То, как вы это реализуете, полностью зависит от кодера. Вы просто указываете ограничения здесь в UML. Например. если у вас есть кратность 0..*
, кодер, скорее всего, выберет массив/коллекцию переменной длины. Если это 1..2
, это может закончиться name1
, name2
как одиночными переменными.