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

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

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

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

БОВКУН Александр Яковлевич

4843

277

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

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

АВТОРЕФЕРАТ

диссертации на соискание ученой степени кандидата технических наук

2 7 г г ■ "т;-!

/ л по ¿и К

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

4843277

Работа выполнена в Федеральном государственном автономном образовательном учреждении высшего профессионального образования «Сибирский федеральный университет»

Научный руководитель: доктор технических наук, профессор

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

Официальные оппоненты: доктор технических наук, профессор

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

кандидат физико-математических наук Епихии Андрей Михайлович

Ведущая организация: Институт систем информатики

имени А. П. Ершова СО РАН (г. Новосибирск)

Защита состоится «28» января 2011 г. в 14 часов на заседании диссертационного совета ДМ 212.099.05 при Сибирском федеральном университете по адресу: г. Красноярск, ул. Киренского, 26, ауд. УЖ 115.

С диссертацией можно ознакомиться в научной библиотеке ФГАОУ ВПО «Сибирский федеральный университет».

Ученый секретарь диссертационного совета

Непомнящий О.В.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4

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

Научная новизна.

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

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

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

Практическая ценность.

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

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

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

Положения, выносимые на защиту.

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

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

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

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

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

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

Апробация работы. Основные положения диссертации докладывались и обсуждались на: межвузовских научных конференциях студентов, аспирантов и молодых ученых, Красноярск (2007, 2008, 2009, 2010); всероссийских научно-методических конференциях и выставках «Повышение качества высшего профессионального образования», Красноярск (2008, 2009, 2010); 3-й всероссийской конференции «Винеровские чтения», Иркутск, 2009; всероссийской конференции студентов, аспирантов и молодых ученых с международным участием «Молодежь и современные информационные технологии», Томск, 2010.

Структура диссертации. Диссертация состоит из введения, четырех разделов, заключения, списка литературы и трех приложений. Работа содержит 124 страницы основного текста, 32 рисунка, 1 таблицу. Список литературы содержит 80 наименований.

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

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

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

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

М = <Р|,Ь Р|,2, ..., Рд,..., Рм,>,

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

Фаза трансляции Ру задает отображение входного представления модели зависимостей программы в выходное представление Бу:

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

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

7

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

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

Рисунок 1 - Фазы преобразования программы языка программирования С

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

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

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

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

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

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

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

- имена создаваемых понятий;

- операции по формированию программных объектов;

- связи, определяющие зависимости между объектами;

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

объектами:

1) иерархические отношения реализуются за счет вложения одних объектов в другие;

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

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

// Основа специализации «Круг»

struct Circle { int г;

};

// Обобщение «Фигура»

struct Shape { int key;

enum color = {BLACK, WHITE}s union {

Circle c;

};

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

Circle j-—ч г —. -(struct)-( int )

i W^i

I___________________.—j

Рисунок 2 - Модель зависимостей понятий: а - начальная; б - модифицированная

Расширим существующее обобщение за счет добавления прямоугольника. Это приведет к изменению обобщения Shape, а также модуля, в котором оно находится. Помимо этого добавляемое описание прямоугольника также изменяет этот модуль:

// Основа специализации «Круг» struct Circle { int r;

};

// Добавляемая основа специализации «Прямоугольник»

struct Rectangle { int х, у;

};

// Обобщение «Фигура»

struct Shape { int key;

enum color = {BLACK, WHITE); union {

Circle c;

Rectangle г/

}>

};

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

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

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

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

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

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

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

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

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

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

12

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

Для анализа различных вариантов трансформации процедурно-параметрической программы были рассмотрены модели трансформации ранее существующих языков программирования и зависимости, выстраиваемые между программными объектами в ходе трансляции. В результате был уточнен и модифицирован процедурно-параметрический язык программирования Alien. Язык программирования Alien является расширением предыдущей разработки языка процедурно-параметрического программирования 02М. Во многом сохраняя языковые конструкции 02М, Alien расширяет возможности эволюционного расширения с помощью поддержки обобщенных записей и подключаемых модулей (рисунок 3).

