автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.11, диссертация на тему:Инструментальная поддержка процедурно-параметрической парадигмы программирования

кандидата технических наук
Швец, Дмитрий Александрович
город
Красноярск
год
2004
специальность ВАК РФ
05.13.11
цена
450 рублей
Диссертация по информатике, вычислительной технике и управлению на тему «Инструментальная поддержка процедурно-параметрической парадигмы программирования»

Автореферат диссертации по теме "Инструментальная поддержка процедурно-параметрической парадигмы программирования"

На правах рукописи

шм

ШВЕЦ Дмитрий Александрович

ИНСТРУМЕНТАЛЬНАЯ ПОДДЕРЖКА ПРОЦЕДУРНО-ПАРАМЕТРИЧЕСКОЙ ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ

05.13.11 - Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей

АВТОРЕФЕРАТ диссертации на соискание ученой степени кандидата технических наук

Красноярск - 2004

Работа выполнена в Красноярском государственном техническом университете

Научный руководитель:

Официальные оппоненты:

кандидат технических наук, доцент

Легалов Александр Иванович

доктор технических наук, профессор

Рубан Анатолий Иванович

кандидат технических наук Жуков Леонид Александрович

Ведущая организация: Институт вычислительного моделирования СО РАН

(г. Красноярск)

Защита состоится «27» января 2005 г. в 14^ часов на заседании диссертационного совета Д 212.098.03 в Красноярском государственном техническом университете по адресу: 660074, г. Красноярск, ул. Киренского, 26, ауд Г4-17, тел 49-73-81, факс (8-3912)-49-79-90

С диссертацией можно ознакомиться в научной библиотеке Красноярского государственного технического университета.

Автореферат разослан «¿3» декабря 2004 г.

Ученый секретарь

диссертационного совета,

кандидат технических наук, профессор КГТУ

Вейсов Е.А.

ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

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

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

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

ствуют какие-либо инструменталыйм^cfigeflftl^io пРимене_

БИБЛИОТЕКА

3 С.Пе 09

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

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

Для достижения указанной цели в работе решаются следующие задачи-

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

2. Исследование и сравнительный анализ методов программной реализации для различных способов поддержки процедурно-параметрического полиморфизма.

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

4. Исследование возможностей применения разработанных языковых конструкций при создании эволюционно-расширяемых программ. Методы исследования. В диссертационной работе использовались методы дискретной математики, теории алгоритмов, теории языков и формальных грамматик, теории разработки трансляторов. Для описания синтаксиса языка программирования использовались расширенные формы Бэкуса-Наура. При разработке языка программирования применялись методы синтаксического анализа и компиляции, методы объектно-ориентированного и процедурно-параметрического программирования.

Научная новизна. В ходе проведенных исследований автором получены следующие научные результаты, которые выносятся на защиту.

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

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

3. Разработаны языковые конструкции, поддерживающие различные способы реализации процедурно-параметрической парадигмы программирования.

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

Практическая ценность. Проведенные автором исследования позволили создать инструментальные средства языковой поддержки процедурно-параметрической парадигмы программирования. Данные инструментальные средства обеспечили проведение практических экспериментов и дополнительный анализ методов построения процедурно-параметрических программ. Полученные научные и практические результаты использованы в учебном процессе по дисциплине «Технология программирования» в Красноярском государственном техническом университете и Красноярском государственном университете.

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

Публикации и личный вклад в решение проблемы. По теме диссертации опубликовано 12 печатных работ.

Диссертация основана на теоретических, методологических и экспериментальных исследованиях, выполненных на кафедре НейроЭВМ КГТУ Основные результаты, изложенные в работе, получены либо непосредственно автором, либо с его участием

Апробация работы. Основные положения диссертации докладывались и обсуждались на: межвузовских научных конференциях студентов, аспирантов и молодых ученых, Красноярск (2000, 2001); межвузовской научной конференции, Красноярск (2002); IV Всероссийской конференции молодых ученых по математическому моделированию и информационным технологиям, Красноярск (2003); 3-ей школе-семинаре «Распределенные и кластерные вычисления», Красноярск (2003); международной конференции «Перспективы систем информатики» (рабочий семинар «Наукоемкое программное обеспечение»), Новосибирск, 2003; конференции «Технологии Microsoft в информатике и программировании», Новосибирск (2004).

Структура диссертации. Диссертация состоит из введения, 4 глав, заключения, списка литературы и двух приложений. Работа содержит 131 страницу основного текста, 9 рисунков, 2 таблицы. Список литературы содержит 113 наименований.

КРАТКОЕ СОДЕРЖАНИЕ РАБОТЫ

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

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

виртуализация; шаблоны; аспектно-ориентированное программирование; субъектно-ориентированное программирование; связывание через интерфейсы.

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

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

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

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

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

Для сравнения возможных методов реализации механизмов процедурно-параметрического программирования были проанализированы известные способы реализации мультиметодов. Показано, что в случае одного аргумента процедурно-параметрический полиморфизм эквивалентен объектно-ориентированному полиморфизму или монометоду. То есть в случае объектно-ориентированного подхода инструментально поддерживается только один частный случай множественного полиморфизма.

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

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

Пусть X ~ {Хь Х2, ..., Хк} - множество программных объектов, определяющих абстрактные понятия, построенные в ходе решения некоторой за-

дачи. В ряде ситуаций возникают условия использования объектов из X в различных альтернативных контекстах. Для идентификации этих контекстов с каждым из понятий можно связать один из признаков Т, = {1,ь 1,2, ..., ^щ}, где г,|, 1,2, ..., - множество значений, каждое из которых характеризует особенности использования сопоставляемого ему понятия.

