Педагогические  науки”

к.т. Турганбай К.Е

Казахский агротехнический университет им.С.Сейфуллина Казахстан., г.Астана

 

О необходимости обучения автоматному программированию будущих учителей информатики

 

Автоматное программирование – парадигма программирования [1], предложенная в 1991 году в России. Является она разновидностью синхронного программирования, которое было создано и нашло применение в Европе для разработки систем управления ответственными объектами.

В автоматном программировании базовым понятием является состояние [2]. Поэтому такое программирование иногда называют также «программированием от состояний» или «программированием с явным выделением состояния». При написании автоматных программ состояния предлагается  разделять  на  управляющие  и  вычислительные.

Основано автоматное программирование на идеях теории автоматов и автоматического управления. При его использовании программу предлагается строить в виде совокупности взаимодействующих  автоматизированных  объектов управления [2].  Автоматизированным объектом управления обычно в теории управления называют объект управления, интегрированный с системой управления в одно устройство. Вообще, в автоматных программах выделяют  три  типа объектов. Еще одним объектом в автоматных программах, кроме системы и объектов управления, являются поставщики событий. 

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

Как видно из выше изложенного, ядром автоматных программ являются конечные автоматы. Такие автоматы реагируют на входное воздействие не только сменой состояния,  но и формированием определенных значений на выходах. Правила формирования выходных воздействий называют функцией выходов автомата. Правила, по которым происходит смена состояний, называют функцией переходов автомата.

Упрощенная  трактовка  автоматного  программирования   состоит  в  том,  что  это стиль программирования, при использовании которого поведение программ предлагается описывать автоматами, которые в дальнейшем преобразуются в код.  При этом следует особо подчеркнуть,  что  под  автоматным  программированием понимается  не программирование с применением конечных автоматов, а технология программирования, направленная  на  создание  систем  со  сложным  поведением,  которое  реализуется автоматами [3].  Заметим, что система обладает сложным поведением, если в качестве реакции на некоторое входное воздействие она может осуществить одно из нескольких выходных воздействий. При этом существенно,  что  выбор  конкретного выходного воздействия может зависеть не только от  входного  воздействия, но и от предыстории. Для  систем  же с  простым  поведением  реакция  на  любое  входное воздействие зависит только от этого воздействия.

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

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

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

Программирование с использованием автоматов имеет достаточно богатую историю развития.  Раньше автоматы обычно использовались при разработке программного обеспечения систем управления  ответственными  объектами, при построении компиляторов и протоколов. Автоматы применялись также и в ходе выполнения исследований в области искусственного интеллекта. Так, например,  в работе [3] рассматривалось применение автоматов при построении  мультиагентных  систем,  а  в  работе [4] –  вопрос  о  совместном  использовании автоматов и нейронных сетей.

Теперь автоматы применяются и  для решения  ряда  других  задач,  например,  игр [5],  информационных систем [6] и учебных программ [7]. Их от случая к случаю применяют и в других областях. При этом был разработан ряд инструментальных средств, которые поддерживают  программирование  с  автоматами.  Одним  из  наиболее  распространенных инструментальных  средств  в  этой  области  является  Stateflow –  расширение  пакета  MatLab.  Это  средство позволяет  строить  автоматы,  моделировать  их работу и  выполнять  кодогенерацию  на  языке СИ.

Целесообразно автоматы использовать  во всех классах программных систем, выделенных в соответствии с классификацией, введенной Д.Харелом [8]. Это – трансформирующие, интерактивные и реактивные системы.

Трансформирующие системы осуществляют некоторое преобразование входных данных, и после этого завершают свою работу. К трансформирующим системам относятся, например, архиваторы и компиляторы.

Интерактивные системы взаимодействуют с окружающей средой в режиме диалога (например, текстовый редактор).

Реактивные системы взаимодействуют с окружающей средой  путем обмена сообщениями в темпе, задаваемой средой. К этому классу можно отнести большинство телекоммуникационных систем, а также системы контроля и управления физическими устройствами.

Компиляторы, при создании которых традиционно применяются конечные автоматы, относятся к классу трансформирующих систем. Автомат здесь понимается как некое  вычислительное устройство, имеющее входную и выходную ленты. Перед началом работы на входной ленте записана строка, которую автомат далее посимвольно считывает и обрабатывает. В результате обработки автомат последовательно записывает некоторые символы на выходную ленту.

Другая традиционная область использования автоматов – задачи логического управления – является подклассом реактивных систем. Здесь автомат – это, на первый взгляд, совсем другое устройство. У него несколько параллельных входов (чаще двоичных), на которые в режиме реального времени поступают сигналы от окружающей среды. Обрабатывая эти сигналы, автомат формирует значения нескольких параллельных выходов.

Таким образом, даже традиционные применения конечных автоматов охватывают принципиально различные классы программных систем. Авторы работы [2] убеждены, что в действительности круг задач, при решении которых целесообразно использовать автоматный подход, значительно шире и включает создание программных систем, принадлежащих всем трем перечисленным классам. Поэтому предлагают применять автоматы в программировании не от случая к случаю, а везде и всегда, где требуется  обеспечить  сложное  поведение.