/-<Base)

System

_In

_ Out

<Alien>

-Ml<module>

import

-< type >

System)

ID

Out )

Circle

,- < record )— —

I Rectan3'e<7i^?d>- -

array

Shape^~case —( Cirele

Rectangle)

const )-

var )—

M2,

module)-

-4-< attach")-( mi )

Tria"3|e< record >—

add

M3

Shape ) Triangle )

Рисунок 3

- Обобщенная модель зависимостей модульной структуры языка программирования Alien 13

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

- использование общего промежуточного представления;

- применение раздельной обработки модулей;

- подход на основе динамически загружаемых модулей.

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

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

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

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

14

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

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

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

Рисунок 5 - Вариант реализации методов трансформации исходного текста программы на основе раздельной обработки

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

Преимуществом такого подхода является простота реализации. Генерация промежуточного представления и объектного кода осуществляется для каждого модуля в отдельности и не требует дополнительной компоновки.

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

15

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

Рисунок 6 - Вариант реализации методов трансформации исходного текста программы на основе динамически загружаемых модулей

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

К недостаткам подхода следует отнести необходимость строгой проверки интерфейсов загружаемого модуля на совместимость со всеми клиентскими модулями. Если модули-клиенты не совместимы с новой версией модуля, то он не может быть загружен в память до тех пор, пока все клиенты не будут адаптированы к его новой версии (как минимум, перекомпилированы).

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

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

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

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

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

^-<Base><

System

_In

_ Out

-Ml<module>-

. M3

import

s—(Systi

>r-Œ

System)

)

Out )

Circle

-^declarations—type V Rectang|e<

< record '

Trla"3le<7icörd>f- -■—■( array"-)— — ^aPe<specializationsV—( circle ) *—(Rectangle)

const )-

Triangle ) (

KlnitializationBlock>

IT

7Z>- -Ca"<operatoi^-

XFinalizationBlock)—

Рисунок 7 - Обобщенная результирующая модель зависимостей модульной структуры языка программирования Alien

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

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

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

- транслятор с языка программирования Alien;

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

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

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

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

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

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

18

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

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

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

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

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

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

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

1 Бовкун, А. Я. Расширение модульной структуры программы за счет подключаемых модулей / А. Я. Бовкун, А. И. Легалов, И. А. Легалов // Доклады академии наук высшей школы Российской Федерации. -Новосибирск : НГТУ, 2010. - С. 114-125.

2 Бовкун, А. Я. Методы динамической классификации при работе с информацией / А. Я. Бовкун И Повышение качества высшего профессионального образования : материалы Всерос. науч.-метод. конф. с междунар. участием : в 2 ч. Ч. 1, - Красноярск : СФУ, 2007. - С. 270-271.

3 Бовкун, А. Я. О моделировании процесса конструирования программных объектов (г. Красноярск) / А. Я. Бовкун // Материалы 3-й Всерос. конф. «Винеровские чтения» [Эл. ресурс]. - Иркутск, 2009.

4 Бовкун, А. Я. Инструментальная поддержка динамических классификаторов / А. Я. Бовкун // Молодежь и наука: начало XXI века: материалы III Всерос. науч.-техн. конф. студентов, аспирантов и молодых ученых : в 4 ч. Ч. 1. - Красноярск : СФУ, 2007. - С. 75-78.

5 Бовкун, А. Я. Создание программных объектов в инструментальных средах / А. Я. Бовкун // Молодежь и наука: начало XXI века : сб. материалов Всерос. науч.-метод. конф. студентов, аспирантов и молодых ученых : в 5 ч.

19

Ч. 2 / сост. О. А. Половинкина; МИОЦ ФГОУ ВПО СФУ. - Красноярск, 2008.-С. 14-16.

