Re[3]: Несколько вопросов по UML и Rational Rose
От: stump http://stump-workshop.blogspot.com/
Дата: 12.01.07 18:19
Оценка:
Здравствуйте, 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 поэтому ничего присоветовать не могу.
Понедельник начинается в субботу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.