Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

СИСТЕМЫ ПРОГРАММИРОВАНИЯ (Структура современной системы программирования)

Содержание:

ВВЕДЕНИЕ

Важное место в программном обеспечении современных ЭВМ занимают системы программирования. Основное их назначение – освободить программиста от необходимости работать на языке машинных команд. Язык программирования, с которым работает система программирования, называется ее входным языком. Системы программирования именуются по названию своего входного языка. Например: Бейсик – система, Паскаль – система, система пролог. Иногда в название систем включаются префиксы, обозначающие, например, фирменное происхождение системы. Очень популярны системы с приставкой «Турбо»: Турбо – Паскаль, Турбо – Си и другие. Это системы программирования, разработанные фирмой Borland.

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

Языки программирования претерпели большие изменения с тех пор, как в сороковых годах началось их использование. Они все еще продолжают изменяться и теперь даже быстрее, чем когда-либо ранее.

Даже при наличии десятков тысяч программ для IBM PC пользователям может потребоваться что-то такое, чего не делают (или делают, но не так) имеющиеся программы. В этих случаях следует использовать системы программирования, т.е. системы для разработки новых программ. Современные системы программирования для персональных компьютеров обычно предоставляют пользователю весьма мощные и удобные средства для разработки программ.

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

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

Цель работы: рассмотреть системы программирования.

Для достижения поставленной цели нами были поставлены следующие задачи:

  • структурировать системы программирования;
  • рассмотреть основные компоненты систем программирования и их функции;
  • выполнить обзор современных систем программирования.

При написании работы были проанализированы различные источники научно-технической литературы и статьи Интернет.

ГЛАВА 1. Структура современной системы программирования

Система программирования – это весь комплекс программных средств, предназначенных для кодирования, тестирования и отладки программного обеспечения. Нередко системы программирования взаимосвязаны и с другими техническими средствами, служащими целям создания программного обеспечения на более ранних этапах жизненного цикла (от формулировки требований и анализа до проектирования).

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

­http://pandia.ru/text/78/261/images/image001_169.jpg

Рисунок 1. Общая структура и этапы развития систем программирования

Современная система программирования – это достаточ­но сложный комплекс различных программно-технических средств. Все они служат цели создания прикладного и системного программного обеспечения.

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

В качестве основных тенденций в развитии современных систем программиро­вания следует указать внедрение в них средств разработки на основе так называемых «языков четвертого поколения» – 4GL (four generation languages), – а также поддержка систем «быстрой разработки программного обеспечения» – RAD (rapid application development).

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

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

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

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

Текстовые редакторы

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

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

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

1.2. Компилятор

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

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

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

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

1.3. Компоновщик

Компоновщик (или редактор связей) предназначен для связывания между собой объектных файлов, порождаемых компилятором, а также файлов библиотек входящих в состав системы программирования.

Объектный файл (или набор объектных файлов) не может быть исполнен до тех пор, пока все модули и секции не будут в нем увязаны между собой. Это и делает редактор связей (компоновщик). Результатом его работы является единый файл: часто называемый «исполняемым файлом», который содержит весь текст результирующей программы на языке машинных кодов. Компоновщик может рождать сообщение об ошибке, если при попытке собрать объектные файлы б единое целое он не смог обнаружить какой-либо необходимой составляющей.

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

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

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

1.4. Загрузчики и отладчики

Большинство объектных модулей в современных системах программирования строятся на основе так называемых относительных адресов. Компилятор, порождающий объектные файлы, а затем и компоновщик, объединяющий их в единое целое, не могут знать точно, в какой реальной области памяти компьютера будет располагаться программа в момент ее выполнения. Поэтому они работают не с реальными адресами ячеек ОЗУ, а с некоторыми относительными адресами. Такие адреса отсчитываются от некоторой условной точки, принятой за начало области памяти, занимаемой результирующей программой (обычно это точка начала первого модуля программы).

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

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

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

Еще одним модулем системы программирования, функции которого тесно связаны с выполнением программы, является отладчик.

