Библиотечная поддержка эволюционной разработки программных продуктов
|
Введение 4
1 Особенности процедурно-параметрической парадигмы программирования 8
2 Моделирование процедурно-параметрического стиля для простых ситуаций расширения программ 12
2.1 Расширение обобщения добавлением новой специализации 13
2.2 Добавление новой процедуры, обеспечивающей дополнительную функциональность 14
2.3 Добавление новых полей данных в существующие типы и изменение в соответствии с этим процедур 16
2.4 Добавление процедуры, предназначенной для обработки конкретных специализаций внутри обобщений 17
2.5 Добавление процедуры, осуществляющей выборочный вывод из контейнера 18
2.6 Добавление мультиметодов 19
2.7 Изменение мультиметодов при добавлении специализаций 20
3 Реализация паттернов с применением процедурно-параметрического стиля..21
3.1 Паттерн «Фасад» 21
3.2 Паттерн «Адаптер» 22
3.3 Паттерн «Декоратор» 23
3.4 Паттерн «Прокси» 23
3.5 Паттерн «Компоновщик» 24
3.6 Паттерн «Итератор» 26
3.7 Паттерн «Приспособленец» 27
3.8 Паттерн «Фабричный метод» 28
3.9 Паттерн «Прототип» 29
4 Библиотека макроопределений 30
5 Сравнение объема кода с применением макробиблиотеки и без нее 34
Заключение 36
Список использованных источников 37
Приложение
1 Особенности процедурно-параметрической парадигмы программирования 8
2 Моделирование процедурно-параметрического стиля для простых ситуаций расширения программ 12
2.1 Расширение обобщения добавлением новой специализации 13
2.2 Добавление новой процедуры, обеспечивающей дополнительную функциональность 14
2.3 Добавление новых полей данных в существующие типы и изменение в соответствии с этим процедур 16
2.4 Добавление процедуры, предназначенной для обработки конкретных специализаций внутри обобщений 17
2.5 Добавление процедуры, осуществляющей выборочный вывод из контейнера 18
2.6 Добавление мультиметодов 19
2.7 Изменение мультиметодов при добавлении специализаций 20
3 Реализация паттернов с применением процедурно-параметрического стиля..21
3.1 Паттерн «Фасад» 21
3.2 Паттерн «Адаптер» 22
3.3 Паттерн «Декоратор» 23
3.4 Паттерн «Прокси» 23
3.5 Паттерн «Компоновщик» 24
3.6 Паттерн «Итератор» 26
3.7 Паттерн «Приспособленец» 27
3.8 Паттерн «Фабричный метод» 28
3.9 Паттерн «Прототип» 29
4 Библиотека макроопределений 30
5 Сравнение объема кода с применением макробиблиотеки и без нее 34
Заключение 36
Список использованных источников 37
Приложение
В настоящее время существуют различные подходы к написанию компьютерных программ, определяемые как парадигмы программирования. Каждый из них определяет свой понятийный аппарат, инструменты, стиль формирования конструкций, написания кода, правила выполнения задач, которые программист ставит во время создания программы. Безусловно, можно подойти к определению парадигм, как философии мышления в программировании, но более оправданным следует считать их одним из инструментов, грамотное использование которых может повысить скорость и эффективность разработки.
Важным чертой современных языков программирования является то, что почти все из них являются мультипарадигменными. В связи с этим сделать однозначный вывод об эффективности той или иной парадигмы на основе высокой популярности языка не представляется возможным. Помимо этого, особенность любой парадигмы в том, что каждая из них позволяет наиболее эффективно решать лишь часть возникающих перед программистом задач. Поэтому изучение различных подходов к программированию достойно внимания.
Одной из достаточно молодых, но перспективных является процедурно-параметрическая (ПП) парадигма [1,2]. В ее основе лежит параметрический полиморфизм, позволяющий процедурам принимать и обрабатывать вариантные типы данных, без алгоритмического выбора альтернатив внутри этих процедур. Алгоритмическая обработка вариантов осуществляется с применением условных операторов или переключателей. Данный подход является развитием методов процедурного программирования и служит альтернативой объектно-ориентированному программированию.
Первым реальным воплощением ПП парадигмы стал язык программирования O2M, являющийся непосредственным расширением языка Оберон-2 [3]. В нем сохраняется поддержка объектно-ориентированного стиля предшественника, но наряду с конструкциями данной парадигмы в нем реализованы дополнительные абстракции, поддерживающие процедурно-параметрическую парадигму.
Другой, более узкоспециализированной ветвью развития ПП парадигмы стала разработка экспериментального языка Alien [4] с синтаксисом, аналогичным синтаксису языка Оберон-2 и поддерживающим только процедурную парадигму. Поддержка ППП реализована путем добавления в процедурный язык конструкций, ориентированных на эволюционное [5] расширение типов данных и процедур.
В ходе работы с данными языками можно на практике ознакомиться с основными идеями ПП-парадигмы и развивать исследование параметрического подхода в различных направлениях. Помимо этого, предложены подходы написания ПП программ на традиционных языках программирования [1, 6]. Вместе с тем эффективность написания ПП программ с применением традиционных мультипарадигменных языков можно было бы повысить, если использовать дополнительную инструментальную поддержку с использованием метакомпиляторов или библиотек макроопределений и шаблонов.
Применение метакомпиляторов требует дополнительных усилий, сопоставимых с разработкой трансляторов средней сложности. Помимо этого, целесообразнее использовать их в связке с библиотеками макроопределений и шаблонов, ускоряющих генерацию нужных фрагментов кода (как в Qt [7]).
Наиболее быстрым для реализации и при этом достаточно эффективным подходом является использование библиотек макроопределений и шаблонов, формирующих для программистов дополнительную инструментальную прослойку. Ее применение позволяет повысить эффективность использования процедурно-параметрического стиля при написании кода на традиционных мультипарадигменных языках. Помимо этого, данную библиотеку можно использовать при построении генераторов кода как для метакомпиляторов, так и для экспериментальных компиляторов процедурно-параметрических языков программирования. В связи с этим задача создания макробиблиотеки, обеспечивающей поддержку процедурно-параметрического стиля, является актуальной.
Целью данной работы является разработка библиотеки макросов, благодаря которой можно будет разрабатывать многомодульные, эволюционно¬расширяемые программы на основе процедурно-параметрической парадигмы.
Для достижения поставленной цели в работе решались следующие задачи:
• провести изучение особенностей процедурно-параметрической парадигмы, рассмотрены особенности реализации ее основных конструкций на языке программирования C++;
• проанализировать подходы к построению процедурно-параметрических программ на языке программирования C++, рассмотрены возможности подхода при реализации различных элементарных вариантов расширения уже созданного кода;
• исследовать особенности использования процедурно-параметрического подхода при реализации традиционных паттернов ОО проектирования;
• на основе анализа кода, формируемого при реализации различных ситуаций, предложить макросы, включенные в состав библиотеки;
• провести перепроектирование примеров эволюционного расширения кода с применением разработанной библиотеки;
• сделать сравнительные оценки ранее написанного кода с кодом, использующим библиотеку макроопределений.
Результатом выполнения выпускной квалификационной работы является кроссплатформенная библиотека макроопределений, написанная на C++ и предназначенная для подключения к C++ проектам, проектирующимся в соответствии с процедурно-параметрической парадигмой.
В первом разделе рассматриваются основные особенности ППП. Анализируются способы реализации ПП конструкций на языке программирования C++.
Второй раздел посвящен описанию использования процедурно-параметрических конструкций библиотеки на Примерах элементарного эволюционного расширения в различных направлениях. Приводится сравнение с возможностями расширения при процедурном и ОО программировании.
В третьем разделе рассматриваются особенности использования ПП стиля для реализации классических паттернов проектирования. Показано, как применение данного подхода позволяет избавиться от ряда недостатков, существующих при использовании паттернов.
В четвертом разделе предлагаются библиотека макроопределений, несколько комментариев к ней, а также примеры использования.
В пятом разделе приводится сравнительный анализ программ, написанных в процедурно-параметрическом стиле, как с библиотекой, так и без нее.
Важным чертой современных языков программирования является то, что почти все из них являются мультипарадигменными. В связи с этим сделать однозначный вывод об эффективности той или иной парадигмы на основе высокой популярности языка не представляется возможным. Помимо этого, особенность любой парадигмы в том, что каждая из них позволяет наиболее эффективно решать лишь часть возникающих перед программистом задач. Поэтому изучение различных подходов к программированию достойно внимания.
Одной из достаточно молодых, но перспективных является процедурно-параметрическая (ПП) парадигма [1,2]. В ее основе лежит параметрический полиморфизм, позволяющий процедурам принимать и обрабатывать вариантные типы данных, без алгоритмического выбора альтернатив внутри этих процедур. Алгоритмическая обработка вариантов осуществляется с применением условных операторов или переключателей. Данный подход является развитием методов процедурного программирования и служит альтернативой объектно-ориентированному программированию.
Первым реальным воплощением ПП парадигмы стал язык программирования O2M, являющийся непосредственным расширением языка Оберон-2 [3]. В нем сохраняется поддержка объектно-ориентированного стиля предшественника, но наряду с конструкциями данной парадигмы в нем реализованы дополнительные абстракции, поддерживающие процедурно-параметрическую парадигму.
Другой, более узкоспециализированной ветвью развития ПП парадигмы стала разработка экспериментального языка Alien [4] с синтаксисом, аналогичным синтаксису языка Оберон-2 и поддерживающим только процедурную парадигму. Поддержка ППП реализована путем добавления в процедурный язык конструкций, ориентированных на эволюционное [5] расширение типов данных и процедур.
В ходе работы с данными языками можно на практике ознакомиться с основными идеями ПП-парадигмы и развивать исследование параметрического подхода в различных направлениях. Помимо этого, предложены подходы написания ПП программ на традиционных языках программирования [1, 6]. Вместе с тем эффективность написания ПП программ с применением традиционных мультипарадигменных языков можно было бы повысить, если использовать дополнительную инструментальную поддержку с использованием метакомпиляторов или библиотек макроопределений и шаблонов.
Применение метакомпиляторов требует дополнительных усилий, сопоставимых с разработкой трансляторов средней сложности. Помимо этого, целесообразнее использовать их в связке с библиотеками макроопределений и шаблонов, ускоряющих генерацию нужных фрагментов кода (как в Qt [7]).
Наиболее быстрым для реализации и при этом достаточно эффективным подходом является использование библиотек макроопределений и шаблонов, формирующих для программистов дополнительную инструментальную прослойку. Ее применение позволяет повысить эффективность использования процедурно-параметрического стиля при написании кода на традиционных мультипарадигменных языках. Помимо этого, данную библиотеку можно использовать при построении генераторов кода как для метакомпиляторов, так и для экспериментальных компиляторов процедурно-параметрических языков программирования. В связи с этим задача создания макробиблиотеки, обеспечивающей поддержку процедурно-параметрического стиля, является актуальной.
Целью данной работы является разработка библиотеки макросов, благодаря которой можно будет разрабатывать многомодульные, эволюционно¬расширяемые программы на основе процедурно-параметрической парадигмы.
Для достижения поставленной цели в работе решались следующие задачи:
• провести изучение особенностей процедурно-параметрической парадигмы, рассмотрены особенности реализации ее основных конструкций на языке программирования C++;
• проанализировать подходы к построению процедурно-параметрических программ на языке программирования C++, рассмотрены возможности подхода при реализации различных элементарных вариантов расширения уже созданного кода;
• исследовать особенности использования процедурно-параметрического подхода при реализации традиционных паттернов ОО проектирования;
• на основе анализа кода, формируемого при реализации различных ситуаций, предложить макросы, включенные в состав библиотеки;
• провести перепроектирование примеров эволюционного расширения кода с применением разработанной библиотеки;
• сделать сравнительные оценки ранее написанного кода с кодом, использующим библиотеку макроопределений.
Результатом выполнения выпускной квалификационной работы является кроссплатформенная библиотека макроопределений, написанная на C++ и предназначенная для подключения к C++ проектам, проектирующимся в соответствии с процедурно-параметрической парадигмой.
В первом разделе рассматриваются основные особенности ППП. Анализируются способы реализации ПП конструкций на языке программирования C++.
Второй раздел посвящен описанию использования процедурно-параметрических конструкций библиотеки на Примерах элементарного эволюционного расширения в различных направлениях. Приводится сравнение с возможностями расширения при процедурном и ОО программировании.
В третьем разделе рассматриваются особенности использования ПП стиля для реализации классических паттернов проектирования. Показано, как применение данного подхода позволяет избавиться от ряда недостатков, существующих при использовании паттернов.
В четвертом разделе предлагаются библиотека макроопределений, несколько комментариев к ней, а также примеры использования.
В пятом разделе приводится сравнительный анализ программ, написанных в процедурно-параметрическом стиле, как с библиотекой, так и без нее.
В рамках выпускной квалификационной работы создана библиотека макросов, позволяющая повысить эффективно процедурно-параметрической парадигмы при разработке программ на С++.
В ходе решения поставленных задач были получены следующие результаты:
• Использование ПП стиля при программировании на мультипарадигменном языке показало возможность реализации ПП конструкций и повышение гибкости при эволюционном расширении программ по сравнению с процедурным и ОО подходами;
• При использовании ПП подхода для реализации ОО паттернов проектирования большинство ситуаций описывается добавлением или удалением процедурно-параметрических конструкций по достаточно простым типовым схемам, что позволяет больше внимания уделять технике программирования, а не изучению паттернов;
• Применение макроопределений позволяет повысить эффективность использования ПП стиля при программировании на современных мультипарадигменных языках;
В ходе решения поставленных задач были получены следующие результаты:
• Использование ПП стиля при программировании на мультипарадигменном языке показало возможность реализации ПП конструкций и повышение гибкости при эволюционном расширении программ по сравнению с процедурным и ОО подходами;
• При использовании ПП подхода для реализации ОО паттернов проектирования большинство ситуаций описывается добавлением или удалением процедурно-параметрических конструкций по достаточно простым типовым схемам, что позволяет больше внимания уделять технике программирования, а не изучению паттернов;
• Применение макроопределений позволяет повысить эффективность использования ПП стиля при программировании на современных мультипарадигменных языках;



