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

Обзор и анализ характеристик языков программирования (подробно)

Содержание:

Введение

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

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

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

Данными вопросами на общетеоретическом уровне занимались: К.Г. Скрипкин, В.А. Сухомлин, А.П. Кулев, С.А. Улезько, А.В. Макарова, Н.В. Малышев, Н.А. Богданова, Б.В. Соболь, А. Б. Галин и другие. Мы же остановимся на некоторых из них.

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

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

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

1. Рассмотрение общих сведений и уровней языков программирования;

2. Исследование обзора современных языков программирования;

3. Проведение литературного анализа по выбранной теме;

4. Выводы по теме исследования.

1. Процедурные (императивные) языки программирования

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

Первые идеи создания компьютерных технологий появились в 1800 году у Ч. Беббиджа. Человечество еще не знало о микросхемах и мониторах, но именно этот человек точно описал основные принципы работы вычислительных машин. Развила его идею и стала первым программистом Ада Лавлейс. Она доказала, что алгоритмы описанные в коде – путь к эффективному использованию машин. Но до появления первых компьютеров эти данные представляли собой лишь набор машинных инструкций. Сегодня для программиста устройство компьютера вторично, важен только язык программирования. Бурное развитие информационных технологий повлекло за собой создание множества искусственных языков, ориентированных на решение проблемы общения человека с компьютером. Одна из основных задач, стоящих перед программистом - добиться взаимопонимания с компьютером [17, С. 22].

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

Такие программы обрабатывают простые структуры данных и производят большое количество арифметических вычислений. Языки «научного» программирования разрабатывались именно для удовлетворения этих потребностей. Здесь лидировал Fortran, потому что его синтаксис был очень близок к математическому языку ученых. Для научных вычислений особо важна эффективность, и Fortran оказался лучшим. Язык Algol 60 и его потомки тоже предназначались для подобных целей.[1]

Обработка деловой информации, то есть бизнес - задачи, ориентированы на управление ресурсами, персоналом, начисление зарплаты, учет поступления заказов, деловое планирование, анализ риска и т.д. Языки бизнес - программирования нацелены на генерацию отчетов со сложной структурой, точные способы описания и хранения десятичных чисел и символьных данных, арифметические действия с десятичными числами. С этими задачами успешно справляется язык Cobol. Дополнительным инструментом деловой обработки стали языки четвертого поколения 4GL (Fourth Generation Languages). Это непроцедурные языки, специализированные под конкретные задачи обработки деловой информации. Поддерживающая среда переводит спецификацию результата в машинно-выполнимую программу [12, С. 30].

Все задачи системной области связаны с созданием и развитием операционных систем для компьютеров - системным программным обеспечением (ПО). Применяемые языки программирования должны обеспечивать быстрое выполнение программ и взаимодействие с аппаратными средствами. Сначала системное программирование велось на языке ассемблера, затем применяется язык C и его более новый вариант C++. Язык C не обременяет программиста большим количеством ограничений, обеспечивает эффективное выполнение программ и дает возможность полного доступа к операционной системе и аппаратуре. Язык Ada востребован в системах аэрокосмического и военного назначения. Кроме вышеперечисленного, языки C, Ada и C++ позволяют создавать программы для работы в реальном времени. Это стало необходимым с появлением дешевых микропроцессоров, используемых в светофорах, автомобилях, стиральных машинах, электронных часах [17, С. 61].

Язык программирования – один из способов записи алгоритмов, совокупность набора символов системы, правил образования и истолкования конструкций из символов для задания алгоритмов с использованием символов естественного языка. Все команды и данные процессор компьютера получает в виде электрических сигналов (совокупности нулей и единиц т. е. чисел). Программа, с которой работает процессор, представляет собой последовательность чисел, называемых машинным кодом [2, С. 13]. Написать программу в машинном коде сложно. Машинный код приемлем, если объем программы не превосходит нескольких десятков байтов. Более сложные программы создают с помощью языков программирования. Языки программирования – искусственные языки. Они отличаются от естественных человеческих языков малым количеством слов, значение которых понятно транслятору и жесткими требованиями по форме записи операторов. Трансляция – это перевод.[2]

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

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

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

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

2. Гибкость. Это возможность несложного, относительно удобного описания распространенных приемов математических вычислений с помощью имеющегося в языке ограниченного набора изобразительных средств [4, С. 25].

3. Единство. Это использование одних и тех же символов для обозначения одних и тех же (родственных) понятий в разных частях алгоритма. По возможности количество данных символов должно быть минимальным.

4. Однозначность. Это недвусмысленность записи любого алгоритма. Отсутствие ее может привести к неправильным ответам при решении задач

5. Модульность. Это - возможность описания сложных алгоритмов в виде совокупности простых модулей, которые можно составить отдельно и использовать в различных сложных алгоритмах [7, С. 14].

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

1) одинаковыми правилами разложения сообщения на составляющие (предмет синтаксиса);

2) согласованными правилами, придающими сообщению смысл (предмет семантики);

3) согласованными целевыми установками (предмет прагматики) [13, С. 81].

Языки программирования разделяют на два класса: процедурные и непроцедурные. К процедурным (императивным), относят языки низкого и высокого уровней. К непроцедурным (декларативным) относятся объектно-ориентированные, функциональные и логические языки (Приложение А).

Процедурные (императивные) языки программирования задают вычисления как последовательность команд (операторов). Они ориентированы на компьютеры с архитектурой фон Неймана. Их основные понятия тесно связаны с компонентами компьютера:

1) операторы присваивания (моделируют пересылки данных);

2) повторения действий в форме итерации (моделируют хранение информации в смежных ячейках памяти);

3) переменные различных типов (моделируют ячейки памяти).

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

