Илья Ермаков писал(а):
"Избавиться от пересечений" лично мне интересно в первую очередь вот с какой точки зрения: какие конфигурации графов управления это даёт и какими свойствами они обладают с точки зрения формализма преобразователей предикатов Дейкстры, по сравнению с классической "линеаризованной" топологией текстового структурного пр-я. Возможно, что избавление от пересечений будет само строго следовать из содержательных (а не эргономических) ограничений на топологию.
Подозреваю, что копать надо чуть в другом месте... Во-первых, вопрос о топологии текста не так очевиден... ИМХО, текст (код)
программы, в отличие от обычной блок-схемы построен путём проекции
упорядоченного графа в линию (блок-схема - это та же проекция, но на плоскость). В чём разница полученных проекций?
- блок-схема получена непрерывным (гомеоморфным) преобразованием, и поэтому однозначно соответствует исходному графу. Почему же тогда всем она не нравится? Как раз потому, что натягивание голбуса на плоскость ведёт к сильному "расползанию" (то есть чисто эргономический аспект);
- а вот в линию глобус
без разрывов преобразовать невозможно, поэтому текст принципиально рваный... При этом строгий формализм преобразования позволяет делать разрывы
неявными (!), в отличие от явных адресных ссылок гипертекста;
- раз пошла такая пьянка, то охарактеризуем ещё для кучи и гипертекст как
неупорядоченный граф. Платой за гибкость неупорядоченных связей являются упомянутые выше явные адресные ссылки.
Всё! Других топологических различий между перечисленными представлениями просто нет!
Резюме: пересечения не имеют никакого принципиального значения, они возникают исключительно тогда, когда исходный граф имеет определённую структуру. Структуру эту можно топологически преобразовать перед натягиванием на плоскость - так мы можем избавиться от goto и, соответственно, от пересечений. Но никто никогда не гарантировал, что от этого граф упростится. Напротив, он усложняется, и зачастую существенно.
Для чего нужны такие преобразования? А для удобства анализа (в т.ч. формально-аналитического). Эргономически это почти всегда не оправдано.
Сергей Прохоренко писал(а):
Мне кажется, лучше использовать такие языковые конструкции (замкнутые, инкапсулирующие, иерархически организованные, использующие функциональный стиль программирования), которые принципиально не могут породить никаких пересечений. Пересечения - это следствие избыточной свободы системы программирования, которая (избыточная свобода) провоцируюет ошибки. Мало избавиться от оператора GOTO. Надо для наиболее часто используемых моделей и алгоритмов (конечный автомат и т.п.) иметь адекватные и безопасные языковые конструкции, шаблоны, библиотечные функции и т.п. Таким образом, каждое пересечение - это сигнал о ненадежности алгоритма.
В перечисленных конструкциях ключевые понятия - свёртка и инкапсуляция. Это на сегодня единственный известный мне метод работы со сложностью (не общего её уменьшения, нет, а просто "равномерного размазывания сложности", по выражению Седова). То есть опять же исключительно эргономический аспект!
Однако, от пересечений избавиться таким путём не получится. Только преобразованием графа, следствием чего будет его усложнение (например, дублирование кода и/или введение временных вспомогательных переменных). Другое дело, что человек, работающий "в функциональном стиле", может не осознавать этого момента. Но ведь в ряде случаев так можно сильно влететь (по эффективности, по памяти и т.п.).
TMX писал(а):
С модели поведения системы и надо начинать создавать интерфейсы пользователя.
А что мы имеем для этого? Сценарии - частные случаи. Машины состояний - отлично описывают, но убогое представление. Блок-диаграммы - показывают реализацию, но только для частных случаев.
Подозреваю, что Вы правы... Всё равно мышление человека не удаётся организовать иначе, как через
точки зрения. То есть через
частные проекции модели в различные системы координат... Наша задача - выбрать наиболее правильные системы координат (в UML это было сделано от потолка - то есть как констатация существующих методов и их объединение).
Меня очень интересует философский вопрос - возможен ли другой путь?