Форум Сообщества Аналитиков

Общий раздел => Теория моделирования и нотации => Тема начата: Сергей Евтухович от 21 Мая 2014, 23:06:47

Название: Кратность полюсов ассоциации. Различие 1--1 и 1--0..1
Отправлено: Сергей Евтухович от 21 Мая 2014, 23:06:47
Коллеги, добрый вечер!

Раньше не предавал этому большого значения и старался всегда использовать связи 1--0..1 между классами вместо 1--1. Сейчас же решил разобраться в отличии этих видов ассоциаций, но, к сожалению, не смог обнаружить чёткого ответа на возникший вопрос. Прошу помочь.

Насколько я понимаю "1" возле одного класса говорит о том, что перед созданием второго класса уже должен быть создан объект первого. "0..1" не устанавливает такого требования, то есть при создании объекта второго класса объект первого класса может не существовать. Таким образом никаких вопросов по сути связи "1--0..1" у меня не возникает.
Вопрос возникает когда я пытаюсь осмыслисть связь "1--1". Насколько я понимаю объект первого класса не может быть создан без существующего объекта второго класса. Аналогичное правило действует и в обратном направлении. Вопросы такие:
Название: Re: Кратность полюсов ассоциации. Различие 1--1 и 1--0..1
Отправлено: Леонид от 22 Мая 2014, 09:39:13
Насколько я понимаю "1" возле одного класса говорит о том, что перед созданием второго класса уже должен быть создан объект первого.

Я бы не рекомендовал искать в модели ER подскази по порядку создания объектов. Она все-таки про другое.

Вопрос возникает когда я пытаюсь осмыслисть связь "1--1". Насколько я понимаю объект первого класса не может быть создан без существующего объекта второго класса.

Правильнее будет "не может существовать".

  • Как тогда можно создать объект одного из классов если они не могут "жить" друг без друга?
...
[/list]

0. Во многих случаях этот вопрос просто не возникает, поскольку логические объекты "1:1" реализуются в одном физическом объекте. Например, в одной строке БД или одной XML-ке. Это когда процесс позволяет.

1. Если логику все-таки требуется рассовать по разной физике, и все данные поступают более-менее одновременно, можно использовать механизм транзакций. Транзакция успешно завершается, когда все необходимые объекты созданы и связаны. В противном случае - откат всех изменений.

2. Если процессы устроены так, что данные для нужных объектов поступают совсем не одновременно, можно использовать механизмы состояний. Создаем один (любой) из объектов и объявляем его "черновиком" вплоть до момента, когда всё остальное будет добавлено и связано как положено.
Название: Re: Кратность полюсов ассоциации. Различие 1--1 и 1--0..1
Отправлено: Сергей Евтухович от 22 Мая 2014, 13:42:51
Спасибо. Вопрос закрыт:)
Название: Re: Кратность полюсов ассоциации. Различие 1--1 и 1--0..1
Отправлено: Григорий Печенкин от 23 Мая 2014, 00:33:23
Как тогда можно создать объект одного из классов если они не могут "жить" друг без друга?

Я, как бывший программист C++, всегда понимал это буквально.

При отношении 1--1 объект второго класса создаётся в конструкторе первого. Или объявлен как его атрибут.

При отношении 1--0..1 объект второго класса может создаваться в runtime, когда в нём возникает необходимость. А может и не создаваться. Обычно первый класс в этом случае содержит указатель на объект второго.