Все вычисления основываются на понятии состояние компьютера. Состояние компьютера — это множество всех значений ячеек его памяти. Программа состоит из последовательности операторов, выполнение каждого из которых изменяет значения в одной или нескольких ячейках памяти, и переводит компьютер в новое состояние [4, С. 23]. В основном, операторы выполняются в порядке их следования в программе, друг за другом, и приводят к последовательной смене состояний компьютера. Конечное состояние - ожидаемый результат. Императивные программы гармонизированы с принципами работы традиционного компьютера, реализуются быстро и эффективно, что способствует их высокой популярности.

Процедурные языки предназначены для однозначного описания алгоритмов. В языке стремятся максимально полно учесть специфику класса задач, для решения которых его предполагается использовать [19, С. 79]. Разнообразие задач привело к тому, что сегодня разработано несколько сотен алгоритмических языков. Языки, предназначенные для решения научно-технических задач - Fortran и Algol, для решения экономических задач - Cobol, для решения небольших вычислительных задач в диалоговом режиме - Basic [2, С. 98].

Рассмотрим два уровня процедурных языков программирования: языки низкого уровня и языки высокого уровня. Язык программирования низкого уровня (машинно-зависимый) не означает «плохой». Это язык, созданный для использования со специальным типом процессора, учитывающим его особенности. В данном случае «низкий уровень» не значит «худший». Он близок к машинному коду, позволяет непосредственно реализовать некоторые команды процессора [6, С. 50]. Программа, написанная на таком языке, работает быстро, занимая маленький объем, и допускает минимальное количество ошибок.

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

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

Ассемблер в переводе - сборщик частей в одно целое. Частями служат операторы, а результатом сборки – последовательность машинных команд. Процесс сборки носит название ассемблирование. Ассемблер машинно-зависимый язык низкого уровня, где короткие мнемонические имена соответствуют отдельным машинным командам. Он отражает особенности архитектуры конкретного типа компьютера. Программа, написанная на ассемблере, состоит из одного или нескольких модулей, а каждый модуль – из операторов. Язык Ассемблера избавляет программиста от утомительного труда по распределению памяти компьютера для команд, переменных и констант, обеспечивает возможность применения символических имен в исходной программе [18, С. 250].

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

Можно сделать вывод, что программы, написанные на языке ассемблера, требуют меньшего объема памяти и времени выполнения. Знание программистом языка ассемблера и машинного кода дает ему возможность понять архитектуру машины. Большинство специалистов в области программного обеспечения разрабатывают программы на языках высокого уровня, но наиболее мощное и эффективное программное обеспечение чаще всего полностью или частично написано на языке ассемблера [20, С. 199].

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

Языки программирования высокого уровня проще в изучении и применении. Ими написанные программы можно использовать на любой компьютерной платформе, при условии, что для нее существует транслятор данного языка. Языки высокого уровня в большей степени ориентированы на человека. Их команды понятные человеку английские слова. Чем выше уровень языка, тем больше приходится проделать операций для выполнения необходимой команды. С появлением языков высокого уровня программисты имеют возможность больше времени уделять решению конкретной задачи, не отвлекаясь на вопросы организации процесса [8, С. 66]. Появление этих языков стало первым шагом на пути создания программ, которые вышли за пределы научно-исследовательских лабораторий и финансовых отделов. Языки высокого уровня в значительной мере являются машинно-независимыми. Они облегчают работу программиста и повышают надежность создаваемых программ; конструкции операторов задаются в удобном для человека виде; поддерживается широкий набор типов данных.

Бейсик созданный американцами Д. Кемени и Т. Курцав в 1963 году, считается самым простейшим. Однако простота языка программирования оборачивалась трудностями структурирования. Он создавался в качестве учебного языка, средствами которого легко можно представить принципы создания алгоритмов. Основным удобством Бейсика является небольшой размер интерпретатора: существуют реализации, в которых он занимает всего несколько кбайт. В простых 8-разрядных компьютерах это свойство используют для встраивания интерпретатора в микросхему постоянного запоминающего устройства, чтобы компьютер сразу при включении был готов к исполнению команд и программ Бейсика. Этот язык хорошо подходит для алгоритмического программирования. Можно создавать программы длиной до 100-200 операторов [23, С. 54].

Язык Fortran является одним из первых языков, который получил широкое признание и сегодня он применяется в области научных вычислений. За 50 лет существования он претерпел многие изменения, его называли устаревшим, но он продолжает существовать и развиваться. Его создатель фирма IBM (1957 г). Программисты того времени не были уверены в целесообразности использования языков высокого уровня. Главной целью разработки начальной версии языка было обеспечение эффективности выполнения программ. Языковые структуры были достаточно просты. Для написания программы применялся простой текстовый редактор, а компилятор Fortran транслировал программу в исполняемый код. Можно сказать, что Fortran 77 и Fortran 95 это языки разного уровня [12, С. 148].

В Fortran 95 добавлены почти все современные возможности управления и представления данных, которые в классическом языке отсутствуют, поэтому Fortran 2008 является языком уровня Ada и C++. Программа на языке Fortran состоит из главной программы и набора подпрограмм, каждая из которых компилируется отдельно. Окончательное объединение оттранслированных программ в заданную форму происходит при загрузке. Каждая подпрограмма компилируется в статически размещаемый сегмент кода и запись активации. Во время выполнения программы в распределении памяти никаких изменений не происходит, так как распределение памяти выполняется статически до начала работы программы [5, С. 33].

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

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

