Здравствуйте, vladimir_v_l, Вы писали:
__>>> Рисую класс "Документ", класс "Справочник". От документа к справочнику __>>> рисую однонаправленную ассоциацию, устанавливаю кратность 1 к 1. S>>Отношение Документ — справочник всегда имеет мощность один — ко многим (с вариациями на обязательность поля 0..1 to 0..n или 1 to 1..n).
Извиняюсь. Наврал. Правильно будет Документ 0..n -> 0..1 Cправочник Либо Документ 1..n -> 1 Справочник __>Это безусловно так в реляционной модели. Но я прочитал, что в UML кратность показывает, сколько __>объектов одного класса связано с одним объектом другого класса. Если так, то выходит 1 к 1? __>Или я все-таки неправильно понимаю, что такое кратность в UML? __>Еще, к этой ассоциации подходит стереотип вроде "ссылается на" и как обозначить по-английски - __>reference to или как?
Подписи на связях обычно рисуют на ER (Entity relation) диаграмах. На диаграммах классов обычно их не используют
__>>>2. Для связи классов "Документ" и "Деталь документа" создаю два класса (правильно? __>>> детали же представляют собой отдельный класс? S>>а что такое "Деталь документа"? Атрибуты класса в модели могут быть только примитивных типов. Если тип атрибута — другой класс то тут уже должна быть ассоциация или агрегация. __>Деталь здесь — по сути запись, допустим — операция, дата, автор. __>То есть все же нужен второй класс, так?
Так __>Хочу уточнить — получается для не простых типов — массивов, записей и т.п. в UML
Массив можно отобразить мощностью связи. __>создаем вспомогательный класс, да?
__>>> а если надо, например, __>>> хранить комментарии к документу со временем их добавления и автором — для __>>> такого комментария тоже нужен отдельный класс?), от документа к детали рисую __>>> двунаправленную ассоциацию агрегации, со стороны документа ставлю кратность 1, __>>> со стороны детали — 0..n. S>>Так не может быть. если с одной строны мощность 1 то с другой 1..n __>Почему? Например, есть документ (кратность 1). Но к нему еще нет вышеобозначенного __>комментария (кратность 0). Опять путаю?
значит 0..1 к 0..n __>>> стереотип "include"? Или нет? Как в Rose указать, что эта агрегация — композит? S>>Для агрегации в розе рисуют связь в обратном направлении чем для ассоциации, т. е. от дочернего элемента к агрегирующему. S>>Затем на вкладке "Role A detail" отмечаешь "Aggregate" и "By value" — вот тебе и композит. __>Да, "By value" работает. А если связь рисовать от дочернего класса — ромбик появляется у дочернего, __>а не у родительского класса (и в коде же переменная появится в дочернем классе?). __>Вроде должно быть наоборот?
Ромбик у родительского (агрегирующего) класса. Будь внимателен. Рисуем от дочернего к родителю, и не путаем роль A и B __>>>3. У документа есть некий статус, который последовательно изменяется во времени. __>>> Надо отслеживать, кто, когда и какой статус установил. __>>> В реляционной модели я бы сделал связь многие-ко-многим между возможными __>>> видами состояний (справочник) и документом, в таблице связи фиксировал бы время __>>> и ссылку на пользователя. __>>> На диаграмме классов мне надо тоже создать класс "Состояние документа" и __>>> в нем все это хранить? Если да, то от класса "Документ" к классу "Состояние документа" __>>> рисуем двунаправленную ассоциацию агрегации, со стороны документа ставим __>>> кратность = 1, со стороны класса состояния документа — 1..n (статус должен быть всегда). __>>> От класса "Состояние документа" к классу "Вид состояния" (справочнику) __>>> рисуем однонаправленную ассоциацию с кратностью 1 к 1. Так или нет? S>>1 к 1..n __>>> Каким стереотипом можно обозначить эти ассоциации? S>>зачем тебе тут стереотип? __>Стереотип же просто уточняет, что я имею в виду, рисуя ту или иную ассоциацию, __>например "включает", "имеет", "обслуживает" и т.п. Вот я и хотел на диаграмме уточнить. __>Но не знаю, какой глагол тут подходит?
да любой подсунь. "хранит" например __>>>4. Есть два класса, один из которых является "коллектором" для другого класса, __>>> например, "Проект" является коллектором объектов класса "Задание", т.е. __>>> он умеет их создавать/удалять/находить и т.п. __>>> Связь между ними показываю двунаправленной ассоциацией (чтобы и из __>>> "проекта" получить доступ к "заданиям", и наоборот, из "задания" выйти на "проект". __>>> Для "проекта" устанавливаю кратность 1, для "задания" — 0..n. Это правильно __>>> или здесь нужна зависимость, а не ассоциация? __>>> Каким стереотипом можно обозначить эту ассоциацию? S>>Тут действительно скорее не ассоциация а зависимость (dependency — пунктирная линия) __>Хотя Буч пишет, что "Чаще всего зависимости применяются при работе с классами, чтобы отразить __>в сигнатуре операции тот факт, что один класс использует другой в качестве аргумента", __>"Если объекты одного класса должны будут взаимодействовать с объектами другого иначе, __>чем в качестве параметров операции, следует определить между этими классами ассоциацию", __>и здесь, как я думаю, все же именно этот вариант — т.е. "задание" для "проекта" — не просто __>параметр в операциях, а класс, с которым он взаимодействует, возможен переход __>от задания к проекту и от проекта к заданию и т.п. Выходит здесь — ассоциация?
Ну ты же сначала написал "создавать/удалять/находить", я решил что "проект" это фабрика для "заданий", а для таких — связь dependency
__>Спасибо за ответ, а что можно сказать по остальным пунктам?
Ничего не скажу. Я не никогда использовал розу для генерации кода или DDL поэтому ничего присоветовать не могу.