В настоящее время автоматный подход используется и при реализации вычислительных алгоритмов [9-10].  Так, в частности, показано, что произвольный итеративный алгоритм может быть реализован конструкцией, эквивалентной циклу do-while, телом которого является оператор switch.

Автоматы могут быть использованы и для решения классических задач дискретной математики, таких как поиск подстрок, подсчет длины слов в строке, обход деревьев и др.

Широкое применение автоматного программирования свидетельствует о необходимости подготовки соответствующих специалистов в этой области. Поэтому изложенная выше парадигма программирования важна и для образования. В частности, на ее основе можно проводить первоначальное обучение проектированию программ, не только в университетах, но и в средних школах. При этом отметим, что, поскольку концепции автоматного  программирования [11]  существенно  отличаются  от  традиционных,  начинать  обучение программированию в этом стиле следует как можно раньше, рассматривая некоторые его элементы как в базовом курсе информатики в общеобразовательной школе, так и в профильных курсах по информатике на старшей ступени школы, где  у учащихся уже сформирована потребность изучать интересующий их материал на современном уровне, т.е. с применением современных технологий, которые используются в выбранной ими профессии.                          

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

Автоматное программирование должно найти отражение в подготовке учителей информатики, однако, проведенный анализ содержания подготовки учителей информатики в педвузах показывает, что существующее содержание далеко не в полной мере удовлетворяет современным требованиям и не соответствует перспективам развития его профессиональной деятельности на ближайшие годы. На эти недостатки в целом характерные для подготовки будущих учителей информатики в педвузах обращали внимание многие ученые (А.А. Кузнецов, С.А. Жданов, В.Л. Матросов, С.А. Бешенков, И.В. Роберт и др.). При этом повышение требований к профессиональной подготовке учителя информатики, обусловленное, расширением сферы его профессиональной деятельности, связанной, в частности, с переходом к преподаванию профильных курсов в старшем звене школы еще более обостряют эту проблему. В связи с этим возникает необходимость пересмотреть содержание подготовки учителей информатики в вузах. Прежде всего, это связано с тем,  что предполагаемое содержание профильных курсов информатики для различных направлений специализации образования в старших классах во многом выходит за рамки действующей сейчас в педвузах подготовки будущих учителей информатики.

Отмеченные обстоятельства свидетельствуют о необходимости включения в содержание профессиональной подготовки учителей информатики профильного курса по автоматному программированию и разработки соответствующего методического обеспечения.

 

 

Аннотация

 

Широкое применение автоматного программирования свидетельствует о необходимости обучения программированию в данном стиле не только в университетах, но и в средних школах. Это предъявляет к учителю информатики новые требования, ставит перед педагогическим вузом новые задачи, приводит к необходимости включения в содержание профессиональной подготовки учителей информатики профильного курса по автоматному программированию и разработки соответствующего методического обеспечения.

 

Литература

 

1.     Шалыто А. А. Парадигма автоматного программирования //Материалы XI  Всероссийской конференции  по  проблемам  науки  и  высшей  школы "Фундаментальные  исследования  и  инновации  в  технических университетах". СПбГПУ, 2007. – С. 202–205.

2.     Поликарпова Н. И., Шалыто А. А. Автоматное программирование. СПб.: Питер, 2010.

3.     Naumov L., Shalyto A. Automata Theory for Multi-Agent Systems Implementation / International Conference on «Integration of Knowledge Intensive Multi-Agent Systems: Modeling, Exploration and Engineering» (KIMAS-03). Boston: IEEE. 2003.

4.     Кретинин А. В., Солдатов Д. В., Шостак А. В., Шалыто А. А. Ракеты. Автоматы. Нейронные сети // Нейрокомпьютеры: разработка и применение. 2005. № 5.

5.       Беляев А. В., Суясов Д. И., Шалыто А. А. Компьютерная игра «Космонавт». Проектирование и реализация//Компьютерные инструменты в образовании. 2004. №4.

6.     Гуров В. С., Нарвский А. С., Шалыто А. А. ICQ и автоматы // Технология «Клиент-Сервер». 2004. № 3.

7.     Мазин М. А., Парфенов В. Г., Шалыто А. А. Анимация. FLASH-технология. Автоматы // Компьютерные инструменты в образовании. 2003. № 4.

8.     Harel D., Pnueli A. On the development of reactive systems / In “Logic and Models  of Concurrent Systems” NATO Advanced Study Institute on Logic and Models  for Verification and Specification of Concurrent Systems. Springer Verlag, 1985. Pp.477-498

9.      Шалыто А., Туккель Н., Шамгунов Н. Ханойские башни и автоматы //Программист. 2002. № 8. http://is.ifmo.ru/

10.   Шалыто А.А., Туккель Н.И. Преобразование итеративных алгоритмов в автоматные //Программирование. 2002. № 5. http://is.ifmo.ru/

11.   Кузнецов Б. П. Психология  автоматного  программирования // BYTE/Россия. 2000. № 11, с. 28–32. http://www.softcraft.ru/ design/ap/ap01.shtml