Язык C был разработан в 1972 году Дэнисом Ритчи и Кеном Томпсоном. По стилю он похож на Algol и Pascal. Это небольшой, но универсальный язык с ограниченным набором операторов и возможностей. Органичность простого синтаксиса и высокой эффективности вычислений закрепили за ним славу самого популярного языка системного программирования [14, С. 212]. Сегодня огромное число программистов применяют язык C. Вместе с языками C++ и Java, созданными на его основе, он оказывает существенное влияние на стиль программирования. Синтаксис и семантика большинства новых языков (Java, Perl, C#) основаны на понятиях, характерных для языка C.

При практическом программировании на языке C используются: препроцессор C; соглашения интерфейса C; библиотека C. Подключение большой библиотеки позволяет расширять функциональные возможности ядра языка. Модуль на языке C состоит из глобальных объявлений и последовательности вызовов функций. Для формирования одной выполняемой программы одновременно загружается несколько модулей. Каждая функция может вызывать другие функции и имеет доступ к локальным и глобальным переменным [6, С. 55]. В языке применяются указатели, что позволяет программам легко обращаться к элементам массивов. Строки рассматриваются как массивы символов.

Язык C содержит большой набор арифметических операций, чтобы писать очень эффективные и лаконичные программы. Предусмотрен полный набор операторов управления с довольно гибкой семантикой. Но, не смотря на это, C считается языком со слабой системой типизации. И хотя транслятор обнаружит ошибки, связанные с несоответствием типов, но поскольку большинство элементов данных относятся к целочисленному типу, многие ошибки могут остаться незамеченными [3, С. 52].

Язык С++ был разработан в 1980 году. Это компилируемый язык программирования, который позволяет создавать программы более компактные и эффективные, чем, например Бейсик. Из-за сложности, С++ обычно изучают в специализированных учебных заведениях для программистов. Сложность изучения С++ связана с тем, что в самом языке отсутствуют средства для управления вводом и выводом информации. С++ является абстрактным языком не ориентированным на конкретную модель компьютера. Чаще всего этот язык изучают не на конкретных примерах, а на абстрактных теоретических конструкциях. С++ производное от языка С. Очевидно, что многие заимствования обеспечили С++ мощными средствами низкого уровня, которые позволяют решать сложные задачи системного программирования. Различие заключается в разной степени внимания к типам и структурам данных. Это связано с появлением понятий класса, производного класса и виртуальной функции. Это предоставляет С++ более эффективные возможности для контроля типов данных и обеспечивает модульность программы [23, С. 72].

В отличие от традиционных структур Си и Паскаля, в С++ членами класса являются не только данные, но и функции. Функции имеют доступ к данным внутри объектов этого класса и обеспечивают интерфейс между этими объектами и остальной программой. Возможно, что язык С++ является средством объектного программирования новейшей методики проектирования и реализации программ, которая в будущем сможет заменить традиционное процедурное программирование. Значительно упростило изучение языка появление сред быстрого проектирования на С++. Они предоставляют готовые компоненты для ввода и вывода информации и поддерживают концепцию виртуального проектирования приложений Windows [16, С. 171].

Язык Паскаль был создан в 1970 году в Швейцарском Федеральном институте технологии Никласом Виртом. С его распространением появилось понятие о программировании, как о проектировании программ, которое в дальнейшем было развито другими языками и системами программирования. В основу языка Паскаль были положены принципы представленные Алголом, но с упрощенными правилами синтаксиса, что позволило языку после 1984 года получить большую популярность. Язык Паскаль впервые ввел принципиально новые типы данных и подвел программистов к понятию о структурном программировании. Достоинствами языка Паскаль являются:

1) возможность создавать сложные и мобильные программы;

2) простота, что позволяет быстро его осваивать и создавать алгоритмически сложные программы;

3) возможность структурного программирования, что делает программу наглядной и дает возможность для разработки и отладки;

4) наличие специальных методик создания трансляторов с Паскаля, что в результате упростило их разработку и поспособствовало широкому распространению языка;

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

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

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

2. Функциональное программирование. Здесь задание формируется посредством указания функций и задают вычисления как вызовы функций [21, С. 124]. 

3. Логическое программирование. В данном контексте применяются высказывания. Здесь языки программирования описывают вычисления с помощью формальной логики.

4. Объектно-ориентированное программирование использует объекты, а вычисления реализуются их совокупностью.

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

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

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

3. Достоинства языков программирования высокого уровня следующие:

1) алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;

2) набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса;

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

2 Непроцедурные языки программирования

2.1 Объектно-ориентированные, логические, функциональные языки программирования

К непроцедурным языкам относятся декларативные и объектно-ориентированные языки (Object Pascal, Java, Objective Caml и др.) Объектно-ориентированный подход связывает данные с обрабатывающими эти данные процедурами в единое целое - объект. Он использует следующие базовые понятия: объект; свойство объекта; событие; метод обработки; класс объектов [5, С. 54].

Если программа написана на интерпретируемом языке программирования, то ее можно выполнить на том компьютере, на котором будет установлен интерпретатор. Программы, написанные на компилируемых языках программирования, в посредниках не нуждаются – после компиляции уже получен машинный код, в котором есть все необходимее для работы процессора. Эти программы работают на любом компьютере и делают это в сотни раз быстрее. У программ, написанных на интерпретируемых языках программирования, есть свое преимущество [3, С. 72]. Так как мы можем исполнять их только под управлением интерпретатора, то соответственно в любой момент времени можно остановить работу программы, посмотреть ее операторы, внести нужные изменения, вновь запустить и т. д. Содержание программы открыто для пользователя. Для откомпилированных программ это сделать практически невозможно. После компиляции программы ее исходный текст остается только у автора. Все остальные пользователи получают машинный код, который можно исполнять, но практически нельзя ни посмотреть, ни изменить [3, С. 78].

При создании языков объектно-ориентированного программирования преследовались две цели:

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

2) упростить процесс создания новых программ на базе старых.

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

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

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

3. Полиморфизм (применение одного имени для выражения разных действий и объектов), поддерживает возможность существования целого семейства разных операций с тем же именем [7, С. 123].

Первым объектно-ориентированным языком является Simula 67 (как расширение императивного языка Algol 60). Целью работы над вторым языком – Smalltalk, было создание целой среды для персонального компьютера. Первоначально программы на Smalltalk выполнялись только в специализированной вычислительной среде. Работа Smalltalk основана на модели взаимодействия. Данные образуются объектами, а методы рассматриваются как сообщения, посылаемые объектам. Smalltalk применяет динамическую модель последовательности действий. Каждый метод выполняется с одновременным созданием записи активации. Для хранения объектов данных и записей активации язык реализует динамическую организацию памяти в виде кучи. Для очистки памяти выполняется динамическая сборка мусора [7, С. 140].

