Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО лекции.doc
Скачиваний:
122
Добавлен:
09.12.2018
Размер:
3.62 Mб
Скачать

16.Разработка программ в архитектуре «клиент—сервер»

Структура приложения, построенного в архитектуре «клиент - сервер».

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

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

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

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

Тогда сложилось понятие приложения, построенного на основе архитектуры «клиент—сервер». В первую (серверную) составляющую такого приложения от­носят все методы, связанные с доступом к данным. Чаще всего их реализует сер-

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

Кроме того, со временем на рынке СУБД стали доминировать несколько наибо­лее известных компаний-производителей. Они предлагали стандартизованные интерфейсы для доступа к создаваемым ими СУБД. На них, в свою очередь, ста­ли ориентироваться и разработчики прикладных программ. Такая ситуация оказала влияние и на структуру систем программирования. Мно­гие из них стали предлагать средства, ориентированные на создание приложений в архитектуре «клиент—сервер». Как правило, эти средства поставляются в соста­ве системы программирования и поддерживают возможность работы с широким диапазоном известных серверов данных через один или несколько доступных интерфейсов обмена данными. Разработчик прикладной программы выбирает одно из доступных средств плюс возможный тип сервера (или несколько воз- : можных типов), и тогда его задача сводится только к созданию клиентской части ,; приложения, построенной на основе выбранного интерфейса. Создав клиентскую часть, разработчик может далее использовать и распростра­нять ее только в комплексе с соответствующими средствами из состава системы программирования. Интерфейс обмена данными обычно входит в состав систе­мы программирования. Большинство систем программирования предоставляют возможность распространения средств доступа к серверной части без каких-либо дополнительных ограничений.

Что касается серверной части, то возможны два пути: простейшие серверы БД требуют от разработчиков приобретения лицензий на средства создания и отлад­ки БД, но часто позволяют распространять результаты работы без дополнитель­ных ограничений; мощные серверы БД, ориентированные на работу десятков и сотен пользователей, требуют приобретения лицензий как на создание, так и на распространение серверной части приложения. В этом случае конечный пользователь приложения получает целый комплекс программных продуктов от множества разработчиков.

Более подробно об организации приложений на основе архитектуры «клиент-сервер» можно узнать в [9, 35, 63].

Разработка программ в трехуровневой архитектуре. Серверы приложений

Трехуровневая архитектура разработки приложений явилась логическим про­должением идей, заложенных в архитектуре «клиент—сервер». Недостатком архитектуры приложений типа «клиент—сервер» стал тот факт, что в клиентской части приложения совмещались как довольно сложные функции,

связанные с обработкой получаемых от сервера данных, так и более про функции организации интерфейса пользователя. Для выполнения этих фун к вычислительной системе должны предъявляться различные требования, и ] случае когда выполняется сложная обработка данных, эти требования со a ны «клиентской» части приложения могут быть непомерно велики. Кроме обработка данных («бизнес-логика» приложения), как правило, изменяете: значительно по мере прохождения жизненного цикла, развития приложен выхода его новых версий. В то же время интерфейсная часть может серьез» доизменяться и в предельном случае подстраиваться под требования конкр< го заказчика.

Еще одним фактором, повлиявшим на дальнейшее развитие архитектуры « ент—сервер», стало распространение глобальных сетей и всемирной сети Инте Многие приложения стали нуждаться в предоставлении пользователю воз] ности доступа к данным посредством сети. Возможностей архитектуры « ент—сервер» для этой цели стало во многих случаях недостаточно, поско клиент зачастую мог не иметь никаких вычислительных ресурсов, кроме граммы навигации по сети (браузера, browser).