Отладчик – это программный модуль, который позволяет выполнить основные задачи, связанные с мониторингом процесса выполнения результирующей прикладной программы. Этот процесс называется отладкой и включает в себя следующие основные возможности:

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

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

Дальнейшее развитие отладчиков связано со следующими принципиальными моментами:

  • возникновением интегрированных сред разработки;
  • появлением возможностей аппаратной поддержки средств отладки во многих вычислительных системах.

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

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

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

1.5. Библиотеки подпрограмм

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

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

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

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

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

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

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

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

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

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

Широкий набор динамических библиотек поддерживается всеми современными ОС. Как правило, они содержат системные функции ОС и общедоступные функции программного интерфейса (API).

1.6. Лексический анализ «на лету». Система подсказок и справок

Лексический анализ «на лету» – это функция текстового редактора в с. системы программирования. Она заключается в поиске и выделении лексем важного языка в тексте программы непосредственно в процессе ее создания разработчиком.

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

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

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

Следующей сервисной возможностью, предоставляемой разработчику системой программирования за счет лексического анализа «на лету», является возможность обращения разработчика к таблице идентификаторов в ходе подготовки исходного текста программы. Разработчик может дать компилятору команду найти нужную ему лексему в таблице. Поиск может выполняться по типу или по какой-то части информации лексемы (например, по нескольким первым буквам). Причем поиск может быть контекстно-зависимым – система программирования предоставит разработчику возможность найти лексему именно того типа, который может быть использован в данном месте исходного текста. Кроме самой лексемы разработчику может быть предоставлена некоторая информация о ней — например, типы и состав формальных параметров для функции, перечень доступных методов для типа или экземпляра класса. Это опять же облегчает труд разработчика, поскольку избавляет его от необходимости помнить состав функций и типов многих модулей (прежде всего, библиотечных) или обращаться лишний раз к документации и справочной информации.

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

Другой удобной сервисной функцией в современных системах программирова­ния является система подсказок и справок. Как правило, она содержит три ос­новные части:

  • справку по семантике и синтаксису используемого входного языка;
  • подсказку по работе с самой системой программирования;
  • справку о функциях библиотек, входящих в состав системы программирова­ния.

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

1.7. Архитектура «клиент-сервер»

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

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

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

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

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

Кроме того, со временем на рынке СУБД стали доминировать несколько наиболее известных компаний-производителей. Они предлагали стандартизованные интерфейсы для доступа к создаваемым ими СУБД. На них, в свою очередь, стали ориентироваться и разработчики прикладных программ.

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

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

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

1.8. Трехуровневая архитектура. Серверы приложений

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

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

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

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

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

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

ГЛАВА 2. ОБЗОР СОВРЕМЕННЫХ СИСТЕМ ПРОГРАММИРОВАНИЯ

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

2.1.1. Turbo Pascal

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

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

  • упрощение обработки в языке структур, представляющих наиболее распро­страненные типы данных – строки и файлы (например, в язык был внесен новый тип данных string);
  • реализация в языке основных возможностей объектно-ориентированных языков программирования.

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

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

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

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

Система программирования 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 это одна из самых распространенных в настоящее время систем программирования учебного назначения. Кроме того, это первая появившаяся на рынке система программирования, которая полностью реализовала в себе идеи интегрированной среды программирования.

2.1.2. Borland Delphi

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

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

  • новый язык программирования – Object Pascal, явившийся серьезной переработкой прежней версии языка Borland Pascal;
  • компонентная модель среды разработки, в первую очередь ориентированная на технологию разработки RAD (rapid application development).

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

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

Система программирования Borland Delphi предназначена для создания результирующих программ, выполняющихся в среде ОС Windows различных типов.

Основу системы программирования Borland Delphi и ее компонентной модели составляет библиотека VCL (visual component library). В этой библиотеке реали­зованы в виде компонентов все основные органы управления и интерфейса ОС. Также в ее состав входят классы, обеспечивающие разработку приложений для архитектуры «клиент-сервер» и трехуровневой архитектуры. Разработчик имеет возможность не только использовать любые компоненты, входящие в состав библиотеки 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, так и технологии CORBA (но только при разработке клиентской части приложения).

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

