421
Для всех / Re: Концептуальная модель предметной области
« : 18 Июня 2016, 23:18:25 »Сделал вот такую диаграмму.Если Вы воспользуйтесь поиском по форуму, библиографией и т. д., то сможете обнаружить ошибки в своём решении.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Сделал вот такую диаграмму.Если Вы воспользуйтесь поиском по форуму, библиографией и т. д., то сможете обнаружить ошибки в своём решении.
Не совсем понял мысль. В модели преподавателя нет журнала покупок, он как раз в модели из интернета.Я не обратил внимания на названия изображений, приложенных к Вашему сообщению. Из-за чего ошибся, так как предположил, что ER-диаграмму Вам дал преподаватель в качестве примера, а в Сети Вы нашли диаграмму классов. Раз преподаватель Вам выдал диаграмму классов, то воспользуйтесь соответствующей ссылкой, примером запроса, библиографией. А про ER-диаграмму забудьте.
Добрый день.Найденный Вами пример в интернете (UML-диаграмма) неудачен, т. к. относится к иной предметной области. Модель от преподавателя (ER-диаграмма) является хорошей заготовкой ответа (из которой, быть может, следует убрать лишнее, заменить "журнал(?) покупок" на "часть покупки", исправить мощности: покупка -1-включает-n- часть покупки, часть покупки -n-связана с-1- товар) Моделирование интернет-магазинов часто используемое учебное упражнение. Для него есть множество ответов с сети. Например, такая диаграмма классов: http://www.uml-diagrams.org/examples/class-example-online-shopping-domain.png может быть найдена в гугль-картинках запросом вроде class diagram uml shop. Если исправить запрос на entity relationship diagram shop, также найдётся масса вариантов. Например, такой: http://creately.com/jupiter/diagram/image/gyhd76iq2
Прошу помочь сделать концептуальную модель предметной области или по-крайней мере объяснить как она делается.
Убрать из 14.5.8.6 первые 2 ограничения.Я думал о том, что затруднительно описать ограничение, которое бы сказало, что диаграмма "с душком" (например, из-за недетерминированного составного перехода, у которого несколько звеньев заканчиваются в разных исторических псевдосостояниях одного региона). Впрочем, такие сложности не связаны именно с множественностью исторических псевдосостояний, должен признать.
Просто каждый вход в композитное состояние может иметь своё отношение к обработке истории (строго говоря каждый вход внутрь и одно общее на все входы на границу композитного состояния): будет ли учитываться предыдущее посещение композитного состояния и, если да, то что делать, если предыдущего посещения не было.Попробую так. Конкретный синтаксис с несколькими предысториями допускает толкование, что для каждого способа входить в состояние по предыстории (в Вашем примере от 16.06 таких способов у State1 два -- левый и правый) есть отдельная память, ведущая независимую историю. Т. е. при входе слева срабатывает левая предыстория, справа -- правая. Если бы "вертолётная площадка" была одна, повода для такого толкования не возникало бы.
Когда-то такой знак "вертолётной площадки" и был тэгом на композитном состоянии (без входящих и исходящих переходов), что означало, что любой повторный вход в композитное состояние означает продолжение с места прерывания. Потом стало ясно, что это слишком узко, что иногда надо продолжить, а иногда и начать по новой.Замечу, что у Харела (автора предысторий) во всех его примерах в "площадку" обязательно входит звено. То есть, у него это не совсем тэг.
В "математических" автоматах финальное состояние играет другую роль: если обработка последовательности сигналов завершилась в финальном состоянии, то последовательность "правильная"."Математическая" трактовка почти та же, что у протокольных диаграмм состояний. А протокольные финальные состояния нечем не отличаются от обычных.
Сначала о глобальном - мне нравится, как проходит обсуждение, поэтому появились вопросы:Мне тоже понравился наш обмен мнениями. Так перемыть косточки UML у меня даже с коллегами на работе не получалось.
- есть ли в интернете другие места (лучше русскоязычные), где обсуждения похожих тем (нюансы языков моделирования) происходят так же конструктивно?
- почему молчит остальная аудитория форума, варианты:
- джуниоры пытаются разобраться в том, что все уже давно знают - пусть разбираются сами, лучше усвоят;
- очень важная, но сложная тема - сказать по ходу нечего, дождёмся результатов;
- то, что обсуждают, никому никогда не понадобится, но влезать - себе дороже?
Наличие и трактовка перехода из исторического псевдосостояния как раз направлены на избавление от такой переменной-признака.Справедливо. С переменными диаграмма становится более императивной, что не всегда желательно.
неважно сколько исторических псевдосостояний, при выполнении можем одновременно добраться только до одного.Это так, но, вероятно, придётся прописать такое положение в языке. Сделать это формально (на OCL) затруднительно. Сама нотация может обескураживать: несколько псевдосостояний предыстории изображают одну предысторию и несколько меток для состояний, являющихся предысторией по умолчанию. Мне кажется, что такая пометка состояния могла бы делаться не звеном из "вертолётной площадки", а тегом на самом состоянии. Хотя такой вариант, скорее всего менее нагляден, чем стандартный.
Отсутствие в финальном состоянии do-деятельностей и внутренних переходов обусловлено тем, что хочется подчеркнуть, что ничего существенного (с точки зрения региона/состояния, к которому относится финальное состояние) уже произойти не может - только выход, причём это будет и выход из региона/состояния. Но оказалось, что в случае композитного ортогонального (в отличие от неортогонального) состояния появляется новая ситуация - часть регионов достигла финального состояния, а часть - нет.Мне интересно, откуда появилась в UML такая трактовка? Уж не от неудавшегося сращивания диаграмм состояний с диаграммами деятельности в 1-й версии UML? Ведь в "математических" автоматах финальное состояние -- обычное состояние с дополнительным свойством, т. е. у математиков оно в каком-то смысле больше, чем обычное состояние, а не наоборот.
На картинке - верхний автомат: как добиться того же эффекта с одним историческим (то, что триггер "a" на горизонтальных стрелках, а триггер "b" на вертикальных - случайное совпадение)?От предыстории по умолчанию можно избавиться, заведя переменную-признак "были ли мы в State1", добавить действия по её инициализации и изменению, раздвоить переходы в State1 через choice/junction со сторожем, который при истинности признака ведёт нас в единое псевдосостояние истории, при ложности -- в нужное подсостояние внутри State1. Понятное дело, что с помощью введения переменной можно вообще избавиться от исторических псевдосостояний.
На картинке - нижний автомат: как добиться того же эффекта без перехода из финального состояния (последовательность триггеров "аа" приводит к State8, "ab" и "ba" - к State10)?Можно убрать явный переход из финального состояния, финальное состояние в верхнем регионе сделать обычным, завести две переменные-признака x1 -- "завершён ли верхний регион?" и x2 -- "завершён ли нижний регион?", добавить их инициализацию и действия по изменению, групповой переход по завершению из State6 заменить на переход по триггеру -- событию изменения when(x1 and x2).
от каждого ВУ должна идти связь(пока отбросим тип связи), к какому то другому ВУ или актеру.Очевидно, что это другое требование. Действительно, не должно быть ни одного "яйца", к которому не идёт ни одной связи (ни связи от действующего лица, ни связи от другого ВИ). Вам следует определиться, что именно требуется: связать все ВИ друг с другом или исключить "яйца", к которым не идут никакие связи.
В смысле?Наличие/отсутствие связи между двумя вариантами использования зависит от их описания. Вероятно, в рамках Вашего задания ВИ рассматриваются просто как "яйца", разложенные по полю диаграммы. Т. е. Вы обязаны освоить систему обозначений, не вникая глубоко в смыслы этих обозначений.
Я моделирую процесс амбулаторного осмотра.Видимо, это не так. Сам по себе этот процесс может быть представлен одним вариантом использования.
Преподаватель говорит что все ВИ должны быть связанны, поэтому делал так. Предыдущую модель он забраковал т.к. там были висящие ВИ, то есть от АКТЕР ->ВИ и всё.Такое сложно комментировать.
То есть мне надо сделать связь от симптомов к заполнению листа приема? А оформление справок(исправлю на глаг.фразу) справок тогда с чем нужно связать?Имелось с виду, что у связи include на обоих концах должны быть варианты использования. В двух указанных выше случаях на одном из концов у Вас находится действующее лицо ("актёр"). Следует хотя бы поменять тип связи.
1. подскажите что за книгаД. В. Кознов "Основы визуального моделирования"
2. когда диаграммы используются для непосредственного общения или для размышления - вполне нормально отступить от стандарта, но если речь идет о документировании - отступать от какого-то единого понимания стандарта нельзяТочно замечено. Отступление означает изменение возможной области применения и аудитории.
3. если нестандартно, творчески означает: в рамках стандарта (или единого понимания стандарта), но не примитивно, то это не может не приветствоватьсяСогласен. Хотя сама книга даёт пример нестандартной трактовки отдельных элементов UML-нотации. Что тоже можно рассматривать как своего рода творчество. Впрочем, офтопик.
Вы и Харел считаете, что историческое псевдосостояние должно иметь входы. Я согласен, да и стандарт не против.Но стандарт ограничивает количество исходящих переходов из исторического псевдосостояния, ничего не говоря об обязательном наличии хоть одного входящего.
Но тогда появляется вопрос: может ли композитное неортогональное состояние (или регион ортогонального состояния) иметь одновременно псевдосостояния глубокой и неглубокой истории? Стандарт и я считаем, что да (14.5.8.6 первые 2 ограничения).Да, может. Интересно было бы рассмотреть более-менее реалистичный пример, когда это пригождается.
Более того, я (но не стандарт) считаю, что псевдосостояний глубокой (неглубокой) истории может быть несколько - лишь бы их исходящие переходы отличались хоть чем-нибудь (целевым состоянием или деятельностью на переходе).Я полагаю, то "звено со знаком вертолётной площадки" это условное обозначение вроде "звена с кружком". Поэтому в этом случае я за стандарт в плане ограничений (но не в плане объяснений-описаний).
Если речь идет о композитном ортогональном состоянии (с 2 регионами), то переход из финального состояния одного из регионов за пределы этого композитного ортогонального состояния легко интерпретируется: срабатывание триггера имеет результат, если в первом регионе достигнуто финальное состояние, а во втором регионе состояние может быть любым. Причем заменить финальное состояние первого региона обычным состоянием нельзя: есть переход без триггера от композитного состояния - значит в каждом регионе должно быть финальное состояние.Я имел в виду лишь то, что из финального состояния нельзя явно рисовать переходы.
Дам разъяснение: Харел даёт хорошее, но неформальное описание, стандарт пытается дать формальное, но хорошим его не назовёшь. Я пробую (пока для себя) построить модель (в виде диаграммы классов) абстрактного синтаксиса автомата и если что-то плохо укладывается (вызывает усложнение диаграммы), пытаюсь изменить абстрактный синтаксис автомата (не потеряв ничего существенного).Такую инициативу можно только поддержать.
(не нашёл что такое блокирующийся)Пожалуй, с блокировкой я погорячился. Этот термин ближе к диаграммам деятельности. Но можно рассматривать что-то вроде "протокольных автоматов с действиями". Т. е. диаграмма состояний составляется в расчёте не на все возможные последовательности событий, а на "правильные". Если события происходят неправильно, автомат ломается-блокируется (в псевдосостоянии, из которого не может попасть в полноценное состояние).
Если у junction и choice псевдосостояний такое ограничение есть, то проще сделать единственный переход от начального/исторического к junction/choice, а от junction/choice уже несколько переходов.В своём отступлении про начальное состояние я пытался объяснить (себе) появление и развитие этого специального обозначения. "Странные" ограничения в стандарте связаны, на мой взгляд, с тем, что специальное обозначение ("звено с кружком") со временем стало трактоваться как полноценный переход. Для меня предпочтительнее вернуться назад, к корням, а значит, запретить "звену с кружком" иметь сторожа, входить в составные переходы и т. п.. Тогда причина запретов становится явной. Иначе, следует отмести запреты, и, я думаю, разрешить ждать в начальном состоянии наступления триггера. Т. е. оно должно иметь те же права, что и финальное состояние, с той лишь поправкой, что из финального нельзя явно выйти, а в начальное нельзя явно войти. Позиция авторов текущей версии стандарта странная, как мне кажется, -- ни туда, ни сюда.
немного странно - если есть деятельность, то она может закончиться, а если нет - то и никакого события не возникает. Может правильней иметь событие со смыслом, что уже ничего больше делать не надо (или что всё уже сделано), тогда если do-деятельность пуста, считать что это событие наступает, когда состояние становится активным. Такое поведение будет похоже на поведение с финальным состоянием композитного состояния - если у композитного состояния есть исходящий переход без триггера и с "подходящим" сторожем, то финальное состояние как бы "проскакивается".Да, такой подход может иметь место. Но к чему он приводит? Насколько он прагматичен? Состояние (с пустой деятельностью и переходом по завершению) превращается не в способ поведения объекта, а в промежуточную проскакиваемую вершину. Такой конструкции легко найти замену -- тот же junction, например. Оправдать использование такой избыточной, по-моему, конструкции затруднительно.
все исходящие переходы без триггера (как и переходы с совпадающим триггером) должны иметь взаимоисключающие сторожаДля детерминированного автомата такое требование разумно.