Пусть Б, = (1:„ Х^ - специализация объекта X,, определяющая характер его применения в программе. При этом в программе может использоваться множество специализаций: 8 = {8|, 82, ..., 8м,}- Д™ однозначного толкования специализаций необходимо выполнение следующего условия: если Б, Ф 83, то г, Ф ^ для любых Хк из X. То есть, каждый признак гц из Т = {Ть Т2,..., Тм}, может быть однозначно сопоставлен только с одним понятием. Но один и тот же программный объект может использоваться в нескольких контекстах, т.е., идентифицироваться несколькими признаками. Отсюда следует, что |Х| < |Т,|.

Обобщение и, = {Б,!, 8,2, Б^} задает множество программных объектов используемых в альтернативном контексте. Признак специализации может использоваться для выбора алгоритма обработки программных объектов. В ходе вычислений обобщение принимает одно из множества допустимых значений, определяемых специализациями.

Сигнатура процедуры произвольного вида задается отображением:

Р:Х,хХ2х...хХь-> У,ху2х...хум,

где X], Х2, ..., Х[. - множество программных объектов, используемых в качестве аргументов; У,, У2, ..., Ум - множество результатов выполнения процедуры. При этом XI е X и У1 е X и являются, в общем случае, произвольными программными объектами. В традиционной интерпретации для сигнатур, вместо описания отображения, можно использовать функциональное обозначение:

Р:Х] *Х2х... хХ,.— У, хУ2х... хум = Р(ХЬ Х2,..., Хь) — У,, У2,..., Ум -

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

3 Р(ХЬ Х2, ..., Хь У2, ..., Ум) = Р(ХЬ Х2, ..., Хм).

Аргументы Х|, Х2, ..., Хм могут относиться к программным объектам различного типа. В рамках предмета исследований существует ряд специфических вариантов, которые следует выделить. Определим сигнатуры, связанные с трактовкой ряда параметров в качестве специализаций или обобщений. Для выделения специализаций или обобщений из общего набора параметров будем использовать фигурные скобки.

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

Ри(и1; и2,..., иь Хь Х2, ..., Хм) ^ Ри{иь и2, ...,1Ы(ХЬ Х2,..., Хм) .

Процедуру Р8, использующую в качестве дополнительно выделенных аргументов специализации, назовем специализированной процедурой. Сш-. натура специализированной процедуры имеет следующий вид:

Р^ь Б2, ..., Бь Хь Х2,..., Хм) = Р8{3ь 82,..., Б^СХ], Х2,..., Хм) .

В тех случаях, когда список прочих параметров не представляет интереса, он будет опускаться. Обобщающая процедура Ри{1]ь и2, ..., 11м}, обрабатывающая несколько обобщенных аргументов, задает мультиметод.

Обобщающая процедура Ри, задающая обработку списка обобщений {и,, и2, ..., им}, может рассматриваться как множество специализированных процедур {Р5}, каждая из которых осуществляет обработку одной из комбинации специализаций, задаваемой множеством:

и,хи2х...хим =

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

иь и2, им} => Р55,, |{ Б,,, 821,..., БМ1} или |{ 812, вгь вш} ИЛИ ... Рвиь2 1лп{ Бн,!, вгц, .... SMI.ni}-Полиморфизм обобщающей процедуры проявляется в выборе одного из обработчиков специализации во время ее вызова. Этот выбор осуществляется на основе анализа признаков специализаций, подставляемых в качестве фактических параметров.

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

- способы построения параметрических обобщений;

- методы включения специализаций в параметрическое обобщение;

- методы конструирования обобщений;

- способы построения параметрических отношений и их отображение на обобщающие и специализированные параметрические процедуры;

- способы формирования тел обработчиков специализаций и тел обобщающих процедур;

- способы связывания комбинаций специализаций с конкретным обработчиком;

- фазы формирования параметрических обобщений.

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

В третьей главе предлагаются языковые конструкции, расширяющие традиционный процедурный язык программирования средствами поддержки

процедурно-параметрической парадигмы. Предлагаемый в результате язык назван 02М и является расширением языка программирования Оберон-2.

Параметрическое обобщение описывается следующим синтаксическим правилом:

ТипОбобщение = CASE [TYPE] [LOCAL] OF

[ СписокСпециализаций ] [ ELSE Специализация ] END .

СписокСпециализаций = Специализация { Специализация }.

Специализация = ( СписокПризнаков ":" ( Тип | NIL ) ) | Тип .

СписокПризнаков = Признак [ "," Признак ].

Признак = Идентификатор.

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

Rectangle = RECORD х, у: INTEGER END;

Triangle = RECORD а, Ь, с: INTEGER END;

Тогда обобщенная фигура с явно заданными признаками может выглядеть следующим образом:

Shapel = CASE OF

trian: Triangle | rect, rhomb: Rectangle

END;

Обобщение может быть расширено децентрализованно. Например, специализацию, определяющую круг, можно добавить следующим образом:

Circle = RECORD г: INTEGER END;

Shapel += circ: Circle;

В языке имеются обобщенные параметры-переменные, специализированные переменные, обобщенные указатели, указатели на специализации. Это обеспечивает гибкую организацию как статических, так и динамических структур из обобщенных данных.

Описание обобщающей параметрической процедуры имеет вид:

ОбобщающаяПроцедура = PROCEDURE Имя

СписокОбобщающихПараметров [ФормальныеПараметры] ((ТелоПроцедуры Имя) | ":= 0") .

Отличие от обычной процедуры заключается в присутствии списка обобщающих параметров:

СписокОбобщающихПараметров = "{"ГруппаОбобщающих {";" ГруппаОбобщающих} "}".

ГруппаОбобщающих = [VAR] Идентификатор { "," Идентификатор}":" ОбобщающийТип.

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

PROCEDURE Р {VAR в: Shapel}: REAL := 0;

Обработчики обеспечивают реализацию различных комбинаций специализаций, сопоставляемых с обобщениями из списка обобщающих параметров. Комбинация, на которую "настроен" конкретный обработчик, задается значениями признаков в соответствии со следующими синтаксическими правилами:

ОбработчикСпециализации = PROCEDURE Имя СписокСпециализаций [ФормальныеПараметры] ТелоПроцедуры Имя.

СписокСпециализаций = "{" ГруппаСпециализаций { ";" ГруппаСпециализаций } *'}" .

ГруппаСпециализаций = [VAR] Идентификатор

