Грачев Д.А., Лаптев В.В.
ОБУЧАЮЩАЯ СИСТЕМА ПО ПРОГРАММИРОВАНИЮ
ФГБОУ ВПО «Астраханский государственный технический университет»,
г. Астрахань
Концепции разработки
В работе [1] сформулированы требования к учебному языку и обучающей системе по программированию. В работе [2] описан учебный язык программирования Semantic Language и его интерпретатор. Разработка программ на учебном языке должна осуществляться в интегрированной среде, которая является частью обучающей системы и должна обеспечивать процесс обучения.
Б. Страуструп отмечал [3], что главным препятствием на пути развития языка С++ являются символьно-ориентированные инструменты (в частности, текстовый редактор кода). Более перспективный и интересный подход – отказаться от текстового представления программы и реализовать среду на основе семантических понятий языка программирования. В этом случае синтаксис языка программирования представляет собой интерфейс между программой и пользователем (программистом). И как всякий интерфейс, его можно заменять, не изменяя базовой семантики языка.
В соответствии этим подходом и с учетом анализа свойств современных промышленных сред разработки ПО авторами был сформулирован ряд концепций учебной интегрированной среды, которая является подсистемой автоматизированной обучающей системы по программированию:
- среда должна позволять набирать код программы и в русской, и в английской лексике;
- среда должна обеспечивать возможность переключения лексики и синтаксиса языка программирования, причем это переключение не должно приводить к повторному анализу кода программы;
- среда должна обеспечивать механизм добавления нового синтаксиса;
- изменение ключевых слов в коде должно быть невозможно;
- ошибки должны определяться в момент набора программы;
- редактор кода должен оперировать объектами программы и конструкциями языка программирования;
- среда должна обеспечивать разработку с обучающих методических материалов непосредственно в редакторе.
В настоящее время практически все эти концепции реализованы в рамках интегрированной среды Semantic IDE.
Редактирование кода
Редактор кода – это не традиционный текстовый редактор. В Semantic IDE реализован семантический редактор, который оперирует не символами, а операторами учебного языка и объектами программы. Поэтому, во-первых, большинство элементов оператора сразу вставляются в код в правильном виде, и во-вторых, полностью исчезают ошибки набора ключевых слов. Редактор разрешает символьный ввод только в строго определенных позициях оператора.
Редактор следит за действиями программиста и сообщает об ошибках в момент набора программы. Пока ввод оператора не завершен, в окне ошибок «вывешены» все сообщения об ошибках, которые возникают по мере ввода составных частей оператора.
Синтаксис как интерфейс
Редактор кода в соответствии с действиями программиста строит внутреннее представление программы – семантическое дерево с вершинами сложной структуры. Каждая вершина – это отдельный оператор программы, в котором сохраняется полная информация о его семантике.
Семантическое дерево является входным для интерпретатора. Так как ошибки выявляются при создании кода в редакторе, на вход интерпретатора поступает правильная программа. Поэтому интерпретатор не выполняет ни лексического, ни синтаксического анализа.
Представление программы в виде семантического дерева позволяет реализовать идею сменяемого синтаксиса. Каждый синтаксис определяется грамматикой представления в формате РБНФ. Грамматика не используется для синтаксического анализа программы и нужна только для определения внешнего представления программы в окне редактора кода.
В Semantic IDE помимо синтаксиса учебного языка Semantic Language реализованы Си-подобный, Pascal-подобный и Basic-подобный синтаксисы. Кроме того, каждое из представлений может быть показано либо в русской лексике, либо в английской. Среда позволяет без особых проблем подключить новый синтаксис представления (например, Python-подобный).
Обучающий режим
Способность редактора следить за действиями программиста позволила реализовать специальные режимы работы обучающей системы:
- институциональный – система управляет действиями обучаемого;
- тренирующий – обучаемый может совершать действия в пределах выделенного системой ресурса доступных операций; при исчерпании доступных операций система переключается в институциональный режим;
- наблюдательный – действия обучаемого не ограничиваются; система собирает статистику о действиях обучаемого и вычисляет метрики-оценки; система сообщает информацию об ошибках, рекомендации для правильного выполнения задания;
- контрольный – действия обучаемого системой не ограничиваются; система собирает статистику о действиях обучаемого и вычисляет метрики-оценки как за выполненное задание, так и достигнутого уровня обученности.
Для институционального режима системой по семантическому дереву программы автоматически генерируется сценарий выполнения задания. Преподаватель может редактировать сгенерированный сценарий, задавая дополнительные настройки и ограничения.
Подготовка методических материалов
В любом месте кода программы (а также перед и после кода) можно вставить оператор-комментарий. Разрешается создавать последовательность комментариев вообще без программного кода.
В пределах комментария разрешены традиционные текстовые операции с символами и строками. В операторе-комментарии можно создать таблицы, разрешается вставлять рисунки и видеоролики. Работают обычные операции с буфером обмена. Реализовано связывание комментариев с помощью гиперссылок, в том числе и с другими файлами проекта.
Теоретический материал можно проиллюстрировать кодом программы-примера, которую можно запустить на выполнение. Это позволяет демонстрировать образцы хорошего стиля программирования и способствует более быстрому и прочному усвоению изучаемой темы.
Литература
- 1.Лаптев В.В. Требования к современной обучающей среде по программированию // Объектные системы-2010 (Зимняя сессия): материалы II Международной научно-практической конференции. Россия, Ростов-на-Дону, 10-12 ноября 2010 г. / Под общ. Ред. П.П. Олейника. – Ростов-на-Дону, 2010. – 134 с., с. 104-110.
- 2.Грачёв А.Д., Лаптев В.В. Разработка учебного языка программирования и интерпретатора для обучающей среды // Объектные системы-2012: материалы VI Международной научно-практической конференции (Ростов-на-Дону, 10-12 мая 2012г.) / Под общ. ред. П.П. Олейника. – Ростов-на-Дону: ШИ ЮРГТУ (НПИ), 2012. – 110 с., с. 92-101.
- 3.Страуструп Б. Дизайн и эволюция С++. – М.: ДМК Пресс; СПб.: Питер, 2006. – 448 с.