WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 || 3 | 4 |   ...   | 16 |

Проблемы, связанные с повторным применением кода, гораздо интересней и сложней, чем кустарное производство программ отдельными коллективами разработчиков, выполняемое с применением повторного кода собственного производства. Кроме того, использование в проекте библиотек макросов, генераторов, интерпретаторов и других промышленных средств метапрограммирования4, также свидетельствует об индивидуальных квалификациях разработчиков конкретного коллектива. Эти инструменты, а также компиляторы, операционные системы, СУБД и, наконец, компьютеры, а также навыки и опыт по их применению относятся к базовым средствам программирования. Тем не менее, повторное применение кода также является метапрограммированием, близким по сложности к встреченным Первопроходцами программирования «тяготам и лишениям» программистcкой службы. Кстати, в книге Фредерика П. Брукса «Мифический человеко-месяц, или как создаются программные системы» про метапрограммирование сказано, что «…Это действительно наступление на сущность. Поскольку на среднего программиста информационно-управляющих систем феномен разработки на основе пакетов еще не оказал воздействия, он пока не очень замечаем программной инженерией». Иными словами, если мы не владеем приёмами повторного применения кода, то мы всё ещё вне программной инженерии.

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

«Мета» – от древнегреческого «после» и «над» обозначает повышение уровня.

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

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

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

2.2. Генеративное программирование При отсутствии однозначной методики по применению ранее разработанного кода, кроме опыта и интуиции разработчиков, имеется наука такого программирования, являющаяся частью программной инженерии. Она называется «Порождающее программирование (Generative programming)».

Единственная на данный момент времени переведенная на русский язык фундаментальная книга К. Чарнецки и У. Айзенекера “Порождающее программирование: методы, инструменты, применение” [1], посвященная генеративному программированию, имеет оригинальное наименование “Generative Programming: Methods, Tools, and Applications”. Идеи порождающего программирования основываются на проектировании и построении порождающих моделей для семейств систем с целью генерирования по этим моделям конкретной системы. При наличии практического опыта при разработке семейства систем в определенной предметной области (что характерно для прикладного программирования), появляется возможность разрабатывать многократно используемое ПО. Разработка многократно используемых компонентов позволяет выявить как общности членов семейства, так и наличие существенных параметров изменчивости.

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

Применение инициаторами выпуска книги в России и авторами перевода синонима “порождающее” к оригинальному термину “генеративное” не случайное и оправданное решение, связанное с - 11 - УМП «Автоматизированные методы разработки архитектуры ПО» привлечением внимания к одному из важнейших направлений в современном развитии программной инженерии – к автоматизации сборки разрабатываемого программного обеспечения. Вместе с тем в оригинальном названии книги корнем термина “генеративное программирование” является слово “генератор”. То есть, генеративное программирование предполагает использование генераторов программного кода, которые на основе ранее разработанного кода и с учетом спецификаций требований позволяют автоматизировать сборку ”пилотной” и рабочей версий проекта. Генеративное программирование, являясь инструментарием архитекторов ПО, предназначено для управления логикой проекта от стадии его разработки и на протяжении жизненного цикла программной системы. Для применения генеративного программирования архитектору ПО необходимы CASEсистемы, пригодные для их применения в конкретной предметной области, генераторы ПО и ранее разработанный программный код, пригодный для его повторного применения.

2.3. Генераторы ПО Программная среда, которая осуществляет сборку готового к применению программного продукта, в том числе: программной системы, компонента, класса, процедуры и тому подобных частей системы на основе высокоуровневой спецификации, называется “генератор”.

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

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

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

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

- 12 - УМП «Автоматизированные методы разработки архитектуры ПО» Большинство CASE-систем содержат генераторы реализаций графических моделей в виде описаний на языке программирования.

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

2.4. Применение архитектурных образцов для проектирования ПО Несмотря на 30-летний опыт применения термина архитектура программного обеспечения [3], практическое внедрение архитектурного проектирования ПО продолжается до сих пор и по-прежнему считается новым технологическим направлением в промышленном программировании. Учитывая компоновочный характер построения проектируемых программных систем, в литературе, посвященной архитектурному проектированию, большое внимание отводится разработкам и внедрению образцов (паттернов) проектирования ПО.