{ "," Идентификатор} ":" ОбобщающийТип "<" [Признак) ">"

| [VAR] Идентификатор "<" [Признак] ">" { "," Идентификатор "<" [Признак] ">"} ":" ОбобщающийТип.

Каждый элемент списка специализированных параметров должен задавать конкретное значение признака. Специализации должны поэлементно соответствовать параметрам обобщающей процедуры. В обязательном теле процедуры кодируется конкретный метод обработки. Для представленных выше примеров обобщенных процедур допустимы следующие обработчики, вычисляющие периметры конкретных геометрических фигур: (* Вычисление периметра прямоугольника *) PROCEDURE Р {VAR г: Shapel<rect>}; INTEGER;

BEGIN RETURN 2*(г.х + Г.у) END Р; (* Вычисление периметра треугольника *) PROCEDURE Р {VAR t<trian>: Shapel}: INTEGER;

BEGIN RETURN t.a + t.b + t.с END P; (* Вычисление периметра ромба *) PROCEDURE P {VAR t<rhomb>: Shapel}: INTEGER;

BEGIN RETURN 2*Math.sqrt(t.x*t.x + t.y*t.y) END P;

При вызове обобщающей процедуры дополнительно указываются обобщенные параметры:

ВызовПроцедуры = Обозначение [ОбобщенныеПараметры] [ФактическиеПарамстры].

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

В четвертой главе описаны средства, обеспечивающие инструментальную поддержку процедурно-параметрического программирования. К ним относятся: компилятор с языка программирования 02М; компоновщик параметрических отношений; утилита генерации файла проекта, используе-

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

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

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

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

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

пуск транслятора 02М, компоновщика параметрических отношений, сборщика проектов, внешнего компилятора С++, а также запуск полученного в результате компиляции исполняемого файла на выполнение.

В приложении А приведено описание синтаксиса процедурно-параметрического языка программирования 02М.

В приложении В приводятся исходные тексты примеров программ, используемых по тексту диссертации.

ОСНОВНЫЕ РЕЗУЛЬТАТЫ РАБОТЫ

Получены следующие научные и практические результаты работы:

1. Проведен анализ методов эволюционной разработки программного обеспечения, на основании которого сделан вывод о перспективности использования процедурно-параметрической парадигмы программирования для реализации множественного полиморфизма и необходимости её инструментальной поддержки.

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

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

4. Разработаны инструментальные программные средства, обеспечивающие поддержку процесса создания процедурно-параметрических программ и включающие:

- компилятор, обеспечивающий трансляцию исходных текстов процедурно-параметрических программ в объектный код;

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

- сборщик проектов, обеспечивающий генерацию скрипта для обработки объектного кода и сборки исполняемого файла;

- оболочку пользователя, предназначенную для упрощения работы с инструментальными средствами.

5. Разработанные языковые и инструментальные средства позволили провести апробацию предложенных методов эволюционного программирования.

Результаты работы отражены в следующих публикациях:

1. Швец, Д. А. Процедурно-параметрический подход в языке программирования Оберон-2 / ДА. Швец // В кн.: Информатика и информационные технологии: Материалы межвузовской научной конференции студентов, аспирантов и молодых ученых. Под ред. Е. А. Вейсова, Ю. А. Шитова. -Красноярск: ИПЦ КГТУ, 2000. - С. 271-274.

2. Швец, Д. А. Использование процедурно-параметрического механизма в Обероне-2 / Д. А. Швец // В кн.: Информатика и информационные технологии: Тез. докл. межвузовской научной конференции студентов, аспирантов и молодых ученых. Под ред. Е. А. Вейсова, Ю. А. Шитова. - Красноярск: ИПЦ КГТУ, 2001. - С. 119-125.

3. Легалов, А. И. Процедурно-параметрические расширения языка программирования Оберон-2 / А. И. Легалов, Д. А. Швец // Вестник Красноярского государственного технического университета. Вып. 23. Математические методы и моделирование. Под ред. В. И Быкова. - Красноярск: ИПЦ КГТУ, 2001.-С. 140-148.

4. Швец, Д. А. Особенности реализации Оберон-2 с поддержкой процедурно-параметрического полиморфизма / Д. А. Швец // В кн.: Информатика и информационные технологии: Материалы межвуз. научн. конф. Под ред. Ю. А. Шитова. - Красноярск: ИПЦ КГТУ, 2002. - С. 225-228.

5. Швец, Д. А. Инструментальная поддержка процедурно-параметрического полиморфизма в языке Оберон-2 / Д. А. Швец //В кн.: Информатика и информационные технологии: Материалы межвуз научн. конф. Под ред. Ю.А.Шитова. - Красноярск: ИПЦ КГТУ, 2002. - С. 268-272.

6. Легалов, А. И. Средства программирования на языке Оберон-2М. / А И. Легалов, Д. А Швец // В кн.: Проблемы информатизации региона. ПИР-2001: Сб. науч. трудов. - Красноярск: ИПЦ КГТУ, 2002. - С. 61-67.

7. Швец, Д. А. Система программирования на языке 02М / Д. А. Швец // В кн.: FV Всероссийская конференция молодых ученых по математическому моделированию и информационным технологиям: Программа и тезисы докладов. — Красноярск, 2003. - С. 67.

8 Легалов, А. И. Языковая поддержка эволюционного расширения программ / А И. Легалов, Д. А. Швец // Доклады Сибирского отделения Академии наук высшей школы, №2 (8), 2003. - С. 102-114.

9. Легалов, А. И. Процедурный язык с поддержкой эволюционного проектирования. / А. И Легалов, Д. А. Швец // Научный вестник НГТУ, №2 (15) Новосибирск, 2003. - С.25-38.

10.Швец, Д. А. Инструментальная поддержка языка программирования 02М / Д. А. Швец // В кн.: Технологии Microsoft в информатике и программировании: Тезисы докладов. - Новосибирск: НГУ, 2004. - С. 41-42.