6 Бовкун, А. Я. Методы динамической классификации при работе с информацией / А. Я. Бовкун // Повышение качества высшего профессионального образования : материалы Всерос. науч.-метод. конф. : в 2 ч. Ч. 1 / науч. ред. В. И. Колмаков; отв. за вып. С. А. Подлесный. -Красноярск : СФУ, 2008. - С. 216-218.

7 Бовкун, А. Я. Обучение современным методам разработки программного обеспечения на основе обобщенной модели конструирования понятий / А. Я. Бовкун, А. И. Легалов // Повышение качества высшего профессионального образования : материалы Всерос. науч.-метод. конф. : в 3 ч. Ч. 1 / отв. ред. С. А. Подлесный. - Красноярск : ИПК СФУ, 2009. -С. 66-69.

8 Бовкун, А. Я. Модель конструирования понятий как основа модульной структуры программы / А. Я. Бовкун // Проблемы информатизации региона. ПИР-2009 : материалы одиннадцатой Всерос. науч.-практ. конф., Красноярск, 2-3 ноября 2009 г. / под ред. д.т.н. Г. А. Доррера; отв. за выпуск к.т.н. Л. Д. Якимова. - Красноярск : РИЦ СибГТУ, 2009. - С. 105-107.

9 Бовкун, А. Я. О моделировании процесса конструирования программных объектов / А. Я. Бовкун // Молодежь и наука: начало XXI века: сб. материалов Всерос. науч.-метод. конф. студентов, аспирантов и молодых ученых : в 5 ч. Ч. 2 / сост. О. А. Половинкина; МИОЦ ФГОУ ВПО СФУ. -Красноярск, 2009.

10 Бовкун, А. Я. Исследование характеристик модульной структуры программы / А. Я. Бовкун, И. А. Легалов // Молодежь и современные информационные технологии : сб. тр. VIII Всерос. науч.-практ. конф. студентов, аспирантов и молодых ученых «Молодежь и современные информационные технологии», Томск, 3-5 марта 2010 г., ч. 2. - Томск : Изд-во СПБ Графике. - 132-133 с.

Подписано в печать 23.12.2010 Формат 60x84/16. Усл. печ. л. 1,1 Тираж 100 экз. Заказ № 2895

Отпечатано в полиграфическом центре Библиотечно-издательского комплекса Сибирского федерального университета 660041, г. Красноярск, пр. Свободный, 82а

Оглавление автор диссертации — кандидата технических наук Бовкун, Александр Яковлевич

Содержание.

Введение.

1 Анализ методов эволюционного конструирования понятий.

1.1 Обзор общих методов трансформации понятий.

1.2 Трансформация понятий при эволюционной разработке программного обеспечения.

1.3 Модель трансформации понятий.

1.4 Пример фаз преобразования программы.

1.5 Модификация понятий в процессе трансформации исходной программы.

1.6 Модель зависимостей понятий.

1.7 Графическое представление модели зависимости понятий.

1.8 Описание элементов модели зависимостей понятий.

1.9 Описание исходных зависимостей для различных парадигм программирования.

1.10 Выводы.

2 Анализ методов реализации эволюционного конструирования модульной структуры программы.

2.1 Существующие методы организации модульных структур.

2.1.1 Модульное программирование.

2.1.2 Модульность в немодульных языках.

2.2 Трансформация понятий в модульных программах.

2.2.1 Трансформация понятий в языках программирования Оберон и Оберон-2.

2.2.2 Трансформация понятий в языке программирования 02М.

2.3 Особенности применения подключаемых модулей.

2.4 Анализ трансформации понятий процедурно-параметрической программы на основе подключаемых модулей.

2.4.1 Использование общего промежуточного представления.

2.4.2 Использование раздельной обработки.

2.4.3 Использование динамически загружаемых модулей.

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

2.6 Выводы.

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

3.1 Трансформация понятий процедурно-параметрической программы в языке Alien.

3.2 Трансформация модульной структуры.

3.3 Трансформация параметрических обобщений.

3.4 Трансформация обобщенных записей.

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

