Автор Тема: MagicDraw класс-ассоциация наследование  (Прочитано 975 раз)

Vadim

  • Full Member
  • ***
  • Сообщений: 169
  • Рейтинг читателей: 30
    • Просмотр профиля
Версия MagicDraw 16.5. Не могу создать связь подкласс-суперкласс, если суперкласс - класс-ассоциация, а подкласс - просто класс (не ассоциация).
Если пытаюсь перенести уже созданную (между классом и классом) связь - выдает сообщение-предупреждение: "Между этими элементами отношения заблокированы или не разрешаются".
Может есть какой-то вариант?
Кстати в обратную сторону сделать класс-ассоциацию подклассом просто класса - работает!
« Последнее редактирование: 16 Ноября 2017, 15:58:39 от Vadim »


Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6121
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: MagicDraw класс-ассоциация наследование
« Ответ #1 : 18 Ноября 2017, 13:36:53 »
Вопрос, конечно, не по адресу. Это нужно вендору задавать. Но, думаю стоит посмотреть на стандарт UML, является ли такое отношение допустимым как синтаксически, так и семантически.

Класс ассоциация - это очень близкий аналог таблицы связи в базах данных, которая используется для устранение неспецифичной для реляционной модели связи многие-ко-многим. Что-то не могу себе представить потребность создание категориального кластера, в которой порождающей сущностью будет по сути производная от отношения двух других сушностей.

Можно рассмотреть пример подобной конструкции?

Vadim

  • Full Member
  • ***
  • Сообщений: 169
  • Рейтинг читателей: 30
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #2 : 18 Ноября 2017, 22:18:10 »
Вопрос, конечно, не по адресу. Это нужно вендору задавать.
Ну зачем уж сразу вендору, здесь могут быть те, кто реально поможет.
Но, думаю стоит посмотреть на стандарт UML, является ли такое отношение допустимым как синтаксически, так и семантически.
В стандарте класс-ассоциация не имеет каких-нибудь ограничений, которые мешают быть участником обобщения с любой из сторон.
Класс ассоциация - это очень близкий аналог таблицы связи в базах данных, которая используется для устранение неспецифичной для реляционной модели связи многие-ко-многим.
Скорее ассоциация многие-ко-многим - это очень близкий аналог таблицы связи в базах данных. А класс-ассоциация почти всегда ассоциация многие-ко-многим.
Что-то не могу себе представить потребность создание категориального кластера, в которой порождающей сущностью будет по сути производная от отношения двух других сушностей.

Можно рассмотреть пример подобной конструкции?
Студенты изучают Предметы (ассоциация многие-ко-многим). Надо бы зафиксировать сколько времени Студент потратил на Предмет (ассоциация переходит в класс-ассоциацию - нужен атрибут). Некоторые Студенты по некоторым Предметам уже сдали экзамен: есть дата и оценка (а вот тут и нужен подкласс "Сдан экзамен")

[прилетело НЛО и...]

  • Sr. Member
  • ****
  • Сообщений: 259
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #3 : 19 Ноября 2017, 16:47:42 »
Версия MagicDraw 16.5. Не могу создать связь подкласс-суперкласс, если суперкласс - класс-ассоциация, а подкласс - просто класс (не ассоциация).
Если пытаюсь перенести уже созданную (между классом и классом) связь - выдает сообщение-предупреждение: "Между этими элементами отношения заблокированы или не разрешаются".
Может есть какой-то вариант?
Кстати в обратную сторону сделать класс-ассоциацию подклассом просто класса - работает!
Если мы верим в принцип Лизковой, то подкласс класса ассоциации -- не просто класс, но и [класс] ассоциация. В каноническом RUPовом примере наследник явно обозначен как класс ассоциация (хотя, там это оправдано по смыслу).

Может быть, создатели MagicDraw хотят, чтобы и Вы явно указывали наследника как класс ассоциацию.
В обратную сторону происходит усложнение предка в наследнике. От обычного класса берутся атрибуты, операции, связи. К ним добавляется всё то, что доопределено в наследнике.
[...и улетело НЛО.]

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6121
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: MagicDraw класс-ассоциация наследование
« Ответ #4 : 19 Ноября 2017, 23:23:35 »
Студенты изучают Предметы (ассоциация многие-ко-многим). Надо бы зафиксировать сколько времени Студент потратил на Предмет (ассоциация переходит в класс-ассоциацию - нужен атрибут). Некоторые Студенты по некоторым Предметам уже сдали экзамен: есть дата и оценка (а вот тут и нужен подкласс "Сдан экзамен")

Только если студенты сдают по предмету один единственный экзамен (или другое аттестационное мероприятие). Не очень жизненная ситуация, многие предметы имеют одновременно зачет и экзамен, а также несколько зачетов и экзаменов, правда не в одном семестре.