11 .Легалов, А. И. Процедурно-параметрическое программирование как один из подходов к построению параллельных программ / А. И. Легалов, Д. А. Швец // В кн.: Распределенные и кластерные вычисления. Избранные материалы Третьей школы-семинара. Под ред. В.В Шайдурова - Красноярск, 2004.-С. 153-166.

12.Легалов, А. И. Использование языка Оберон-2М для эволюционного расширения программ / А. И. Легалов, Д. А. Швец // Вестник Красноярского государственного технического университета. Вып. 33. Математические методы и моделирование. Под ред. В.И.Быкова. - Красноярск: ИПЦ КГТУ, 2004.-С. 235-241.

Подписано в печать 16.12.2004. Формат бумаги 60x84 1/16

Усл. печ. л. 2,0 Тираж 100 экз. Заказ 290

Отпечатано на ризографе КГТУ 660074, Красноярск, Киренского 26

#25960

РНБ Русский фонд

2006-4 3675

Оглавление автор диссертации — кандидата технических наук Швец, Дмитрий Александрович

Содержание.

Введение.

1 Методы разработки эволюционно-расширяемых программ.

1.1 Разделение систем программирования по парадигмам.

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

1.3 Факторы, определяющие построение расширяемых программ.

1.3.1 Модули с инициализирующими блоками.

1.3.2 Пространства имен, размещаемые в нескольких единицах компиляции.

1.3.3 Классы, содержащие конструкторы и деструкторы.

1.3.4 Технология вертикального слоения.

1.3.5 Наследование и виртуализация.

1.3.6 Технология вспомогательных классов.

1.3.7 Метапрограммирование.

1.3.8 Аспект ориентированное программирование.

1.3.9 Субъектно-ориентированное программирование.

1.3.10 Связывание через интерфейсы.

1.4 Моделирование методов формирования процедурно-параметрических отношений.

1.4.1 Алгоритмы, базирующиеся на объектно-ориентированной парадигме.

1.4.2 Использование процедурного подхода для построения эволюционно расширяемых мультиметодов.

1.4.3 Сравнение объектно-ориентированной и процедурно-параметрической реализаций полиморфизма.

1.5 Перспективы развития инструментальных средств разработки эволюционно расширяемых программ.

1.6 Выводы по главе 1.

2 Методы организации программных объектов, поддерживающих процедурно-параметрическое программирование.

2.1 Используемые понятия и определения.

2.1.1 Данные обрабатываемые программой.

2.1.2 Значения данных.

2.1.3 Процедуры, используемые для обработки программных объектов.

2.1.4 Вызовы процедур.

2.2 Задача эволюционного расширения мультиметодов.

2.3 Эволюционное расширение мультиметодов в различных парадигмах программирования.

2.3.1 Расширение мультиметодов при процедурном подходе.

2.3.2 Расширение мультиметодов при объектно-ориентированном подходе.

2.3.3 Проблемы существующих подходов эволюционной разработки мультиметодов.

2.4 Основные понятия процедурно-параметрического программирования.

2.4.1 Организация параметрических обобщений.

2.4.2 Организация обобщающих параметрических процедур.

2.4.3 Организация обработчиков параметрических специализаций.

2.4.4 Экземпляр параметрического обобщения.

2.4.5 Вызовы параметрических процедур.

2.5 Классификация механизмов параметрического обобщения.

2.5.1 Способы построения параметрических обобщений.

2.5.2 Методы включения специализаций в параметрическое обобщение.

2.5.3 Методы конструирования обобщений.

2.5.4 Способы построения параметрических отношений и их отображение на обобщающие и специализированные параметрические процедуры.

2.5.5 Способы формирования тел обработчиков специализаций.

2.5.6 Способы связывания комбинаций специализаций с конкретным обработчиком.

2.5.7 Фазы формирования параметрических обобщений.

2.6 Выводы по главе 2.

3 Описание синтаксиса языка программирования с поддержкой процедурно-параметрического полиморфизма.

3.1 Языковые конструкции, поддерживающие процедурно-параметрическое программирование.

3.1.1 Организация параметрических обобщений.

3.1.2 Указатели на параметрические обобщения и специализации.

3.1.3 Обобщенные переменные.

3.1.4 Обобщающие процедуры и обработчики специализаций.

3.1.5 Вызовы обобщающих процедур.

3.1.6 Оператор WITH.

3.2 Организация трансляции процедурно-параметрических программ.

3.3 Использование языка для решения задачи эволюционного расширения.

3.3.1 Разработка основной части программы.

3.3.2 Проявление полиморфизма в клиентском модуле.

3.4 Выводы по главе 3.

4 Инструментальная поддержка процедурно-параметрической парадигмы программирования.

4.1 Оценка эффективности реализации поддержки процедурно-параметрической парадигмы программирования.

4.2 Методы повышения эффективности реализации 111111.

4.3 Инструменты процедурно-параметрического программирования.

4.3.1 Транслятор с языка 02М.

4.3.2 Компоновщик параметрических отношений.

4.3.3 Сборщик проектов.

4.3.4 Оболочка пользователя.

4.3 Выводы по главе 4.

Введение 2004 год, диссертация по информатике, вычислительной технике и управлению, Швец, Дмитрий Александрович

Повышение сложности программных систем приводит к необходимости применения более эффективных методов разработки программного обеспечения. Эффективность разработки определяется удобством сопровождения, возможностью безболезненного наращивания программного кода, возможностью повторного использования разрабатываемых программных объектов. В настоящее время наибольшее распространение получила объектно-ориентированная методология (ООМ), во многом соответствующая предъявляемым требованиям. Составной частью ООМ является объектно-ориентированное программирование (ООП). Развитие ООП практически полностью вытеснило процедурное программирование из областей, связанных с разработкой сложных программных систем, за счет возможностей обнаружения ряда ошибок на более ранних этапах построения программы. Это обусловлено расширенными возможностями статической проверки состояний объектов и их типов языками и инструментальными средствами, поддерживающими ООП [21, 79]. Поддержка расширенной работы с типами на уровне языковых и инструментальных средств явилась решающим фактором, приведшим к вытеснению процедурного программирования, несмотря на возможность моделирования объектной парадигмы средствами процедурных языков.

