КОНСТРУИРОВАНИЕ ПРОЦЕДУРНЫХ ПРОГРАММ: ОТ ВИЗУАЛЬНЫХ СПЕЦИФИКАЦИЙ К ИНКАПСУЛИРУЕМОМУ КОДУ В.И. Курганский, П.В. Кобелев Иркутский государственный университет E-mail: inteh@irmail.ru 1. Процедурные программы, несмотря на различные декларации об их недостатках, все еще играют важную роль в практическом программировании. В состав объектов такие программы инкапсулируются в качестве методов, процедур доступа к свойствам и процедур обработки событий. Значительность объемов таких программ и сложность реализуемых ими алгоритмов вызывают определенные трудности как при их разработке, так и сопровождении. Именно поэтому имели и имеют [1] место попытки не текстового представления программного кода при его разработке, оценке и изучении, а также сопровождении. Ниже предлагается аппарат визуального представления спецификаций процедурных программ на основе систем примеров и средства преобразования этих спецификаций в инкапсулируемые в объекты процедурные коды. Работа представляет собой технологию программирования на основе идей интерактивной компьютерной графики [2]. Результаты работы опробованы при решении ряда задач обработки деловой информации в таможенном деле и при изучении современных методов конструирования алгоритмов, а также ряда классических алгоритмов обработки данных. 2. Система конструирования визуальных спецификаций процедурных программ и их преобразования в инкапсулируемый код названа системой программируемых элементов данных. Эта система включает: конструктор тестов (систем примеров), конструктор тестовых форм, конструктор программируемых элементов данных и отладчик. Рассмотрим их подробнее. 3. Под примером, на котором испытывается процедурная программа, понимается последовательность состояний, которые она принимает при исполнении. Разумеется речь может идти и о подпоследовательностях таких состояний и проекциях этих подпоследовательностей в различные подпространства состояний программы. Конструктивно пример представляет собой последовательный файл, каждая запись которого характеризует отдельное состояние в составе примера. Поля такой записи – это соответствующие значения программных переменных. В записи о состоянии имеет место по крайней мере одно служебное поле – ссылка на тестовую форму для обзора и редактирования значений переменных, составляющих это состояние. Система примеров (тест) организована в виде отдельной папки файловой системы. Конструктор примеров представляет собой диалоговое средство для создания и удаления примеров, создания и удаления записей о состояниях в составе примера, запуска диалоговой формы для работы с записями о состояниях в составе отдельного примера и, наконец, запуска конструктора тестовых форм и самих тестовых форм. 4. Тестовая форма представляет обычную SDI–форму, большая часть элементов управления которой предназначена для диалогового доступа к значениям отдельных программных переменных. Эти элементы управления названы тестовыми и представляют собой модификацию обычных элементов управления – меток, текстовых и растровых окон, линеек прокрутки и пр. Модификация элементов управления заключается во включении в их интерфейс дополнительных свойств для кодирования элементов визуальной спецификации программы. Элементами спецификации являются условные операторы присваивания, которые задают правила вычисления значений свойств, влияющих на визуализацию данного элемента управления при переходе программы из одного состояния в другое. В составе тестовой формы задают также требования к последовательностям состояний программы в виде так называемых индексов. Различают первичные и вторичные индексы. Под первичным индексом понимается одномерная системная нумерация всех тестовых элементов управления на тестовой форме. Вторичные индексы задаются над первичным индексом или над уже построенными вторичными индексами. Эти индексы могут быть многомерными. Для каждой координаты в виде целочисленных выражений задают начальные и конечные значения, а также правила перехода от текущего значения данной координаты к следующему и/или предыдущему значению. Определение вторичного индекса завершают правила перехода от данного вторичного индекса к базовому индексу. Общеизвестным примером вторичного индекса является двумерный индекс прямоугольной матрицы над одномерным массивом. Вторичные индексы задают частичные требования к последовательностям состояний, которые должна принимать конструируемая программа. Кроме индексов в состав спецификаций включают фильтры, которые представляют собой условные выражения, а также атрибуты выделения тестовых элементов управления. Аргументами фильтров являются константы, основные свойства тестовых элементов управления, переменные-размерности заданных индексов. Фильтры позволяют визуально выделять некоторые последовательности точек пространства состояния программы, которые она должна генерировать. 5. Программируемые элементы данных (ПЭД) представляют собой требования к последовательностям состояний программы. Отдельный ПЭД является визуальной объектной моделью последовательной композиции операторов языка структурированных программ [4], каждый из которых моделируется ПЭД, или конструкции вида A0; Do B1A1; S1 … BnAn; Sn Od , где S1,…, Sn также моделируются ПЭД. Условные выражения B1, …, Bn и операторы присваивания A0,, A1, …, An инкапсулируются в ПЭД копированием соответствующей части визуальной спецификации программы, заданной в составе одной из тестовых форм. Это копирование задается протаскиванием и бросанием на визуальный образ ПЭД соответствующих свойств тестовых элементов управления и определений вторичных индексов. В [5] доказано, что всякая структурированная программа, может быть выражена языковыми конструкциями, моделируемыми ПЭД. Рис. 1. Определение вторичного индекса и испытание фильтра 6. Экспериментальная реализация системы программируемых элементов данных выполнена в виде комплекта визуальных ActiveX-компонентов, которые могут быть использованы в качестве расширения визуальной системы объектно-ориентированного программирования. На рис. приведен пример использования системы ПЭД при решении задачи перебора диагоналей квадратной матрицы с целью вычисления полу суммы максимума и минимума, найденных среди сумм элементов перебираемых диагоналей матрицы. Литература 1. 2. 3. 4. Khan K. Drawing on Napkins, Video-Game Animation, and other Ways to Program Computer / CACM. – 1996. – 39, №8. – P.29 – 30. Зенкин А.А. Когнитивная компьютерная графика и научное творчество. // Будущее искусственного интеллекта. – М.: Наука, 1991. – С. 269-289. Грис Д. Наука программирования / Пер. с англ. под ред. А.П.Ершова. - М.: Мир, 1984. - 416 с. Курганский В.И. Метаинтерактивное программирование: концепции, основания и реализация. // Оптимизация, управление, интеллект. – 1995. – № 1. – С.198 – 209.