Re[2]: Несколько вопросов по UML и Rational Rose
От: vladimir_v_l  
Дата: 12.01.07 16:29
Оценка:
__>> Рисую класс "Документ", класс "Справочник". От документа к справочнику
__>> рисую однонаправленную ассоциацию, устанавливаю кратность 1 к 1.
S>Отношение Документ — справочник всегда имеет мощность один — ко многим (с вариациями на обязательность поля 0..1 to 0..n или 1 to 1..n).
Это безусловно так в реляционной модели. Но я прочитал, что в UML кратность показывает, сколько
объектов одного класса связано с одним объектом другого класса. Если так, то выходит 1 к 1?
Или я все-таки неправильно понимаю, что такое кратность в UML?
Еще, к этой ассоциации подходит стереотип вроде "ссылается на" и как обозначить по-английски —
reference to или как?

__>>2. Для связи классов "Документ" и "Деталь документа" создаю два класса (правильно?

__>> детали же представляют собой отдельный класс?
S>а что такое "Деталь документа"? Атрибуты класса в модели могут быть только примитивных типов. Если тип атрибута — другой класс то тут уже должна быть ассоциация или агрегация.
Деталь здесь — по сути запись, допустим — операция, дата, автор.
То есть все же нужен второй класс, так?
Хочу уточнить — получается для не простых типов — массивов, записей и т.п. в UML
создаем вспомогательный класс, да?

__>> а если надо, например,

__>> хранить комментарии к документу со временем их добавления и автором — для
__>> такого комментария тоже нужен отдельный класс?), от документа к детали рисую
__>> двунаправленную ассоциацию агрегации, со стороны документа ставлю кратность 1,
__>> со стороны детали — 0..n.
S>Так не может быть. если с одной строны мощность 1 то с другой 1..n
Почему? Например, есть документ (кратность 1). Но к нему еще нет вышеобозначенного
комментария (кратность 0). Опять путаю?

__>> стереотип "include"? Или нет? Как в Rose указать, что эта агрегация — композит?

S>Для агрегации в розе рисуют связь в обратном направлении чем для ассоциации, т. е. от дочернего элемента к агрегирующему.
S>Затем на вкладке "Role A detail" отмечаешь "Aggregate" и "By value" — вот тебе и композит.
Да, "By value" работает. А если связь рисовать от дочернего класса — ромбик появляется у дочернего,
а не у родительского класса (и в коде же переменная появится в дочернем классе?).
Вроде должно быть наоборот?

__>>3. У документа есть некий статус, который последовательно изменяется во времени.

__>> Надо отслеживать, кто, когда и какой статус установил.
__>> В реляционной модели я бы сделал связь многие-ко-многим между возможными
__>> видами состояний (справочник) и документом, в таблице связи фиксировал бы время
__>> и ссылку на пользователя.
__>> На диаграмме классов мне надо тоже создать класс "Состояние документа" и
__>> в нем все это хранить? Если да, то от класса "Документ" к классу "Состояние документа"
__>> рисуем двунаправленную ассоциацию агрегации, со стороны документа ставим
__>> кратность = 1, со стороны класса состояния документа — 1..n (статус должен быть всегда).
__>> От класса "Состояние документа" к классу "Вид состояния" (справочнику)
__>> рисуем однонаправленную ассоциацию с кратностью 1 к 1. Так или нет?
S>1 к 1..n
__>> Каким стереотипом можно обозначить эти ассоциации?
S>зачем тебе тут стереотип?
Стереотип же просто уточняет, что я имею в виду, рисуя ту или иную ассоциацию,
например "включает", "имеет", "обслуживает" и т.п. Вот я и хотел на диаграмме уточнить.
Но не знаю, какой глагол тут подходит?

__>>4. Есть два класса, один из которых является "коллектором" для другого класса,

__>> например, "Проект" является коллектором объектов класса "Задание", т.е.
__>> он умеет их создавать/удалять/находить и т.п.
__>> Связь между ними показываю двунаправленной ассоциацией (чтобы и из
__>> "проекта" получить доступ к "заданиям", и наоборот, из "задания" выйти на "проект".
__>> Для "проекта" устанавливаю кратность 1, для "задания" — 0..n. Это правильно
__>> или здесь нужна зависимость, а не ассоциация?
__>> Каким стереотипом можно обозначить эту ассоциацию?
S>Тут действительно скорее не ассоциация а зависимость (dependency — пунктирная линия)
Хотя Буч пишет, что "Чаще всего зависимости применяются при работе с классами, чтобы отразить
в сигнатуре операции тот факт, что один класс использует другой в качестве аргумента",
"Если объекты одного класса должны будут взаимодействовать с объектами другого иначе,
чем в качестве параметров операции, следует определить между этими классами ассоциацию",
и здесь, как я думаю, все же именно этот вариант — т.е. "задание" для "проекта" — не просто
параметр в операциях, а класс, с которым он взаимодействует, возможен переход
от задания к проекту и от проекта к заданию и т.п. Выходит здесь — ассоциация?

Спасибо за ответ, а что можно сказать по остальным пунктам?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.