Тем не менее, практическое использование ОО подхода позволило выявить ряд недостатков [16, 55], в частности, сложности при реализации мультиметодов [55, 64]. Преодоление данных недостатков осуществляется путем моделирования при помощи языковых средств объектов, решающих проблемы, связанные с использованием объектно-ориентированных средств. В качестве примера подобного решения можно привести разработку образцов проектирования [37]. Однако, использование моделирования вновь сдвигает процесс обнаружения ошибок на более поздние этапы.

Одним из возможных путей преодоления недостатков объектно-ориентированной методологии является применение процедурно-параметрической парадигмы программирования [54, 55, 57, 59, 60, 67]. Опираясь на процедурный подход, данная парадигма расширяет его механизмом, поддерживающим полиморфную обработку альтернативных данных без их явного описания в теле процедуры. Этот механизм похож на полиморфизм классов, используемый в ООП. Применение данного механизма обеспечивает как эволюционное расширение программ совместно с повторным использованием написанного ранее полиморфного кода [67], так и возможность использования старых процедурных подпрограмм путем их объединения в обобщенные процедуры, обрабатывающие полиморфные типы данных [70].

Использование программных объектов, поддерживающих процедурно-параметрическое программирование, позволяет расширить функциональные возможности существующих процедурных языков, сделать их более приспособленными для разработки больших программных систем. Процедурно-параметрическую парадигму можно использовать как в качестве альтернативы объектно-ориентированному подходу, так и совместно с ООП [55].

Полноценное использование возможностей процедурно-параметрического полиморфизма (111111) возможно только при наличии поддержки 111111 на уровне языка программирования [56, 58], что позволяет организовать проверку корректности связей между программными объектами на ранних этапах построения программы.

Необходимость исследования возможностей процедурно-параметрической парадигмы обуславливает актуальность задачи создания систем программирования, поддерживающих процедурно-параметрический полиморфизм. При создании нового языка появляется возможность оценки эффективности различных способов написания программ [91, 103, 104], как с позиций необходимости генерации эффективного исполняемого кода, так и удобства использования процедурно-параметрических языковых конструкций программистом.

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

Для достижения указанной цели в работе решаются следующие основные задачи:

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

2. Исследование и сравнительный анализ методов программной реализации для различных способов поддержки процедурно-параметрического полиморфизма.

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

4. Исследование возможностей применения разработанных языковых конструкций при создании эволюционно-расширяемых программ.

Методы исследования. В диссертационной работе использовались методы дискретной математики, теории алгоритмов, теории языков и формальных грамматик, теории разработки трансляторов. Для описания синтаксиса языка программирования использовались расширенные формы

Бэкуса-Наура. При разработке языка программирования применялись методы синтаксического анализа и компиляции, методы объектно-ориентированного и процедурно-параметрического программирования.

В работе получены следующие научные результаты:

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

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

3. Разработаны языковые конструкции, поддерживающие различные способы реализации процедурно-параметрической парадигмы программирования.

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

К практическим результатам работы следует отнести:

1. Проведенные автором исследования позволили создать инструментальные средства языковой поддержки процедурно-параметрической парадигмы программирования.

2. Данные инструментальные средства обеспечили проведение практических экспериментов и дополнительный анализ методов построения процедурно-параметрических программ.

3. Полученные научные и практические результаты использованы в учебном процессе по дисциплине «Технология программирования» в Красноярском государственном техническом университете и Красноярском государственном университете.

Достоверность и обоснованность результатов диссертации подтверждаются:

- Исследованием современного состояния методологий программирования.

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

- Опытом применения разработанного инструментария для написания программ в процедурно-параметрическом стиле.

Публикации и личный вклад в решение проблемы. По теме диссертации опубликовано 12 печатных работ, из которых 8 статей, 4 тезисов докладов.

Диссертация основана на теоретических, методологических и экспериментальных исследованиях, выполненных в лаборатории каф. НейроЭВМ КГТУ. Основные теоретические и практические результаты, изложенные в работе, получены либо непосредственно автором, либо с его участием. Автором разработана структура комплекса инструментальных средств, реализована поддержка основных методик процедурно-параметрического полиморфизма, проведены исследования возможных способов реализации 1111 методологии, разработан комплекс программных средств для трансляции программ, написанных с применением исследуемых методик.

Апробация работы.

Основные положения диссертации докладывались и обсуждались на:

- межвузовских научных конференциях студентов, аспирантов и молодых ученых, Красноярск (2000,2001);

- межвузовской научной конференции, Красноярск (2002);

- IV Всероссийской конференции молодых ученых по математическому моделированию и информационным технологиям, Красноярск (2003);

- 3-ей школе-семинаре «Распределенные и кластерные вычисления», Красноярск (2003).

- международной конференции «Перспективы систем информатики» (рабочий семинар «Наукоемкое программное обеспечение»), Новосибирск, 2003;

- конференции «Технологии Microsoft в информатике и программировании», Новосибирск (2004).

Структура диссертации.

Диссертация состоит из введения, 4 глав, заключения, списка литературы и двух приложений.

Заключение диссертация на тему "Инструментальная поддержка процедурно-параметрической парадигмы программирования"

4.3 Выводы по главе 4

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

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

3. Разработка дополнительных инструментальных средства и утилит обеспечила повышение эффективности разработки программ.

4. Показана эффективность поддержки множественного и одиночного полиморфизма в системах процедурно-параметрического программирования.

Заключение

Получены следующие научные и практические результаты работы:

1. Проведен анализ методов эволюционной разработки программного обеспечения, на основании которого сделан вывод о перспективности использования процедурно-параметрической парадигмы программирования для реализации множественного полиморфизма и необходимости её инструментальной под держки.

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

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

4. Разработаны инструментальные программные средства, обеспечивающие поддержку процесса создания процедурно-параметрических программ и включающие:

- компилятор, обеспечивающий трансляцию исходных текстов процедурно-параметрических программ в объектный код;

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

