Подтвердить что ты не робот

Какая разница в ECore между сдерживанием и ссылкой?

При создании ссылок между объектами ECore есть возможность отметить ссылку как "сдерживание". Может ли кто-нибудь объяснить мне легкими словами, какая разница между простой ссылкой и сдерживанием? Определения и объяснения, которые я нашел до сих пор, не помогли мне.

4b9b3361

Ответ 1

Ссылка: Ссылка - это простое отношение "A знает B". Отдельные ссылки не влияют друг на друга. A может знать, что B и B могут знать C. Следовательно, если у вас есть A, вы можете перейти на C более B. Если вы удалите ссылку, A, B и C все еще будут существовать, они просто не знают друг друга больше.

Сдерживание: Сдерживание - это отношение типа "A имеет B". Обычно используется для списков, например. "A имеет несколько B". ECore/EMF может затем выполнять атомарные команды для таких коллекций, например, перемещать все объекты из одной оболочки в другую. Он также может применять ограничения, такие как минимальное количество содержащихся объектов или максимальное количество содержащихся объектов, или обеспечение того, чтобы содержащийся объект не содержался в какой-либо другой оболочке.

Пример:

Предположим, что у вас есть объект с именем ShoppingCart с ссылкой под названием Customer и защитой с именем OrderedProducts. OrderedProducts имеет ссылку на Product.

Что говорит вам эта модель?

  • Вы можете назначить клиента в ShoppingCart. Если вы удалите клиента из ShoppingCart, сам объект Customer по-прежнему будет существовать (например, в базе данных).
  • Для объектов OrderedProduct требуется наличие ShoppingCart. Если вы удалите его из ShoppingCart, он перестанет существовать.
  • Каждый OrderedProduct имеет ссылку на существующий Продукт в базе данных. Если вы удалите один из OrderedProducts из ShoppingCart, Продукт в базе данных все равно останется там - только порядок этого продукта для этого конкретного клиента ушел.

Ответ 2

Ссылка: может быть как ассоциация в UML

Containment: это отношение состава от UML

Также это можно увидеть на диаграмме EMF, если вы установите для параметра containment значение true, тогда линия будет иметь заполненную сторону, отображающую сдерживание/состав. Это то, что я наблюдал.