Vadim

  • Full Member
  • ***
  • Сообщений: 169
  • Рейтинг читателей: 30
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #5 : 20 Ноября 2017, 09:14:01 »
Если мы верим в принцип Лизковой, то подкласс класса ассоциации -- не просто класс, но и [класс] ассоциация.
Верим, поэтому конечно "подкласс класса ассоциации -- не просто класс, но и [класс] ассоциация", но это необязательно обозначать на диаграмме, если у этой ассоциации нет ничего нового, по сравнению с исходной.
Кстати "Лизковой" - это здорово, сразу видно, что речь идет о женщине, а то некоторые об этом забывают (а то и не знали никогда).
В каноническом RUPовом примере наследник явно обозначен как класс ассоциация (хотя, там это оправдано по смыслу).
А вот здесь есть новое, поэтому изображение ассоциации на диаграмме оправдано (но это выбор не инструмента, а пользователя, который, правда ошибся - 0..4 не может наследовать 0..2)
Может быть, создатели MagicDraw хотят, чтобы и Вы явно указывали наследника как класс ассоциацию.
Так они могут захотеть чтобы я и остальные наследуемые свойства указывал - какая тогда выгода от такого изображения наследования
В обратную сторону происходит усложнение предка в наследнике. От обычного класса берутся атрибуты, операции, связи. К ним добавляется всё то, что доопределено в наследнике.
В наследнике доопределяется только то, что связано с его "классовой" сутью, поэтому на диаграмме отображается только класс (отображая и ассоциацию, что можно при ней указать - или ничего, или повторить то, что на родительской)
« Последнее редактирование: 20 Ноября 2017, 09:27:56 от Vadim »

Vadim

  • Full Member
  • ***
  • Сообщений: 169
  • Рейтинг читателей: 30
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #6 : 20 Ноября 2017, 09:20:27 »
Только если студенты сдают по предмету один единственный экзамен (или другое аттестационное мероприятие). Не очень жизненная ситуация, многие предметы имеют одновременно зачет и экзамен, а также несколько зачетов и экзаменов, правда не в одном семестре.
Так ситуации ещё разнообразнее: есть/нет экзамен, есть/нет зачет, если есть экзамен (зачет), то он уже был/не был. Если каждый подкласс сопровождать изображением ассоциации - очень запутанная диаграмма.

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6121
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: MagicDraw класс-ассоциация наследование
« Ответ #7 : 20 Ноября 2017, 13:27:09 »
Так ситуации ещё разнообразнее: есть/нет экзамен, есть/нет зачет, если есть экзамен (зачет), то он уже был/не был. Если каждый подкласс сопровождать изображением ассоциации - очень запутанная диаграмма.
Ничего не понял, если честно :)

Vadim

  • Full Member
  • ***
  • Сообщений: 169
  • Рейтинг читателей: 30
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #8 : 20 Ноября 2017, 20:25:33 »
Ничего не понял, если честно :)
С точки зрения экзамена изучение разбивается на 2 подкласса: "с экзаменом" и "без экзамена". "С экзаменом" тоже разбивается на 2 подкласса: "Экзамен сдавался" (с атрибутами "дата" и "оценка") и "Экзамен не сдавался". С точки зрения зачета - аналогично (и независимо?!).

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6121
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: MagicDraw класс-ассоциация наследование
« Ответ #9 : 20 Ноября 2017, 20:32:44 »
С точки зрения экзамена изучение разбивается на 2 подкласса: "с экзаменом" и "без экзамена". "С экзаменом" тоже разбивается на 2 подкласса: "Экзамен сдавался" (с атрибутами "дата" и "оценка") и "Экзамен не сдавался". С точки зрения зачета - аналогично (и независимо?!).
Что разбивается на подклассы? Класс -ассоциации? Зачем, класс ассоциации имеет четкое назначение, в случае многозначности связи студент- дисциплина - лучше и правильнее использовать отдельный класс, в тернарой ассоциации или в двух бинарных кмк

[прилетело НЛО и...]

  • Sr. Member
  • ****
  • Сообщений: 259
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #10 : 20 Ноября 2017, 23:14:15 »
Верим, поэтому конечно "подкласс класса ассоциации -- не просто класс, но и [класс] ассоциация", но это необязательно обозначать на диаграмме, если у этой ассоциации нет ничего нового, по сравнению с исходной.
Если читать стандарт UML 2.5 буквально, то в 11.5.4 (стр. 200) описано как должен изображаться класс ассоциации. И там ничего не говорится о том, что наследование делает какие-то элементы нотации класса ассоциации необязательными. Интересно, что класс ассоциации единый элемент модели, но изображается сразу тремя графическими конструкциями: линией ассоциации (или "ромбиком с лучами", если она n-арная) + пунктирчиком + "висюлькой" класса. И обобщение, по идее, можно рисовать, стартуя от любой части, и финишируя в любой части.
Кстати "Лизковой" - это здорово, сразу видно, что речь идет о женщине, а то некоторые об этом забывают (а то и не знали никогда)
Может быть тут правильнее "принцип Лисковы" (полагая, что Liskov -- Лискова).
А вот Рамбо не верит в LSP. И нам не велит.) [Upd: Перепутало Рамбо с Бертраном Мейером. Да и тот, не то, чтобы не верит в LSP, просто не считает его чем-то значительным и связанным именно с Лисков.] Какой-то зловред вроде него включил в стандарт "isSubstitutable"-свойство обобщения (9.2.3.2), указывающее подчиняется ли наследник LSP или нет.