- сборщик проектов, обеспечивающий генерацию скрипта для обработки объектного кода и сборки исполняемого файла;

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

Библиография Швец, Дмитрий Александрович, диссертация по теме Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей

1. Appleton, Brad Patterns and Software: Essential Concepts and Terminology http://www.enteract.com/~bradapp/docs/patterns-intro.html.

2. Beck, К ent E xtreme P rogramming E xplained: E mbrace С hange / К ent Beck Addison Wesley, 2000. - 190 pages.

3. Bobrow, D. Perspectives on Artificial Intelligence Programming. / D.Bobrow, M.Stefik // Science vol. 231, p. 951, February 1986.

4. Buschmann, F. Pattern-Oriented Software Architecture: A System of Patterns / F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal Wiley, Chichester UK-1996.

5. Component Pascal Language Report. Oberon Microsystems, Inc, 2001. -http://www.oberon.ch/prod/blackbox/

6. Czamecki, K. Generative Programming: Methods, Tools and Applications / K.Czarnecki, E.Ulrich Addisson-Wesley - 2000.

7. Goldberg, A. Smalltalk-80: The Language. / A.Goldberg, D.Robson -Reading, MA: Addison-Wesley 1989.

8. Kiczales, G. Aspect-Oriented Programming / G. Kiczales, J. Lamping, A. Mendhekar, C. Maeda, C. Lopes, J. Loingtier, J. Irwin // In proc. of ECOOP, 1997, LNCS 1241. pp. 220-242.

9. Kuzmin, D.A. Description of parallel-functional programming language. / D. A. Kuzmin, F. A. Kazakov, A. I. Legalov // Advances in Modeling & Analysis, A, AMSE Press, 1995. Vol.28. - No. 3. - pp. 1-17.

10. Leiberherr, K. Component Enhancement: An Adaptive Reusability Mechanism for Groups of Collaborating Classes / K. Leiberherr // In Information Processing'92, 12th World Computer Congress, Madrid, Spain, J. van Leeuwen (Ed.), Elsevier, 1992,-pp. 179-185.

11. Leroy, X. The Objective Caml system release 3.04/ Documentation and user's manual / X .Leroy Institut National de Recherche en Informatique et en Automatique. December 10,2001.

12. Meyer, M. Object-Oriented Software Construction. Second Edition. / M. Meyer ISE Inc. Santa Barbara (California).

13. Moessenboeck, H. Object-Oriented Programming in Oberon-2 / H. Moessenboeck Springer-Verlag. (c) 1993.

14. Moessenboeck, H. The Programming Language Oberon-2. / H. Moessenboeck, N. Wirth Institut fur Computer-systeme, ETH Zurich July 1996.

15. Plasmeijer, R. Concurrent Clean. Language Report / R. Plasmeijer, M. van Eekelen www.cs.kun.nl/~clean

16. Steele Guy L. Common Lisp the Language, 2nd Edition / Guy L. Steele Digital Press, Bedford, Massachusetts, 1990. - http://www.cs.cmu.edu/

17. Tempi, J. Metaprogramming in Oberon. / J. Tempi Diss ETH Zurich, 1994.-№ 10655,-148 p.

18. Wirth, N. The Programming Language Oberon. ftp.V/ftp.inf.ethz.ch/pub/software/Oberon/OberonV4/Docu/OberonReport.Text

19. Александреску, А. Современное проектирование на С++ / А. Александреску Пер. с англ. - М.: Издательский дом «Вильяме», 2002. - 336 с.

20. Аммерааль, JI. STL для программистов на С++ / Л. Аммерааль -Пер. с англ. М.: ДМК, 1999. - 240 с.

21. Ахо, А. Теория синтаксического анализа, перевода и компиляции: Том 1 / А. Ахо, Дж. Ульман М.: Мир. - 1978. - 612 с.

22. Бек, Кент Экстремальное программирование / Кент Бек // Открытые системы, №1-2, 2000. -http://www.osp.ru/os/2000/l-2/059.htm

23. Бен-Ари, М. Языки программирования. Практический сравнительный анализ / М. Бен-Ари Пер. с англ. - М.: Мир, 2000. - 366 с.

24. Бердж, В. Методы рекурсивного программирования. / В. Бердж -Пер. с англ. М.: Машиностроение, 1983. - 248 с.

25. Боэм, Б. Характеристики качества программного обеспечения. / Б. Боэм, Дж. Браун, X. Каспар Пер. с англ. М.: Мир, 1981. - 208 е., ил.

26. Буч, Г. Объектно-ориентированное проектирование с примерами применения. / Г. Буч Пер. с англ. - М.: Конкорд, 1992. - 519 е., ил.

27. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд. / Г. Буч Пер. с англ. - М.: "Издательства Бином", СПб: "Невский диалект", 1998 г. - 560 е., ил.

28. Вандэвурд, Д. Д. С++: справочник разработчика / Д. Д. Вандэвурд, Н. М. Джосаттис Пер. с англ. - М.: Издательский дом «Вильяме», 2003. -544 с.

29. Васкевич, Д. Стратегии клиент/сервер. Руководство по выживанию для специалистов по реорганизации бизнеса / Д. Васкевич К.: "Диалектика", 1996.-384 с.

30. Вендров, А. М. CASE технологии. Современные методы и средства проектирования информационных систем. - Сервер информационных технологий - http://www.citforum.ru/

31. Вирт, Н. Алгоритмы + структуры данных = программы / Н. Вирт -М.: Мир, 1985.

32. Вирт, Н. Программирование на языке Модула-2. / Н. Вирт Пер. с англ. - М.: Мир, 1987. - 244 с.

33. Вирт, Н. Алгоритмы и структуры данных / Н. Вирт М.: Мир,1989.

34. Вирт, Н. Долой "жирные" программы / Н. Вирт // Открытые системы. №6 (20), 1996. С. 26-31.

35. Гамма, Э. Приемы объектно-ориентированного пректирования. Паттерны проектирования. / Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес -Пер. с англ. СПб: Питер, 2001. - 368 с.