3.6 Результирующая модель зависимостей.

3.7 Выводы.

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

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

4.1.1 Транслятор с языка Alien.

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

4.2 Объектная модель транслятора.

4.2.1 Объекты транслятора.

4.2.2 Промежуточная модель.

4.2.3 XML-представление.

4.3 Организация массивов.

4.3.1 Обычные массивы.

4.3.2 Открытые массивы.

4.4 Выводы.

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

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

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

Процедурно-параметрическое программирование (111111) [9, 10], как и ООП, рассчитано на гибкое расширение существующих альтернативных структур данных и процедур, осуществляющих их обработку. Но в отличие от ООП оно эффективно поддерживает и множественный полиморфизм, что обеспечивает гибкое эволюционное изменение мультиметодов [11, 12].

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

Несмотря на проработку языковых конструкций и общих методов их создания [13-15], отсутствует сравнительный анализ различных методов наращивания базовых программных объектов. В частности, эволюционное расширение на основе подключаемых модулей [16] требует более подробного исследования приемов, обеспечивающих реализацию данного подхода. Отсутствует четкое понимание построения модульных программ в ✓ сочетании с процедурно-параметрическим подходом. Несмотря на детальную проработку концепции эволюционного расширения, недостаточно подробно исследованы приемы и алгоритмы генерации объектного кода и компоновки,. Не определено, на каких этапах процесса трансляции и каким образом осуществлять преобразование эволюционно написанной процедурно-параметрической программы в обычный процедурный код.

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

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

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

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

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

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

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

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

Научная новизна.

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

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

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

Практическая ценность.

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

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

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

Положения, выносимые на защиту.

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

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

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

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

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

Диссертация основана на теоретических, методологических и экспериментальных исследованиях, выполненных на кафедре «Вычислительная техника» ФГАОУ ВПО «Сибирский федеральный университет». Основные теоретические и практические результаты, изложенные в работе, получены либо непосредственно автором, либо с его участием. Автором предложена модель трансформации понятий, поддерживающая эволюционную разработку процедурно-параметрических программ. Им разработан транслятор языка процедурно-параметрического программирования, реализована поддержка основных методик процедурно-параметрического программирования, проведены исследования возможных способов реализации подхода с использованием подключаемых модулей и расширения модульных структур процедурно-параметрических программ.

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

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

- всероссийских научно-методических конференциях и выставках «Повышение качества высшего профессионального образования», Красноярск (2008, 2009, 2010);

- 3-й всероссийской конференции «Винеровские чтения», Иркутск,

2009;

- всероссийской конференции студентов, аспирантов и молодых ученых с международным участием «Молодежь и современные информационные технологии», Томск, 2010.

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

Диссертация состоит из введения, четырех разделов, заключения, списка литературы и четырех приложений. Работа содержит 124 страницы основного текста, 32 рисунка, 1 таблицу. Список литературы содержит 80 наименований.

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

4.4 Выводы

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

2) Для анализа и оптимизации промежуточного представления разработан блок транслятора, отвечающий за генерацию промежуточного представления в формате XML.

Заключение

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

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

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

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

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

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

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

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

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

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

4. Бадд, Т. Объектно-ориентированное программирование в действии / Т. Бадд. СПб.: Питер, 1997.

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

6. 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.

7. Colyer, A. Eclipse AspecU: Aspect-Oriented Programming with AspecU and the Eclipse AspecU Development Tools / A. Colyer, A. Clement, G. Harley, M. Webster. Addison Wesley Professional. - 2004.

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

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

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

11. Легалов, А. И. Методы поддержки параметрического полиморфизма / А. И. Легалов // Научный вестник НГТУ. — 2004. — № 3 (18). -С. 73-82.

12. Легалов, А. И. Языковая поддержка процедурно-параметрического программирования / А. И. Легалов, Д. А. Швец, И. А. Легалов // Проблемы информатизации региона, ПИР-2005 : материалы девятой науч.-практ. конф. — Красноярск.-2005. -С. 169-175.

