Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Инф VBA

.pdf
Скачиваний:
31
Добавлен:
29.03.2016
Размер:
1.88 Mб
Скачать

30

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

4.2 Эволюция языков программирования

Языки общего назначения.

Самые первые программы писались непосредственно в машинных кодах,

а основным носителем информации были перфокарты и перфоленты.

Программисты обязаны были знать архитектуру машины досконально.

Программы были достаточно простыми, что обуславливалось, во-первых,

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

Ассемблер

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

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

впервые в истории развития программирования появились два представления программы: в исходных текстах и в откомпилированном виде.

Фортран

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

отличающей новый язык от ассемблера, была концепция подпрограмм. Но

31

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

причем компилятор практически никак не проверял программу с точки зрения семантической корректности (соответствие типов и проч.). Кроме того,

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

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

Cobol

В 1960 году был создан язык программирования Cobol. Он задумывался как язык для создания коммерческих приложений. На Коболе написано огромное количество прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных, что характерно именно для коммерческих приложений.

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

PL/1

В 1964 году корпорация IBM создала язык PL/1, который должен был заменить Cobol и Fortran в большинстве приложений. Язык имел разнообразный набор синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма Пробелы уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы. Этот язык не получил широкого распространения, так как его

32

синтаксическая структура была крайне сложной и соответственно процесс разработки компилятора для PL/1 был исключительно сложным делом

BASIC

В 1963 году в Дартмурском колледже был создан язык программирования

BASIC (Beginners’ All-Purpose Symbolic Instruction Code — многоцелевой язык символических инструкций для начинающих). Язык создавался в первую очередь как средство обучения. Он стал первым легко интерпретируемым и компилируемым языком. Позднее было создано несколько мощных реализаций

BASIC, поддерживающих самые современные концепции программирования. Microsoft Visual Basic – это уже современный объектно-ориентированный язык программирования.

Algol

В 1960 году командой во главе с Петером Науром (Peter Naur) был создан язык программирования Algol. Впервые в истории язык был определен формально. Algol имел четкие и удобные управляющие конструкций, но типы и структуры данных в языке были не очень разнообразны. Из типов имеются логический, целочисленный и вещественный, а из структур данных лишь однородный массив. Правда, массивы являются динамическими, что позволяло эффективно управлять распределением памяти. Это и определило дальнейшую судьбу языка, применявшегося в первую очередь для научных вычислений.

Роль Algol в истории языков программирования огромна. Идеи, заложенные в этом зыке, получили дальнейшее развитие и породили целую плеяду

"алголоподобных языков". Таких как Algol 68 и Pascal, которые получили значительно большее распространение. Кроме того, эти языки в процессе своего развития стали основой для еще более развитых и мощных языков.

Pascal-подобные языки

В 1970 году Никлаусом Виртом был создал язык программирования

Pascal. это первый широко распространенный язык для структурного программирования (первым был Алгол, но он не получил столь широкого

33

распространения). Впервые оператор безусловного перехода перестал играть основополагающую роль при управлении порядком выполнения операторов. В

этом языке также была внедрена строгая проверка типов, что позволило выявлять многие ошибки на этапе компиляции. Отрицательной чертой языка было отсутствие в нем средств для разбиения программы на модули. Вирт осознавал это и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 году появилась Modula-3, в

которую были добавлены объектно-ориентированные черты. Логическим продолжением Pascal и Modula являются язык Oberon и Oberon-2. Они характеризуются движением в сторону объектно- и компонентно-

ориентированности.

C-подобные языки

В 1972 году Керниганом и Ритчи был создан язык программирования C.

Он создавался как язык для разработки операционной системы UNIX. С

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

Компилятор C очень слабо контролирует типы, поэтому очень легко написать внешне совершенно правильную, но логически ошибочную программу. В 1986

году Бьярн Страуструп создал первую версию языка C++, добавив в язык C