Поэтому дальнейшим развитием архитектуры «клиент—сервер» стало раз; ние клиентской части в свою очередь еще на две составляющих: сервер прил ний (английские термины «application server» или «middleware»), реализую обработку данных («бизнес-логику» приложения), и «тонкий клиент» («thin clie обеспечивающий интерфейс и доступ к результатам обработки (далее «toi клиент» будем называть просто «клиентом»). Серверная часть осталась бе: менений, но теперь она получила название «сервер баз данных» («database ver»), чтобы не путаться с сервером приложений.

Разделение клиентской части на две составляющих потребовало организг взаимодействия между этими составляющими. Причем это взаимодействие д( но, с одной стороны, быть достаточно тесным, так как клиент должен выпол отображение получаемых от сервера данных за время с разумной задержкой лательно минимальной); а с другой стороны, он должен допускать обмен да! ми по протоколам, поддерживаемым глобальными сетями. Поэтому появи некоторое число стандартов, ориентированных на организацию такого рода е модействия. Стали появляться новые интерфейсы обмена данными. Среди можно выделить семейство стандартов COM/DCOM, предложенных фир Microsoft для ОС семейства Microsoft Windows [103], а также семейство с дартов CORBA (Common Object Request Broker Architecture), поддержива< широким кругом производителей и разработчиков программного обеспече для большого спектра различных ОС [99]. Детальное рассмотрение такого стандартов и принципов их организации не входит в рамки данного учебногс собия.

Системы программирования в настоящее время ориентируются на поддер средств разработки приложений в трехуровневой (трехзвенной) архитект Средства поддержки тех или иных стандартов сейчас появляются в составе i гих систем программирования [3, 35, 63, 98, 104, 105]. Принципы их использования и распространения аналогичны принципам, применяемым для средств : держки архитектуры типа «клиент—сервер». Следует заметить, что существ

системы программирования, ориентированные на разработку либо клиентской части, либо сервера приложений; и в то же время многие системы программиро­вания стремятся предоставить разработчикам средства для создания обеих час­тей в трехуровневой архитектуре. Серверная часть (сервер баз данных) в трех­уровневой архитектуре по-прежнему чаще всего является продуктом другого разработчика1.

Более подробно об организации приложений на основе трехуровневой техноло­гии можно узнать в [2, 35, 63].

Примеры современных систем программирования

В этом разделе пособия ни в коем случае не ставится задача полного описания тех или иных систем программирования, доступных в настоящее время на рынке современных средств разработки программного обеспечения. Полное описание многих из них по объему будет значительно превышать весь материал данного пособия. Автор только дает краткий обзор наиболее известных и распространен­ных в настоящее время систем программирования с точки зрения их компонен­тов, ложащихся на общую структуру типовой системы программирования.

Для краткого описания автором были выбраны только самые известные из всего широкого спектра систем программирования, распространенные именно на рын­ке Российской Федерации. Информация о данных системах программирования дается как на основании соответствующей литературы, так и на основании лич­ного опыта работы автора.

Системы программирования компании Borland/Inprise

Системы программирования компании Borland достаточно широко известны раз­работчикам в России. Известность и распространенность этих систем програм­мирования определила, прежде всего, простота их использования, поскольку именно в системах программирования этой компании были впервые реализова­ны на практике идеи интегрированной среды программирования.

Turbo Pascal

Система программирования Turbo Pascal была создана компанией Borland на ос­нове расширения языка Pascal, получившего название Borland Pascal. Отсюда происходит и само название системы программирования.

Сам язык Pascal был предложен Н. Виртом в конце 70-х годов как хорошо струк­турированный учебный язык. Расширения, привнесенные в язык компанией Bor­land, преследовали две основные цели:

  • упрощение обработки в языке структур, представляющих наиболее распро­ страненные типы данных — строки и файлы (например, в язык был внесен новый тип данных string);

  • реализация в языке основных возможностей объектно-ориентированных язы­ ков программирования.

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

Компания Borland построила и реализовала эффективный однопроходный ком­пилятор с языка Borland Pascal. За счет этого в данной системе программиро­вания удалось добиться относительно высокой скорости компиляции исходных программ. Для ускорения работы компоновщика компанией Borland был пред­ложен собственный уникальный формат объектных файлов — модулей исходной программы — TPU (Turbo Pascal Unit)1. По этой причине модули, созданные в системе программирования Turbo Pascal, не могли быть использованы в дру­гих системах программирования. Также из них невозможно было создавать биб­лиотеки, ориентированные на другие языки и системы программирования. Об­ратная задача — использование стандартных объектных файлов и библиотек в системе программирования Turbo Pascal — была решаема, но имела серьезные ограничения. В состав системы программирования Turbo Pascal, кроме компи­лятора с языка Borland Pascal, входил также компилятор с языка ассемблера (а с появлением возможности разработки результирующих программ для среды Microsoft Windows — компилятор ресурсов). Среда программирования позволя­ла компоновать как единые исполняемые файлы, так и оверлейные программы для ОС типа MS-DOS.

Первоначально система программирования Turbo Pascal строилась на основе библиотеки RTL (run time library) языка Borland Pascal. Эта библиотека не пре­доставляла пользователю широкого набора функций — в основном она толь­ко реализовывала базовые математические функции и функции языка. Однако можно сказать об одной характерной черте данной библиотеки — она включала в свой состав объектный код менеджера памяти для управления распределени­ем динамической памяти («кучей» — heap — в терминах языка Pascal), который автоматически подключался к каждой результирующей программе, созданной с помощью данной системы программирования. Этот модуль получился доволь-

но удачным и нашел свое дальнейшее применение в других системах программи­рования данной компании-разработчика.

Несмотря на недостатки, система программирования Turbo Pascal получила ши­рокое распространение и завоевала свое место на рынке. Основной причиной явилось то, что система впервые была построена в виде интегрированной среды. Данный факт предопределил ее широкое распространение, и, прежде всего, в уни­верситетской среде, где требовались простые и понятные в использовании сред­ства разработки.

Первые версии системы программирования были ориентированы только на ра­боту в ОС MS-DOS персональных компьютеров на базе процессоров типа Intel 80x86. На исполнение в среде этой ОС были ориентированы и результирующие программы, разрабатываемые с помощью данной среды программирования.

Система программирования Turbo Pascal получила широкое распространение и дальнейшее развитие. Компания Borland выпустила несколько ее реализаций (наиболее распространенные из них — версии 5.5 и 7.0). Последние реализации данной системы программирования могли создавать результирующие программы, ориентированные на работу как в ОС типа MS-DOS, так и в среде типа Microsoft Windows. В них были реализованы все основные преимущества, предоставляе­мые интегрированной средой программирования, такие как лексический анализ программ «на лету» и встроенная контекстная подсказка.

По мере распространения системы программирования Turbo Pascal шла разра­ботка библиотек подпрограмм и функций для нее. Были созданы такие библио­теки, как Turbo Professional (TP), Turbo Vision, Object Window Library (OWL) для среды MS-DOS и ObjectWindows для среды Microsoft Windows. Широкому распространению данных библиотек по-прежнему мешал тот факт, что в системе программирования Turbo Pascal используется уникальный, нестандартный фор­мат объектных файлов. Отсутствие стандарта языка Borland Pascal во многом сдерживало развитие этой системы программирования и не способствовало ее применению как профессионального средства разработки.

Системе программирования Turbo Pascal здесь уделено много внимания по той причине, что это одна из самых распространенных в настоящее время систем программирования учебного назначения. Кроме того, это первая появившаяся на рынке система программирования, которая полностью реализовала в себе идеи интегрированной среды программирования. Эти идеи, заложенные в системе про­граммирования Turbo Pascal, нашли применение во многих современных систе­мах программирования. По системе программирования Turbo Pascal выпущена огромная масса литературы — можно обратиться, например, к книгам [34, 71, 72].

Borland Delphi

Система программирования Borland Delphi явилась логическим продолжением и дальнейшим развитием идей, заложенных компанией-разработчиком еще в сис­теме программирования Turbo Pascal.

В качестве основных в новой системе программирования можно указать следую­щие принципиальные изменения:

□ новый язык программирования — Object Pascal, явившийся серьезной пере­работкой прежней версии языка Borland Pascal;

Q компонентная модель среды разработки, в первую очередь ориентированная на технологию разработки RAD (rapid application development).

Язык программирования Object Pascal создавался в то время, когда на рынке средств разработки уже существовало значительное количество объектно-ориен­тированных языков, включая такие известные, как C++ и Java. Компания Borland попыталась учесть все недостатки существующих языков объектно-ориентиро­ванного программирования, а также свой опыт создания языка Borland Pascal. По мнению автора, во многом ей это удалось. Новый язык вышел довольно удач­ным как с точки зрения синтаксиса, так и с точки зрения предоставляемых воз­можностей. Этот язык поддерживает практически все основные механизмы объ­ектно-ориентированного программирования.

Компонентная модель среды разработки предусматривает создание основной части программы в виде набора взаимосвязанных компонентов — классов объ­ектно-ориентированного языка. Во время разработки исходной программы (design time) компоненты предстают в виде графических образов и обозначений, связан­ных между собой. Каждый компонент обладает определенным набором свойств (properties), событий (events) и методов. Каждому из них соответствует свой фрагмент исходного кода программы, отвечающий за обработку метода или ре­акции на какое-то событие. Разработчик может располагать на экране и свя­зывать между собой компоненты, а также редактировать связанный с ними ис­ходный код программы. Причем поведение компонентов во время выполнения программы (run time) полностью определяется их взаимосвязью, исходным ко­дом программы и объектным кодом самого компонента.

Система программирования Borland Delphi предназначена для создания резуль­тирующих программ, выполняющихся в среде ОС Windows различных типов. Основу системы программирования Borland Delphi и ее компонентной моделр составляет библиотека VCL (visual component library). В этой библиотеке реали­зованы в виде компонентов все основные органы управления и интерфейса ОС Также в ее состав входят классы, обеспечивающие разработку приложений дл$ архитектуры «клиент—сервер» и трехуровневой архитектуры (в современных pea лизациях Borland Delphi). Разработчик имеет возможность не только использо вать любые компоненты, входящие в состав библиотеки VCL, но также и раз рабатывать свои собственные компоненты, основанные на любом из классо] данной библиотеки. Эти новые компоненты становятся частью системы про граммирования и затем могут быть использованы другими разработчиками. Для поддержки разработки результирующих программ для архитектуры «кли ент—сервер» в состав Borland Delphi входит средство BDE (Borland database engine Оно обеспечивает результирующим программам возможность доступа к шире кому диапазону серверов БД посредством классов библиотеки VCL. Посредст вом BDE результирующая программа может взаимодействовать с серверами Б; типа Microsoft SQL Server, Interbase, Sybase, Oracle и т. п. Система програм мирования Borland Delphi поддерживает также создание результирующих прс грамм, выполняющихся в архитектуре «клиент—сервер», на базе других техне логий, например ADO (ActiveX Data Objects).

Система программирования Borland Delphi выдержала несколько реализаций. Последние реализации данной системы программирования (прежде всего, вер­сии 4 и 5) включают широкий набор средств для поддержки разработки ре­зультирующих программ в трехуровневой архитектуре приложений. Система программирования Borland Delphi позволяет разрабатывать как серверную, так и клиентскую часть приложения в данной архитектуре. Возможно использова­ние как технологий COM/DCOM (наиболее распространенных в среде ОС типа Microsoft Windows), так и технологии CORBA (но только при разработке кли­ентской части приложения).

В качестве недостатков данной системы программирования можно указать ис­пользование нестандартного формата объектных файлов (сохранился еще от сис­темы Turbo Pascal, но в последней версии Borland Delphi 5 можно использовать стандартный формат), а также нестандартного формата для хранения ресурсов пользовательского интерфейса. Кроме того, сам язык Object Pascal не является признанным стандартом. Этот факт несколько затрудняет использование Bor­land Delphi в масштабных проектах в качестве основного средства разработки.

Тем не менее система программирования Borland Delphi получила широкое рас­пространение среди разработчиков в Российской Федерации. Более подробную информацию по данной системе программирования можно найти в технической литературе (например, [35]), либо на сайте компании-производителя [98].

Borland C++ Builder

Система программирования Borland C++ Builder объединила в себе идеи интег­рированной среды разработки, реализованные компанией в системах программи­рования Turbo Pascal и Borland Delphi с возможностями языка программирова­ния C++. История этой системы программирования начинается с интегрированной среды разработки Borland Turbo С.

Среда Turbo С представляла собой реализацию идей, заложенных компанией-разработчиком в системе программирования Turbo Pascal для языка программи­рования С. Компания Borland стремилась перенести удачную реализацию идей интегрированной среды разработки на новую основу. Компилятор Turbo С не был однопроходным, и потому время компиляции исходной программы превы­шало время компиляции аналогичной программы в Turbo Pascal. Кроме того, в системе программирования использовался стандартный компоновщик испол­няемых файлов MS-DOS.

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

С развитием системы программирования на базе Turbo Pascal развивались и сис­темы программирования на основе Turbo С.

Современная реализация Borland C++ Builder ориентирована на разработку результирующих программ, выполняющихся под управлением ОС Microsoft Windows всех типов. Сама система программирования Borland C++ Builder, как и Borland Delphi, также функционирует под управлением ОС типа Microsoft Windows. Он полностью поддерживает стандарт языка С, что делает возможным создание с помощью данной системы программирования модулей и библиотек, используемых в других средствах разработки (чего очень сложно достигнуть с помощью Borland Delphi).

По возможностям, внешнему виду и технологиям система программирования Borland C++ Builder схожа с системой программирования Borland Delphi. В ее основу положены те же основные идеи и технологии. Структура классов языка C++ в системе программирования Borland C++ Builder построена в той же биб­лиотеке VCL (visual control library), в которой строится структура классов Object Pascal в системе программирования Borland Delphi. Правда, разработчик, создаю­щий программы на C++, может не пользоваться классами VCL и взять за основу любую другую библиотеку, чего нельзя сказать о разработчике, использующем Object Pascal — набор доступных библиотек для последнего языка сильно огра­ничен.

Успешное распространение систем программирования Turbo Pascal и Borland Delphi способствовало и внедрению на рынок системы программирования Bor­land C++ Builder от той же компании-разработчика. Эта система программиро­вания занимает прочную позицию на рынке средств разработки для языка C++, где существует довольно жесткая конкуренция. Более подробную информацию по данной системе программирования можно найти в технической литературе ([80]), либо на сайте компании-производителя [98].

Системы программирования фирмы Microsoft

Компания Microsoft в настоящее время как производитель операционных сис­тем и программного обеспечения доминирует на рынке персональных компью­теров, построенных на базе процессоров типа Intel 8.0x86. Прежде всего, это от­носится ко всем вариантам ОС типа Microsoft Windows.

Этот факт явился одним из главных факторов, которые обусловили прочную по­зицию данной компании на рынке средств разработки программных продуктов для ОС типа Microsoft Windows. Все виды ОС типа Microsoft Windows созда­вались как закрытые системы. Поэтому безусловное знание компанией-разра­ботчиком структуры и внутреннего устройства «своей» ОС зачастую являлось определяющим в ситуации, когда надо было создать средство разработки прило­жений для данной ОС. Хорошие финансовые ресурсы и положение компании на рынке позволили ей создать довольно удачные системы программирования, не­смотря на то, что она начала их разработку довольно поздно и не являлась «зако­нодателем мод» в данной области.

Microsoft Visual Basic

Это средство разработки прошло долгую историю под руководством компании Microsoft. История языка Basic на персональных компьютерах началась с прими-

тивных интерпретаторов данного языка. Сам по себе язык Basic позволял легко организовать интерпретацию исходного кода программ, а его синтаксис и семан­тика достаточно просты для понимания даже непрофессиональными разработ­чиками.

Система программирования Microsoft Visual Basic также первоначально была ориентирована на интерпретацию исходного кода. Однако требования и условия на рынке средств разработки толкнули компанию-производителя на создание компилятора, вошедшего в состав данной системы программирования. При этом основные функции библиотеки языка были вынесены в отдельную, динамически подключаемую библиотеку VBRun, которая должна присутствовать в ОС для выполнения результирующих программ, созданных с помощью данной системы программирования. Различные версии системы программирования Microsoft Vi­sual Basic ориентированы на различные версии данной библиотеки. Интерпрета­тор языка был сохранен и внедрен компанией-разработчиком в состав модулей другого программного продукта — Microsoft Office.

Развитие системы программирования Visual Basic потребовало существенного изменения синтаксиса и семантики самого языка. С точки зрения автора, это ре­шение нельзя признать технически удачным, так как изначально простой и дос­таточно примитивный язык исходного текста (не ориентированный на создание объектно-ориентированных программ) был изменен так, чтобы иметь возмож­ность решать несвойственные ему задачи. Однако этот ход компании был про­диктован скорее маркетинговой политикой, чем техническими требованиями. При всем множестве привнесенных в язык новшеств компании удалось сохра­нить присущую ему простоту и наглядность всей системы программирования в целом.

Последняя версия данной системы программирования — Microsoft Visual Ba­sic 6.0 — является одним из эффективных средств для создания результирующих программ, ориентированных на выполнение под управлением ОС типа Microsoft Windows. Эта система программирования ориентирована на технологию разра­ботки RAD. Microsoft Visual Basic 6.0 содержит интегрированные средства визу­альной работы с базами данных, поддерживающие проектирование и доступ к базам данных SQL Server, Oracle и т. п. К этим средствам относятся Visual Data­base Tools, ADO/OLE DB, Data Environment Designer, Report Designer и ряд других.

В данной системе программирования поддерживается также создание серверных Web-приложений, работающих с любым средством просмотра на базе новых Web-классов. В новой версии обеспечивается и отладка приложений для сервера IIS (Internet information server) производства компании Microsoft. В Microsoft Visu­al Basic 6.0 возможно создание интерактивных Web-страниц.

Microsoft Visual Basic 6.0 обеспечивает простое создание приложений, ориенти­рованных на данные. Visual Basic 6.0 позволяет создавать результирующие про­граммы, выполняемые в архитектуре «клиент—сервер», которые могут работать с любыми базами данных. Система программирования Microsoft Visual Basic ориентирована, прежде всего, на создание клиентской части приложений.

Теперь Visual Basic 6.0 поддерживает универсальный интерфейс доступа к дан­ным Microsoft при помощи технологии ADO. Visual Basic 6.0 обеспечивает про

смотр таблиц, изменение данных, создание запросов SQL из среды разработки для любой совместимой с ODBC или OLE DB базы данных. Так же как и в ре­дакторе Visual Basic, синтаксис SQL выделяется цветом и незамедлительно про­веряется на наличие ошибок. Это делает код SQL легче читаемым и менее под­верженным случайным ошибкам.

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

Среда разработки обладает множеством новых возможностей, таких как выде­ление синтаксиса и автоматическое завершение ключевых слов. Система про­граммирования Microsoft Visual Basic интегрируется с семейством программных продуктов Microsoft BackOffice, которое обеспечивает среду для выполнения и создания сложных приложений масштаба предприятия для работы в локальных сетях или в Интернете. Использование новых интегрированных визуальных средств работы с данными облегчает выполнение рутинных задач по обеспече­нию доступа к ним; эти средства доступны прямо из среды разработки Visual Basic.

Система программирования Visual Basic неплохо сочетает в себе простоту и эф­фективность разработки. Все недостатки, присущие данной системе, в большин­стве своем проистекают из недостатков используемого исходного языка про­граммирования. Средства языка Basic даже после значительной модификации ограничивают возможности его применения в современных архитектурах взаи­модействия приложений, которые в значительной мере основаны на объектно-ориентированном подходе. Кроме того, язык программирования в системе Visual Basic не является признанным стандартом, а потому возникают трудности по ис­пользованию созданных на его основе модулей и компонентов в других средст­вах разработки.

Информацию о системе программирования Visual Basic можно найти в много­численной технической литературе (например, [3, 63]), либо же на сайте пред­ставительства компании [105].

Microsoft Visual C++

Система программирования Microsoft Visual C++ представляет собой реализа­цию среды разработки для распространенного языка системного программиро­вания C++, выполненную компанией Microsoft. Эта система программирования в настоящее время построена в виде интегрированной среды разработки, вклю­чающей в себя все необходимые средства для разработки результирующих про­грамм, ориентированных на выполнение под управлением ОС типа Microsoft Windows различных версий.

Основу системы программирования Microsoft Visual C++ составляет библиотека классов MFC (Microsoft foundation classes). В этой библиотеке реализованы в виде классов C++ все основные органы управления и интерфейса ОС. Также

в ее состав входят классы, обеспечивающие разработку приложений для архи­тектуры «клиент—сервер» и трехуровневой архитектуры (в современных версиях библиотеки). Система программирования Microsoft Visual C++ позволяет разра­батывать любые приложения, выполняющиеся в среде ОС типа Microsoft Windows, в том числе серверные или клиентские результирующие программы, осуществ­ляющие взаимодействие между собой по одной из указанных выше архитектур.

Классы библиотеки MFC ориентированы на использование технологий СОМ/ DCOM, а также построенной на их основе технологии ActiveX для организации взаимодействия между клиентской и серверной частью разрабатываемых прило­жений. На основе классов библиотеки пользователь может создавать свои собст­венные классы в языке C++, организовывать свои структуры данных.

В отличие от систем программирования компании Borland, система програм­мирования Microsoft Visual C++ ориентирована на использование стандартных средств хранения и обработки ресурсов интерфейса пользователя в ОС Windows. Это не удивительно, поскольку все версии ОС типа Windows разрабатываются самой компанией Microsoft. Microsoft Visual C++ обеспечивает все необходимые средства для создания профессиональных Windows-приложений. От версии к версии продукт становится проще в использовании, расширяются возможности применения, повышается производительность.

Система программирования Microsoft Visual C++ выдержала несколько реали­заций. В процессе выхода новых версий системы программирования было вы­пущено и несколько версий библиотеки MFC, на которой основана данная сис­тема.

Сама по себе библиотека MFC является, по мнению автора, довольно удачной реализацией широкого набора классов языка C++, ориентированного на разра­ботку результирующих программ, выполняющихся под управлением ОС типа Microsoft Windows. Это во многом обусловлено тем, что создатель библиотеки — компания Microsoft — одновременно является и создателем ОС типа Microsoft Windows, на которые ориентирован объектный код библиотеки. Библиотека мо­жет быть подключена к результирующей программе с помощью обычного ком­поновщика либо использоваться как динамическая библиотека, подключаемая к программе во время ее выполнения. Библиотека MFC достаточно широко рас­пространена. Ее возможно использовать не только в составе систем программи­рования производства компании Microsoft, но и в системах программирования других производителей.

В комплект поставки данной системы программирования входят также новый мастер для поэтапного создания приложений, интегрированный отладчик созда­ваемых приложений, профилировщик исходного кода, галерея классов и объек­тов, а также средство для создания дистрибутивов — InstallShield.

Visual C++ 6.0 полностью интегрируется с Visual Studio 6.0 и другими средства­ми разработки, входящими в состав данного пакета. Эта интеграция, в частности, обеспечивает мгновенный доступ к MSDN (Microsoft developer network) library, содержащей документацию, примеры кода, статьи и другую информацию для разработчиков. Система программирования Visual C++ 6.0 широко известна. Информацию о ней можно найти в многочисленной технической литературе, а также на сайте пред­ставительства компании [104].

Концепция .NET

Концепция .NET (произносится как «dot net» — «дот нет») — это не система программирования, а новейшая технология, предложенная фирмой Microsoft с целью унификации процесса разработки программного обеспечения с помощью различных систем программирования. Концепция .NET разработана компанией совсем недавно, и в настоящее время (2000-2001 годы) происходит ее постепен­ное внедрение на рынок средств разработки.

Концепция Microsoft .NET — это целостный взгляд компании Microsoft на но­вую эпоху в развитии Интернета. В рамках этой концепции самые разнообраз­ные программные приложения предоставляются пользователям и разработчикам как сервисы, которые взаимодействуют между собой в соответствии с конкрет­ными потребностями бизнеса, доступны на самых разных устройствах, имеют понятный и полностью адаптирующийся к потребностям каждого пользователя интерфейс.

Концепция Microsoft .NET — закономерный этап в развитии информационных технологий, приложений и сервисов, позволяющий разработчикам воспользо­ваться преимуществами сочетания открытых стандартов и архитектуры новой ОС производства компании Microsoft — Microsoft Windows 2000.

Большинство операционных систем, существовавших до настоящего времени, были неспособны предоставить необходимую корпоративным приложениям сре­ду исполнения. Для них приходилось создавать специальные серверы приложе­ний. Новая ОС производства компании Microsoft — Microsoft Windows 2000 — непосредственно предоставляет многие функций сервера приложений на уров­не системных сервисов. Поэтому в концепции .NET управление приложениями концентрируется на более специфических для корпоративной среды и Интер­нет-служб задачах — управлении множеством объектов, приложений и серверов. Их решает сервер масштабирования приложений.

Концепция .NET содержит много новых идей и предложений, выдвинутых и реализуемых компанией Microsoft. С точки зрения систем программирования основные идеи архитектуры .NET заключаются в том, что в ОС типа Windows 2000 организуется специальная виртуальная машина, исполняющая (интерпре­тирующая) команды некоторого промежуточного низкоуровневого языка. Любая программа, исполняемая в .NET, представляет собой набор команд данного про­межуточного языка. При этом сами команды этого языка интерпретируются не­зависимо от архитектуры вычислительной системы и версии ОС, где они испол­няются.

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

системы. Кроме того, любая результирующая программа, исполняемая в .NET, сможет воспользоваться сервисными функциями другой программы, доступной в .NET, вне зависимости от того, с помощью какой системы программирования были разработаны обе эти программы. Это значительно расширяет возможности программ, исполняемых в рамках .NET, особенно с учетом возможности удален­ного (сетевого) доступа ко многим предоставляемым сервисам.

В первую очередь на поддержку концепции .NET будут, безусловно, ориентиро­ваны системы программирования производства компании Microsoft. Это кос­нется рассмотренных выше систем программирования Microsoft Visual C++ и Microsoft Visual Basic. Кроме того, компания предлагает новую систему програм­мирования, построенную на базе нового языка С# (произносится «Си-шарп»), которая специально ориентирована на поддержку концепции .NET. При успеш­ном развитии концепции и ее внедрении на рынок ОС и средств разработки на нее будут ориентироваться и системы программирования других разработчи­ков.

Поддержка концепции .NET в системах программирования не отменяет в них поддержку традиционного пути создания программного обеспечения. Возмож­ность создания результирующих программ, исполняющихся под управлением .NET, идет в дополнение к возможности создания «традиционных» результи­рующих программ, построенных из машинных команд, ориентированных на оп­ределенную архитектуру целевой вычислительной системы. Однако далеко не все модули существующих в настоящий момент библиотек могут быть использо­ваны в рамках данной концепции. Это в равной степени касается и распростра­ненных библиотек MFC и VBRun, используемых в системах программирования от Microsoft.

Концепция .NET ориентирована исключительно на новые ОС типа Windows 2000 производства компании Microsoft (а также на все последующие версии дан­ного типа ОС). Она не переносима на ОС других типов, а также на архитектуру, не совместимую с традиционной архитектурой персональных компьютеров, по­строенных на базе процессоров Intel 80x86. Этот факт ограничивает ее широкое распространение, поскольку она поддерживается пока только одной компанией-производителем, хотя и доминирующей на рынке ОС для персональных компь­ютеров.

Концепция .NET еще достаточно нова и не нашла пока широкого отражения в технической литературе. Со временем эта ситуация, конечно, изменится, а пока для более подробной информации рекомендуется обратиться на сайт представи­тельства компании Microsoft [106].

Системы программирования под ОС Linux и UNIX

Системы программирования в составе ОС типа UNIX

Вся история ОС UNIX тесно связана с историей языка программирования С. Фактически эти два программных продукта не смогли бы существовать друг без друга.

Язык программирования С появился как базовый язык программирования в ОС типа UNIX. Более того, сама операционная система представляла (и представля­ет) собой набор файлов, написанных на исходном языке программирования С. То есть практически любая ОС типа UNIX поставляется в виде исходного текста на языке С (кроме незначительной части ядра ОС, ориентированной на особен­ности архитектуры вычислительной системы, где она выполняется). Всякий раз при изменении основных параметров ОС происходит компиляция и компоновка ядра ОС заново, а при перезапуске ОС вновь созданное ядро активируется. Этот принцип характерен для всех ОС типа UNIX.

Таким образом, ни одна ОС типа UNIX фактически не может существовать без наличия в ее составе компилятора и компоновщика для языка программирова­ния С (поскольку речь идет о ядре ОС, то роль загрузчика несколько отличается от его роли в обычной системе программирования). Соответственно, все произ­водители ОС типа UNIX включают в ее состав и системы программирования языка С. По указанным причинам этот язык программирования стал основным для этого типа ОС (хотя под ОС типа UNIX существуют системы программиро­вания с других языков — например, Lisp, FORTRAN, Pascal, — они используются не так часто, как С).

В ОС типа UNIX сложились основные особенности и характеристики второго этапа в развитии систем программирования. Именно здесь системы программи­рования стали представлять собой комплекс из библиотек языка, компилятора и компоновщика, выполняемых под управлением специальных командных фай­лов. Функции загрузчика в данном случае большей частью выполняются са­мой ОС. В ОС типа UNIX сложился, стал применяться и был стандартизован командный язык компиляции Makefile. Кроме того,, именно в ОС этого типа были разработаны упомянутые в данном учебном пособии методы автоматизации раз­работки компиляторов, основанные на использовании программ LEX и YACC [11, 31, 39, 67, 68, 90]. К тому же практически все ОС типа UNIX обладают мощ­ными командными процессорами, выполняющими команды пользователя в ОС. Возможности этих командных процессоров, по сути, соответствуют возможно­стям интерпретаторов языков программирования.

Принцип, по которому распространяется и устанавливается любая ОС типа UNIX, стал применяться и к прикладным программам, разрабатываемым для исполне­ния под управлением данного типа ОС. Обычно прикладная программа, ориен­тированная на выполнение под ОС типа UNIX, поставляется в виде набора исходных кодов (чаще всего на языке программирования С). При установке при­кладной программы на конкретную ОС такого типа она автоматически компили­руется и компонуется, после чего готова к выполнению. Такой метод распро­странения прикладных программ в виде исходных кодов значительно снижает их зависимость от архитектуры конкретной вычислительной системы1. Однако

он требует обязательного наличия соответствующей системы программирования в составе ОС (вот почему в качестве языка разработки прикладных программ под ОС типа UNIX чаще всего выступает именно С).

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

Системы программирования, построенные на базе интегрированных сред разра­ботки, стали появляться и под ОС типа UNIX. Характерная черта их заключа­лась в том, что практически все они строились именно в графической среде на основе стандартного графического интерфейса. Так произошло, потому что в ОС типа UNIX (в отличие от ОС, ориентированных на персональные компьютеры) практически сразу в качестве стандарта «де-факто» установился стандарт графи­ческого интерфейса пользователя на основе среды X Window [31, 67, 68]. Это по­зволило унифицировать библиотеки систем программирования (все они строятся на базе библиотеки Xlib), компиляторы и компоновщики ресурсов пользователь­ского интерфейса. Широкие возможности командных процессоров в ОС типа UNIX облегчают построение интегрированной среды в системах программирова­ния. Поэтому сейчас существует широкий выбор таких сред от многих произво­дителей (при наличии хотя бы небольшого опыта работы в ОС разработчик име­ет возможность сам построить интегрированную среду программирования под управлением ОС).

Описания базовых систем программирования под ОС типа UNIX можно найти в любой технической литературе по этим ОС, которая имеется в настоящее время в достаточном количестве [11, 31, 34, 67, 68].

Системы программирования проекта GNU

Проект GNU был начат в 1984 году. Само название «GNU» является рекурсивной аббревиатурой «GNU's Not UNIX» - «GNU не UNIX». Манифест проекта GNU [102] был написан Ричардом Столлменом (Richard Stallman) в начале работы над проектом GNU и адресован желающим помочь или принять участие в проек­те. В течение нескольких первых лет работы над проектом он был незначительно обновлен, чтобы отразить ход работ.

Идея проекта GNU заключается в свободном распространении всех программ, созданных в рамках этого проекта. Программы распространяются в виде исход­ного кода, причем пользователь не только получает этот код в пользование, но и имеет право вносить в него изменения, а также распространять исходный или модифицированный код всем желающим участникам проекта. Во многом своему существованию и развитию проект обязан наличию по всему миру большого ко­личества профессионалов-энтузиастов, не возражающих против свободного рас­пространения и использования созданных ими программ. Более точные форму-

лировки сути проекта и условий участия в нем можно найти на сайте [100] или [102] (в русском переводе).

GNU — это название полной UNIX-совместимой программной системы, которая разрабатывается и безвозмездно предоставляется всем желающим ее использо­вать в рамках проекта. Система GNU способна исполнять UNIX-программы, но не идентична ОС типа UNIX. Улучшения основаны на имеющемся опыте рабо­ты с другими операционными системами. В качестве языка системного програм­мирования в системе доступны как С, так и Lisp. Кроме этого, поддерживаются коммуникационные протоколы UUCP, MIT Chaosnet и сети Интернет.

Безусловно, по самой своей сути проект предполагает наличие в своем составе систем программирования. В противном случае распространение исходных ко­дов программ в рамках проекта будет просто бессмысленным. Очевидно, базовой системой программирования в проекте GNU стала система программирования на языке С. Хотя GNU и не UNIX, но проект перенял многие положительные черты ОС этого типа, в том числе — создание и распространение ядра ОС на основе языка С. Другим фактором, обусловившим создание системы програм­мирования языка С в рамках проекта GNU, стало то, что большинство профес­сионалов-энтузиастов, основавших проект, использовали именно этот язык про­граммирования.

Со временем система программирования GNU С преобразовалась в более разви­тую систему программирования GNU C++, поскольку именно язык C++ полу­чил широкое распространение в среде профессионалов. Затем в рамках проекта стали доступны и системы программирования на основе многих других языков программирования, в частности известного языка Pascal.

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

Поэтому в последнее время и в рамках проекта GNU стали появляться системы программирования, построенные на основе интегрированной среды разработки. Кроме того, известные компании-производители средств разработки стали обра­щать внимание на данный проект по причине его широкого распространения. Они стали предлагать свои системы программирования, ориентированные на выполнение в ОС, созданной в рамках проекта GNU. Об одной из такой систем программирования (Borland Kylix) несколько слов сказано ниже.

Операционная система, созданная и поддерживаемая сообществом разработчи­ков в рамках проекта GNU, получила название Linux. В ходе работы над проек-

том было создано большое количество программного обеспечения, в том числе и систем программирования (кроме указанной уже системы GNU C++). Даже краткий обзор их возможностей здесь не представляется возможным. Информа­цию о них можно найти в любой технической литературе, посвященной ОС Linux и проекту GNU, либо в сети Интернет [67, 68, 100].

Положительной чертой проекта можно считать так же тот факт, что многие сис­темы программирования, созданные в рамках проекта, оказались совместимыми и с ОС типа UNIX, которые формально не входят в проект GNU. Та же система программирования GNU C++, созданная в рамках проекта GNU, может с успе­хом использоваться (и используется) под многими версиями ОС типа UNIX.

Проект Borland Kylix

Проект Borland Kylix представляет собой попытку компании Borland перенести на ОС типа Linux опыт создания систем программирования, который компания накопила за долгое время работы в этой сфере для ОС типа Microsoft Windows. В рамках проекта Borland Kylix компания Borland создала и распространяет на рынке программного обеспечения одноименную систему программирования, основанную на языке программирования Object Pascal. Данный язык известен в среде разработчиков для системы программирования Borland Delphi, ориенти­рованной на ОС типа Windows. Компания Borland реализовывает проект Bor­land Kylix таким образом, чтобы перенести в созданную систему программиро­вания под ОС Linux все черты, присущие системе программирования Borland Delphi, уже существующей под ОС типа Microsoft Windows (эта система про­граммирования была рассмотрена выше в данной главе).

Основой проекта Borland Kylix стала библиотека компонентов CLX (произно­сится «клик»), в которой компания Borland реализовала все основные органы управления пользовательского интерфейса и средства обработки данных, ориен­тированные на ОС Linux. Библиотека построена в виде компонентов на основе иерархии классов языка Object Pascal. Надо сказать, что данная библиотека от­лична от библиотеки VCL, которая в настоящее время используется в системе программирования Borland Delphi и построена на основе того же языка. Перене­сти классы библиотеки VCL в новый проект системы программирования под ОС Linux оказалось для компании Borland принципиально невозможным. Следующим шагом в проекте Borland Kylix компания предполагает создание в его рамках системы программирования на основе языка C++. Эта система про­граммирования должна быть построена на основе той же библиотеки CLX, что и система программирования на основе Object Pascal (примерно так же, как Borland Delphi и Borland C++ Builder построены на основе одной и той же биб­лиотеки VCL).

Дальнейшим развитием проекта Borland Kylix компания Borland видит внедре­ние библиотеки CLX в существующие системы программирования Borland Delphi и Borland C++ Builder, ориентированные на ОС типа Windows. В случае успеш­ного развития проекта использование одной из указанных систем программи­рования компании Borland существенно облегчит перенос приложений между двумя принципиально различными типами ОС. В рамках этого проекта разра-

ботчик, пользуясь только средствами библиотеки CLX, сможет создавать исход­ный код на языке Object Pascal или C++ таким образом, что результирующие программы, построенные на основе этого кода с помощью Borland Kylix, будут выполняться в ОС типа Linux, а построенные с помощью Borland Delphi или Borland C++ Builder — в ОС типа Microsoft Windows. В случае успеха проект Borland Kylix может быть распространен и на различные ОС типа UNIX.

Этот проект был выбран в качестве примера потому, что системы программи­рования производства компании Borland достаточно широко распространены на рынке России. Внимание, уделяемое компанией Borland ОС типа Linux, говорит о широком распространении проекта GNU в среде разработчиков.

Проект Borland Kylix только начал развиваться. Он еще не нашел широкого от­ражения в технической литературе, поэтому подробности лучше получить на сайте компании [98].

Разработка программного обеспечения для сети Интернет

Интернет — это всемирная «сеть сетей». Он объединяет в себя вычислительные системы и локальные сети, построенные на базе различных аппаратно-программ­ных архитектур. При осуществлении взаимодействия по сети двух компьютеров один из них выступает в качестве источника данных (Интернет-сервера), а дру­гой — приемника данных (Интернет-клиента). Сервер подготавливает данные, а клиент принимает их и каким-то образом обрабатывает. Нередко в качестве данных выступают тексты программ, которые подготавливает сервер, а испол­нять должен клиент.

В таких условиях определяющим становится требование унифицированного исполнения кода программы вне зависимости от архитектуры вычислительной системы. Компиляция и создание объектного кода в условиях всемирной сети становятся бессмысленными, потому что заранее не известно, на какой вычисли­тельной системе потребуется исполнять полученный в результате компиляции код. По этой причине сервер не может передавать по сети объектный код или ко­манды ассемблера — вполне может так случиться, что клиент просто не способен их исполнить. Можно попытаться создать сервер таким образом, чтобы он мог подготавливать программы для всех известных типов клиентов. Однако это, во-первых, значительно увеличит нагрузку на сервер, а во-вторых, не гарантирует от ситуации, когда связь с сервером установит клиент нового, еще не известного серверу типа (поскольку количество возможных архитектур компьютеров непо­стоянно и ничем в принципе не ограничено).

Поэтому основной особенностью программирования в сети Интернет является использование в качестве основного средства программирования интерпрети­руемых языков. При интерпретации исполняется не объектный код, а сам исход­ный код программы, и уже непосредственно интерпретатор на стороне клиента отвечает за то, чтобы этот исходный код был исполнен всегда одним и тем же об­разом вне зависимости от архитектуры вычислительной системы. Тогда сервер готовит код программы всегда одним и тем же образом вне зависимости от типа клиента.

В такой ситуации нагрузка на Интернет-клиента может возрасти. Но задачу мож­но несколько упростить: Интернет-сервер может готовить не высокоуровневый код исходной программы, а некий унифицированный промежуточный код низ­кого уровня, предназначенный для исполнения на стороне клиента. Тогда в обмене данными участвуют еще две дополнительные программы: компилятор (точнее — транслятор) на стороне сервера, транслирующий исходный код программы на некотором языке высокого уровня в промежуточный низкоуровневый код; и ин­терпретатор на стороне клиента, отвечающий за исполнение промежуточного кода вне зависимости от архитектуры вычислительной системы клиента.

Во многих случаях при использовании исполнения программ в глобальной сети применяется именно такая схема.

Для реализации такого рода схем существует много технических и языковых средств. Существует также значительное количество языков программирования, ориентированных на использование в глобальной сети [10, 16, 91]. Интернет-программирование — это отдельная и довольно интересная область разработки программ, но в целом вопросы, затрагиваемые в ней, лежат за пределами данного учебного пособия. Далее дается только очень краткий обзор принципов, поло­женных в основу тех или иных языков программирования с глобальной сети.

Язык HTML. Программирование статических Web-страниц

Язык HTML (hypertext markup language, язык разметки гипертекста) во многом определил развитие и широкое распространение сети Интернет по всему миру. Сам по себе язык достаточно прост, а для овладения им нужны только самые примитивные знания в области программирования.

Язык позволяет описывать структурированный текст (гипертекст), содержащий ссылки и взаимосвязи фрагментов; графические элементы (изображения), кото­рые могут быть связаны как с текстовой информацией, так и между собой; а так­же простейшие элементы графического интерфейса пользователя (кнопки, спи­ски, поля редактирования). На основе описания, построенного в текстовом виде на HTML, эти элементы могут располагаться на экране, им могут присваиваться различные атрибуты, определяющие используемые ресурсы интерфейса поль­зователя (такие, как цвет, шрифты, размер и т. п.). В результате получается гра­фический образ — Web-страница (от «web» — «паутина» — слова, входящего в состав аббревиатуры WWW — World Wide Web — Всемирная паутина). Она в принципе может содержать различные мультимедийные элементы, включая графику, видео и анимацию.

Широкому распространению HTML послужил принцип, на основе которого этот язык стал использоваться в глобальной сети. Суть его достаточно проста: Интер­нет-сервер создает текст на языке HTML и передает его в виде текстового файла на клиентскую сторону сети по специальному протоколу обмена данными HTTP (hypertext transfer protocol, протокол передачи гипертекста). Клиент, получая исходный текст на языке HTML, интерпретирует его и в соответствии с резуль­татом интерпретации строит соответствующие интерфейсные формы и изобра­жения на экране клиентского компьютера.

Грамматика HTML проста (она относится к регулярным грамматикам), а потому не составляет сложности построить соответствующий интерпретатор. Такими интерпретаторами явились программы-навигаторы в сети Интернет (браузеры, browser), которые, по сути, минимально должны были содержать две составляю­щих: клиентскую часть для обмена данными по протоколу HTTP и интерпрета­тор языка HTML. Некоторое время на рынке существовало огромное количество такого рода программ, в настоящее время преобладают две — Internet Explorer (производства компании Microsoft) и Netscape Navigator (производства компа­нии Netscape). Первый из них доминирует на архитектуре персональных компь­ютеров на базе процессоров типа Intel 80x86 под управлением ОС типа Microsoft Windows.

Гораздо разнообразнее программное обеспечение серверной части. Это вызвано тем, что в протоколе HTTP нигде строго не специфицирован источник HTML-текста. Им может быть обычный текстовый файл, и тогда клиент будет видеть у себя статическую картинку всякий раз, когда устанавливает соединение с дан­ным сервером. Но может быть и так, что сервер будет порождать новый HTML-текст всякий раз, когда клиент устанавливает с ним соединение, или даже ме­нять текст по мере работы клиента с сервером. Тогда и изображение на стороне клиента, зависящее от интерпретируемого текста HTML, будет динамически из­меняться по мере изменения текста. Последний вариант представляет гораздо больший интерес с точки зрения предоставляемых возможностей. Вопрос только в том, как организовать динамическое изменение HTML-текста. Вот в этом на­правлении и шло развитие основных средств Интернет-программирования.

Описание языка HTML можно найти на многих сайтах в глобальной сети, а так­же в многочисленной литературе по Интернет-программированию (например, в [16, 91]).

Язык HTML прост и тем удобен. Однако отсюда проистекают и основные его недостатки. Во-первых, он не предоставляет средств динамического изменения содержимого интерфейсных форм и изображений, поэтому основной метод — динамическое изменение самого текста HTML. Во-вторых, данный язык не пре­доставляет никаких методов поддержки современных архитектур типа «клиент-сервер» или трехуровневой архитектуры. Он не позволяет обмениваться данны­ми ни с серверами БД, ни с серверами приложений как на стороне сервера, где готовятся тексты HTML, так и на стороне клиента, где эти тексты интерпретиру­ются. Наконец, этот язык имеет очень ограниченные средства для реакции на действия пользователя в интерфейсных формах, созданных с его помощью.

Для устранения этих недостатков были предложены различные средства. Неко­торые из них рассмотрены ниже.

Программирование динамических Web-страниц

Основная идея динамической генерации Web-страниц заключается в том, что большая часть HTML-страницы не хранится в файле на сервере, а порождается непосредственно каждый раз при обращении клиента к серверу. Тогда сервер фор­мирует страницу и сразу же по готовности передает ее клиенту. Таким образом, всякий раз при новом обращении клиент получает новый текст HTML, и не ис- ключено, что тексты могут значительно различаться между собой даже при обра­щении к одному и тому же серверу.

Вопрос только в том, как обеспечить динамическую генерацию HTML-кода на стороне сервера.

Самое очевидное решение заключается в том, чтобы разработать некоторый исполняемый файл (приложение), который будет динамически строить новый HTML-код. Тогда на вход такого исполняемого файла поступают некоторые па­раметры (например, данные, которые пользователь ввел в форме или командной строке), а на выходе он должен порождать HTML-код в виде текста. Для этой цели служат специальные приложения, называемые CGI-приложениями.

CGI (common gateway interface, общедоступный шлюзовой интерфейс) — это ин­терфейс для запуска внешних программ на сервере в ответ на действия клиента, установившего соединение с ним через глобальную сеть. Пользуясь этим интер­фейсом, приложения могут получать информацию от удаленного пользователя, анализировать ее, формировать HTML-код и отсылать его клиенту. CGI-прило-жения могут получать данные из заполненной формы, построенной с помощью HTML, либо из командной строки описания URL (universal resource locator, уни­версальный указатель ресурса). Строка URL вводится в программе-навигаторе, осуществляющей доступ к серверу со стороны клиента через глобальную сеть по протоколу HTTP. To, какие CGI-приложения по каким действиям пользователя должны выполняться на сервере, указывается непосредственно в коде HTML-страницы, которую сервер передает клиенту.

Кроме интерфейса CGI существуют и другие варианты интерфейсов, позволяю­щие динамически создавать HTML-код путем запуска на сервере приложений в ответ на действия клиента. Например, можно выделить интерфейс ISAPI (In­ternet server application programming interface, интерфейс прикладных программ Интернет-сервера). Отличие ISAPI от CGI заключается в том, что для поддержки CGI создаются отдельные приложения, выполняющиеся в виде самостоятельных программ, a ISAPI поддерживается с помощью библиотек, динамически подклю­чаемых к серверу. ISAPI-библиотеки исполняются непосредственно в адресном пространстве сервера, имеют большие возможности и обеспечивают более высо­кую производительность сервера, в то время как CGI-приложения исполняются в ОС сервера как отдельные процессы и вынуждены определенным образом организовывать обмен данными с самим сервером (что снижает производитель­ность). Но, с другой стороны, ошибка в библиотеке ISAPI может привести к вы­ходу всего сервера из строя и его длительной неработоспособности. В то же вре­мя ошибка в коде CGI-приложения может, в худшем случае, привести только к аварийному завершению выполнения этого приложения, а сам сервер при этом сохранит работоспособность. Тогда в результате ошибки будет неверно отобра­жена только какая-то одна HTML-страница либо часть страницы, а все осталь­ные части сервера будут продолжать исправно работать.

Современные системы программирования, в том числе и те из них, что были рас­смотрены в качестве примеров в данном пособии, позволяют создавать приложе­ния и библиотеки, рассчитанные на работу в глобальной сети в соответствии со стандартами CGI или ISAPI. При этом создание исходного кода приложения практически ничем не отличается от создания обычной исполняемой програм-

мы, компилятор по-прежнему порождает объектные файлы, но компоновщик со­бирает исполняемый файл или библиотеку с учетом того, что они будут испол­няться в архитектуре сервера глобальной сети. Функции загрузчика выполняет ОС по команде сервера либо сам Интернет-сервер.

Этот метод удобен, но имеет один серьезный недостаток: при изменении содер­жимого динамической HTML-страницы или же при изменении логики ее реак­ции на действия Интернет-клиента требуется создать новые код CGI или ISAPI-приложения. А для этого нужно выполнить полностью весь цикл построения ре­зультирующей программы, начиная от изменения исходного кода, включая ком­пиляцию и компоновку. Поскольку содержимое Web-страниц меняется доволь­но часто (в отличие от обычных программ), то такой подход нельзя признать очень эффективным. Кроме того, может потребоваться перенос Интернет-серве­ра с одной архитектуры вычислительной системы на другую, а это также потре­бует перестройки всех используемых CGI-приложений и ISAPI-библиотек. Лучших результатов можно добиться, если не выполнять на сервере уже ском­пилированный и готовый объектный код, а интерпретировать код программы, написанной на некотором языке. При интерпретации исходного кода сервер, конечно, будет иметь производительность ниже, чем при исполнении готового объектного кода, но чаще всего этим можно пренебречь, поскольку производи­тельность серверов Интернета ограничивает чаще всего не мощность вычис­лительной системы, а пропускная способность канала обмена данными. Тогда зависимость кода сервера от архитектуры вычислительной системы будет мини­мальной, а изменить содержимое порождаемой HTML-страницы можно будет сразу же, как только будет изменен порождающий ее исходный код (без допол­нительной перекомпиляции).

Существует несколько языков и соответствующих им интерпретаторов, которые нашли применение в этой области и успешно служат цели порождения HTML-страниц. Среди них можно назвать язык Perl, лежащий в основе различных вер­сий Web-технологии PHP (Personal home pages), и язык сценариев, на котором основана Web-технология ASP (Active server pages), — последний предложен и поддерживается известным производителем программного обеспечения — фир­мой Microsoft. Компонент, интерпретирующий ASP, появился в составе версии IIS (Internet information server) 3.0. В результате разработчики получили более простые в применении и вместе с тем более мощные средства создания Web-приложений.

Текст на интерпретируемых языках, которые поддерживаются такими Web-тех­нологиями, как ASP или РНР, представляет собой часть текста обычных HTML-страниц со встроенными в них сценариями (script). Эти сценарии можно писать на любом языке, поддерживаемом сервером; Интернет-сервер обрабатывает их при поступлении запроса о URL-адресе соответствующего файла. Он разбирает текст HTML-страницы, находит в нем тексты сценариев, вырезает их и интер­претирует в соответствии с синтаксисом и семантикой данного языка. В резуль­тате интерпретации получается выходной текст на языке HTML, который сервер вставляет непосредственно в то место исходной страницы, где встретился сце­нарий. Так обрабатывается динамическая Web-страница на любом интерпрети­руемом языке, ориентированном на работу в глобальной сети. Естественно, для

работы со страницей сервер должен иметь в своем составе интерпретатор соот­ветствующего языка.

Все эти языки сценариев обладают присущими им характерными особенно­ стями. Во-первых, они имеют мощные встроенные функции и средства для рабо­ ты со строками, поскольку основной задачей программ, написанных с помощью таких языков, является обработка входных параметров (строковых) и порожде­ ние HTML-кода (который также является текстом). Во-вторых, все они имеют средства для работы в архитектуре «клиент—сервер» для обмена информацией с серверами БД, а многие современные версии таких языков (например, язык, под­ держиваемый Web-технологией ASP) — средства для функционирования в трех­ уровневой архитектуре для обмена данными с серверами приложений. Технологии интерпретируемых языков сценариев, отделившие процесс написа­ ния кода HTML от процесса создания прикладных компонентов, способствовали более эффективному сотрудничеству между дизайнерами Web-страниц и разра­ ботчиками программ. Благодаря тому, что динамические данные и приложения генерируются с помощью интерпретируемых языков непосредственно иа Интер­ нет-сервере, информация остается там, где ею легче всего управлять. Недостаток всех перечисленных методов заключается в том, что сначала сервер вынужден строить HTML-описание, собирая его некоторым образом из каких-то своих данных, а затем Интернет-клиент на своей стороне разбирает (интерпрети­ рует) полученное описание HTML-страницы. Таким образом, выполняется как бы двойная работа по генерации, а затем интерпретации текстов языка HTML. Кроме того, между клиентом и сервером по сети передаются довольно громозд­ кие описания HTML-страниц, что может значительно увеличивать трафик сети. Тем не менее, несмотря на недостатки, данные методы довольно распространены в глобальной сети, поскольку они очень просты, а кроме того, не требуют от кли­ ентского компьютера ничего, кроме способности интерпретировать тексты HTML. Эта особенность довольно существенна. '

Есть и другие варианты генерации динамических HTML-страниц. Рассмотрен­ные далее методы, хотя и снижают нагрузку на сеть, но предъявляют определен­ные требования к клиентской части, что не всегда приемлемо. Информацию по перечисленным выше языкам, поддерживающим такие методы, можно найти в соответствующей технической литературе (она частично имеется в [10, 91]), но лучше обратиться на соответствующие сайты во Всемирной сети [103, 107, 108].

Языки программирования Java и Java Script

Язык Java был разработан компанией Sun в качестве средства Web-программи­рования. Этот язык, в отличие от языка описания гипертекста HTML, является полноценным языком программирования. Он содержит в себе все основные опе­раторы, конструкции и структуры данных, присущие языкам программирова­ния. Синтаксические конструкции и семантика языка Java большей частью были заимствованы из языков программирования С и C++.

Основная идея, отличающая язык Java от многих других языков программирова­ния, не ориентированных на применение в глобальной сети, заключается в том, что Java не является полностью компилируемым языком. Исходная программа, созданная на языке Java, не преобразуется в машинные коды. Компилятор языка порождает некую промежуточную результирующую программу на специальном низкоуровневом двоичном коде (эта результирующая программа называется Java-апплетом, а код, на котором она строится, — Java байт-кодом). Именно этот код интерпретируется при исполнении результирующей Java-программы. Такой ме­тод исполнения кода, основанный на интерпретации, делает его практически не­зависимым от архитектуры целевой вычислительной системы.

Таким образом, для исполнения Java-программы необходимы две составляю­щие: компилятор промежуточного двоичного кода, порождающий его из исход­ного текста Java-программы, и интерпретатор, исполняющий этот промежуточ­ный двоичный код. Такой интерпретатор получил название виртуальной Java-машины. Описание основных особенностей реализации виртуальной Java-маши­ны (интерпретатора промежуточного низкоуровневого кода) с точки зрения сис­темы программирования описаны в [74, 91].

Одной из отличительных особенностей данного языка является использование специального механизма распределения памяти (менеджера памяти). В языке Java не могут быть использованы функции динамического распределения памя­ти и связанные с ними операции над адресами и указателями, поскольку они за­висят от архитектуры вычислительной системы. Динамическая память в языке может выделяться только под классы и объекты самого языка. Для этого менед­жер памяти должен сам организовывать своевременное выделение областей па­мяти при создании новых классов и объектов, а затем освобождать области памя­ти, которые уже больше не используются. В последнем случае должна решаться непростая задача сборки мусора — поиска неиспользуемых фрагментов в памяти и их освобождение. Причем, поскольку в языке Java за распределение памяти от­вечает не пользователь, а интерпретатор кода, эти задачи должны решаться неза­висимо от хода выполнения самой Java-программы.

Менеджер памяти входит в состав виртуальной Java-машины и, безусловно, за­висит от архитектуры вычислительной системы, где функционирует эта машина, но интерпретируемые ею программы при этом остаются независимыми от архи­тектуры. Хороший менеджер памяти — важная составляющая виртуальной Java-машины наряду с быстродействующим интерпретатором промежуточного низ­коуровневого кода.

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

Однако отсюда проистекают и основные недостатки, присущие языку Java. Глав­ный из них заключается в том, что на клиентской стороне должна присутство-

вать виртуальная Java-машина для интерпретации поступающего из сети кода. Это значит, что так или иначе интерпретатор языка Java должен входить в со­став архитектуры целевой вычислительной системы, а без его наличия функцио­нирование такой схемы становится невозможным. Кроме того, промежуточный код языка исполняется на стороне клиента, а значит, скорость его выполнения и возможности Java-программы во многом зависят от производительности клиент­ского компьютера, которая может оказаться недостаточно высокой у машины, ориентированной только на подключение к глобальной сети. Речь идет не только о скорости интерпретации команд, но и о том, что клиентская система должна быть способна работать со всеми базовыми классами, присущими языку Java. Таким образом, требования к производительности клиентского компьютера для выполнения на ней Java-программ могут оказаться непомерно высокими.

Еще одна особенность связана с необходимостью обеспечения безопасности при исполнении Java-программ. Поскольку код исполняемой программы поступает из глобальной сети, то нет никакой гарантии, что этот код не содержит фаталь­ную ошибку. Кроме того, такой код может быть преднамеренно создан со злым умыслом. Имея все возможности языка программирования (в отличие от текста HTML) и исполняясь в среде вычислительной системы клиента, он может при­вести к выходу из строя этой системы или к повреждению хранящихся, в ней данных. Потому при построении интерпретатора виртуальной Java-машины нужно целенаправленно выделять и отслеживать потенциально опасные команды (та­кие, как выполнение программ или обращение к файлам на клиентской маши­не). Несмотря на то что большинство производителей виртуальных Java-машин считаются с этим правилом, проблема безопасности остается актуальной при ис­пользовании языка Java.

Язык Java быстро завоевал популярность и занял значительное место на рынке языков программирования и связанных с ними средств разработки. По сути, этот язык явился первой удачной реализацией двухэтапной модели выполнения про­грамм, построенной на использовании компилятора промежуточного кода с по­следующей интерпретацией полученного кода. Независимость выполнения Java-программ от архитектуры целевой вычислительной системы способствовала росту популярности языка, который стал применяться не только как удобное средство Web-программирования, но и как средство разработки прикладных программ, ориентированных на различные вычислительные архитектуры.

Росту популярности языка программирования Java и построенных на его основе систем программирования способствовал также тот факт, что в его состав вхо­дят встроенные средства поддержки интерфейса с серверами БД, ориентирован­ные на разработку приложений, выполняющихся в архитектуре «клиент—сервер». Системы программирования языка Java совместимы также с известной группой стандартов, ориентированной на разработку результирующих программ, выпол­няющихся в трехуровневой архитектуре — CORBA.

Первоначально язык поддерживался только одним разработчиком — компанией Sun. Но со временем и с ростом популярности языка в его поддержку стали включаться и другие известные компании-производители программных продук­тов. Среди них можно выделить уже упоминавшуюся в данном пособии компа­нию Borland, создавшую на базе языка Java систему программирования Borland

JBuilder. В настоящее время компании, поддерживающие системы программиро­вания на основе языка Java, образуют специальное сообщество для поддержки и распространения средств разработки на основе данного языка. Всю необхо­димую информацию можно получить на сайте [101] и во многих других местах всемирной сети Интернет, которая во многом способствовала развитию этого языка1.

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

Необходимость иметь в составе архитектуры вычислительной системы клиент­ского компьютера виртуальную Java-машину, а также довольно высокие требо­вания к производительности компьютеров на клиентской стороне в ряде случаев ограничивают возможности применения языка Java. С другой стороны, зачастую для организации динамической Web-страницы достаточно лишь выполнить ряд простых действий, не укладывающихся в рамки статического HTML. Для этого нет необходимости создавать, компилировать и передавать по сети полноценную Java-программу.

Чтобы решить эти проблемы, был предложен командный язык Java Script, кото­рый можно назвать упрощенным вариантом языка Java.

Фрагменты кода, написанные на Java Script, передаются непосредственно внут­ри текста HTML-страниц. Синтаксис и семантика Java Script в целом соответст­вуют языку Java, но возможности его выполнения сильно ограничены — они не выходят за рамки той программы, которая интерпретирует HTML-страницу. В таком случае эта программа выступает и в роли виртуальной Java-машины для выполнения операторов Java Script. Чаще всего это программа навигации по сети — браузер. Он находит в тексте HTML-страницы операторы языка Java Script, выделяет их и исполняет по всем правилам языка Java. Однако выполне­ние Java Script происходит только в рамках адресного пространства программы-навигатора. Это, с одной стороны, ограничивает его возможности, но, с другой стороны, увеличивает безопасность выполнения операторов, так как в худшем

случае при наличии некорректных операторов языка неработоспособной окажется только запущенная программа-навигатор, но не вся клиентская система в целом. Операторы Java Script сейчас широко используются для организации динами­ческих Web-страниц. Их выполнение (интерпретация) обеспечивается всеми современными программами-навигаторами в глобальной сети. Более подробную информацию о языке Java Script и его возможностях можно найти в [10] или на многих сайтах, посвященных языку Java [101].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]