Тем не менее система программирования Borland Delphi получила широкое распространение среди разработчиков в Российской Федерации.

2.1.3. 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 способствовало и внедрению на рынок системы программирования Borland C++ Builder от той же компании-разработчика. Эта система программирования занимает прочную позицию на рынке средств разработки для языка C++, где существует довольно жесткая конкуренция.

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

2.2.1. Microsoft Visual Basic

Система программирования Microsoft Visual Basic первоначально была ориентирована на интерпретацию исходного кода. Однако требования и условия на рынке средств разработки толкнули компанию-производителя на создание компилятора, вошедшего в состав данной системы программирования. При этом основные функции библиотеки языка были вынесены в отдельную, динамически подключаемую библиотеку VBRun, которая должна присутствовать в ОС для выполнения результирующих программ, созданных с помощью данной системы программирования. Различные версии системы программирования Microsoft Visual 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 Visual 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 легче читаемым и менее подверженным случайным ошибкам.

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

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

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

2.2.2. Microsoft Visual С+-+

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

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

Классы библиотеки MFC ориентированы на использование технологий СОМ/DC ОМ, а также построенной на их основе технологии 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 широко известна.

2.3. Концепция .NET

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

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

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

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

Концепция .NET содержит много новых идей и предложений. С точки зрения систем программирования основные идеи архитектуры .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 80х86.

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

2.4.1. ОС типа UNIX

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

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

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

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

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

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

2.4.2. Проект GNU

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

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

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

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

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

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

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

2.5. Система программирования для сети Интернет

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

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

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

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

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

2.5.1. Язык 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 и Netscape Navigator Первый из них доминирует на архитектуре персональных компьютеров на базе процессоров типа Intel 80х86 под управлением ОС типа Microsoft Windows.

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

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

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

2.5.2. Язык 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 (Internet server application programming interim интерфейс прикладных программ Интернет-сервера). Отличие ISAPI от CGI заключается в том, что для поддержки CGI создаются отдельные приложения, выполняющиеся в виде самостоятельных программ, а ISAPI поддерживается с помощью библиотек, динамически подключаемых к серверу. ISAPI-библиотеки исполняются непосредственно в адресном пространстве сервера, имеют большие возможности и обеспечивают более высокую производительность сервера, в то время как CGI-приложения исполняются в ОС сервера как отдельные процессы и вынуждены определенным образом организовывать обмен данными с самим сервером (что снижает производитель­ность). Но, с другой стороны, ошибка в библиотеке ISAPI может привести к выходу всего сервера из строя и его длительной неработоспособности. В то же вре­мя ошибка в коде CGI-приложения может, в худшем случае, привести только к аварийному завершению выполнения этого приложения, а сам сервер при этом сохранит работоспособность. Тогда в результате ошибки будет неверно отображена только какая-то одна HTML-страница либо часть страницы, а все остальные части сервера будут продолжать исправно работать.

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

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

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