36. Горбунов-Посадов, М. М. Система открыта, но что-то мешает / М. М. Горбунов-Посадов // Открытые системы. 1996. № 6. С. 36-39. -http.V/www.osp.ru/os/l 996/06/36.htm

37. Горбунов-Посадов, М. М. Конфигурационные ориентиры на пути к многократному использованию / М. М. Горбунов-Посадов ИПМ им.М.В.Келдыша РАН. Препринт № 37, 1997.

38. Горбунов-Посадов, М. М. Облик многократно используемого компонента / М. М. Горбунов-Посадов // Открытые системы. 1998. № 3. С. 45-49. - http://www.osp.ru/os/1998/03/45.htm

39. Горбунов-Посадов, М. М. Расширяемые программы / М. М. Горбунов-Посадов-М.: Полиптих, 1999.

40. Горбунов-Посадов, М. М. Эволюция программы: структура транзакции / М. М. Горбунов-Посадов // Открытые системы. 2000, № 10. С. 43-47. - http://www.osp.ru/os/2000/10/043.htm

41. Гофман, В. Delphi 5 в подлиннике / В. Гофман, А. Хомоненко -СПб.: "BHV Санкт-Петербург", 1999. - 800 с.

42. Дал, У. Структурное программирование / У. Дал, Э. Дейкстра, К. Хоор Пер с англ. - М.: Мир, 1975. - 247 с.

43. Дейкстра, Э. Дисциплина программирования / Э. Дейкстра Пер. с англ. -М.: Мир, 1978.

44. Джехани, Н. Программирование на языке Си / Н. Джехани Пер. с англ. - М.: Радио и связь, 1988. - 272 с.

45. Джехани, Н. Язык Ада. / Н. Джехани Пер. с англ. - М.: Мир, 1988.-522 с.

46. Зиглер, К. Методы проектирования программных систем / К. Зиглер Пер. с англ. - М.: Мир, 1985. - 328 с.

47. Йордон, Э. Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте / Э. Йордон Пер. с англ. - М.: Издательство "ЛОРИ", 2000. - 256 с.

48. Катленд, Н. Вычислимость. Введение в теорию рекурсивных функций. / Н. Катленд Пер. с англ. - М.: Мир, 1983. - 256 с.

49. Кауфман, В. Ш. Языки программирования. Концепции и принципы / В. Ш. Кауфман М.: Радио и связь, 1993. - 432 с.

50. Крюков, А. П. Программирование на языке R-Лисп / А. П. Крюков, А. Я. Родионов, А. Ю. Таранов М.: Радио и связь, 1991. - 192 с.

51. Легалов, А.И. Сочетание процедурного и объектного подходов при разработке программ / А. И. Легалов // Вестник Красноярскогогосударственного технического университета. Сб. научных трудов. Вып. 10. -Красноярск, 1997.-С. 102-109.

52. Легалов, А. И. Процедурно-параметрическое программирование / А. И. Легалов // В кн.: Проблемы информатизации региона. ПИР-99: Сб. научных трудов пятой Всероссийской научно-практической конференции. -Красноярск: КГТУ, 1999. С. 13-27.

53. Легалов, А. И. Процедурно-параметрическая парадигма программирования. Возможна ли альтернатива объектно-ориентированному стилю? // А. И. Легалов Красноярск: 2000. Деп. рук. № 622-В00 Деп. в ВИНИТИ 13.03.2000. - 43 с.

54. Легалов, А. И. Методы реализации процедурно-параметрического полиморфизма / А. И. Легалов // В кн.: Проблемы информатизации региона. ПИР-2000: Тез. докл. Шестой Всероссийской научно-практической конференции. Красноярск: КГТУ, 2000. - С. 69-71.

55. Легалов, А. И. Объекты процедурно-параметрической программы / А. И. Легалов // В кн.: Проблемы информатизации региона. ПИР-2000: Тез. докл. Шестой Всероссийской научно-практической конференции. -Красноярск: КГТУ, 2000. С. 75-77.

56. Легалов, А. И. Особенности процедурно-параметрической парадигмы программирования / А. И. Легалов // Радиоэлектроника. Информатика. Управление. № 1 (5), 2001 С. 102-106.

57. Легалов, А. И. Средства программирования на языке Оберон-2М / А. И. Легалов, Д. А. Швец // В кн.: Проблемы информатизации региона. ПИР-2001: Сб. науч. трудов. Красноярск: ИПЦ КГТУ, 2002. - С. 61-67.

58. Легалов, А. И. ООП, мультиметоды и пирамидальная эволюция / А. И. Легалов // Открытые системы. № 3 (март) 2002. С. 41-45.

59. Легалов, А. И. Мультиметоды и парадигмы / А. И. Легалов // Открытые системы. № 5 (май), 2002. С. 33-37.

60. Легалов, А. И. Средства программирования на языке Оберон-2М. / А. И. Легалов, Д. А. Швец // В кн.: Проблемы информатизации региона. ПИР-2001: Сб. науч. трудов. Красноярск: ИПЦ КГТУ, 2002. - С. 61-67.

61. Легалов, А. И. На пути к переносимым параллельным программам / А. И. Легалов, Ф. А. Казаков, Д. А. Кузьмин, Д. В. Привалихин // Открытые системы. 2003. - № 5. - С. 36-42.

62. Легалов, А. И. Языковая поддержка эволюционного расширения программ / А. И. Легалов, Д. А. Швец // Доклады СО АН ВШ, №2 (8), июль-декабрь, 2003. С. 102-114.

63. Легалов, А. И. Процедурный язык с поддержкой эволюционного проектирования / А. И. Легалов, Д. А. Швец // В кн.: Научный вестник НГТУ, №2(15), 2003.-С. 25-38.

64. Лингер, Р. Теория и практика структурного программирования / Р. Лингер, X. Миллс, Б. Уитт М.: Мир, 1982. - 406 с.

65. Льюис, Ф. Теоретические основы проектирования компиляторов / Ф. Льюис, Д. Розенкранц, Р. Стирнз М.: Мир, 1979.

