Генерация кода - это автоматическое создание программного кода специальным приложением, при котором по заданным условиям полностью или частично формируется исходный код программы. Такое специальное приложение называется генератором кода. Получается, что это программа, создающая программный код.
Идея генерации кода не является новой. Например, формирование машинного кода из программы на ассемблере было придумано давно. Компиляторы языков высокого уровня являются, по сути, генераторами низкоуровневого кода. На этапе появления языков высокого уровня под генерацией кода подразумевалась именно генерация машинного кода. Сейчас же все чаще под этим имеют в виду генерацию исходного кода на одном из языков высокого уровня. Именно такая генерация и является темой данного курса. Другим примером генераторов могут служить технологии ASP.Net и PHP. Они генерируют HTML-разметку на основе программного кода. В средах Visual Studio и
При разработке генератора следует различать язык программирования, на котором реализован генератор и язык программирования, на котором генератор осуществляет вывод автоматически созданного кода. Ясно, что они могут как различаться, так и совпадать. Генератор может быть написан на языке C#, а выводить код на PL/SQL, или наоборот.
Генератор не является частью программного кода проекта, можно даже сказать, что генератор является другим проектом и выполняет другие задачи, отличные от
В данном курсе мы будем рассматривать примеры, генерирующие программный код на языках C#, PL/SQL, а также запросы SQL. Большинство из примеров написано на языке C#. Разумеется, что генератор можно реализовывать и с применением других технологий. Наиболее оптимальный выбор будет зависеть от условий проекта. При этом будут использоваться другие шаблоны и техники, но принципы генерации останутся теми же.
Как уже отмечалось выше, все повторяющиеся действия могут быть автоматизированы. Генераторы получают на входе информацию о структуре, данных и параметрах предметной области, шаблоны, согласно которым будет выполняться генерация, а на выходе выводят готовый программный код.
При правильном задании условий и параметров, корректной разработке генератора большая часть кода может быть автоматически сгенерирована - программисту остается только вручную доделать оставшуюся часть работы. Для того, чтобы программный код мог быть создан генератором, необходимо наличие следующих трех ключевых компонентов:
(рис 1.1) Ключевые составляющие генерации кода
Эти ключевые понятия в том или ином виде содержатся во всех генераторах кода.
Допустим, что есть программа, генерирующая простой запрос SELECT для полей одной таблицы. Метаданными будут названия таблицы и ее полей, шаблон будет содержать ключевые слова SELECT, FROM, WHERE и указывать, в каком месте поставить имена таблицы и полей. Правилами предметной области будут правила построения запроса SELECT, понятия таблицы и полей, а также другие правила из теории баз данных.
Наличие правил предметной области необходимо при реализации любого проекта, даже без применения генерации. Они являются своего рода требованиями, основой, критериями
(рис 1.2) Формирование кода без применения генерации
Разумеется, на этом рисунке все рассматривается только по отношению к коду. Такие этапы реализации приложения, как проектирование, документирование, тестирование и другие, опускаются. Программный код является своеобразным отражением предметной области, реального мира.
При автоматической же генерации схему можно представить в следующем виде:
(рис 1.3) Формирование кода с применением генерации кода
Правила предметной области определяют, какими будут шаблоны, метаданные и генератор. Генератор же на основе метаданных и шаблонов строит автоматически сгенерированный код.
Генераторы лучше всего применимы в проблемной области, требующей выполнения множества коротких, схожих итераций. Хорошими кандидатами являются базы данных, где один и тот же
Потенциально может применяться в любом случае, в котором есть возможность автоматизировать процесс создания электронной информации. Практически наиболее применимыми областями являются:
Кроме описанных выше случаев генерация кода может применяться для автоматического создания разного рода скриптов, конфигурационных, командных файлов, макросов и т.д. Хорошими кандидатами являются любого рода манипуляции с данными, например работа с файлами, конвертирование форматов и др.
Применение генерации в разработке программного кода проекта дает следующие преимущества:
Иными словами, генератор позволяет разработчикам концентрировать больше внимания на интеллектуальной части работы, а не на рутинной.
Однако имеются также минусы и ограничения в применении генерации кода:
В зависимости от того, каким образом организованы входные и выходные данные, масштабности выводимого кода, а также того, каким образом обслуживается впоследствии этот код, могут отличаться характеристики генераторов. Приводимые здесь характеристики являются в большей степени относительными, призванными облегчить понимание разницы между большим количеством разнообразных генераторов, и не являются предметом строгой классификации. Давайте рассмотрим эти характеристики.
CodeDom. Манипулируя объектами этих классов можно создавать программный код.Шаблоны и метаданные вводятся из разных источников - в отдельном источнике хранятся шаблоны кода, а в отдельном источнике хранятся метаданные.
Шаблоны и метаданные вводятся из одного источника - например, это может быть программный код с комментариями. Код приложения представляет собой шаблон, а в комментариях в специальном формате содержатся метаданные.
Универсальный генератор - шаблоны, метаданные и правила предметной области находятся в разных источниках. Это сложный вид генератора и очень гибкий. Может быть малоприменим на практике.
Данные не вводятся - вся информация для генерации находится в самом коде генератора. Этот другой крайний случай хорошо годится для одноразовых работ, когда схожая разработка в будущем не предвидится. При этом не тратится время на разработку пользовательского
Запись результата в новой локации - входные данные берутся из одного источника, генерируется код и результат записывается в другую локацию. В большинстве случаев применяется эта техника.
Замена результатом входного источника - входные данные берутся из одного источника, генерируется код и результат перезаписывается в этот же источник. Этим способом видоизменяется существующий код. Данная техника может быть полезна в относительно небольшом числе случаев. Например, в случае добавления обработки параметра во все файлы проекта. Желательно, чтобы генератор сохранял резервные копии изменяемого кода.
Незавершенный - сгенерированный код нуждается в дальнейшей ручной модификации. Часто это является показателем того, что генератор недоработанный, сырой, либо код плохо поддается генерации.
Завершенный - сгенерированный код не нуждается в модификации и его можно выложить в производственную схему. Это не означает, что программный проект не содержит вручную созданного кода, просто сгенерированный код интегрируется без изменений с вручную созданным кодом.
Отдельные участки кода приложения - применяется, когда есть необходимость немного поменять код приложения, который на данный момент не обслуживается генератором.
Определенный модуль или группа файлов - может применяться при первоначальном пробном тестировании работы генератора.
Уровень в архитектуре приложения - генерируется только один уровень в архитектуре приложения. Очень часто это уровень базы данных, так он легче всего поддается генерации и от него зависит работа всех остальных уровней. Генерация других уровней без уровня базы данных потеряет много в своей эффективности.
Все уровни в архитектуре приложения - на каждом уровне приложения применяется сгенерированный код. Применяется, когда выработаны шаблоны, позволяющие сгенерировать большую часть приложения.
Языковая техника - при таком масштабе применения генератора выработано достаточное количество шаблонов достаточного качества, чтобы покрывать основные возможности языка или технологии.
Внутри организации - компания сама является владельцем генератора и абсолютно свободно может распоряжаться ею.
Приобретен у поставщика - генератор не находится под контролем организации, трудно или невозможно будет влиять на ход его развития.
Есть доступ - генератор разработан самостоятельно или используется генератор с открытым исходным кодом.
Нет доступа - генератор разработан вне организации и доступ к исходному коду закрыт.
Генератор кода - это программа, автоматически создающая исходный код приложения. Генератор не является частью программного кода проекта. Он является другим проектом и выполняет другие задачи. Поэтому технология его реализации необязательно должна совпадать с технологией, применяемой при разработке программного проекта.
Для генерации кода должны быть определены метаданные, шаблоны и правила предметной области. Правила предметной области определяют, какими будут шаблоны, метаданные и генератор. Генератор же на основе метаданных и шаблонов строит автоматически сгенерированный код.
Генераторы лучше всего применимы в проблемной области, требующей выполнения множества коротких, схожих итераций. Областями применения являются приложения баз данных, код доступа к базам данных, SQL запросы, классы и структуры объектно-ориентированных языков программирования, тестирование программного кода, техническая документация на сгенерированный код.
Преимущества: структурированность и согласованность исходного кода и архитектуры приложения, удобство и улучшение эффективности работы программистов, высокое качество кода и облегченное исправление ошибок, высокая скорость разработки, гибкость к изменениям, наличие единого источника информации о приложении, наглядность бизнес логики, усовершенствованный процесс разработки кода, а также улучшение мотивации разработчиков.
Недостатки: генерация не во всех случаях может быть эффективной, всегда присутствует код, который надо разработать вручную, необходимость сопровождения не только приложения, но и самого генератора, необходимость уделять много внимания обучению работе с генератором.
Генераторы обладают такими характеристиками как способ ввода метаданных, шаблонов, правил предметной области, вывода сгенерированного кода, метод и масштаб генерации, завершенность сгенерированного кода, наличие доступа к исходному коду.
Технология генерации кода является эффективной и мощной техникой с потенциально безграничными возможностями. Целью данного курса является демонстрация того, что разработка программ, создающих другие программы, в большинстве практических случаев не является чем-то сверхсложным. В курсе мы рассмотрим примеры генераторов, начинать будем с самых простых примеров, заканчивать более сложными. Также необходимо отметить, что генератор кода не является волшебной палочкой, решающей все проблемы. Если допущены ошибки на этапе проектирования, или идея проекта, скажем так, не самая лучшая, то никакой генератор не может гарантировать успех проекта. Генератор кода - это инструмент, а грамотное применение инструмента - задача того, кто им пользуется.
В данной лекции мы рассмотрели общую информацию, касающуюся генераторов. В следующей лекции мы рассмотрим этапы построения генераторов и практические примеры генераторов с разнообразными характеристиками, а также сгенерированный ими код.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.