Язык Smalltalk определяют следующие характеристики.

1) Среда разработки. Язык создавался как целая система, элементами которой являются: язык, среда программирования, аппаратные средства, операционное окружение компьтера.

2) Минимальный язык разработки. Основные операторы Smalltalk задают присваивание и последовательность действий. В самом языке описан набор базовых средств, чтобы создать класс и прикрепить к нему методы.

Мощность языка обеспечивается параметрическим механизмом сообщений, которые определяют структуры ветвления и циклы [11, С. 90]. В исходной поставке системы прописан набор встроенных классов. В ходе инсталляции формируется образ системы с этими классами и пустым окружением. При вызове интерпретатора Smalltalk программист получает собственную копию этого образа, внутри которой создает новые классы и модифицирует существующие. Системный администратор может изменить систему Smalltalk, предложив другой набор классов [2, С. 142].

Для создания гипертекстовых документов в среде World Wide Web - Всемирная паутина, был создан язык разметки гипертекста язык HTML - HyperText Markup Language. Это один из наиболее простых языков создания веб-страниц. У каждого компьютера в Интернете имеется свой адрес. Когда на веб-сервер приходит запрос, адрес отправителя всегда известен и ответ посылается именно по этому адресу [21, С. 40]. Взаимодействие сервера и клиента обеспечивают несколько протоколов передачи данных. Описания документов в языке HTML создаются при помощи элементов.

Элемент - это команда, записываемая тегами. Теги элемента еще называют контейнером, который заполняется конкретным содержанием. Элемент имеет следующую структуру: открывающий тег – содержание - закрывающий тег. Содержание - это некоторая последовательность символов. Все теги начинаются с левой угловой скобки ( ). Внутри угловых скобок указывается имя, которое формирует имя всего элемента. Самый первый элемент, который встречается в документе, должен начинаться с тега. Он сообщает веб-браузеру, что документ написан на языке HTML. Структурно документ делится на две части: заголовочную и основную [15, С. 340].

Логические языки - (Prolog, Lisp, Mercury, KLO) ориентированы на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания. В этих языках указывается, что дано и что требуется получить, а поиск решения возлагается непосредственно на ЭВМ. Логические (декларативные) языки описывают не способ решения задачи, а саму задачу, то есть задают формализованное представление предметной области [10, С. 75]. Логические языки называют языками, основанными на системе правил. Порядок выполнения действия осуществляются не в той последовательности, в которой они определены в программе.

Самым известным языком называют язык Prolog. Он создан авторским коллективом во Франции в 1972 году и ориентирован на решение задач с использованием исчисления предикатов [4, С. 115]. Язык Prolog предоставляет возможность задания спецификаций решения и позволяет компьютеру вывести из них последовательность выполнения для этого решения. Он не задает алгоритм решения задачи. Программа языка Prolog состоит из набора фактов и отношений, которые устанавливаются между объектами данных (фактами) и набором правил. Факты и правила заносят в базу данных при помощи операции consult. Для начала работы программы необходимо ввести запрос. Запрос образует набор термов, которые должны иметь истинное значение. Факты и правила из базы данных определяют такие подстановки для переменных в запросе (унификация), которые согласуются с информацией в базе данных [4, С. 125].

Система реализации языка Prolog приглашает пользователя вводить информацию. Пользователь набирает запрос, выводится значение этого запроса и возможные значения переменных запроса, присвоение которых унифицирует запрос. Нажатие клавиши Enter воспринимается как «прекратить поиск дополнительных решений». В языке Prolog применяется простой синтаксис и простая семантика. Основными формами представления данных являются переменная и список [4, С. 134].

К функциональным языкам программирования относятся LISP, ML (MetaLanguage), Язык Haskell. В отличие от императивного подхода к вычислениям, работа функциональных языков основывается на собственной идее. вместо отслеживания последовательности состояний, через которые проходит компьютер для получения ответа, здесь ищется функция программы, обеспечивающая ожидаемый результат [9, С. 331]. Внимание концентрируется на последовательных преобразованиях начальных данных с помощью функций. Как только будет придуман конечный ответ (последовательность функций), его применяют к начальным данным и получают результат [5, С. 80]. Функциональные (аппликативные) языки задают вычисления как вызовы функций. В функциональных языках отсутствуют переменные, нет операторов присваивания, нет повторений в форме итераций. Для определения функции, сначала придумывают ее имя и задают вычисляемое ей выражение. Описание единичного действия - это вызов функции с конкретными аргументами. Описание программы - это описание последовательности вызовов отдельных функций [9, С. 44]. 

Язык функционального программирования LISP появился в рамках проекта по искусственному интеллекту в 1960 году под руководством Джона Маккарти. Он широко использовался для научных исследований в области естественных языков, доказательства теорем, задач искусственного интеллекта. Программы на LISP выполняются в диалоговой среде, поэтому главной программы как таковой не существует. Вместо этого пользователь вводит последовательность выражений, которые необходимо вычислить.[4] Система LISP вычисляет выражения по мере их ввода и автоматически выводит результаты на экран монитора. В LISP не существует блочной структуры. Единственной формой взаимодействия между функциями является обращение к одной функции из другой во время выполнения программы.

Функции LISP всегда определяются как выражения [5, С. 59]. Каждый оператор является функцией, возвращающей некоторое значение, а подпрограммы записываются как единые выражения. Базовый синтаксис LISP определяет только выражения. Для увеличения сходства с обычным синтаксисом программы в язык были добавлены специальные конструкции. Набор типов данных в LISP не велик. Основными элементарными типами данных являются литеральные атомы (символы) и числовые атомы (числа). Основные структуры данных образуют связанные списки и списки свойств. LISP имеет широкий набор элементарных операций для создания, уничтожения и модификации списков. Дополнительно поддерживаются основные арифметические операции [3, С. 39]. Во время выполнения одной программы можно транслировать и выполнять другие.

