Диссертация (1090660), страница 5
Текст из файла (страница 5)
Наоборот, как правило, предметно-ориентированные языки проще в освоении, т.к. содержат только тот функционал, который требуется для решения задачв конкретной узко-специализированной предметной области. Понятие предметноориентированного языка ставится в противовес языкам общего назначения или GPL(англ. General-purpose programming language) [30].В книге [69] отмечается, что хороший предметно-ориентированный язык являетсяи декларативным: он предоставляет лингвистические абстракции в понятиях своейпредметной области, что позволяет препроцессору или интерпретатору такого языка«понимать» предметную семантику без комплексного анализа кода.Проведём аналогию использования парадигм программирования со строительством загородного дома.
Непосредственное участие субъекта в постройке дома:укладка кирпича, установка окон и дверей, монтирование коммуникаций — всё это по-23хоже на императивное программирование, т.к. дом строится на изначально пустом месте, а использование готовых компонентов (стройматериалов, окон и дверей, электрооборудования, сантехники) очень похоже на использование заранее подготовленныхбиблиотек, коих существует огромное количество в императивных языках высокогоуровня. Стоит также добавить, что низкоуровневое программирование напоминаетаналогичный процесс с оговоркой на то, что все готовые компоненты приходится изготавливать самостоятельно из сырья: выжигать кирпич, вытачивать брус, выплавлятьметаллические изделия.
Несмотря на свою сложность, достоинством этого процессаявляется то, что на выходе получаются именно те компоненты, какие задумывалисьархитекторами и декораторами дома, в то время как заранее заготовленные компоненты не всегда соответствуют изначальной задумке проекта, а изменить их вид уженевозможно. Декларативное программирование же напоминает работу архитектора,когда тот не задумывается подробно о том, как именно будет строиться та или инаячасть дома, однако он чётко знает, какой вид должно принять определённое помещение, где и сколько должно быть установлено окон и дверей, как должен выглядетьфасад дома и т.д.
По макету, разработанному архитектором, производится непосредственное строительство. Этот процесс аналогичен интерпретации программы.1.1Анализ технологий серверной стороны1.1.1Иерархическая модель инструментариевКлиентская часть редко исполняет логику приложения, выполняя скорее функциюпользовательского интерфейса. Именно по этой причине практически все клиентскиетехнологии заточены на решение специфичных задач, которые не требуют реализации сложных алгоритмических структур, а вся немногочисленная логика, нерешаемая этими технологиями, решается одним единственным языком программированияклиентской стороны — JavaScript, интерпретирующемся браузером.Совсем по-другому обстоят дела на серверной стороне, где исполняется основнаялогика работы приложения, происходит обработка больших объёмов данных, их выборка из внешних хранилищ и манипуляция, вспомогательные вычисления и многоедругое.
Этим и обуславливается технологическое многообразие серверной стороны. Внастоящем обзоре речь пойдёт о технологиях, позволяющих задать основную логикуработы Web-приложения. Условно, все классические серверные технологии разработки можно разделить на четыре группы, расположив их в определённой иерархической24последовательности (рис. 1.1). Похожая модель была предложена Эндрю Таненбаумом [114] для наглядного представления зависимости между скоростью и объёмом поотношению к различным типам компьютерной памяти.CMSФреймворкиИнтерпретируемыеязыки(Perl, PHP, Python, Ruby)Компилируемые языки(C/C++, Java)Рисунок 1.1.
Иерархическая модель инструментариев Web-разработкиНа верхнем уровне представленной пирамиды находятся системы управления контентом или CMS (англ. Content Management System). Это системы, предоставляющиеготовый функционал для размещения и управления пользовательскими данными. Какправило, это достаточно статичные и неповоротливые системы, для которых весьмазатруднительна реализация узко-специализированных функций.
Систем управленияконтентом существует большое количество, и, помимо знания языков программирования, требуется знание архитектуры таких систем, если требуется реализация узкоспециализированного функционала. Процесс разработки с использованием CMS становится весьма негибким и неэффективным, но при этом, если в задачах разработкиWeb-узла не значится реализация специфичного функционала, такие системы позволяют быстро развернуть информационный ресурс и разместить на нём необходимуюинформацию.Уровнем ниже расположены специализированные программные библиотеки, представляющие собой архитектурный каркас с набором высокоуровневых функций, решающих типовые задачи Web-разработки: авторизация пользователей, разграничениеправ доступа, получение данных, работа с СУБД и др.
Такой каркас носит название «фреймворк» (англ. framework, каркас, структура). Достоинство фреймворков вих повышенной гибкости и скорости разработки. Недостаток, присущий предыдущейгруппе — требуется время на обучение архитектуре — также сохраняется. Фреймворки25не заменяют языки программирования, они только помогают избежать необходимостьрешения рутинных задач и используются совместно с каким-либо из языков программирования.
Стоит также отметить, что многие фреймворки поддерживают технологию ORM (англ. Object-relational mapping, объектно-реляционное отображение), являющуюся высокоуровневым связующем звеном между СУБД и ООП.На следующем уровне находятся интерпретируемые языки общего назначения,традиционно применяемые в том числе и в Web-разработке. Интерпретация позволяет избежать необходимость перекомпиляции программы при каждом новом изменении. Помимо возможности интерпретируемости, у представленных языков естьи другая особенность — более высокий уровень абстракции. Они также являютсядинамическими, что подразумевает, как минимум, динамическую типизацию [109].Эти языки также поддерживают гибкую работу с памятью, эффективную обработкутекстовых данных, что особенно важно при разработке Web-приложений.
Работа сСУБД на этом уровне происходит напрямую через отправку запросов на предметноориентированном декларативном языке SQL (англ. Structured Query Language, языкструктурированных запросов). Низкоуровневые функции установки соединения сСУБД и передачи ей запросов осуществляются путём подключения дополнительныхмодулей и библиотек.И на самом нижнем уровне находятся компилируемые языки общего назначения,используемые не только в Web-разработке или обработке текстовых данных, но и,к примеру, в системном программировании.
Это языки, на которых разрабатываетсяпрограммное обеспечение, особо критичное к потреблению памяти и скорости вычислений. Таким образом, языки общего назначения имеют лишь статическую типизацию, однако это обстоятельство положительно влияет на потребляемые системныересурсы, а также на гибкость реализации нового функционала, но весьма негативноотражается на скорости разработки.Резюмируя вышесказанное, отметим, что по мере продвижения с вершины иерархической пирамиды к её основанию, изменяются три основные характеристики.
Вопервых, повышается гибкость разработки, что означает возможность реализациифункционала любой сложности, в том числе и специфичного, разработка которогона более высоких уровнях затруднительна, либо невозможна в принципе.Во-вторых, увеличивается время, затрачиваемое на разработку. Это следствие повышенной гибкости: на низких уровнях работа происходит с абстрактными сущностями, составляющих в комплексе сущности более высокого уровня с конкретно задан-26ной спецификой. Таким образом, на нижних уровнях высокоуровневый функционалприходится составлять из элементарных частей.В-третьих, понижаются системные требования к программным технологиям каждого из уровней.
Так, системы управления контентом, как правило, реализованы спомощью фреймворка, который, в свою очередь, реализован на одном из интерпретируемых языков, а интерпретатор специализированного языка всегда реализован накомпилируемом языке программирования.1.1.2Языки программированияБольшинство языков Web-программирования интерпретируемые, то есть весь программный код сохранён в явном виде в текстовых файлах — скриптах, а специализированная программа, называемая интерпретатором, построчно считывает исходныйкод и исполняет его «на лету» каждый раз во время поступления запроса от пользователя на соответствующий модуль. Интерпретируемые языки являются противоположностью компилируемым языкам, где компилятор преобразует программный кодна языке высокого уровня в исполняемый модуль в двоичном виде, который, в своюочередь, может быть исполнен напрямую машиной.Преобладание интерпретируемых языков в сфере Web-программирования обусловлено спецификой отрасли: программы на таких языках не требуют постоянной перекомпиляции, что позволяет разработчику менять логику работы приложения лишьизменяя соответствующие скриптовые файлы.
У подобного удобства есть и обратнаясторона — интерпретируемый код исполняется на несколько порядков медленнее компилируемого. Основной целью разработчиков интерпретаторов является уменьшениенакладных расходов и, как следствие, технологического разрыва по скорости междукомпилируемыми и интерпретируемыми языками. Для этого применяются различныеакселераторы и интеллектуальные алгоритмы повторного использования кода. Такаяже цель стоит и перед системными архитекторами, разрабатывающими архитектуруWeb-сервера и внедряющие кэширование как на клиентской, так и на серверной сторонах.