объектно-ориентированные черты, и исправив некоторые ошибки языка С.

Язык C++ продолжает совершенствоваться и в настоящее время. Язык стал основой для разработки современных больших и сложных проектов. В 1995

году в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом был создан язык Java. Он наследовал синтаксис C и C++. Отличительной особенностью языка является компиляция в код некоей абстрактной машины,

для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. Кроме того, в Java нет указателей и множественного наследования, что сильно повышает надежность программирования. В 1999–2000 годах в

34

корпорации Microsoft был создан язык C#, ориентированный, в основном, на разработку многокомпонентных Интернет-приложений. В конце 2011 года был выпущен новый стандарт языка С11.

Языки Ada и Ada 95

В 1983 году под эгидой Министерства Обороны США был создан язык

Ada. Язык отличается тем, что он позволяет выявить очень много ошибок на этапе компиляции. В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объекно-ориентированность и исправляя некоторые неточности. Оба этих языка не получили широкого распространения вне военных и прочих крупномасштабных проектов (авиация,

железнодорожные перевозки). Основной причиной является сложность освоения языка и достаточно громоздкий синтаксис.

Языки обработки данных

APL

В 1957 Кеннетом Айверсоном году была предпринята попытка создания языка для описания математической обработки данных. Язык был назван APL (Application Programming Language). В отличие от своих современников, APL

разрабатывался как интерактивный (диалоговый) язык. Вводимые программистом выражения немедленно выполнялись. Имелись также встроенные средства для редактирования текста. Особенностью APL являлось также то, что его примитивы могли работать не только со скалярными величинами, но и с массивами. Таким образом, можно было выполнять операции над векторами и матрицами без использования циклов, что придает программированию на APL особый, неповторимый стиль. Отличительной особенностью этого языка было использование математических символов

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

35

помешало, как уже отмечалось, использование нестандартных символов как элементов синтаксиса. APL получил распространение лишь в инженерной среде.

Snobol, Icon

В 1962 году появился язык Snobol (1974 Icon), предназначенный для обработки строк. Синтаксис Icon напоминает С и Pascal одновременно. Отличие заключается в наличии мощных встроенных функций работы со строками и связанная с этими функциями особая семантика. Современным аналогом Icon и Snobol является Perl — язык обработки строк и текстов, в который добавлены некоторые объектно-ориентированные возможности.

SETL

В 1969 году был создан язык SETL — язык для описания операций над множествами. Основной структурой данных в языке является множество, а

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

Lisp и ему подобные языки

В 1958 году появился язык Lisp — язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта.

Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984).

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

Логические языки

PROLOG

В 1973 г. был создан язык искусственного интеллекта PROLOG

(Programming in Logic). Программа на языке Пролог строится из последовательности фактов и правил, затем формулируется утверждение,

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

36

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

Скриптовые языки

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

(компиляция либо невозможна, либо нежелательна), во-вторых, простота синтаксиса, а в-третьих, легкая расширяемость. Таким образом, они идеально подходят для использования в часто изменяемых программах или очень небольших программах.

JavaScript

Язык был создан в компании Netscape Communications в качестве языка для описания сложного поведения веб-страниц. Первоначально назывался

LiveScript. Интерпретируется браузером во время отображения веб-страницы.

По синтаксису схож с Java. Имеет возможность использовать встроенную в браузер объектную функциональность, однако подлинно объектно-

ориентированным языком не является.

VBScript

Язык был создан в корпорации Microsoft во многом в качестве альтернативы JavaScript. Синтаксически схож с языком Visual Basic. Так же,

как и JacaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектноориентированности.

Perl

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

37

платформах. Применяется при обработке текстов, а также для динамической генерации веб-страниц на веб-серверах.

Python

Интерпретируемый объектно-ориентированный язык программирования.

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

Объектно-ориентированные языки

Объектно-ориентированный подход, пришедший на смену структурному,