А вот здесь есть новое, поэтому изображение ассоциации на диаграмме оправдано (но это выбор не инструмента, а пользователя, который, правда ошибся - 0..4 не может наследовать 0..2)
Тут, кстати, интересно разобрать. Экземпляром ассоциации является линк (соединение) у которого нет мощности. LSP оперирует экземплярами.

Так они могут захотеть чтобы я и остальные наследуемые свойства указывал - какая тогда выгода от такого изображения наследования
Ну, линия ассоциации, "пунктирчик" и "висюлька" -- это всё один элемент модели, см. выше. Нигде явно не сказано, что можно лениться и частично его рисовать. Такая вот umlьная "троица".

В наследнике доопределяется только то, что связано с его "классовой" сутью, поэтому на диаграмме отображается только класс (отображая и ассоциацию, что можно при ней указать - или ничего, или повторить то, что на родительской)
Здесь снова (как, может помните, на диаграммах состояний) сталкиваемся с желанием сделать каждый визуальный элемент отдельным элементом модели. А стандарт не велит [пока].
« Последнее редактирование: 07 Декабря 2017, 02:02:08 от [прилетело НЛО и...] »
[...и улетело НЛО.]

Vadim

  • Full Member
  • ***
  • Сообщений: 169
  • Рейтинг читателей: 30
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #11 : 22 Ноября 2017, 14:06:57 »
Вот предметная область:
Студенты изучают Предметы (ассоциация многие-ко-многим). Надо бы зафиксировать сколько времени Студент потратил на Предмет (ассоциация переходит в класс-ассоциацию - нужен атрибут). Некоторые Студенты по некоторым Предметам уже сдали экзамен: есть дата и оценка (а вот тут и нужен подкласс "Сдан экзамен")
С точки зрения экзамена изучение разбивается на 2 подкласса: "с экзаменом" и "без экзамена". "С экзаменом" тоже разбивается на 2 подкласса: "Экзамен сдавался" (с атрибутами "дата" и "оценка") и "Экзамен не сдавался". С точки зрения зачета - аналогично (и независимо?!).
Во вложении - что от меня требует MagicDraw 16.5. (и это только по экзаменам, без зачетов - зачеты потребуют ещё 4 классов-ассоциаций). Картинка не смотрится. Другие инструменты (ЕА) дают изобразить подчинение через подчинение классов классу-ассоциации и картинка смотрится.

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6121
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: MagicDraw класс-ассоциация наследование
« Ответ #12 : 22 Ноября 2017, 21:57:58 »
Вот предметная область:
Пожалуй без описания задачи, Ваша диаграмма бесполезна для осмысления. Но на вскидку мне кажется странным, что между Студентом и Предметом возможны сразу 5 видов отношений одновременно, даже и взаимоисключающих.

А картинка в ЕА какая?

Vadim

  • Full Member
  • ***
  • Сообщений: 169
  • Рейтинг читателей: 30
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #13 : 22 Ноября 2017, 22:29:20 »
Но на вскидку мне кажется странным, что между Студентом и Предметом возможны сразу 5 видов отношений одновременно, даже и взаимоисключающих.
Отношение одно, остальные 4 - его вариации.
А картинка в ЕА какая?
Во вложении

[прилетело НЛО и...]

  • Sr. Member
  • ****
  • Сообщений: 259
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: MagicDraw класс-ассоциация наследование
« Ответ #14 : 23 Ноября 2017, 19:53:10 »
Если что, мне розовая диаграмма кажется симпатичнее чем серая. Только бы редефайнов навставлять и наследование как-нибудь позамысловатее -- начинать от линий ассоциации.) На серой рука тянется объявить, что наследование подчиняется "принципу Рамбо" и считать, что наследники наследуют от класса ассоциации только классовую часть.
А решение с одним классом ассоциацией, у которого опциональные поля и составные части, рассматривалось?
« Последнее редактирование: 24 Ноября 2017, 05:46:24 от [прилетело НЛО и...] »
[...и улетело НЛО.]