Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК по курсу ТРПС / ТРПС - Конспект лекций.doc
Скачиваний:
89
Добавлен:
12.03.2015
Размер:
846.34 Кб
Скачать

Контрольные вопросы

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

2. Что представляет собой Живая разработка ПО? Перечислите основные положения Живого манифеста.

3. Что представляет собой подход АРП? Сформулируйте модель сложной адаптивной системы, используемой в АРП.

4. В чём состоит особенность модели ЖЦ для АРП? Приведите графическое представление схемы этой модели. Перечислите и поясните свойства АРП.

5. Приведите графическое представление модели ЖЦ для АРП. Перечислите фазы ЖЦ проекта для АРП.

6. Охарактеризуйте фазу «Обдумывание» подхода АРП.

7. Охарактеризуйте фазу «Сотрудничество» подхода АРП.

8. Охарактеризуйте фазу «Обучение» подхода АРП.

9. Сформулируйте и поясните суть адаптивности подхода АРП.

10. Что представляет собой подход ЭП? Перечислите категории ЭП.

11. Приведите графическое представление схемы модели ЖЦ для ЭП. Перечислите фазы ЖЦ проекта для ЭП. Перечислите и поясните деятельности ЭП.

12. Охарактеризуйте фазу «Исследование» подхода ЭП.

13. Охарактеризуйте фазу «Планирование» подхода ЭП.

14. Охарактеризуйте фазу «Реализация» подхода ЭП.

15. Охарактеризуйте фазу «Продуцирование» подхода ЭП.

16. Охарактеризуйте фазу «Смерть» подхода ЭП.

Лекция 14 Тема лекции

Подходы разработки ПО (продолжение).

План лекции

1. Генетические технологические подходы:

– Синтезирующее программирование.

– Конкретизирующее программирование.

– Сборочное программирование.

Основное содержание

Генетические подходыявляются строгими подходами. Они основаны на аналогии разработки ПО и различных процессов происхождения.

Выделяют генетические подходы следующих трёх видов:

1. Синтезирующее программирование.

2. Конкретизирующее программирование.

3. Сборочное программирование.

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

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

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

Для получения программы необходимо решить следующие основные задачи:

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

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

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

4. Осуществить трансформацию представления – преобразование из спецификации в код программы на языке реализации.

5. Протестировать полученный код программы.

Существует ряд подходов различного уровня применения в процессах ЖЦ, которые относятся к синтезирующему программированию и связаны с соответствующим языком спецификации. К таким языкам спецификации относятся следующие: UML– язык спецификации для объектно-ориентированной разработки ПО;SDL– язык для однозначного специфицирования и описания поведения реактивных и распределённых систем;ASN.1– стандартный гибкий язык описания структур данных для представления, кодирования, передачи и декодирования данных. Автоматическая генерация программ возможна для многих языков спецификаций, в частности для перечисленных выше языков.

Конкретизирующее программирование– вид подходов, предполагающих извлечение программы из существующей универсальной программы путём конкретизации общих элементов. Существует много подходов различного уровня применения в процессах ЖЦ, которые относятся к конкретизирующему программированию. Среди них следует отметить следующие подходы:1. Обобщённое программирование;2. Подход на основе паттернов и анти-паттернов;3. Подход на основе архитектурных стилей.

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

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

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

Архитектурный стиль– это набор архитектурных структур, ориентированный на разработку системы для конкретной ПрО. М. Шоу и Д. Гарлан предложили использовать каталог таких стилей для их идентификации, документирования и облегчения использования в дальнейшем на практике. Каждый архитектурный стиль обычно имеет определённое концептуальное представление –архитектурный паттерн, и связанное с некоторой методологией разработки реализационное представление –архитектурный каркас.

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

Сборочное программирование– вид подходов, предполагающих сборку программы из уже разработанных фрагментов.

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

Выделяют следующие основные способы поддержки этого подхода:

1. Выработка стиля программирования, соответствующего принятым принципам модульности.

2. Повышение эффективности межмодульных интерфейсов. Обеспечение поддержки модульности на уровне программно-аппаратной платформы.

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

Сборочное программирование тесно связано с методом повторного использования кода, причём как исходного, так и бинарного. Выделяют несколько разновидностей технологических подходов сборочного программирования, которые в значительной степени определяются базисной методологией: 1. Модульное сборочное;2. Объектное сборочное;3. Компонентное сборочное и4. Аспектное сборочное программирование.

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

Модульное сборочное программирование– исторически первый подход сборочного программирования, базирующийся на процедурах и функциях методологии структурного императивного программирования, точнее их объединении – программных модулях. В разных языках программные модули называются по-разному: модуль (moduleвModula‑2,unitвPascal), пакет (packageвAda) или просто отдельный файл (вC/C++и т.п.).

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

Развитием этого подхода является расширяемое программирование– модульно-основанное программирование, при котором добавление новых модулей возможно без каких-либо изменений в существующих модулях. Данный подход предложен Н. Виртом и впервые реализован при проектированииOberon System. Фактически это компонентно-основанное программирование без ООП, так как модуль вOberonявляется полноценным компонентом (т.е. выполняет соответствующие ему функции). РазвитиемOberonсталComponent Pascal, в своём названии отразивший своё происхождение от языкаPascalи свою нацеленность на компонентное программирование.

Объектное сборочное программирование– подход сборочного программирования, базирующийся на библиотеках классов ООП, поставляемых в виде исходного (VCLвDelphi) или бинарного кода (DLLвC/C++дляMS Windows).

Как следует из названия, подход соответствует методологии ООП.

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

Компонент– класс, доступ к которому обеспечивается через строго определённые интерфейсы. Подинтерфейсомпонимается набор средств и правил для обеспечения единообразного взаимодействия. Использование интерфейсов компонентов вместо непосредственного доступа к объектам позволяет снять проблему несовместимости компиляторов и обеспечивает смену версий компонентов без перекомпиляции основанного на них ПО. Наиболее известными примерами реализации этого подхода являютсяCOM(DCOM,COM+),CORBA,.NET.

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

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

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

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

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