Монография2009
.pdf
31
Рисунок 10. «Визуальные» программы на языке Scratch
Рассматривая «визуальные» программы на Scratch, можно отметить, что фактически они представляют собой иную форму отображения традиционных текстов программ – цветные «кирпичики» есть аналог синтаксических диаграмм Несси-Шнейдермана, подчеркивающих построение текста программы в соответствии с правилами структурного программирования.
Таким образом, несмотря на широкое применение визуальной метафоры и манипуляцию графическими образами управляющих конструкций, назвать Scratch действительно визуальным языком можно только с определенной натяжкой.
5.2.Интерпретатор блок-схем
ВТомском государственном университете А.С. Соловьевым [29] была разработана учебная система, основывающаяся на классическом графическом представлении программы в виде блок-схемы и языках программирования Си и Паскаль. Интерпретатор имеет две версии: для DOS
идля Windows 95/98/ME/2000/XP.
Обучаемому дается возможность самому составить блок-схему алгоритма на экране, затем в динамике посмотреть, как он (алгоритм) будет выполняться, проследить изменения значений переменных, и параллельно наблюдать автоматически генерируемый исходный текст программы на языке программирования.
Важнейшими компонентами системы являются: 1. Графический редактор
32
2.Текстовый редактор
3.Интерпретатор
Каждому из типовых графических блоков, таких, как «НАЧАЛО», «КОНЕЦ», «АВТОМАТИЧЕСКОЕ ДЕЙСТВИЕ», «ВЕТВЛЕНИЕ ПО УСЛОВИЮ», «ВВОД», «ВЫВОД», «ПОДПРОГРАММА», «БЕЗУСЛОВНЫЙ ПЕРЕХОД НА МЕТКУ», и пр., сопоставляется разрешенный для ввода в него формат текста.
Интерфейс пользователя в DOS-версии интерпретатора блок-схем приводится на рисунке 11, а Windows-версии – на рисунке 12.
Рисунок 11. DOS-версия учебного интерпретатора блок-схем
Графический редактор системы позволяет программисту “рисовать” новые и редактировать старые блок-схемы. Пользователю предлагается в режиме меню следующие возможности для редактирования блок-схем:
•Удаление блоков;
•Установка блоков;
•Разметка планшета координатной сеткой;
•Скроллинг планшета;
•Выбор типа блоков (либо стрелки, либо сами блоки);
•Автоматическое соединение двух выделенных блоков на
планшете;
•Изменение параметров планшета;
•Изменение палитры планшета (цветов);
•Возможности редактирования с помощью буфера обмена.
33
Все эти возможности можно выбирать либо посредством манипулятора мышь, либо с помощью клавиатуры. Текстовый редактор позволяет набирать и редактировать текст внутри типовых графических блоков.
Рисунок 12. Среда Windows-версии интерпретатора блок-схем
Интерпретатор позволяет «на лету» производить перевод графической программы (дополненной необходимым текстовым описанием), в машинный код, и выполнять его. При этом на экране «подсвечивается» очередной исполняемый блок (на него устанавливается «фокус»). Минимальной единицей интерпретации в языке блок-схем является блок. Работой всего интерпретатора управляет функция, которая перемещает фокус интерпретации по блок-схеме, распознает тип очередного блока, и запускает соответствующую его типу функцию обработки (интерпретации). После того, как функция интерпретации блока отработает, происходит возврат управления в главную функцию интерпретатора.
Несмотря на учебный характер, стоит отметить достаточно высокую степень проработанности системы, разработанной А.С. Соловьевым, возможность ориентации в качестве базового как на язык программирования Си, так и на Паскаль, а также на то, что возможность получения и исполнения машинных кодов делает интерпретатор блок-схем «истинной» системой графического программирования в нашем толковании.
5.3. Sivil
34
Визуальный язык Sivil [17] разработан в Canisius колледже, штат НьюЙорк, США. Как пишут его авторы, «Sivil использует иконки и изображения для того, чтобы символизировать все структуры, имеющиеся в программах. Программисты создают фрагменты программы, связывая изображения между собой, что позволяет создавать программы, которые могут быть скомпилированы, оттестированы, отлажены и просмотрены в графической среде разработки». Из этого следует, что Sivil является «истинным» языком визуального программирования в нашем понимании.
Рисунок 12. Графическое изображение программы в языке Sivil
Блоки, из которых строится программа на языке Sivil, не являются прямыми аналогами графических примитивов традиционных блок-схем. Основная форма используемых примитивов – прямоугольник, используемый и для графического представления условных конструкций, и для специфических для Sivil «соединителей».
Тем не менее, для представления некоторых программных сущностей, таких, как вывод на печать, или входные и выходные параметры функции, в Sivil
35
используются весьма выразительные изображения (рисунок 14, вызываемая функция square root представлена в отдельном окне).
Рисунок 14. Вызов подпрограммы в Sivil
В целом, визуальный язык Sivil можно отнести к классу систем, визуализирующих поток управления (control flow), а использованную в нем графическую нотацию вряд ли можно признать очень удачной. Однако, он носит ярко выраженную учебную направленность, и, как отмечают его создатели, в качестве инструмента, помогающего делающим первые шаги в информационных технологиях студентам понять такие концепции, как выбор, итерации и использование подпрограмм, заслуживает права на существование.
5.4. VIPR
Остановимся еще на одном графическом языке, разработанном с целью обучения программированию, в Массачусетском технологическом институте
(МИТ) [33].
Он использует довольно оригинальную, можно даже сказать, странную базовую графическую нотацию в виде вложенных друг в друга окружностей. Как утверждается, она была выбрана для того, чтобы решить проблему
36
масштабирования графических программ. Выполнение графической программы подразумевается начинающимся с самой внутренней из окружностей (сами операторы записываются с помощью прилегающего к окружности текста). Переход к оператору, соответствующему следующей фигуре, окружающей данную, происходит только в том случае, если выполняется сопоставленное ему «охраняющее» условие. Выполняются операторы, приписанные следующей окружности, и так далее. В качестве дополнительного средства для отражения передач управления используются стрелки.
Все это может порождать несколько непривычные для глаз изображения программ:
Рисунок 15. Графические программы на языке VIPR
В частности, на рисунке 15 сначала представлен пример, изображающий условное предложение if B then S1 else S2; S3. Однако очевидно, что реальные программы так изображать неудобно, что иллюстрирует вторая (нижняя) часть рисунка.
37
6. Языки, ориентированные на состояния
Достаточно большим классом графическим языков, включающим разнообразные виды диаграмм, является класс языков, описывающих процесс функционирования некоторой системы как смену состояний. Теоретической основой подобных языков служит модель конечного автомата. В языках, ориентированных на состояния, типично изображение теми или иными графическими примитивами состояний, а стрелками – переходов между состояниями.
6.1. Язык SDL
Полное название языка SDL - Specification & Description Language, он разработан Международным союзом электросвязи (ITU-T) и входит в рекомендации ITU-T серии Z.100. Основной причиной появления SDL стало то, что для телекоммуникационных систем и компьютерных сетей весьма актуальна задача формализованного описания их поведения (включая сетевые протоколы), решаемая при спецификации и согласовании работы телекоммуникационной аппаратуры.
Диаграммы, являющиеся основой этого языка, в отличие от блок-схем алгоритмов, содержат состояния в явном виде. Поэтому язык SDL является автоматным. В то же время SDL-диаграммы обладают рядом недостатков, к которым можно отнести, например, громоздкость.
Основными компонентами языка SDL являются следующие:
1.Статические компоненты: система, блок, процесс, процедура.
2.Графические средства описания способов взаимодействия (возможно, с параметрами).
3.Поведение: процессы (у каждого процесса имеется набор состояний, находясь в которых процессы реагируют на те или иные события; процессы описываются блок-схемами).
4.Средства описания данных (существуют предопределенные типы данных, можно определять структурированные типы данных, у каждого типа определен набор операций, задание аксиом позволяет проверять правильность их применения).
На рисунке 16 представлена иерархия компонент языка SDL.
38
|
|
|
|
|
|
System S1 |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
Block B1 |
|
Block B2 |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
Process P1 |
|
|
Process P2 |
|
|
|
Process P3 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Procedure Pr1
Рисунок 16. Иерархия компонент языка SDL
Графическое описание системы на языке SDL представляет собой набор диаграмм.
На рисунке 17 представлен полный перечень графических примитивов языка
SDL.
Рисунок 17. Полный перечень графических примитивов языке SDL
39
На высшем уровне иерархии система может быть описана, как показано на рисунке 18:
|
|
|
|
Описание типа |
С1, С2, С3 – каналы, по |
|
|
|
|
||
|
System S1 |
|
которым передаются |
||
|
|
сигналы |
|||
|
|
|
|
|
|
|
C1 |
|
|
|
соответственно из |
|
|
Block B1 |
|
|
окружения к блоку, от |
|
|
|
|
|
|
|
|
C2 |
|
блока к блоку, от блока |
|
|
C3 |
|
|
|
к окружению. |
|
Block B2 |
|
|
||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сигнал из окружения |
|
||||
Рисунок 18. Описание системы на языке SDL на высшем уровне иерархии На следующем уровне иерархии (продолжение пунктирных стрелок) описываются блоки (рисунок 19).
Block B1 |
|
|
R1, R2, R3, R4 – |
|
|
межпроцессные каналы, |
|
|
|
|
|
R1 |
|
|
по которым передаются |
(1,1) |
|
|
сигналы. |
Process P1 |
|
|
|
R2 |
R3 |
|
Первая цифра в скобках |
|
– число статических |
||
R4 |
|
|
|
(0,5) |
|
|
|
|
|
процессов (т.е. таких, |
|
Process P2 |
|
Создание одним |
|
|
|
которые создаются при |
|
|
|
процессом другого |
|
|
|
инициализации системы автоматически), вторая – максимальное количество таких процессов, которые могут существовать одновременно
Рисунок 19. Описание процессов на языке SDL
Наиболее интересным в SDL представляется описание поведения систем (процессов).
40
Точка входа в процедуру (может быть только одна)
Pr1 |
Pr1 |
Точка выхода из процедуры
State 1
Process P1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вызов процедуры |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
Стартовый символ |
Процесс находится |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
(может быть |
в состоянии State1, |
|
|
|
|
|
|
|
только один) |
ожидает приема |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
сигнала (т.е. |
|
|
|
|
|
|
|
|
процесс совершает |
|
|
|
|
|
|
|
|
переход по |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
состоянию) |
|
|
|
|
|
|
Рисунок 20. Описание процессов и процедур на языке SDL
При описании процессов взаимодействия в сетевых протоколах и телекоммуникациях ключевым является состояние ожидания некоторого внешнего сигнала или иного воздействия, для отражения чего в SDL имеются специальные графические примитивы (смотри рисунок 21). Т.е., в языке SDL обычно подразумевается, что процесс, находящийся в некотором состоянии, ожидает, что произойдет некое событие. В связи с этим после символа состояния могут идти только save- и input-символы.
State1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
input (s) |
|
input (s2(a,b)) |
sig4 |
||||
|
|
|
Ожидание сигнала |
Ожидание сигнала |
|||
|
|
|
|||||
|
|
|
|||||
State2 |
|
с именем s2 с |
|||||
|
с именем s без |
параметрами, |
|||||
|
|
|
|||||
|
|
|
параметров |
значение которых |
|||
|
|
|
|||||
|
|
|
В этом состоянии |
будет записано в |
|||
|
|
|
|||||
input (sig4) |
|
переменные a и b |
|||||
|
|
|
уже можно |
|
|
||
|
|
|
|
|
|||
|
|
|
обрабатывать |
|
|
||
|
|
|
сигнал sig4 |
|
|
||
Могут быть перечислены сигналы, которые не должны обрабатываться в этом состоянии. Это так называемый saveсимвол; спасает sig4 от удаления из очереди, т.е. оставляет его в начале очереди.
Рисунок 21. Описание состояния ожидания процессом внешнего сигнала
Поскольку важное значение в обмене информацией имеет согласование во времени, язык SDL имеет встроенные средства для описания временных задержек с помощью таймеров, как это отражено на рисунке 22.