впервые появился отнюдь не в C++, как полагают некоторые. Самые известные из объектно-ориентированных языков C++, DELPHI, VISUAL BASIC, OBJECT PASCAL, JAVA. Более подробно об объектно-ориентированном подходе опишем в следующих главах. Первыми объектно-ориентированными языками были:

Simula

Simula был создан в 1967 году. Этот язык был предназначен для моделирования различных объектов и процессов, и объектно-ориентированные черты появились в нем именно для описания свойств модельных объектов.

Smalltalk

Популярность объектно-ориентированному программированию принес язык Smalltalk, созданный в 1972 году. Язык предназначался для проектирования сложных графических интерфейсов и был первым по-

настоящему объектно-ориентированным языком. В нем классы и объекты — это единственные конструкции программирования. Большим недостатком

Smalltalk являются большие требования к памяти и низкая производительность полученных программ. Популярность языков C++ и Ada 95 связана именно с тем, что объектноориентированность реализована без существенного снижения производительности.

Eiffel

38

Язык Eiffel (1986) это язык с очень хорошей реализацией объектно-

ориентированности. Он не является надстройкой ни над каким другим языком.

Являясь чистым языком объектно-ориентированного программирования, он,

кроме того, повышает надежность программы путем использования

«контрольных утверждений».

4.3 Классификация языков программирования

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

Языки программирования можно разделять на поколения:

–первое поколение: машинно–ориентированные языки с ручным управлением памяти. Использовались на компьютерах первого поколения.

–второе поколение: языки с мнемоническим представлением команд, так называемые автокоды.

–третье поколение: языки общего назначения, используемые для создания прикладных программ любого типа. Например, Бейсик, Кобол, Си и Паскаль.

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

(SQL).

–пятое поколение: языки декларативные, объектно–ориентированные и скриптовые. Например, Пролог, ЛИСП, Си++, Visual Basic, Delphi.

По уровням языки программирования делят на языки низкого, высокого и сверхвысокого уровня.

В группу языков низкого уровня входят машинные языки и языки символического кодирования: (Автокод, Ассемблер). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, т.е.

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

машинно-ориентированными.

39

Более многочисленную группу составляют языки программирования

высокого уровня — языки программирования, разработанные для быстроты и удобства использования программистом (Фортран, Алгол, Кобол, Паскаль,

Бейсик, Си, Пролог и т.д.) Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих структуры данных и операции над ними. Для перевода программ, написанных при помощи языков высокого уровня в машинные коды, применяются программы трансляторы. Текст программы, написанной на языке высокого уровня, будет одинаково понят различными ЭВМ. Поэтому Языки высокого уровня являются машинно-независимыми.

К языкам сверхвысокого уровня можно отнести Алгол-68 и APL. Повышение уровня этих языков произошло за счет введения сверхмощных операций и операторов.

Деление языков программирования на классы можно представить на схеме таким образом:

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

 

Процедурные

 

 

 

Декларативные

 

 

 

Объектно-

 

 

 

Описания

 

 

 

 

 

 

 

(не процедурные)

 

 

 

ориентированные

 

 

 

сценариев

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Операционные:

 

Структурные:

 

 

Функциональные:

 

Логические:

 

 

C++,

 

 

 

 

 

 

PERL,

 

 

 

 

 

 

 

 

 

 

DELPHI,

 

 

 

 

PYTHON,

 

 

PASCAL,

 

ALGOL,

 

 

 

LISP,

 

PROLOG,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VISUAL BASIC,

 

 

 

 

 

HTML,

 

 

 

C,

 

FORTRAN,

 

 

 

DYLAN,

 

POPLER,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OBJECT PASCAL,

 

 

 

 

 

 

 

TCL,

 

 

 

 

 

ADA и др.

 

BASIC и др.

 

 

HASKELL и др.

 

QLISP и др.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JAVA и др.

 

 

 

JAVASCRIPT

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.9

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