13. Легалов, И. А. Применение обобщенных записей в процедурно-параметрическом языке программирования / И. А. Легалов // Научный вестник НГТУ. 2007. - № 3 (28). - С. 25-38.

14. Бовкун, А. Я. Расширение модульной структуры программы за счет подключаемых модулей / А. Я. Бовкун, А. И. Легалов, И. А. Легалов // Доклады академии наук высшей школы Российской Федерации. — Новосибирск : НГТУ, 2010. С. 114-125.

15. Процедурное программирование. Материал из Википедии — свободной энциклопедии Электронный ресурс. — Режим доступа: http://ru.wikipedia.org/wiki/ Процедурноепрограммирование. — Загл. с экрана.

16. Легалов, А. И. Разнорукое программирование // А. И. Легалов. — http://www.softcraft.ru/paradigm/dhp/index.shtml

17. Филд, А. Функциональное программирование : пер. с англ. //

18. A. Филд, П. Харрисон. М. : Мир, 1993. - 637 с, ил.

19. Майерс, Г. Архитектура современных ЭВМ : В 2-х кн. / Г. Майерс. — М.: Мир, 1985.-364 с.

20. Браун, П. Макропроцессоры и мобильность программного обеспечения / П. Браун // Серия: Математическое обеспечение ЭВМ ; пер. с англ. М. : Мир, 1977. - 253 с.

21. Tom Swan. Mastering Turbo Assembler. Carmel, Indiana: Howard W. Sams & Company, Hayden Books division of Macmillan Computer Publishing, 1989.

22. Сван, Т. Освоение Turbo Assembler. 2-е изд. / Т. Сван. — Киев : Диалектика, 1996. 540 с.

23. American Standard FORTRAN. Approved March 7, 1966, N. Y., 1966.

24. Калдербенк, В. Дж. Курс программирования на фортране-IV /

25. B. Дж. Калдербенк. — М. : Энергия, 1976.

26. P. Naur, "Report on the Algorithmic Language ALGOL 60," Comm. ACM, May 1960, pp. 299-314.

27. Наур, П. Алгоритмический язык АЛГОЛ 60 / П. Ilayp. М. : Мир,1965.

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

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

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

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

32. Голуб, А. И. С, С++. Правила программирования / А. И. Голуб. -М. : Бином, 1996.

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

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

35. Горбунов-Посадов, M. М. Система открыта, но что-то мешает / M. М. Горбунов-Посадов // Открытые системы. — 1996. — № 6. С. 36-39.

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

37. Горбунов-Посадов, M. М. Облик многократно используемого компонента / M. М. Горбунов-Посадов // Открытые системы. — 1998. — № 3. — С. 45-49.

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

39. Горбунов-Посадов, M. М. Эволюция программы: структура транзакции / M. М. Горбунов-Посадов // Открытые системы. 2000. - № 10. -С. 43-47.

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

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

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

43. Abrahams, D. С++ Template Metaprogramming: Concepts, Tools and Techniques from Boost and Beyong. / D. Abrahams, A. Gurtovoy — Boston, Addison-Wesley. 2005. - 373 pp.

44. Vlissides John. Pattern hatching: design pattern applied. / Addison Wesley, 172 pages, 1998.

45. Влиссидес, Дж. Применение шаблонов проектирования. Дополнительные штрихи : пер. с англ. / Дж. Влиссидес. М. : Издательский дом «Вильяме», 2003. - 144 с.

46. Steele, G. L. Common Lisp the Language, 2nd Edition. / G. L. Steele — Digital Press, Bedford, Massachusetts, 1990. http://www.cs.cmu.edu/.

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

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

49. Керниган, Б. В. Язык С / Б. В. Керниган, Д. М. Ричи. Невский Диалект, 2000. - 352 с.

50. Полиморфизм (программирование). Материал из Википедии — свободной энциклопедии Электронный ресурс. Режим доступа: http://ru.wikipedia.org/wiki/Пoлимopфизм(пpoгpaммиpoвaниe). — Загл. с экрана.