Структуры управления LISP очень просты. Используемые выражения записываются в кембриджской польской записи и содержат условное ветвление. Комментарии начинаются точкой с запятой, а вся следующая за этим символом строка является комментарием. Обработка нелокальных ссылок основана на правиле последней ассоциации. Параметры функций передаются по значению или по имени. Проще всего LISP реализуется с помощью программного интерпретатора и программного моделирования всех элементарных операций. Дополнительно предоставляется компилятор, который можно использовать для компиляции определений функций в машинные коды.[5] LISP плохо приспособлен для компиляции, потому что большая часть связываний происходит во время выполнения программы. Основным средством для хранения данных это система управления памятью. На протяжении 1970-80х годов разрабатывалось множество различных диалектов языка LISP и была создана стандартная версия языка - COMMON LISP (1984) [6, С. 111].

Язык ML (MetaLanguage) созданный Робином Милнером (1990 г), поддерживал не только функциональную, но и императивную парадигму. В этот язык вернулись понятия переменной, типа и оператора. Синтаксис языка ML подобен синтаксису императивных языков. Современным преемником языка Miranda, как чисто функциональный, считается язык Haskell (1992 г). Здесь использована идея «ленивого» вычисления: никакое выражение не вычисляется, пока не потребуется его значение.

2.2 Скриптовые языки, их характеристики

Традиционные языки программирования нужны для создания программ, которые принимают входные данные, обрабатывают их и генерируют соответствующие результаты. Однако в большинстве компьютерных приложений требуется координация множества программ. Например, работа в компьютерной программе дизайнера или фотографа состоит из загрузки изображения из цифровой камеры, выбора формата, вращения изображения для выбора оптимальной ориентации, индексация по теме, времени, цветовой гамме, перемещения в архив [17, С. 255]. Несомненно, ручное выполнение данных шагов и утомительно, и подвержено ошибкам. Иная нагрузка идет при работе в большой платежной банковской системе. Здесь должны обрабатываться данные сканируемых бумажных документов, устройств чтения кредитных карточек, данные, вводимые вручную с клавиатуры [8, С. 25].

В процессе работы выполняются тысячи запросов к базе данных, реализуются сотни юридических и корпоративных правил, создается обширная документация, поддерживается связь с серверами по всему миру для обеспечения депозитов в режиме «онлайн». Эти задачи требуют применения сотен отдельных программ. Координация этих программ в свою очередь потребует разнообразных проверок и логических решений, циклов, подпрограмм и абстракций — тех же видов логических утилит, которые традиционные языки предоставляют внутри приложения. В подобном стиле создание динамической веб-страницы может требовать идентификации и авторизации, поиска в базе данных, отображения манипуляций, удаленного взаимодействия, чтения и записи текста HTML. Сценарии подобных действий называют скриптами [6, С. 37]. Эти сценарии обосновывают потребность в программах, которые координируют другие программы. 

Универсальные скриптовые языки (Perl, Python) называют склеивающими языками, потому что они создавались для «склеивания» существующих программ в интересах создания единой системы. С ростом Всемирной паутины скриптовые языки получили новый толчок в направлении генерации динамического информационного наполнения сети. Их используют как языки расширения, для настраивания или расширения функциональных возможностей «скриптовых» утилит. В конце 90-х язык Perl был адаптирован для создания веб-скриптов серверной стороны, на которой веб-сервер выполняет программу (на машине сервера) для генерации страницы [10, С. 26]. Конкурентами PHP являются JSP (Серверные Страницы Java) и VBScript (на платформе Microsoft). Для создания скриптов на клиентском компьютере все основные браузеры реализуют язык JavaScript. В качестве языка скриптов можно рассматривать и расширяемый язык стилей для преобразований XSLT. XSLT - это часть растущего семейства утилит для расширенного языка разметки XML.

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

Язык Perl в настоящее время является мощным языком программирования. Изначально, он был комбинацией SH и AWK. Первой программой, написанной на Perl, была утилита для обработки текстовых файлов в среде UNIX. С появлением Всемирной паутины Perl применяется для задания сценариев CGI (интерфейса общего шлюза - Common Gateway Interface). Perl применяется и как язык общего назначения для различных приложений, таких как вычислительная биология и искусственный интеллект. Его называют скриптовым языком, но на самом деле Perl больше похож на императивный язык, так как перед выполнением его программы всегда компилируются (в код на промежуточном языке). Его конструкции рассчитаны на применение в самых различных областях вычислительных задач и имеют ряд особенностей [20, С. 43]. Для переменных в Perl характерны статическая типизация и неявное объявление.

Существуют три категории, обозначаемые первым символом имени переменных. Все имена скалярных переменных начинаются со знака доллара ($), хеш-имена начинаются со знака процента (%), имена массивов начинаются со знака (@). Это соглашение делает имена переменных в программах более читабельными, чем в любом другом языке. Perl имеет большое количество неявных переменных, некоторые используются для хранения параметров Perl. Неявные (скрытые) переменные используются по умолчанию для встроенных функций, имеют имена ($! и @_). Массивы в Perl имеют две особенности: динамическую длину (может увеличиваться и уменьшаться во время исполнения программы) и разреженные массивы (могут быть промежутки между элементами). Perl включает ассоциативные массивы (хеши), их элементы записываются в память и извлекаются с помощью функций хеширования [8, С. 149].

Система Perl применяет хеш-функции и при необходимости увеличивает размер структуры. Ассоциативные массивы называют массивами с адресацией по содержанию. Скалярный тип Perl поддерживает как строки, так и числа хранящиеся в формате с плавающей точкой двойной точности. В зависимости от контекста числа могут преобразовываться в строки, и наоборот. Если строка не может быть конвертирована в число и применяется в числовом контексте, используется ноль, а сообщение об ошибке не формируется. Это соглашение может приводить к ошибкам, которые не обнаруживаются системой периода выполнения. Индексация массивов тоже не проверяется, потому что не задается диапазон индексов [13, С. 70]. Ссылки на несуществующие элементы возвращают значение undef, которое интерпретируется как ноль в числовом контексте. Следовательно, ошибки в доступе к элементам массива не обнаруживаются.

