Здравствуйте,при покупке печатной формы сертификата,будут ли выданы обе печатные сторны? |
Прикладные и теоретические методы программирования
5.1.6. Генерирующее (порождающее) программирование
Генерирующее программирование (generatе programming) - генерация семейств приложений из отдельных элементов компонентов, аспектов, сервисов, ПИК, каркасов и т.п. Базис этого программирования - ООП, дополненный механизмами генерации ПИК, другими многоразовыми элементами, а также свойствами их изменчивости, взаимодействия и др. [5.17].
В нем используются разные методы программирования для поддержки инженерии ПрО как дисциплины инженерного проектирования семейств ПС из разных ранее изготовленных продуктов путем объединения технологии генерации как отдельных ПС, так и их семейств. Эта дисциплина использует методы программирования, соответствующие формализмы и модели для создания более качественных представителей семейства ПС по принципу конвейера.
Главный элемент ПС - это семейство ПС или конкретные его экземпляры, которые генерируются на основе общей генерирующей модели домена (generative domain model) и включающей в себя средства определения членов (представителей) семейства, методы сборки членов семейства и базу конфигурации с набором правил развертывания в операционной среде.
Каждый член семейства создается путем интеграции отдельных компонентов, планирования, контроля и оценки результатов интеграционного тестирования, а также определения затрат на применение многократно используемых ПИК, в том числе из активной библиотеки [5.17].
Базовый код элементов активной библиотеки содержит целевой код по обеспечению процедур компиляции, отладки, визуализации и др. Фактически компоненты этих библиотек - это интеллектуальные агенты, генерирующие новых агентов в расширяемой среде программирования для решения конкретных задачи ПрО. Эта среда содержит специальные метапрограммы и компоненты библиотек для осуществления отладки, проверки композиции и взаимодействия компонентов. Среда пополняется новыми сгенерированными компонентами для членов семейства, в качестве компонентов многоразового применения.
Реализация целей порождающего программирования по включению ПИК в другие члены семейства проводится по двум сформировавшимся инженерным направлениям [5.11-5.15]:
- прикладная инженерия - процесс производства конкретных ПС из ПИК, ранее созданных в среде независимых систем, или как отдельные элементы процесса инженерии некоторой ПрО;
- инженерия ПрО - построение членов семейства или самого семейства систем путем сбора, классификации и фиксации ПИК в качестве их конструктивных элементов, а также для частей систем для конкретной ПрО. Поиск, адаптация ПИК и внедрение их в новые члены семейства ПС проводится с помощью специальных инструментальных средств типа репозитария.
Составная часть инженерии ПрО - инженерия приложений как способ создания отдельных целевых членов семейства для конструирования из этих членов новые ПИК, многократно используемых проектных решений и генерируемых как системы семейства ПрО.
Основные этапы инженерии ПрО приведены на рис. 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].
Основу агентно-ориентированного программирования составляют:
- формальный язык описания ментального состояния агентов;
- язык спецификации информационных, временных, мотивационных и функциональных действий агента в среде функционирования;
- язык интерпретации спецификаций агента;
- инструменты конвертирования любых программ в соответствующие агентные программы.
Агенты взаимодействуют между собой с помощью разных механизмов, а именно: координация, коммуникация, кооперация или коалиция.
Под координацией агентов понимается процесс обеспечения последовательного функционирования при согласованности их поведения и без взаимных конфликтов. Координация агентов определяется:
- взаимозависимостью целей других агентов-членов коалиции, а также от возможного влияния агентов друг на друга;
- ограничениями, которые принимаются для группы агентов коалиции в рамках общего их функционирования;
- компетенцией - знаниями условий среды функционирования и степени их использования.
Главное средство коммуникации агентов - транспортный протокол ТСР/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].