Добавлен: 23.05.2023
Просмотров: 289
Скачиваний: 4
СОДЕРЖАНИЕ
ГЛАВА 1 ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ СИСТЕМ И ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
1.1 Определение и назначение языков и систем программирования
1.2 Классификация и история развития языков программирования
1.3 Поколения языков программирования
ГЛАВА 2 СОВРЕМЕННЫЕ МЕТОДЫ ПРОГРАММИРОВАНИЯ
2.1 Модульное, сборочное программирование
2.2 Структурное программирование
2.3 Объектно-ориентированное проектирование (ООП)
2.5 Компонентное программирование
2.6 Аспектно-ориентированное программирование (АОП)
Поскольку в ОО-программах может содержаться много мелких методов, которые самостоятельно не выполняют расчетов и обращаются к другим методам, расположенным в областях внешнего уровня, Деметер сформулировал закон [12], согласно которому не разрешаются длинные последовательности методов, связанные с передачами параметров через внутренние объекты. В результате создается код алгоритма, который содержит имена классов, не задействованных в выполнении расчетных операций. При необходимости внесения изменений в структуру классов, создается новый дополнительный класс, который расширяет ранее созданный код и не вносит качественных изменений в расчетные программы.
С точки зрения моделирования аспекты можно рассматривать как каркасы декомпозиции системы, в которых отдельные аспекты синхронизации, взаимодействия и др. пересекают ряд многократно используемых ПИК. Разным аспектам проектируемой системы могут отвечать и разные парадигмы программирования: объектно-ориентированные, структурные и др. Они по отношению к проектируемой ПрО образуют мультипара- дигмную концепцию аспектов, такую, как синхронизация, взаимодействие, обработка ошибок и др., и требуют значительных доработок процессов их реализации. Кроме того, можно устанавливать связи с другими предметными областями для описания аспектов приложения в терминах родственных областей. Появились языки АОП, которые позволяют описывать пересекающиеся аспекты в разных ПрО. В процессе компиляции переплетения объединяются, оптимизируются и генерируются [12] в динамике выполнения.
Существенной чертой любых аспектов является модель, которая пересекает структуру другой модели, для которой первая является аспектом. Так как аспект связан с моделью, то ее можно перестроить так, чтобы аспект стал, например, модулем и выполнял функцию посредника, беря на себя все образцы взаимодействия. Однако решение таким образом проблемы пересечения может привести к усложнению и понижению эффективности выполнения созданного модуля или компонента. Переплетение может проявиться на последующих этапах процесса разработки, когда реализуются аспекты, и они делают запутанным выходной код. Одним из путей оптимальной реализации аспектов является минимизация сцепления между аспектами и компонентами, которая реализуется ссылками на языковые конструкции, варианты использования, сопоставление с образцом. Реализация аспектов в различных блоках кода позволяет устанавливать перекрестные ссылки между ними, тем самым декларируется связь с соответствующей моделью. В этих блоках появляются точки соединения сообщений, которые обеспечивают связь между транзакциями, обработкой ошибок и т. п.
Связь между характеристиками и аспектами может быть выявлена в ходе анализа ПрО. Создается динамическое связывание через косвенный код или таблицы виртуальных таблиц для повторного связывания или статическое («жесткое») связывание в период компиляции.
Для целей АОП хорошо подходит модель модульных расширений, создаваемая в рамках метамодельного программирования. Она предлагает оперативное распространение новых механизмов композиции в отдельные части ПС или их семейств с учетом предметно-ориентированных возможностей языков (например, SQL) и каркасов, которые поддерживают разного рода аспекты [14].
Инструменты. Для эффективной реализации аспектов разработана 1Р-библиотека расширений. В ней размещены некоторые функции компиляторов, методов, средства оптимизации, редактирования, отображения. и др. Например, библиотека матриц, с помощью которой вычисляются выражения с массивами, обеспечивается скорость выполнения, предоставления памяти и т.п. Использование таких библиотек в расширенных средах программирования называют родовым программированием, а решение проблем экономии, перестройки компиляторов под каждое новое языковое расширение, использование шаблонов и результатов предыдущей обработкой относят к области ментального программирования [12].
2.7 Порождающее (генерирующее) программирование
Возможности. Порождающее программирование (деиега1е programming) - это парадигма разработки ПС, основанная на моделировании групп или отдельных элементов ПС, таких, что при описании списка конкретных требований до системы из этих элементов, аспектов, элементарных ПИК и каркасов конфигурации автоматически генерируется промежуточный или конечный продукт[3].
Данное программирование представляет объединенную целостную и стройную концепцию создания инженерии ПрО путем проектирования семейств ПС на основе объектов, компонентов, аспектов, сервисов, ПИК, систем, характеристик и т.п. По существу это программирование является дальнейшим развитием ООП в направлении использования ПИК, каркасов и разных аспектов в создаваемых ПС. Главным элементом программирования является не уникальный программный продукт, созданный из ПИК для конкретных применений, а семейство ПС или конкретные его экземпляры. Элементы семейства не создаются с нуля, а генерируются на основе общей генерирующей модели (generative domain model), т.е. модели семейства, включающей средства определения ее членов, компоненты реализации и ПИК, из которых собирается любой член этого семейства, и базу конфигураций, отображающую спецификации членов семейства.
В созданном программном члене семейства отражается максимум знаний о его производстве, а именно конфигурации, инструментарии измерения и оценки, методах тестирования и планирования, отладки, визуального представления и пр. Эти аспекты отображают специфику ПрО, многократно используемых ПИК, представленных в активных библиотеках [13].
Активные библиотеки содержат не только базовый код реализации понятий ПрО, но и целевой код по обеспечению компиляции, оптимизации, отладки, визуализации и др. Этот код представляется разным инструментальным системам (компиляторами, анализаторами кода, отладчиками и т.п.) в виде описания функций. Фактически компоненты активных библиотек выполняют роль интеллектуальных агентов, в процессе взаимодействия которых создаются новые специализированные агенты, ориентированные на предоставление пользователю возможности решать конкретные задачи ПрО. Для связи агентов при выполнении задач генерации, преобразования и взаимодействия разных объектов создается инфраструктура, т.е. расширяемая среда программирования. Используя эту среду, можно конструировать ПС из компонентов библиотек, а также из специальных метапрограмм среды, которые осуществляют редактирование, отладку, визуализацию, взаимодействие и др. Кроме того, есть возможность пополнять ее новыми сгенерированными компонентами в рамках отдельных ПС семейства, которые относятся к компонентам многоразового применения. Вместе с тем ЯП компонентов дополняются новыми аспектами, которые расширяют одновременно и ПрО новыми возможностыми.
Целью порождающего программирования является разработка правильных компонентов для целого семейства и после этого автоматически предоставлять их другим семействам. Реализации этой цели соответствует два сформировавшихся направления использования ПИК:
- прикладная инженерия - процесс производства конкретных ПС из ПИК, созданных ранее самостоятельных ПС, или отдельных элементов процесса инженерии некоторой ПрО;
- инженерия ПрО - построение семейства ПС путем сбора, классификации и фиксации ПИК, опыта конструирования систем или готовых частей систем для конкретной ПрО. При этом создаются системные инструментальные системы поддержки поиска, адаптации ПИК и внедрения их в новую ПС семейства.
Разбиение инженерии ПрО на конструирование семейства приложений и конструирование компонентных систем обусловлено четким разделением задач по разработке общей архитектуры и многократно используемых решений для отдельных подсистем.
Основными этапами инженерии ПрО являются: анализ ПрО и выявление характеристик; определение области действий ПрО; определение общих и изменяемых характеристик в характеристической модели. Эта модель устанавливает зависимость между различными членами семейства и в пределах самого члена семейства, а также создает базис для производства конкретных программных членов семейства с механизмами изменчивости независимо от средств их реализации. На основе характеристической модели и компонентов реализации генерируется доменная модель для семейства с использованием данной модели, знания о конфигурациях и спецификации высокого уровня компонентов автоматически генерируются в некоторый член семейства. При этом используются такие стандартные системные средства, как JavaBeans с графическим интерфейсом, визуальными компонентами или С++ с компонентами стандартной библиотеки шаблонов.
Функциональные компоненты представляются в виде объектов, процедур, модулей, которым необходимы такие свойства, как безопасность, синхронизацияи др. Эти свойства, как правило, выражаются небольшими фрагментами кода в нескольких функциональных компонентах. Они могут пересекать ряд компонентов и представлять собой отдельные аспекты в терминологии АОП. Смесь компонентов и аспектов образует ряд небольших классов и методов, что в конце концов усложняет создаваемую ПС.
Инженерия ПрО ориентирована на разработку решений, связанных с группами ПС, обеспечивает поддержку мультисистемного проектирования и моделирование изменчивости. Она состоит в следующем: разработка моделей групп систем семейства; моделирование понятий данной ПрО и выявление альтернативных методов реализации этапов; разработка групп систем для последующего их повторного использования; системное моделирование характеристик компонентов в соответствии с характеристической моделью семейства ПрО; реализация процесса сборки каждого члена семейства на основе базы знаний о конфигурации.
Для выполнения инженерии ПрО используются следующие процессы:
корректировка процессов для разработки решений на основе ПИК;
моделирование изменчивости и зависимостей, которое начинается с разработки словаря описания различных понятий, фиксации их в характеристической модели и в справочной информации сведений об изменчивости моделей (объектных, Use Case, взаимодействия и др.). Фиксация зависимостей между характеристиками избавляет пользователей от некоторых конфигурационных манипуляций, которые выполняются, как правило, вручную;
разработка инфраструктуры ПИК - описание, хранение, поиск, оценивание и объединение готовых
ПИК.
При определении членов семейства ПрО используются новые понятия - пространство задач, а в технологии реализации компонентов на основе каркаса конфигураций - пространство решений.
Пространство задач. Областью разработки является семейство систем, в которых используются компоненты многократного применения. Процесс разработки с повторным использованием организуется таким образом, чтобы в нем применять не только ПИК, но и инструменты, созданные в ходе разработки ПрО. В рамках инженерии ПрО разрабатывается характеристическая модель, которая обобщает характеристики системы и изменяемые параметры разных частей семейства, а также решения, связанные с группами ПС.
Инженерия ПрО включает разработку моделей групп систем, моделирование понятий ПрО, разработку характеристических моделей и групп систем для последующего их повторного использования.
В данном программировании нашли отражение идеи международного OMG-комитета, касающиеся видов ПрО горизонтального и вертикального типов. К горизонтальным ПрО отнесены общие системные средства: графические пользовательские интерфейсы, СУБД, системные программы, библиотеки расчета матриц, контейнеры, каркасы и т.п., а к вертикальным видам ПрО - прикладные системы (медицинские, биологические, научные и т.д.), методы инженерии ПрО и горизонтальные методы обслуживания архитектуры многократного применения, интерфейсов, библиотек и др.
Пространство решений включает компоненты, каркасы и образцы проектирования. При этом каркас оснащается изменяемыми параметрами модели, что может привести к излишней его фрагментации и появлению «множества мелких методов и классов». Каркас обеспечивает динамическое связывание аспектов и компонентов в процессе реализации изменчивости между разными приложениями. Образцы проектирования обеспечивают создание многократно используемых решений в различных ПС. Для задания таких аспектов, как синхронизация, удаленное взаимодействие, защита данных и т.д., применяются компонентные технологии ActiveX и JavaBeans, а также новые механизмы композиции, метапрограммирования и др.
Инструменты. Примером поддержки инженерии ПрО и реализации горизонтальных методов является система DEMRAL [52, 54], предназначенная для разработки библиотек: численного анализа, контейнеров, распознавания речи, графовых вычислений и т. д. Основными видами абстракций этих библиотек ПрО являются абстрактные типы данных (abstract data types - ADT) и алгоритмы. DEMRAL позволяет моделировать характеристики ПрО в виде высокоуровневой характеристической модели и предметно-ориентированных языков конфигурирования.