OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 10:24

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Cхематические таблицы
СообщениеДобавлено: Вторник, 31 Декабрь, 2013 00:20 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
Ещё один пример, на этот раз отражающий функцию как конструктор данных. Возьмём этот архивный рисунок:
Вложение:
file_source.PNG
file_source.PNG [ 21.97 КБ | Просмотров: 4917 ]

Пусть возникает потребность в вариантах конструктора: "тело" файла может быть либо списком записей (их много), или только одна запись. Также "конец файла" необязателен. Для этого введём две опции типа Bool: UseList и NeedEOF. Псевдокод (допуская, что язык поддерживает метапрограммирование):
Код:
type Record = (Description, Operator)
type EOF = (Symbol1, Symbol2)

type File = (
      Head,
      List[Record],  #[if UseList]
      Record,        #[if not UseList]
      EOF            #[if NeedEOF]
    )

Р-схема:
Вложение:
file_schm.PNG
file_schm.PNG [ 10.36 КБ | Просмотров: 4917 ]

Подставляя значения опций (аргументов) функции редуцируем нужный вариант, с возможностью "компактификации":
Вложение:
file_single.PNG
file_single.PNG [ 8.31 КБ | Просмотров: 4917 ]

Ещё пару вариантов:
Вложение:
file_var.png
file_var.png [ 12.36 КБ | Просмотров: 4917 ]

Схематическая таблица:
Вложение:
file_s_tbl.png
file_s_tbl.png [ 11.07 КБ | Просмотров: 4917 ]

В общем, как и Р-схемы, схемтаблицы можно нагружать произвольной семантикой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cхематические таблицы
СообщениеДобавлено: Пятница, 25 Апрель, 2014 14:20 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
Пример выше связан с целью -- сформировать принцип построения шаблонных Р-схем, похожий на механизм ряда текстовых шаблонных движков.

Пусть имеется абстрактная схема-шаблон (неважно, что именно она отражает), где через спецвершины выделена секция -- это структура, которая должна быть продублирована (или 0 повторений) для каждого входного целевого элемента (см. ниже). Через "#{...}" указаны значения для подстановки, "#[...]" -- условие для включения элемента (альтернатива -- использование спецвершины для дуги):
Вложение:
r_template.PNG
r_template.PNG [ 200.29 КБ | Просмотров: 4835 ]

Подаём на вход шаблонизатора массив из 2-х элементов, у второго "включена вторая дуга":
Код:
Data = {
    d1 = {aa: some},
    d2 = {pa: p1; aa: a1;   use_b: true;  pb: p2; ab: a2}
}