66. Маккиман, У. Генератор Компиляторов / У. Маккиман М.: Статистика, 1980.

67. Маклаков, С. В. BPwin и ERwin. CASE-средства разработки информационных систем / С. В. Маклаков М.: ДИАЛОГ-МИФИ, 1999. -256 с.

68. Маслов, В.В. Основы программирования на языке Перл / В. В. Маслов М.: Радио и связь, Горячая линия - Телеком, 1999. - 144 с.

69. Маурер, У. Введение в программирование на языке ЛИСП / У. Маурер М.: Мир, 1976. - 104 с.

70. Мейерс, С. Эффективное использование С++. 50 рекомендаций по улучшению ваших программ и проектов / С. Мейерс Пер. с англ. - М.: ДМК, 2000.-240 с.

71. Мейерс, С. Наиболее эффективное использование С++. 35 новых рекомендаций по улучшению ваших программ и проектов / С. Мейерс Пер. с англ. - М.: ДМК Пресс, 2000. - 304 с.

72. Мейерс, С. Эффективное использование STL. Библиотека программиста / С. Мейерс СПб.: Питер, 2002. - 224 с.

73. Немюгин, С. Изучаем Turbo Pascal / С. Немюгин, Л. Перколаб -СПб., Питер, 2000.

74. Нортон П. Программирование на Java. Руководство П.Нортона (в 2-х томах) / П. Нортон "СК-Пресс", 1998 - 900 с.

75. Остераут, Дж. Сценарии: высокоуровневое программирование для XXI века / Дж. Остераут // Открытые системы. №3,1998.

76. Пешио К. Никлаус Вирт о культуре разработки ПО / К. Пешио // Открытые системы. №1,1998. С. 41-44.

77. Райтингер, М. Visual Basic 6: полное руководство / М. Райтингер -Киев: "BHV-Киев", 1999. 720 с.

78. Рогаткин, Д. Borland Pascal в среде Windows / Д. Рогаткин, А. Федоров Киев: Диалектика, 1993. - 511 с.

79. Роджерсон, Д. Основы СОМ / Д. Роджерсон Пер. с англ. - М.: Издательский отдел "Русская редакция" ТОО "Channel Trading Ltd.", 1997. -376 с.

80. Сибуя, М. Алгоритмы обработки данных / М. Сибуя, Т. Ямамото -Пер. с япон. М.: Мир, 1986. - 218 с.

81. Спенсер, Пол XML. Проектирование и реализация. / Пол Спенсер Москва, Лори. - 2001. - 509 с.

82. Стерлинг, Л. Искусство программирования на языке Пролог / Л. Стерлинг, Э. Шапиро Пер с англ. - М.: Мир, 1990. - 235 с.

83. Страуструп, Б. Язык программирования С++. Третье издание, / Б. Страуструп Пер. с англ. - СПб.; М.: "Невский диалект" - "Издательство БИНОМ", 1999.-991 с.

84. Страуструп, Б. Дизайн и эволюция С++ / Б. Страуструп Пер. с англ. - М.: ДМК Пресс, 2000. - 448 с.

85. Троелсен, Э. С. С# и платформа .NET. Библиотека программиста / Э. С. Троелсен СПб.: Питер, 2003. - 800 с.

86. Фокс, Дж. Программное обеспечение и его разработка / Дж. Фокс -М.: Мир, 1985.-368 с.

87. Фролов, Г.Д. Практический курс программирования на языке PL/1 / Г. Д. Фролов, В. Ю. Олюнин М.: Наука, 1983.

88. Фуксман, А. Л. Технологические аспекты создания программных систем / A. JI. Фуксман М.: Статистика, 1979. - 184 с.

89. Хендерсон, П. Функциональное программирование. Применение и реализация / П. Хендерсон Пер. с англ. - М.: Мир. - 1983. - 349 с.

90. Хиллер, С. Microsoft Visual Basic, Scripting Edition в действии. / С. Хиллер Пер. с англ. - СПб.: Питер, 1997. - 448 с.

91. Холстед, М. X. Начала науки о программах. / М. X. Холстед Пер. с англ. - М.: Финансы и статистика, 1981. - 128 с.

92. Цикритзис, Д. Модели данных / Д. Цикритзис, Ф. Лоховски Пер. с англ. - М.: Финансы и статистика, 1985. - 344 с.

93. Ческис, В. Л. Динамическое формирование объектов / В. Л. Ческис // Программист, № 10, 2002.

94. Ю1.Шалыто, А. А. SWITCH-технология. Алгоритмизация и программирование задач логического управления / А. А. Шалыто СПб.: Наука, 1998. - 628 с.

95. Шалыто, А. А. Преобразование итеративных алгоритмов в автоматные / А. А. Шалыто, Н. И. Туккель // Программирование, 2002, №5. -С.12-26.

96. Швец, Д. А. Система программирования на языке 02М / Д. А. Швец // В кн.: IV Всероссийская конференция молодых ученых по математическому моделированию и информационным технологиям: Программа и тезисы докладов. Красноярск, 2003. - С. 67.

97. Швец, Д. А. Инструментальная поддержка языка программирования 02М / Д. А. Швец // В кн.: Технологии Microsoft винформатике и программировании: Тезисы докладов. Новосибирск: НГУ, 2004.-С. 41-42.

98. ПО.Шлеер, С. Объектно-ориентированный анализ: моделирование мира в состояниях / С. Шлеер, С. Меллор Пер. с англ. - Киев: Диалектика, 1993.-240 с.

99. Ш.Шукла, Д. АОП: Более эффективная инкапсуляция и повторное использование кода / Д. Шукла, С. Ф. К. Селлз // MSDN Magazine / Русская редакция. 2002. Спецвыпуск №1.

100. Элджер, Дж. С++: библиотека программиста / Дж. Элджер Пер. с англ. - СПб.: ЗАО "Издательство Питер", 1999. - 320 с.

101. Якобсон, А. Унифицированный процесс разработки программного обеспечения / А. Якобсон, Г. Буч, Дж. Рамбо СПб.: Питер, 2002. - 496 с.