Язык JavaScript первоначально был разработан Бренданом Эйкхом (Brendan Eich) в корпорации Netscape. Сначала он назывался Mocha. Затем его переименовали в LiveScript. В конце 1995 года после добавления новых функций и возможностей LiveScript получил окончательное название JavaScript. После появления первых графических браузеров стали необходимыми вычисления, связанные с документами HTML, которые сами по себе были целиком статичны. Были приняты два решения. Вычисления на стороне сервера обеспечивались интерфейсом общего шлюза CGI, который позволил документам HTML запрашивать исполнения программ на сервере, возвращая результаты в браузер в виде HTML-документов [9, С. 130]. Интерпретатор JavaScript чаще всего встраивается в веб-браузеры. Код JavaScript встраивается в HTML-документы и интерпретируется браузером при отображении документов. Язык JavaScript используется в основном для проверки данных в формах ввода и создания динамических HTML-документов. Java полностью поддерживает объектно-ориентированное программирование, а JavaScript не поддерживает ни наследование, ни динамическое связывание при вызове методов [13, С. 59].

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

Создателем языка PHP (Converse и Park, 2000) является Расмус Лердорф (1994 г). Первой публично распространяемой версией PHP стал пакет под названием Personal Home Page Tools. PHP обеспечивает простой доступ к HTML-формам данных и предоставляет разработчику мощные средства для работы с различными базами данных [10, С. 215]. Сегодня язык PHP разрабатывается, распространяется и поддерживается как продукт с открытым исходным кодом. Процессоры PHP располагаются на большинстве веб-серверов. PHP является скриптовым языком серверной стороны, встраиваемым в HTML предназначенным для веб-приложений. Код интерпретируется на веб-сервере, когда HTML-документ запрашивается браузером. В результате генерируется код HTML, который заменяет код PHP в документе HTML. Таким образом, веб-браузер не видит кода PHP.

Относительно новым объектно-ориентированным и интерпретируемым языком скриптов является Python (Лутц и Ашер, 2004).  Это система с открытым исходным кодом и доступом для наиболее популярных платформ [22, С. 170]. Вместо массивов Python включает в себя три вида структур данных: списки, неизменяемые списки (кортежи), хеши
(словари). Предлагается обширный набор методов для списков: добавление, вставка, сортировка, удаление, набор методов для словарей (ключи, значения, копирование). Кроме того, Python поддерживает списки в стиле языка Haskell, считается объектно-ориентированным языком и включает в себя возможности сопоставления с шаблоном, присущие языку Perl. Для удаления ненужных объектов применяется сборка мусора. Одной из особенностей Python является то, что он может быть легко расширен любым пользователем [11, С. 290]. Модули, поддерживающие расширения, могут быть написаны на любом компилируемом языке. Расширения могут добавлять функции, переменные, типы объектов и реализоваться в виде дополнений к интерпретатору языка Python. Поддержка CGI программирования и обработки форм обеспечивается CGI-модулем. Имеются модули с поддержкой куки, механизмы сетевого взаимодействия и доступа к базе данных. Python включает в себя поддержку параллелизма на основе потоков, а также поддержку сетевого программирования с использованием сокетов [14, С. 287].

Язык Ruby был разработан Юкихиро Мацумото в начале 90-х годов и реализован в 1996 году. С тех пор он непрерывно развивается. Ruby — это полностью объектно-ориентированный язык. Каждый элемент данных рассматривается как объект, и все операции осуществляются через вызовы методов. Операции в Ruby считаются синтаксическим механизмом, указывающим метод, требуемый для определенной операции. Все операции являются методами и могут переопределяться. Все классы, предопределенные и определяемые пользователем, могут иметь подклассы. Классы и объекты являются динамическими, методы к ним могут добавляться динамически. Это значит, что классы и объекты могут иметь разные наборы методов в разные моменты периода выполнения и могут вести себя по-разному [19, С. 88]. В определение класса могут быть включены коллекции методов, данных и констант. Синтаксис Ruby похож на синтаксис языков Eiffel и Ada. Здесь используется динамическая типизация. Область видимости переменной указывается ее именем. Если имя переменной начинается с буквы, то она имеет локальную область. Если имя начинается с @ - экземплярная переменная, если имя начинается с $ - глобальная переменная. Пользователь может расширить или изменить Ruby.

Язык Lua в переводе с португальского означает «луна». Он был разработан в начале 90-х Роберто Иерусалимски, Вальдемаром Келес и Луисом де Фигейреду в Католическом университете Рио-де-Жанейро (Бразилия). На его разработку повлияли языки Scheme, Icon и Python, но конструкция Lua более мощная и гибкая. Проектирование языка было ориентировано на обеспечение самых необходимых и простых способов расширения языка для различных областей применения. Lua называют мультипарадигменным языком, он обеспечивает процедурное и функциональное программирование, содержит небольшой набор базовых механизмов, которые могут быть расширены для решения определенных задач [7, С. 69].

Ключевой особенностью языка является расширяемая семантика. Lua не содержит понятия класса и объекта в явном виде, но механизмы объектно-ориентированного программирования с поддержкой прототипов легко реализуются с использованием мета-таблиц. Функции языка Lua являются величинами первого класса, ими можно манипулировать как переменными: передавать и получать как аргументы. Lua поддерживает замыкания - это особый вид функции, которая определена в теле другой функции и создается каждый раз во время ее выполнения. При выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции. В случае замыкания ссылки на переменные внешней функции действительны внутри вложенной функции, пока работает вложенная функция, даже если внешняя функция закончила работу и переменные вышли из области видимости. Замыкание связывает код функции с ее лексическим окружением. Лексические переменные замыкания отличаются от глобальных тем, что они не занимают глобальное пространство имен. От переменных в объектах они отличаются тем, что привязаны к функциям, а не объектам [15, С. 306].

