Современные системы программирования. 3
Введение
История искусства программирования насчитывает уже десятки лет. И языков программирования уже становится чуть больше, чем хотелось бы. Нынешние студенты и школьники смело минуют Fortran и Pascal и приступают к таким задачам, от которых еще 10–15 лет назад просто дух захватывало.
Понятие и структура системы программирования
Всякий компилятор является составной частью системного программного обеспечения. Основное назначение компиляторов — служить для разработки новых прикладных и системных программ с помощью языков высокого уровня.
Любая программа, как системная, так и прикладная, проходит этапы жизненного цикла, начиная от проектирования и вплоть до внедрения и сопровождения. А компиляторы — это средства, служащие для создания программного обеспечения на этапах кодирования, тестирования и отладки.
Однако сам по себе компилятор не решает полностью всех задач, связанных с разработкой новой программы. Средств только лишь компилятора недостаточно для того, чтобы обеспечить прохождение программой указанных этапов жизненного цикла. Поэтому компиляторы — это программное обеспечение, которое функционирует в тесном взаимодействии с другими техническими средствами, применяемыми на данных этапах.
Основные
технические средства, используемые
в комплексе с компиляторами,
включают в себя следующие программные
модули:
- текстовые редакторы, служащие для создания
текстов исходных программ;
- компоновщики, позволяющие объединять
несколько объектных модулей, порождаемых
компилятором, в единое целое;
- библиотеки прикладных программ, содержащие
в себе наиболее часто используемые функции
и подпрограммы в виде готовых объектных
модулей;
- загрузчики, обеспечивающие подготовку
готовой программы к выполнению;
- отладчики, выполняющие программу в заданном
режиме с целью поиска, обнаружения и локализации
ошибок.
Первоначально компиляторы представляли
собой обособленные программные модули,
решающие исключительно задачу перевода
исходного текста программы на входном
языке в язык машинных кодов. Компиляторы
разрабатывались вне связи с другими техническими
средствами, с которыми им приходилось
взаимодействовать. В задачу разработчика
программы входило обеспечить взаимосвязь
всех используемых технических средств:
- подать входные данные в виде текста исходной программы на вход компилятора;
-
получить от компилятора
-
подать весь набор полученных
объектных файлов вместе с
необходимыми библиотеками
-
получить от компоновщика
-
поставить программу на
Все эти действия выполнялись с помощью последовательности команд, инициировавших запуск соответствующих программных модулей с передачей им всех необходимых параметров. Параметры передавались каждому модулю в командной строке и представляли собой набор имен файлов и настроек, реализованных в виде специальных «ключей». Пользователи могли выполнять эти команды последовательно вручную, а с развитием средств командных процессоров ОС они стали объединять их в командные файлы.
Со временем разработчики компиляторов постарались облегчить труд пользователей, предоставив им все необходимое множество программных модулей в составе одной поставки компилятора. Теперь компиляторы поставлялись уже вкупе со всеми необходимыми сопровождающими техническими средствами. Кроме того, были унифицированы форматы объектных файлов и файлов библиотек подпрограмм. Теперь разработчики, имея компилятор от одного производителя, могли в принципе пользоваться библиотеками и объектными файлами, полученными от другого производителя компиляторов.
Для написания командных файлов компиляции был предложен специальный командный язык — язык Makefile. Он позволял в достаточно гибкой и удобной форме описать весь процесс создания программы от порождения исходных текстов до подготовки ее к выполнению. Это было удобное, но достаточно сложное техническое средство, требующее от разработчика высокой степени подготовки и профессиональных знаний, поскольку сам командный язык Makefile был по сложности сравним с простым языком программирования. Язык Makefile стал стандартным средством, единым для компиляторов всех разработчиков.
Такая структура средств разработки существовала достаточно долгое время, а в некоторых случаях она используется и по сей день (особенно при создании системных программ). Ее широкое распространение было связано с тем, что сама по себе вся эта структура средств разработки была очень удобной при пакетном выполнении программ на компьютере, что способствовало ее повсеместному применению в эпоху mainframe.
Следующим шагом в развитии средств разработки стало появление так называемой «интегрированной среды разработки». Интегрированная среда объединила в себе возможности текстовых редакторов исходных текстов программ и командный язык компиляции. Пользователь (разработчик исходной программы) теперь не должен был выполнять всю последовательность действий от порождения исходного кода до его выполнения, от него также не требовалось описывать этот процесс с помощью системы команд в Makefile. Теперь ему было достаточно только указать в удобной интерфейсной форме состав необходимых для создания программы исходных модулей и библиотек. Ключи, необходимые компилятору и другим техническим средствам, также задавались в виде интерфейсных форм настройки.
После
этого интегрированная среда
разработки сама автоматически готовила
всю необходимую
Создание
интегрированных сред разработки стало
возможным благодаря бурному
развитию персональных компьютеров
и появлению развитых средств
интерфейса пользователя (сначала текстовых,
а потом и графических). Их появление
на рынке определило дальнейшие развитие
такого рода технических средств. Пожалуй,
первой удачной средой такого рода можно
признать интегрированную среду программирования
Turbo Pascal на основе языка Pascal производства
фирмы Borland. Ее широкая популярность определила
тот факт, что со временем все разработчики
компиляторов обратились к созданию интегрированных
средств разработки для своих продуктов.
Развитие интегрированных сред несколько
снизило требования к профессиональным
навыкам разработчиков исходных программ.
Теперь в простейшем случае от разработчика
требовалось только знание исходного
языка (его синтаксиса и семантики). При
создании прикладной программы ее разработчик
мог в простейшем случае даже не разбираться
в архитектуре целевой вычислительной
системы.
Дальнейшее развитие средств разработки также тесно связано с повсеместным распространением развитых средств графического интерфейса пользователя. Такой интерфейс стал неотъемлемой составной частью многих современных ОС и так называемых графических оболочек. Со временем он стал стандартом «де-факто» практически во всех современных прикладных программах.
Это
не могло не сказаться на требованиях,
предъявляемых к средствам
Для описания графических элементов программ потребовались соответствующие языки. На их основе сложилось понятие «ресурсов»(1) (resources) прикладных программ.
Ресурсами прикладной программы будем называть множество данных, обеспечивающих внешний вид интерфейса пользователя этой программы, и не связанных напрямую с логикой выполнения программы. Характерными примерами ресурсов являются: тексты сообщений, выдаваемых программой; цветовая гамма элементов интерфейса; надписи на таких элементах, как кнопки и заголовки окон и т. п.
Для
формирования структуры ресурсов в
свою очередь потребовались
Весь этот комплекс программно-технических средств в настоящие время составляет новое понятие, которое здесь названо «системой программирования.
Структура современной системы программирования
Системой программирования будем называть весь комплекс программных средств, предназначенных для кодирования, тестирования и отладки программного обеспечения. Нередко системы программирования взаимосвязаны и с другими техническими средствами, служащими целям создания программного обеспечения на более ранних этапах жизненного цикла (от формулировки требований и анализа до проектирования). Однако рассмотрение таких систем выходит за рамки данного учебного пособия.
Системы
программирования в современном
мире доминируют на рынке средств
разработки. Практически все фирмы-
Тенденция такова, что все развитие систем программирования идет в направлении неуклонного повышения их дружественности и сервисных возможностей. Это связано с тем, что на рынке в первую очередь лидируют те системы программирования, которые позволяют существенно снизить трудозатраты, необходимые для создания программного обеспечения на этапах жизненного цикла, связанных с кодированием, тестированием и отладкой программ. Показатель снижения трудозатрат в настоящее время считается более существенным, чем показатели, определяющие эффективность результирующей программы, построенной с помощью системы программирования.
В качестве основных тенденций в развитии современных систем программирования следует указать внедрение в них средств разработки на основе так называемых «языков четвертого поколения» — 4GL (four generation languages), — а также поддержка систем «быстрой разработки программного обеспечения» — RAD (rapid application development).
Языки четвертого поколения — 4GL — представляют собой широкий набор средств, ориентированных на проектирование и разработку программного обеспечения. Они строятся на основе оперирования не синтаксическими структурами языка и описаниями элементов, а представляющими их графическими образами. На таком уровне проектировать и разрабатывать прикладное программное обеспечение может пользователь, не являющийся квалифицированным программистом, зато имеющий представление о предметной области, на работу в которой ориентирована прикладная программа. Языки четвертого поколения являются следующим (четвертым по счету) этапом в развитии систем программирования.
Описание программы, построенное на основе языков 4GL, транслируется затем в исходный текст и файл описания ресурсов интерфейса, представляющие собой обычный текст на соответствующем входном языке высокого уровня. С этим текстом уже может работать профессиональный программист-разработчик — он может корректировать и дополнять его необходимыми функциями. Такой подход позволяет разделить работу проектировщика, ответственного за общую концепцию всего проекта создаваемой системы, дизайнера, отвечающего за внешний вид интерфейса пользователя, и профессионального программиста, отвечающего непосредственно за создание исходного кода создаваемого программного обеспечения.
В целом языки четвертого поколения решают уже более широкий класс задач, чем традиционные системы программирования. Они составляют часть средств автоматизированного проектирования и разработки программного обеспечения, поддерживающих все этапы жизненного цикла — CASE-систем. Их рассмотрение выходит за рамки данного учебного пособия.
Примеры
современных систем
программирования
В этом разделе пособия ни в коем случае не ставится задача полного описания тех или иных систем программирования, доступных в настоящее время на рынке современных средств разработки программного обеспечения. Полное описание многих из них по объему будет значительно превышать весь материал данного пособия. Автор только дает краткий обзор наиболее известных и распространенных в настоящее время систем программирования с точки зрения их компонентов, ложащихся на общую структуру типовой системы программирования.
Для краткого описания автором были выбраны только самые известные из всего широкого спектра систем программирования, распространенные именно на рынке Российской Федерации. Информация о данных системах программирования дается как на основании соответствующей литературы, так и на основании личного опыта работы автора.
Системы
программирования компании Borland/Inprise
Системы
программирования компании Borland достаточно
широко известны разработчикам в
России. Известность и
Turbo Pascal
Система программирования Turbo Pascal была создана компанией Borland на основе расширения языка Pascal, получившего название Borland Pascal. Отсюда происходит и само название системы программирования.
Сам
язык Pascal был предложен Н. Виртом
в конце 70-х годов как хорошо структурированный
учебный язык. Расширения, привнесенные
в язык компанией Borland, преследовали две
основные цели:
- упрощение обработки в языке структур,
представляющих наиболее распространенные
типы данных — строки и файлы (например,
в язык был внесен новый тип данных string);
- реализация в языке основных возможностей
объектно-ориентированных языков программирования.
Последнее нововведение потребовало серьезной доработки синтаксиса языка. В него были внесены новые ключевые слова, синтаксические конструкции и типы данных. Однако предложенный вариант языка нельзя признать удачным, хотя бы потому, что в нем не полностью реализованы все механизмы объектно-ориентированного программирования. Например, отсутствуют такие мощные средства, как исключения и шаблоны. Есть и другие сложности в использовании языка.
Компания
Borland построила и реализовала
эффективный однопроходный
Также
из них невозможно было создавать
библиотеки, ориентированные на другие
языки и системы
Первоначально система программирования Turbo Pascal строилась на основе библиотеки RTL (run time library) языка Borland Pascal. Эта библиотека не предоставляла пользователю широкого набора функций — в основном она только реализовывала базовые математические функции и функции языка. Однако можно сказать об одной характерной черте данной библиотеки — она включала в свой состав объектный код менеджера памяти для управления распределением динамической памяти («кучей» — heap — в терминах языка Pascal), который автоматически подключался к каждой результирующей программе, созданной с помощью данной системы программирования. Этот модуль получился довольно удачным и нашел свое дальнейшее применение в других системах программирования данной компании-разработчика.
Несмотря на недостатки, система программирования Turbo Pascal получила широкое распространение и завоевала свое место на рынке. Основной причиной явилось то, что система впервые была построена в виде интегрированной среды. Данный факт предопределил ее широкое распространение, и, прежде всего, в университетской среде, где требовались простые и понятные в использовании средства разработки.
Первые версии системы программирования были ориентированы только на работу в ОС MS DOS персональных компьютеров на базе процессоров типа Intel 80x86. На исполнение в среде этой ОС были ориентированы и результирующие программы, разрабатываемые с помощью данной среды программирования.
Система программирования Turbo Pascal получила широкое распространение и дальнейшее развитие. Компания Borland выпустила несколько ее реализаций (наиболее распространенные из них — версии 5.5 и 7.0). Последние реализации данной системы программирования могли создавать результирующие программы, ориентированные на работу как в ОС типа MS DOS, так и в среде типа Microsoft Windows. В них были реализованы все основные преимущества, предоставляемые интегрированной средой программирования, такие, как лексический анализ программ «на лету» и встроенная контекстная подсказка.
По
мере распространения системы
Системе программирования Turbo Pascal здесь уделено много внимания по той причине, что это одна из самых распространенных в настоящее время систем программирования учебного назначения. Кроме того, это первая появившаяся на рынке система программирования, которая полностью реализовала в себе идеи интегрированной среды программирования. Эти идеи, заложенные в системе программирования Turbo Pascal, нашли применение во многих современных системах программирования.
Borland Delphi
Система
программирования Borland Delphi явилась
логическим продолжением и дальнейшим
развитием идей, заложенных компанией-разработчиком
еще в системе программирования Turbo Pascal.
В качестве основных в новой системе программирования
можно указать следующие принципиальные
изменения:
- новый язык программирования — Object Pascal,
явившийся серьезной переработкой прежней
версии языка Borland Pascal;
- компонентная модель среды разработки,
в первую очередь ориентированная на технологию
разработки RAD (rapid application development).
Язык программирования Object Pascal создавался
в то время, когда на рынке средств разработки
уже существовало значительное количество
объектно-ориентированных языков, включая
такие известные, как C++ и Java. Компания
Borland попыталась учесть все недостатки
существующих языков объектно-ориентированного
программирования, а также свой опыт создания
языка Borland Pascal. По мнению автора, во многом
ей это удалось. Новый язык вышел довольно
удачным, как с точки зрения синтаксиса,
так и с точки зрения предоставляемых
возможностей. Этот язык поддерживает
практически все основные механизмы объектно-ориентированного
программирования.
Компонентная
модель среды разработки предусматривает
создание основной части программы
в виде набора взаимосвязанных компонентов —
классов объектно-ориентированного языка.
Во время разработки исходной программы
(design time) компоненты предстают в виде графических
образов и обозначений, связанных между
собой. Каждый компонент обладает определенным
набором свойств (properties), событий (events)
и методов. Каждому из них соответствует
свой фрагмент исходного кода программы,
отвечающий за обработку метода или реакции
на какое-то событие. Разработчик может
располагать на экране и связывать между
собой компоненты, а также редактировать
связанный с ними исходный код программы.
Причем поведение компонентов во время
выполнения программы (run time) полностью
определяется их взаимосвязью, исходным
кодом программы и объектным кодом самой
компоненты.
Система программирования Borland Delphi предназначена
для создания результирующих программ,
выполняющихся в среде ОС Windows различных
типов.
Основу
системы программирования Borland Delphi
и ее компонентной модели составляет
библиотека VCL (visual component library). В этой библиотеке
реализованы в виде компонентов все основные
органы управления и интерфейса ОС. Также
в ее состав входят классы, обеспечивающие
разработку приложений для архитектуры
«клиент-сервер» и трехуровневой архитектуры
(в современных реализациях Borland Delphi). Разработчик
имеет возможность не только использовать
любые компоненты, входящие в состав библиотеки
VCL, но также и разрабатывать свои собственные
компоненты, основанные на любом из классов
данной библиотеки. Эти новые компоненты
становятся частью системы программирования
и затем могут быть использованы другими
разработчиками.
Для поддержки разработки результирующих
программ для архитектуры «клиент-сервер»
в состав Borland Delphi входит средство BDE (Borland
database engine). Оно обеспечивает результирующим
программам возможность доступа к широкому
диапазону серверов БД посредством классов
библиотеки VCL. Посредством BDE результирующая
программа может взаимодействовать с
серверами БД типа Microsoft SQL Server, Interbase, Sybase,
Oracle и т. п. Система программирования Borland
Delphi поддерживает также создание результирующих
программ, выполняющихся в архитектуре
«клиент-сервер», на базе других технологий,
например ADO (ActiveX Data Objects).
Система
программирования Borland Delphi выдержала
несколько реализаций. Последние
реализации данной системы программирования
(прежде всего, версии 4 и 5) включают широкий
набор средств для поддержки разработки
результирующих программ в трехуровневой
архитектуре приложений. Система программирования
Borland Delphi позволяет разрабатывать как
серверную, так и клиентскую часть приложения
в данной архитектуре. Возможно использование
как технологий COM/DCOM (наиболее распространенных
в среде ОС типа Microsoft Windows), так и технологии
CORBA (но только при разработке клиентской
части приложения).
В качестве недостатков данной системы
программирования можно указать использование
нестандартного формата объектных файлов
(сохранился еще от системы Turbo Pascal, но
в последней версии Borland Delphi 5 можно использовать
стандартный формат), а также нестандартного
формата для хранения ресурсов пользовательского
интерфейса. Кроме того, сам язык Object Pascal
не является признанным стандартом. Этот
факт несколько затрудняет использование
Borland Delphi в масштабных проектах в качестве
основного средства разработки. Тем не
менее, система программирования Borland
Delphi получила широкое распространение
среди разработчиков в Российской Федерации.
Borland C++ Builder
Система
программирования Borland C++ Builder объединила
в себе идеи интегрированной среды
разработки, реализованные компанией
в системах программирования Turbo Pascal
и Borland Delphi с возможностями языка программирования
C++. История этой системы программирования
начинается с интегрированной среды разработки
Borland Turbo C.
Среда Turbo C представляла собой реализацию
идей, заложенных компанией-разработчиком
в системе программирования Turbo Pascal для
языка программирования C. Компания Borland
стремилась перенести удачную реализацию
идей интегрированной среды разработки
на новую основу. Компилятор Turbo C не был
однопроходным, и потому время компиляции
исходной программы превышало время компиляции
аналогичной программы в Turbo Pascal. Кроме
того, в системе программирования использовался
стандартный компоновщик исполняемых
файлов MS DOS.
Преимущество Turbo C заключалось в том, что
эта система программирования строилась
на базе стандартного языка программирования
C. Данный язык получил широкое распространение
среди разработчиков в качестве языка
системного программирования, для него
существовали компиляторы под многие
типы целевых архитектур. В этом было главное
отличие системы программирования Turbo C
от схожей по организации системы программирования
Turbo Pascal, которая строилась на основе поддержки
нестандартного расширения языка Pascal.
С развитием системы программирования
на базе Turbo Pascal развивались и системы
программирования на основе Turbo C.
Современная реализация Borland C++ Builder ориентирована
на разработку результирующих программ,
выполняющихся под управлением ОС Microsoft
Windows всех типов. Сама система программирования
Borland C++ Builder, как и Borland Delphi, также функционирует
под управлением ОС типа Microsoft Windows. Она
полностью поддерживает стандарт языка
C, что делает возможным создание с помощью
данной системы программирования модулей
и библиотек, используемых в других средствах
разработки (чего очень сложно достигнуть
с помощью 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++, где существует довольно
жесткая конкуренция.