Файл: Анализ методов современного программирования.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 23.05.2023

Просмотров: 261

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

С точки зрения моделирования аспекты можно рассматривать как каркасы декомпозиции системы, в которых отдельные аспекты синхронизации, взаимодействия и др. пересекают ряд многократно используемых ПИК. Разным аспектам проектируемой системы могут отвечать и разные парадигмы программирования: объектно-ориентированные, структурные и др. Они по отношению к проектируемой ПрО образуют мультипара- дигмную концепцию аспектов, такую, как синхронизация, взаимодействие, обработка ошибок и др., и требуют значительных доработок процессов их реализации. Кроме того, можно устанавливать связи с другими предметными областями для описания аспектов приложения в терминах родственных областей. Появились языки АОП, которые позволяют описывать пересекающиеся аспекты в разных ПрО. В процессе компиляции переплетения объединяются, оптимизируются и генерируются [12] в динамике выполнения.

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


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

Для целей АОП хорошо подходит модель модульных расширений, создаваемая в рамках метамодельного программирования. Она предлагает оперативное распространение новых механизмов композиции в отдельные части ПС или их семейств с учетом предметно-ориентированных возможностей языков (например, SQL) и каркасов, которые поддерживают разного рода аспекты [14].

Инструменты. Для эффективной реализации аспектов разработана 1Р-библиотека расширений. В ней размещены некоторые функции компиляторов, методов, средства оптимизации, редактирования, отображения. и др. Например, библиотека матриц, с помощью которой вычисляются выражения с массивами, обеспечивается скорость выполнения, предоставления памяти и т.п. Использование таких библиотек в расширенных средах программирования называют родовым программированием, а решение проблем экономии, перестройки компиляторов под каждое новое языковое расширение, использование шаблонов и результатов предыдущей обработкой относят к области ментального программирования [12].

2.7 Порождающее (генерирующее) программирование

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

Данное программирование представляет объединенную целостную и стройную концепцию создания инженерии ПрО путем проектирования семейств ПС на основе объектов, компонентов, аспектов, сервисов, ПИК, систем, характеристик и т.п. По существу это программирование является дальнейшим развитием ООП в направлении использования ПИК, каркасов и разных аспектов в создаваемых ПС. Главным элементом программирования является не уникальный программный продукт, созданный из ПИК для конкретных применений, а семейство ПС или конкретные его экземпляры. Элементы семейства не создаются с нуля, а генерируются на основе общей генерирующей модели (generative domain model), т.е. модели семейства, включающей средства определения ее членов, компоненты реализации и ПИК, из которых собирается любой член этого семейства, и базу конфигураций, отображающую спецификации членов семейства.


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

Активные библиотеки содержат не только базовый код реализации понятий ПрО, но и целевой код по обеспечению компиляции, оптимизации, отладки, визуализации и др. Этот код представляется разным инструментальным системам (компиляторами, анализаторами кода, отладчиками и т.п.) в виде описания функций. Фактически компоненты активных библиотек выполняют роль интеллектуальных агентов, в процессе взаимодействия которых создаются новые специализированные агенты, ориентированные на предоставление пользователю возможности решать конкретные задачи ПрО. Для связи агентов при выполнении задач генерации, преобразования и взаимодействия разных объектов создается инфраструктура, т.е. расширяемая среда программирования. Используя эту среду, можно конструировать ПС из компонентов библиотек, а также из специальных метапрограмм среды, которые осуществляют редактирование, отладку, визуализацию, взаимодействие и др. Кроме того, есть возможность пополнять ее новыми сгенерированными компонентами в рамках отдельных ПС семейства, которые относятся к компонентам многоразового применения. Вместе с тем ЯП компонентов дополняются новыми аспектами, которые расширяют одновременно и ПрО новыми возможностыми.

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

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

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


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

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

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

Для выполнения инженерии ПрО используются следующие процессы:

корректировка процессов для разработки решений на основе ПИК;

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


разработка инфраструктуры ПИК - описание, хранение, поиск, оценивание и объединение готовых

ПИК.

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

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

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

В данном программировании нашли отражение идеи международного OMG-комитета, касающиеся видов ПрО горизонтального и вертикального типов. К горизонтальным ПрО отнесены общие системные средства: графические пользовательские интерфейсы, СУБД, системные программы, библиотеки расчета матриц, контейнеры, каркасы и т.п., а к вертикальным видам ПрО - прикладные системы (медицинские, биологические, научные и т.д.), методы инженерии ПрО и горизонтальные методы обслуживания архитектуры многократного применения, интерфейсов, библиотек и др.

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

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