Lua это язык с динамическим определением типов данных, переменная может содержать значения любого типа. Все значения хранятся в переменных, используются в качестве аргументов при вызове функций и возвращаться в виде выполненного результата. В Lua существует восемь основных типов данных: 1) nil (неопределенный); 2) boolean (логический); 3) number (числовой); 4) string (строковый); 5) function (функция); 6) userdata (пользовательские данные); 7) thread (поток); 8) table (таблица) [6, С. 144].

Nil — это тип с пустым значением, главное свойство которого — отличаться от всех остальных значений и обозначать отсутствие пригодного значения. К типу boolean относятся значения false и true. Значения nil и false считаются ложными, любое другое значение считается истинным. Тип number определяет вещественные числа (double), но внутреннее представление чисел можно изменить при сборке интерпретатора. Тип string обозначает массивы символов. Строки Lua могут содержать любые 8-битовые символы, включая ноль ('\0'). Строки неизменяемы. Таблицы считаются самым важным типом данных в Lua и являются фундаментом для строительства пользовательских типов данных (массивы, списки, множества) и представляют собой набор пар - (ключ, значение). Ключом может выступать значение любого типа, кроме nil [16, С. 205]. Ссылки на элементы таблицы осуществляются в форме ссылок на традиционные и ассоциативные массивы или записи. Поскольку функции относятся к первому классу, они могут храниться в таблицах, и такие таблицы могут служить пространствами имен. 

Lua удобно использовать как расширение скриптового языка для других языков. Текст транслируется в промежуточный код, а затем интерпретируется. Он легко может быть встроен в другие системы из-за небольшого размера его интерпретатора (около 150К байт) [10, С. 61].

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

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

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

3. Несмотря на то, что Perl и Python поддерживают объектно-ориентированное программирование, ни один из них не является чисто объектно-ориентированным языком. Каждый из них имеет примитивные типы для каждой поддерживаемой функции. В Ruby присутствует ряд особенностей языка Perl, в том числе скрытые (неявные) переменные.

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

5. Отчасти благодаря быстрым изменениям последние скриптовые языки интегрировали в себя новейшие концепции в проектировании языков. Ruby, например, имеет универсальную объектную модель (подобно Smalltalk), настоящие итераторы (как в Clu), сечения массивов (как в Fortran 90), структурированную обработку исключений, множественное присваивание и рефлексию.

Заключение

Целью данной курсовой работы была попытка дать представление обо всем многообразии существующих языков программирования. Среди программистов есть мнение о всеобщей применимости, какого то определенного языка (C, C++, Pascal). Данная ситуация возникает по причине недостаток информации, привычки, инертности мышления. Настоящий профессионал должен постоянно стремиться повышать квалификацию. А для этого нужно не бояться учиться и экспериментировать. Представленный обзор языков программирования помогает понять, что споры или дискуссии о преимуществах одного языка над другим бессмысленны. В данной курсовой работе, мной были рассмотрены императивные и декларативные языки программирования, которые используются для научных вычислений, обучения программированию начинающих программистов, решения экономических задач, создания эффективных и компактных программ.

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

Компьютерные технологии с каждым годом набирают темп в развитии. Сейчас многие проекты не живут каким-то одним языком, то есть у них какая-то часть живет на одном языке, другая - на другом, ещё какая-то часть - на третьем. Например, если у вас какое-то веб-приложение, которое обрабатывает большие объемы информации, обращения к дискам наверняка написаны на каком-то низкоуровневом С, чтобы просто быстро писать на диск. Естественно, писать весь проект на С не стоит. Может быть, там какая-то промежуточная логика, написанная на Java, которая обращается к Сишным функциям для быстрых обращений. Ну, а фронтенд (то на что смотрит пользователь), может быть написано на скриптах, на том, что непосредственно выполняется браузером (JavaScript). И всё это успешно взаимодействует. В некоторых скриптовых языках используется компиляция «на лету», где для генерации любого результата читается весь исходный текст программы. Большинство других языков ориентировано на построчную компиляцию или интерпретацию. Например, языки Ruby, Python, Tcl, воспринимают все команды с клавиатуры. Для быстрой разработки и интерактивного использования и существуют скриптовые языки, ориентированные на применение минимума «шаблонов». Одни интенсивно используют пунктуацию и короткие идентификаторы (Perl), другие (Tcl, AppleScript) ориентированы на синтаксис естественной речи. В отличие от обычных традиционных языков, конструкции скриптовых являются глобальными по умолчанию. В языках PHP и Tcl все данные считаются локальными по умолчанию; в языке Python существует правило, по которому любая присваиваемая переменная локальна в блоке, в котором появилось присваивание. Для присваивания переменной в контексте внешней области видимости нужен специальный синтаксис. При отсутствии объявлений большинство скриптовых языков типизировано динамически. В Scheme, PHP, Python, Ruby тип переменной проверяется перед использованием. В Perl и Tcl в различных контекстах переменная будет интерпретироваться по-разному. Большинство ЯП предоставляет возможность посылки из одной программы запроса на запуск другой, адресуя запрос операционной системе. В скриптовых языках запросы более фундаментальны и имеют более развитую прямую поддержку. Например, язык Perl предлагает более 100 встроенных команд для доступа к функциям ввода-вывода операционной системы, к базе данных и сокетам, манипуляций с файлами и каталогами, управления процессами, защите и авторизации, взаимодействию и синхронизации процессов. Предками скриптовых языков являются обработчики текстов и генераторов отчетов. В стандартных библиотечных пакетах традиционных ЯП представлены высокоуровневые типы данных (словари, списки, кортежи, множества, мультимножества). Язык C++, например, дает возможность пользователям переопределять стандартные инфиксные операции так, чтобы сделать обработку этих категорий удобной. Скриптовые языки идут на шаг дальше, встраивая высокоуровневые типы в синтаксис и семантику самого языка. Для них характерно наличие массивов, которые индексируются строками символов, с базовой реализацией на основе хеш-таблиц. Для памяти обеспечивается сборка мусора.

