Спонсор: Microsoft
Московский физико-технический институт
Опубликован: 24.09.2008 | Доступ: свободный | Студентов: 2634 / 769 | Оценка: 4.52 / 4.48 | Длительность: 25:15:00
Специальности: Системный архитектор
Лекция 6:

Прикладные и теоретические методы программирования

5.1.6. Генерирующее (порождающее) программирование

Генерирующее программирование (generatе programming) - генерация семейств приложений из отдельных элементов компонентов, аспектов, сервисов, ПИК, каркасов и т.п. Базис этого программирования - ООП, дополненный механизмами генерации ПИК, другими многоразовыми элементами, а также свойствами их изменчивости, взаимодействия и др. [5.17].

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

Главный элемент ПС - это семейство ПС или конкретные его экземпляры, которые генерируются на основе общей генерирующей модели домена (generative domain model) и включающей в себя средства определения членов (представителей) семейства, методы сборки членов семейства и базу конфигурации с набором правил развертывания в операционной среде.

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

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

Реализация целей порождающего программирования по включению ПИК в другие члены семейства проводится по двум сформировавшимся инженерным направлениям [5.11-5.15]:

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

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

Основные этапы инженерии ПрО приведены на рис. 5.10:

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

увеличить изображение
Рис. 5.10. Технологическая схема инженерии ПрО

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

К рассмотренной схеме инженерии ПрО также относятся:

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

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

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

Инженерия ПрО обеспечивает не только разработку моделей членов семейства (подсистем), а и моделирование понятий ПрО, модель характеристик для подсистем и набора компонентов, реализующих задачи ПрО. В рамках инженерии ПрО используются горизонтальные и вертикальные типы компонентов в терминологии системы CORBA [5.14, 5.18].

К горизонтальным типам компонентов отнесены общие системные средства, которые нужны разным членам семейства, а именно: графические пользовательские интерфейсы, СУБД, системные программы, библиотеки расчета матриц, контейнеры, каркасы и т.п.

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

Пространство решений (space solution) - компоненты, каркасы, шаблоны проектирования ПрО, а также средства их соединения или встраивания в ПС и оценки избыточности. Элементы пространства реализуют решение задач этой ПрО. Каркас оснащен механизмом изменения параметров модели, которые требуют избыточную фрагментацию "множество мелких методов и классов". Шаблоны проектирования обеспечивают создание многократно используемых решений в различных типах ПС. Для задания и реализации таких аспектов, как синхронизация, удаленное взаимодействие, защита данных и т.п. применяются технологии ActiveX и JavaBeans, а также новые механизмы композиции и др.

Примером систем поддержки инженерии ПрО и реализации горизонтальных методов является система DEMRAL [5.17, 5.14], предназначенная для разработки библиотек: численного анализа, распознавания речи, графовых вычислений и т.д. Основные виды элементов этой библиотеки - абстрактные типы данных (abstract data types - ADT) и алгоритмы. DEMRAL позволяет моделировать характеристики ПрО и представлять их в характеристической модели и предметно-ориентированных языках описания конфигурации.

Система конструирования RSEB в среде генерирующего программирования использует методы, относящиеся к вертикальным методам, а также ПИК и Use Case при проектировании больших ПС. Методы вертикального типа вызывают различные горизонтальные методы, относящиеся к разным прикладным подсистемам. При работе над отдельной частью семейства могут применяться аспекты взаимодействия, структуры, потоков данных и др. Важную роль при этом выполняет графический пользовательский интерфейс и метод обеспечения взаимодействия компонентов в распределенных средах (например, в CORBA).

5.1.7. Агентное программирование

Понятие интеллектуального и программного агента появилось более 20 лет назад, их роль в программной инженерии все время возрастает [5.19-5.23]. Так, в [5.23] Джекобсон отметил перспективу использования агентов в качестве менеджеров проектов, разработчиков архитектуры с помощью диаграмм use case и др.

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

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

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

Основными задачами программного агента являются:

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

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

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

Характер взаимодействия между агентами зависит от совместимости целей, компетентности и т.п. [5.21].

Пример взаимодействия агентов в разных средах

Рис. 5.11. Пример взаимодействия агентов в разных средах

Основу агентно-ориентированного программирования составляют:

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

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

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

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

Главное средство коммуникации агентов - транспортный протокол ТСР/IP или протокол агентов ACL (Agent Communication Languages). Управление агентами (Agent Management) выполняется с помощью сервисов: передача сообщений между агентами, доступ агента к серверу и т.п. Коммуникация агентов базируется на общем протоколе, языке HTML и декларативном или процедурном (Java, Telescript, ACL и т.п.) языке описания этого протокола.

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

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

Одной из систем построения агентов, основанной на обмене сообщениями в АСL, является JATLite, которая с помощью Java-классов создает новых агентов, вычисляющих определенные функции в распределенной среде. Система Agent Builder предназначена для конструирования программных агентов, которые описываются в языке Java и могут взаимодействовать на языке KQML (Knowledge Guery and Manipulation Language) [5.19-5.23].

Построенные агенты выполняют функции: менеджера проекта и онтологий, визуализации, отладки и др. Реализацию механизмов взаимодействий агентов обеспечивает система JAFMAS, ряд других мультиагентных систем, что описано в [5.19].

Максим Цапко
Максим Цапко

Я наконец закончил курс "Управление ИТ-проектами". Как получить документ об окончании курса.

давайн Нкунда
давайн Нкунда
Владимир Карпенко
Владимир Карпенко
Украина, Киев, Национальный Авиационный Университет, 2009
Михаил Адигеев
Михаил Адигеев
Россия