В статье-справочнике Ольги Дубиной “Обзор паттернов проектирования” [4] дается такое определение образцов проектирования ПО “…Любой паттерн проектирования, используемый при разработке информационных систем, представляет собой формализованное описание часто встречающейся задачи проектирования, удачное решение данной задачи, а также рекомендации по применению этого решения в различных ситуациях. Кроме того, паттерн проектирования обязательно имеет общеупотребимое наименование. Правильно сформулированный паттерн проектирования позволяет, отыскав однажды удачное решение, пользоваться им снова и снова. Следует подчеркнуть, что важным начальным этапом при работе с паттернами является адекватное моделирование рассматриваемой предметной области. Это является необходимым как для получения должным образом формализованной постановки задачи, так и для выбора подходящих паттернов проектирования…”. К. Чарнецки и У. Айзенекер считают, что во многих случаях при архитектурном проектировании крайне полезно проводить периодическую сортировку паттернов проектирования (architectural patterns) с целью получения новых вариантов сортировки. Полученный таким образом новый архитектурный образец должен соответствовать определенному набору требований, иметь описание в виде документации, состоящей из секций, таких, как имя, контекст, воздействия, решение, следствия и примеры. В качестве иллюстрации К. Чарнецки и У. Айзенекер приводят перечень примеров архитектурных образцов:

o Уровневый образец. Сортировка по группам подзадач, каждая из групп находится на определенном уровне абстракции;

- 13 - УМП «Автоматизированные методы разработки архитектуры ПО» o Образец каналов и фильтров. Схема обработки потока данных предполагающая, что некоторое количество этапов обработки инкапсулировано в компоненты фильтрации.

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

o Образец “классной доски”. Схема, в которой осуществляется объединение знаний нескольких специализированных подсистем; что позволяет находить частное или приближенное решение недетерминированной задачи;

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

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

o Образец микроядра. Схема, в которой базовое функциональное ядро отделено от функций и деталей, выполняемых по индивидуальным заказам потребителей.

Кроме того, микроядро, к которому подключаются эти расширения, организует их взаимодействие.

Михаил Ксензов в статье "Рефакторинг архитектуры программного обеспечения: выделение слоев" [5], исследуя проблему увеличения продолжительности жизненного цикла успешных программных проектов, особо выделяет паттерны архитектурного рефакторинга, которые применяются к компонентам архитектуры.

Анализируя роль архитектурных паттернов на примере паттерна выделения слоев, автор работы утверждает, что изменение существующей архитектуры – хороший шаг на пути внедрения новой функциональности, который, к тому же, облегчает дальнейшую эволюцию системы. Концепция слоев, особо выделяемая Михаилом Ксензовым, – это одна из общеупотребительных моделей, используемых разработчиками программного обеспечения для разделения сложных систем на более простые части. В архитектурах компьютерных систем, например, различают слои кода на языке программирования, функций операционной системы, драйверов устройств, наборов инструкций центрального процессора и внутренней логики микросхем. В среде - 14 - УМП «Автоматизированные методы разработки архитектуры ПО» сетевого взаимодействия протокол FТР6 работает на основе протокола ТСР7, который, в свою очередь, функционирует "поверх" протокола IР8, расположенного "над" протоколом Ethernet9 и так далее.

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

Получаемые таким образом виды архитектурных решений обладают различными эксплуатационными характеристиками. К. Чарнецки и У.

Айзенекер считают, что таких видов архитектур ПО всего две.

Это родовая архитектура и архитектура с высокой степенью гибкости.

o Родовая архитектура. Её можно описать как несъемный корпус с некоторым количеством гнезд, через которые можно подключать отдельные изменяемые или расширительные компоненты. Интерфейсы этих компонентов и гнезд – другими словами, их ожидания и возможности – должны быть четко определены. Таким образом, родовая архитектура характеризуется постоянной топологией и фиксированными интерфейсами;

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

Развитие методов объектно-ориентированного программирования повлияло на использование шаблонов метапрограммирования.

Использование архитектурных образцов в виде шаблонов метапрограммирования представляют собой практические примеры FTP – File Transfer Protocol Протокол передачи файлов - протокол, предназначенный для обеспечения передачи и приема файлов между серверами и клиентами, работающими в сетях, поддерживающих протокол TCP/IP.

TCP – Transmission Control Protocol протокол управления передачей данных, использующий автоматическую повторную передачу недопоставленных пакетов в случаях ошибок при передачи данных. Протокол TCP, определяющий порядок разделения данных на дискретные пакеты и контролирующий передачуи целостность передаваемых данных. Основной протокол, предназначенный для работы в сетях Интернет в режиме коммутации каналов – TCP/IP (Transmission Control Protocol/Internet Protocol) состоит из двух протоколов TCP и IP.

IP (Internet Protocol) – протокол описывает формат пакета данных, передаваемых в сети, а также порядок присвоения и поддержки адресов абонентов сети.

Ethernet – стандарт объединения компьютеров в высокоскоростную вычислительную сеть.

- 15 - УМП «Автоматизированные методы разработки архитектуры ПО» внедрения генераторов в библиотеки C++. К. Чарнецки и У. Айзенекер считают, что применение шаблонов для областей с высокой производительностью обработки10 является характерными примерами внедрения генераторов архитектурных образцов.

Pages:     | 1 || 3 | 4 |   ...   | 16 |






















© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.