На основании курсового исследования можно сделать следующие выводы:

1. Все язык программирования подразделяются на два класса – процедурные и непроцедурные языки.

2. Наиболее быстрые изменения в языках программирования сегодня происходят именно в скриптовых языках. Это объясняется следующими причинами: непрерывным ростом веб-сети, динамизмом сообщества разработчиков ПО с открытым исходным кодом и сравнительно низкими затратами на создание нового языка скриптов. Если компилируемый язык промышленного качества (Java, C++) требует многолетних затрат и очень большой группы разработчиков, то один талантливый разработчик может создать пригодную для использования реализацию нового языка скриптов за год.

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

Список использованной литературы

1. Абрамов, В.Г. Введение в язык Паскаль [Текст]: учебник / В.Г.Абрамов. СПб Питер, 2002. – 405 с.

2. Агальцов, В. И., Титов, В. М. Информатика для экономистов [Текст]: учебник / В.И.Агальцов, В.М.Титов. M.: ИД «ФОРУМ»: ИНФРА-М, 2011. - 448 с.

3. Богатырев, А.П. Природа и эволюция сценарных языков, Мир ПК, №11, 2001. - 472 с.

4. Голицына, О.Л., Партыка, Т.Л., Языки программирования [Текст]: учебник / О.Л.Голицина, Т.Л.Партыка, И.И.Попов. М.: Юристь, - 2008. – 520 с.

5. Жукова, Е.Л., Бурда, Е.Г. Информатика [Текст]: учебник / Е.Л.Жукова, Е.Г.Бурда. М.: Наука-Пресс, - 2007. – 241 с.

6. Иванова, Г.С. Основы программирования [Текст]: учебник / Г.С.Иванова. М.: Юристь, - 2002. – 490 с.

7. Иванова, Г.С., Ничушкина, Т.Н., Объектно- ориентированное программирование [Текст]: учебник / Г.С.Иванова, Е.К.Пугачев, Т.Н.Ничушкина, М.: Юристь, - 2001. – 460 с.

8. Курносов, А.П. Информатика [Текст]: учебник / А.П.Курносов, С.А.Кулев, А.В.Улезько. М.: Колос С, 2005.- 272 с.

9. Конюховский, П.В. Информатика [Текст]: учебник / П.В.Конюховский, Д.Н.Колесова. Санкт-Петербург: изд-во «Питер», 2000. – 398 с.

10. Камаев, В.А., Костерин, В.В. Информатика [Текст]: учебник / В.А.Камаев, В.В.Костерин. - М.: Высшая школа, 2006. - 454 с.

11. Макарова, Н.В. Информатика [Текст]: учебник / Н.В.Макарова. - М.: Финансы и статистика, 2012. - 768 с.

12. Малышев, Р.А. Локальные вычислительные сети [Текст]: учебное пособие / Р.А.Малышев / РГАТА. – Рыбинск, 2005. – 383 с.

13. Орлов, С.А. Теория и практика языков программирования [Текст]: учебник / С.А.Орлов. Стандарт 3-го поколения, 2013. – 541 с.

14. Островский, В.А. Информатика [Текст]: учебник / В.А.Островский. М.: Высшая школа, 2000. - 511 с.

15. Симонович, С.В. Информатика базовый курс [Текст]: учебник / С.В.Симонович, 2-е издание «Питер» М.,- 2006. – 640 с.

16. Степанов, А.А. Информатика [Текст]: учебник / А.А.Степанова 4-е издание «Питер» М., - 2005.- 521 с.

17. Соболь, Б.В., Галин, А.Б. Информатика [Текст]: учебник / Б.В.Соболь, А.Б.Галин. Ростов-на-Дону, «Феникс» 2005. – 480 с.

18. Сергеева, И.И., Музалевская, И.Р. Информатика [Текст]: учебник / И.И.Сергеева, И.Р.Музалевская. М. Форум – Инфа - Москва, 2006. – 473 с.

19. Семакин, И.А., Информатика [Текст]: учебник / И.А.Семакин, Залогова Л., Русаков С., Шестакова Л. – Москва: БИНОМ., 2005. - 355 с.

20. Скрипкин, К.Г. Экономическая эффективность информационных систем [Текст]: учебник / К.Г.Скрипкин. Москва: изд-во «ДМК - Пресс», 2002. – 609 с.

21. Сухомлин, В.А. Введение в анализ информационных технологий [Текст]: учебник / В.А.Сухомлин. М.: Юристь, - 2006. – 590 с.

22. Хеннер, Е.К, Информатика [Текст]: учебник / Е.К.Хеннера, М., Академия, 2004. – 388 с.

23. Хислей Филипп. Генерация высококачественного кода для программ, написанных на СИ [Текст]: учебник / Ф.Хислей. М.: Юристь, - 2010. – 377 с.

Приложение А

ЯЗЫКИ ПРОГРАММИРОВАНИЯ

ПРОЦЕДУРНЫЕ НЕПРОЦЕДУРНЫЕ

(ИМПЕРАТИВНЫЕ) (ДЕКЛАРАТИВНЫЕ)

НИЗКОГО УРОВНЯ ВЫСОКОГО УРОВНЯ ЛОГИЧЕСКИЕ

(ПРОЛОГ)

АССЕМБЛЕР ФОРТРАН ФУНКЦИОНАЛЬНЫЕ

БЕЙСИК (LISP)

ПАСКАЛЬ

С

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ

(JAVA, DELPHI, VISUAL)

Рисунок А.1 - Схема общей классификации языков программирования

  1. Малышев, Р.А. Локальные вычислительные сети. Рыбинск, 2005. – С. 208

  2. Сергеева, И.И., Музалевская, И.Р. Информатика. М., 2006. – С. 140

  3. Скрипкин, К.Г. Экономическая эффективность информационных систем. Москва, 2002.- С. 143

  4. Островский, В.А. Информатика. М., 2000. - С. 51

  5. Камаев, В.А., Костерин, В.В. Информатика. М., 2006. – С. 145