Итоговая схема (для первого элемента не указана надпись над дугой, т.к. для нее не определен предикат):
Вложение:
r_out.PNG
r_out.PNG [ 129.48 КБ | Просмотров: 4835 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cхематические таблицы
СообщениеДобавлено: Пятница, 25 Апрель, 2014 14:29 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
По поводу схематических таблиц. Размышляя над тем, как улучшить их вид, пришёл к понимаю того, что для Р-схем схематические таблицы не нужны -- они сами по себе обладают всеми необходимыми от этих таблиц свойствами (и даже больше).

Возьмем исходный пример в этом сообщении, первый рисунок, выделю схематическую таблицу отдельно:
Вложение:
schemtbl.PNG
schemtbl.PNG [ 61.13 КБ | Просмотров: 4835 ]

Определим функцию "damage" (её два варианта в зависимости от первого аргумента, также два варианта ф-ции "power"), в отличие от оригинала -- добавлена обработка сигнала об ошибке:
Код:
type Attack = Magic | Melee

power: (Attack) -> int
power = (Magic) -> 5
power = (Melee) -> 4


damage: (Attack, bool, int) -> float


error Invalid(float) = SetVal(float) | SetDef

damage = (Magic, surprise, defense | Invalid) ->
       koef = 3 if surprise else 2
       effectiveness = power(Magic) * koef

       out = effectiveness - defense
       case of
            | out <= 0  =>  out = 0
            | out >= 1  =>  _
            | else          try Invalid(out) handle
                               SetVal(x) =>  out = x
                               SetDef    =>  out = 0.5
       out


damage = (Melee, surprise, defense) ->
       koef = 3 if surprise else 2
       effectiveness = power(Melee) * koef

       out = effectiveness / defense * 2
       out

Р-схема, где отражена общая картина сформированного вычислительного процесса с выделенными фазами:
Вложение:
r_damage.PNG
r_damage.PNG [ 857.67 КБ | Просмотров: 4835 ]

Явно указано, что расчёт "effectiveness" одинаков (можно выносить в отдельную ф-цию) в двух вариантах процесса (в зависимости от значения "attack"), причём в этом расчёте выделены свои две фазы. При желании возможен аналог функциональной схемы, когда через вспомогательные линии выделяются связи между входными аргументами и операциями (т.е. аргументы на вход операции подаются линиями, см. рисунок исходной схемтаблицы).

По сравнению с оригинальными схематическими таблицами Р-схемы имеют фундаментальное преимущество -- структурность (графические структуры). В исходных схемтаблицах крайне проблематично выделять блоки, циклы, движения назад, аварийные или досрочные выходы и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Cхематические таблицы
СообщениеДобавлено: Пятница, 25 Апрель, 2014 14:42 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
В дополнение. Р-схемы в подобном стиле, как приведено выше, могут заменить ряд UML-схем. Например, здесь есть диаграмма последовательностей и временная диаграмма. Сделаем аналоги.

Прежде всего, обращаю внимание на то, что алгоритмические Р-схемы по своей сути есть и диаграммы действий, и диаграммы состояний "в одном флаконе". И отдельно фантазировать над каким-нибудь state diagram нет необходимости (здесь отражена разница "state diagrams versus flowcharts").
В этой выдержке (отсюда) пример Р-схемы, где условные состояния заданы явно (только подписаны не как спецвершины). Выделю отдельно рисунок самой схемы:
Вложение:
r_algstate.PNG
r_algstate.PNG [ 23.63 КБ | Просмотров: 4833 ]

Возможны вложенные (внешние) состояния -- через блоки (например, здесь подробнее об общих состояниях):
Вложение:
r_specst.jpg
r_specst.jpg [ 4.91 КБ | Просмотров: 4833 ]

Итак, составим некий аналог вот такой временной диаграммы из примера выше по ссылке:
Вложение:
uml_time.jpg
uml_time.jpg [ 68.81 КБ | Просмотров: 4833 ]

Р-схема примерно будет такая:
Вложение:
r_time.PNG
r_time.PNG [ 411.51 КБ | Просмотров: 4833 ]

где в первом условном столбце выделены "роли" -- значения предикатов начальных дуг. Далее весь процесс разделяется на фазы, которые задаются в заголовке столбца: в скобках -- состояние, надпись над линией -- время, подпись -- сущность фазы. Описывать фазы можно как угодно, например, указывать только состояния, добавлять информацию о типах данных, контрольные выражения ("assert") и т.п. При желании, для выделения времени можно нарисовать отдельную шкалу над схемой. Или же включить время и/или иные важные показатели в значение условного состояния. Тогда, фактически, возможен универсальный формат заголовка фазы: в скобках -- состояние, надпись -- идентификатор фазы, подпись -- контрольное выражение (тип данных, assert). Любой элемент может отсутствовать.
В 4-м столбце (фаза 3) не указано общее состояние в заголовке, а для каждой дуги через спецвершину определено своё состояние в этой фазе (для каждой роли).

Для подобной диаграммы последовательности операций:
Вложение:
uml_seq.jpg
uml_seq.jpg [ 18.73 КБ | Просмотров: 4833 ]

требуется дополнительный "финт" -- введение отложенной связи между вершинами, задаваемой пунктирной линией:
Вложение:
r_sequent.PNG
r_sequent.PNG [ 259.85 КБ | Просмотров: 4833 ]

Здесь через первый столбец введены "акторы", в первой фазе одновременно выполняют действия акторы 1 и 2 (над дугами нет предикатов-условий), в фазе 2 работает актор 3, где по результатам при каких-то условиях согласно предикату дуги возможен переход на фазу 1 и повтор действий, в фазе 3 -- актор 2, и завершает актор 1, при этом возможна развилка его действий.

Опять же, как можно заметить, преимущество Р-схем в структурности. В UML-диаграммах невозможно выделять ветвления, циклы, блоки и т.п., или приходится довольствоваться кашей, как interaction overview diagram.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB