Структура обобщений более сложна, чем иерархия - как диаграммировать (Прочитано 6298 раз)
В книге Рамбо и Блаха в 4.10. прямо сказано: "Производными могут быть классы, ассоциации и атрибуты" и пример есть (правда не очень хороший)
Спасибо за ссылку на пример.
[...и улетело НЛО.]



Перечёл у Рамбо обсуждение обобщений. Выглядит странно на фоне стандарта 2.5.  Стандарт говорит о том, что классификаторы могут расшаривать экземпляры при {overlapping}, но не уточняет, что для этого надо.   Ну, то есть, как на диаграмме объектов нарисовать этот самый расшаренный экземпляр? Стандартная метамодель UML разобраться нисколько не помогает. По ней -- связывай экземпляр с любыми классификаторами и всё. Никаких тебе ограничений.
По [моему пониманию] Рамбо ограничения {overlapping/disjoint} говорят о том, какие обобщения можно проводить между подклассами и их наследниками. Если мы хотим запретить "склеивать" ветки в поддереве наследования, то пишем {disjoint}, иначе ничего не пишем и получаем по умоланию {overlapping}. Разница между написанным в стандарте и этой трактовкой в том, что экземпляры не могут просто так шариться. Сначала придётся завести класс-наследник у двух подклассов, а затем только экземпляры этого класса (его наследников и других, таких же как он) могут быть расшарены. Пока такого класса нет, нет и реальной возможности использовать расшаренный экземпляр, а декларируемая стандартном возможность  остаётся только теоретической.
Неясно как в свете UML 2.5 выглядят примеры Рамбо в параграфе 4.6.3. Он словно ломится в открытую дверь усложняя модель.
[...и улетело НЛО.]



Ну, то есть, как на диаграмме объектов нарисовать этот самый расшаренный экземпляр?
Поискал, не нашёл. Единственный класс, к которому относится объект указывается после двоеточия после имени объекта. Можно предложить если классов несколько, то можно их там же перечислить через запятую.
По ней -- связывай экземпляр с любыми классификаторами и всё. Никаких тебе ограничений.
Ограничения есть, конфигурация классов должна быть допустимой, но это на совести автора диаграммы объектов - как определять допустимые конфигурации по модели классов даже у Оливе нет.
Разница между написанным в стандарте и этой трактовкой в том, что экземпляры не могут просто так шариться. Сначала придётся завести класс-наследник у двух подклассов, а затем только экземпляры этого класса (его наследников и других, таких же как он) могут быть расшарены. Пока такого класса нет, нет и реальной возможности использовать расшаренный экземпляр, а декларируемая стандартном возможность  остаётся только теоретической.
Путь с обязательным заведением класса-наследника неприемлем. Кстати у Рамбо-Блаха рис.4.15. неточен - нет гарантии, что все Employee, которые одновременно FullTimeEmployee и IndividualContributor попадут в FullTimeIndividualContributor.
Неясно как в свете UML 2.5 выглядят примеры Рамбо в параграфе 4.6.3. Он словно ломится в открытую дверь усложняя модель.
В параграфе 4.6.3. "Обходные маневры" делается попытка обойтись без множественного наследования и множественной классификации. По мне это даже вредно - модель должна соответствовать предметной области, а не используемому инструменту (язык программирования).



Ограничения есть, конфигурация классов должна быть допустимой, но это на совести автора диаграммы объектов - как определять допустимые конфигурации по модели классов даже у Оливе нет.
Эти ограничения настолько слабы (после overlapping'а по умолчанию), что их как бы и нет. Единственное, что явно сказано про недопустимые конфигурации в стандарте -- disjoint'ы. Нет их, нет и ограничений.
Путь с обязательным заведением класса-наследника неприемлем.
Это путь от кода. Но ему есть хоть какое-то объяснение. Что например мешает двум никак не связанным классам расшарить экземпляр? По [молчащему на этот счёт] стандарту -- ничто. По этому пути -- хотите шарить -- заводите общий подкласс, т. е. сначала свяжите классы хотя бы опосредованно.
« Последнее редактирование: 22 Августа 2016, 12:05:19 от [прилетело НЛО и...] »
[...и улетело НЛО.]



Ограничения есть
P. S. В метамодели UML ассоциация между классификатором и экземпляром ничем не ограничена. Вообще. Нет даже сакраментального "Cannot be expressed in OCL".
[...и улетело НЛО.]



Эти ограничения настолько слабы (после overlapping'а по умолчанию), что их как бы и нет. Единственное, что явно сказано про недопустимые конфигурации в стандарте -- disjoint'ы. Нет их, нет и ограничений.
Кроме overlapping/disjoint есть ещё complete/uncomplete, а также абстрактность класса. Абстрактность требует(?), чтобы все/хоть одна(?) SetGeneralization этого класса была complete.
P. S. В метамодели UML ассоциация между классификатором и экземпляром ничем не ограничена. Вообще. Нет даже сакраментального "Cannot be expressed in OCL".
В стандарте "9.8.3 Semantics" есть абзац "It is important to keep in mind that InstanceSpecification is a model element and should not be confused with the
instance that it is modeling. As an InstanceSpecification may only partially determine the properties of an instance,
there may actually be multiple instances in the modeled system that satisfy the requirements of the
InstanceSpecification. On the other hand, an InstanceSpecification may model a situation which is not actually
supposed to occur in the modeled system, in which case no instance meeting the requirements of the
InstanceSpecification may ever actually occur in the system."
Я понял это так: идёт речь не об экземпляре, а об элементе диаграммы, который, строго говоря, может и не быть полноценным экземпляром.
Ну, то есть, как на диаграмме объектов нарисовать этот самый расшаренный экземпляр?
9.8.4. в первом абзаце говорит о нескольких классификаторах через запятую.
« Последнее редактирование: 22 Августа 2016, 12:51:52 от Vadim »



Я лишь пытаюсь уточнить свою мысль. Переходить от "ограничений на связанные с экземпляром классификаторы" на другие ограничения в мои планы пока не входит.
Ещё в стандарте есть параграф 9.9.9.6. Именно к нему относится сказанное мной об отсутствии ограничений в стандартной метамодели UML.
Подход "запишем через запятую и всё" не плох, что и говорить.) 
[...и улетело НЛО.]