Существует несколько языков и соответствующих им интерпретаторов, которые нашли применение в этой области и успешно служат цели порождения HTML-страниц. Среди них можно назвать язык Peri, лежащий в основе различных версий Web-технологии РНР (Personal home pages), и язык сценариев, на котором основана Web-технология ASP (Active server pages), – последний предложен и поддерживается известным производителем программного обеспечения – фирмой Microsoft. Компонент, интерпретирующий ASP, появился в составе версии US (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-страниц. Рассмотренные далее методы, хотя и снижают нагрузку на сеть, но предъявляют определен­ные требования к клиентской части, что не всегда приемлемо.

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

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

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

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

Одной из отличительных особенностей данного языка является использование специального механизма распределения памяти (менеджера памяти). В языке 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.

Основной проблемой языка 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-страниц. Их выполнение (интерпретация) обеспечивается всеми современными программами-навигаторами в глобальной сети.

ЗАКЛЮЧЕНИЕ

Системы программирования в современном мире доминируют на рынке средств разработки.

Для популярных языков программирования на IBM PC существует множество систем программирования. Естественно, что программисты предпочитают те системы, которые легки в использовании, позволяют получить эффективные программы, имеют богатые библиотеки функций (подпрограмм) и мощные возможности для отладки разрабатываемых программ. В качестве примеров таких систем программирования можно назвать Turbo С, Turbo C++, Turbo Pascal, Microsoft С, Microsoft Basic. В последнее время стали появляться системы программирования на языке Java, они позволяют создавать программы, вызываемые при просмотре Web-страниц в глобальной электронной сети Internet.

Особым классом систем программирования являются системы для создания приложений типа клиент-сервер. Эти системы позволяют быстро создавать информационные системы для подразделений и даже крупных предприятий. В них содержатся средства для создания пользовательского интерфейса, описания процедур обработки данных, заготовки для выполнения типовых действий по обработке данных и т.д. Эти системы, как правило, позволяют работать с самыми различными СУБД – Oracle, Microsoft SQL Server и др.

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

Из универсальных языков программирования сегодня наиболее популярны следующие: Бейсик (Basic) – для освоения требует начальной подготовки (общеобразовательная школа); Паскаль (Pascal) – требует специальной подготовки (школы с углубленным изучением предмета и общетехнические ВУЗы); Си++ (C++), Ява (Java) – требуют профессиональной подготовки (специализированные средние и высшие учебные заведения).

Для каждого из этих языков программирования сегодня имеется немало систем программирования, выпускаемых различными фирмами и ориентированных на различные модели ПК и операционные системы.

Для разработки серверных и распределенных приложений можно использовать систему программирования Microsoft Visual C++, продукты фирмы Inprise под маркой Borland, практически любые средства программирования на Java.

В качестве основных тенденций в развитии современных систем программирования следует указать внедрение в них средств разработки на основе так называемых языков четвертого поколения 4GL (four generation languages), а также поддержка систем быстрой разработки программного обеспечения RAD (rapid application development).

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Баула В.Г. Введение в архитектуру ЭВМ и системы программирования. – М., 2003. – 144 с.

2. Волкова И.А., Головин И.Г., Карпов Л.Е. Системы программирования: Учебное пособие. – М.: Издательский отдел факультета ВМК МГУ, 2009. – 129 с.

3. Непейвода Н.Н., Скопин И.Н. Основания программирования: Учебное пособие. – М., 2012. – 913 с.

4. Пестриков В.М., Маслобоев А.Н., Федоров О.К. Основы программирования в системе Borland Delphi: Учебное пособие / СПб ГТУ РП, СПб, 2004. – 107 с.

5. История компьютера. Языки программирования для микроконтроллеров [Электронный ресурс]. – Режим доступа:

http://chernykh.net/content/view/694/. – Загл.с экрана

6. Кузнецов С.Д. Проектирование и разработка корпоративных информационных систем [Электронный ресурс]. – Режим доступа: http://citforum.ru/cfin/prcorpsys/infsistpr_04.shtml#311. – Загл. С экрана

7. Основы среды программирования Microsoft Visual Basic 6.0 [Электронный ресурс]. – Режим доступа: http://www.4-articles.ru/computers/41-programmnoe-obespechenie/2105-microsoft-visual-basic-60. – Загл.с экрана

8. Системное ПО [Электронный ресурс]. – Режим доступа: http://stfw.ru/page.php? id=9944 – Информационные технологии. – Загл.с экрана

9. Современные системы программирования [Электронный ресурс]. – Режим доступа: http://www.ci.ru/inform12_03/p_22.htm. – Загл. с экрана

10. Соколов В.В. Эволюция языков программирования [Электронный ресурс]. – Режим доступа: http://www.ait.org.ua/p/pub_evolution.html. – Загл.с экрана

11. Среда визуального программирования Borland C++Builder [Электронный ресурс]. – Режим доступа: http://www.bourabai.kz/C-Builder/1.htm. – Загл. с экрана