51. Кристиансен, Т., Программирование на Perl / Т. Кристиансен, Д. Орвант, Л. Уолл. М. : Символ-Плюс, 2004. - 1145 с.

52. Сузи, Р. А. Язык программирования Python / Р. А. Сузи. БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий. ИНТУИТ.ру. - 2006. - 328 с.

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

54. Затуливетер, Ю. С. ПАРСЕК язык компьютерного исчисления древовидных структур с открытой интерпретацией. Стендовый вариант системы программирования / Ю. С. Затуливетер, Т. Г. Халатян. - М., 1997 (Препринт/Институт проблем управления РАН).

55. Вирт, Н. Алгоритмы и структуры данных. Новая версия для Оберона : пер. с англ. / Н. Вирт. М. : ДМК-Пресс, 2010. - 272 с.

56. Модуль (программирование). Материал из Википедии — свободной энциклопедии Электронный ресурс. — Режим доступа: http://ru.wikipedia.org/wiki/Moдyль(пpoгpaммиpoвaниe). — Загл. с экрана.

57. Grogono P. Why One Source File Is Better Than Two. / SEA 2000 -Software Engineer-ing and Applications (Las Vegas, Nevada, USA, November 2000), Proceedings of the IASTED International Conference. ACTA Press. -2000. - pp. 243-249.

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

59. Moessenboeck, H. The Programming Language Oberon-2 / H. Moessenboeck, N. Wirth. Institut fur Computersysteme, ETH Zurich July. -1996.

60. Component Pascal Language Report. Oberon Microsystems, Inc, 2001.

61. BlackBox. Электронный ресурс. — Режим доступа: http://www.oberon.ch/blackbox. html. — Загл. с экрана.

62. Сайт компании Oberon Microsystems, посвященный языку программирования Component Pascal http://www.oberon.ch/

63. Саммерфильд, М. Программирование на Python 3. Подробное руководство : пер. с англ. / М. Саммерфильд. — СПб. : Символ-Плюс, 2009. -608 с.

64. Radensky, A. Module embedding Электронный ресурс. / A. Radensky ' Режим доступа: http://wwwl.chapman.edu/~radenski/research/papers/module.pdf. . Загл. с экрана.

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

66. Wirth, N. The Programming Language Oberon. / N. Wirth -ftp://ftp.inf.ethz.ch/pub/software/Ober0n/OberonY4/Docu/OberonReport.Text/.

67. Wirth, N. Programming in Oberon. A derivative of Programming in Modula-2 (1982). /N. Wirth- http://www.oberon.ethz.ch/wirthPiO/.

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

69. Платт, Д. С. Знакомство с Microsoft .NET / Д. С. Платт ; пер. с англ. -М. : Издательско-торговый дом "Русская Редакция", 2001. — 240 е.: ил.

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

71. Рихтер, Дж. CLR via С#. Программирование на платформе Microsoft .NET Framework 2.0 на языке С#. Мастер-класс / Дж. Рихтер ; пер. с англ. -М. : Издательство «Русская редакция» ; СПб. : Питер, 2007. 656 стр.: ил.

72. Гуннерсон, Э. Введение в С#. Библиотека программиста / Э. Гуннерсон. СПб. : Питер, 2001.-304 с.

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

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

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

76. Леоненков, А. В. Самоучитель UML / А. В. Леоненков. СПб. : БХВ-Петербург, 2001.-304 с.

77. Ларман, К. Применение UML 2.0 и шаблонов проектирования. Введение в объектно-ориентированный анализ и проектирование / К. Ларман. -М. : Издательский дом «Вильяме». — 2008. 736 с.

78. Лешек А. Мацяшек. Анализ и проектирование информационных систем с помощью UML 2.0. Третье изд. / А. Лешек Мацяшек. — М. : Издательский дом «Вильяме». 2008. - 816 с.

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