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

Современные языки программирования (Языки программирования и их парадигмы)

Содержание:

Введение

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

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

Другой важной особенностью языкотворчества последних десятилетий можно считать прекращение попыток создания "универсального" языка программирования, призванного объединить в себе все последние достижения в области разработки языков (из попыток 60-х - 70-х годов можно вспомнить Алгол, PL/1 или Аду). Крупные "языковые" проекты безвозвратно ушли в прошлое вместе с порожденными ими языками.

Наконец, появление персонального компьютера и ОС с графическим интерфейсом (прежде всего MacOS и Windows) переместило внимание разработчиков программного обеспечения из сферы языков программирования в другие области средств разработки ПО, такие, как визуальное или объектно-ориентированное программирование, сетевые протоколы или модели баз данных. Программист сегодня использует в качестве инструмента не столько язык, сколько конкретную систему программирования (например, Delphi), а какой язык является для нее базовым, не так уж важно.

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

Цель работы — разобрать некоторые основные современные языки программирования такие как Python, С и его разновидности,Visual Basic,Java и JavaScript и их особенности.

Задачи:

1.Выбрать наиболее подходящий для разработки язык программирования.

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

Глава 1. Языки программирования и их парадигмы

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

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

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

Не смотря на огромное множество языков программирования, лишь немногие из них получили широкую известность и признание программистов. Для того, что бы определить самые популярные языки программирования воспользуемся данными голландской компании «TIOBE Software BV» в первую очередь известной своим регулярно рассчитываемым рейтингом популярности языков программирования. Несмотря на многолетние споры, относительно качества и достоверности рейтинга, других источников позволяющих хоть как-то оценить тенденции в развитии языков программирования на сегодняшний день нет.

По данным компании «TIOBE Software BV» десять самых популярных языков программирования на январь 2017 года представлены в таблице 1.

Таблица 1

Рейтинг языков программирования

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

Рейтинг

1

Java

17.278 %

2

C

9.349%

3

C++

6.301%

4

C#

4.039%

5

Python

3.465%

6

Visual Basic .NET

2.960%

7

JavaScript

2.850%

8

Perl

2.750%

9

Assembly language

2.701%

10

PHP

2.564%

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

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

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

1.1. История развития языков программирования

Программа – алгоритм, записанный на языке программирования. Программа – последовательность операторов языка. Языки программирования – искусственные языки, строго формализованные; существует правила записи операторов языка – синтаксис языка.

  1. Машинный язык (40-50 годы XX в.).

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

  1. Ассемблер (начало 50-ых годов XX в.).

Вместо 1 и 0 программисты теперь могли пользоваться операторами (MOV, ADD, SUB и т.д.), которые похожи на английские слова. Программы на ассемблере также являются машинно-зависимыми. Для преобразования в машинный код использовался компилятор (спец. программа – переводчик в машинный код).

  1. Первые языки программирования высокого уровня.

С середины 50-ых гг. XX в. начали создавать первые языки программирования высокого уровня (high-level language). Эти языки были Машино независимыми (не привязаны к опред. типу ЭВМ). Но для каждого языка были разработаны собственные компиляторы.

Примеры таких языков: FORTRAN (FORmula TRANslator; 1954) предназначен для научных и технических расчетов; COBOL (1959) был предназначен в основном для коммерческих приложений (обрабатывал большие объемы нечисловых данных) – Common Business-Oriented Language); язык BASIC (Beginner’s All Purpose Instuction Code – универсальный язык символьных инструкций для начинающих) (1964 г.)

  1. Алгоритмические языки программирования.

С начала 80-ых г. XX в. начали создаваться языки программирования, которые позволили перейти к структурному программированию (использование операторов ветвления, выбора, цикла и практически отказ от частого использования операторов перехода (goto). К этим языкам относятся: язык Pascal (назван его создателем Никлаусом Виртом в честь великого физика Блеза Паскаля; 1970); язык Си, позволяющий быстро и эффективно создавать программный код (1971)

  1. Языки объектно-ориентированного программирования

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

язык С++ (1983) - продолжение алгоритм. языка Си;

язык Object Pascal (1989) был создан на основе языка Pascal. После создания среды программирования – Delphi (1995);

язык Visual Basic(1991) был создан корпорацией Microsoft на основе языка Qbasic (1975) для разработки приложений с графическим интерфейсом в среде ОС Windows.

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

В 90-ые годы XX в. в связи с бурным развитием Интернета были созданы языки, обеспечивающие межплатформенную совместимость. На подключенных к Интернету компьютерах с различными ОС (Windows, Linux, Mac OS и др.) могли выполняться одни и те же программы. Исходная программа компилируется в промежуточный код, который исполняется на компьютере встроенной в браузер виртуальной машиной:

язык Java - объектно-ориентированный язык был разработан фирмой Sun Microsystems для создания сетевого программного обеспечения (1995);

язык JavaScript – язык сценариев Web-страниц (компания Netscape). (1995)

  1. Языки программирования на платформе .NET.

Интегрированная среда программирования Visual Studio .Net, разработанная корпорацией Microsoft, позволяет создавать приложения на различных языках объектно-ориентированного программирования, в том числе:

на языке Visual Basic .Net ( на основе Visual Basic) - 2003 г.;

на языке Visual C# (С-шарп) – на основе языков С++ и J – 2003 г.;

на языке Visual J# (J-шарп) – на основе Java и JavaScript – 2003 г.; [10]

1.2. Парадигмы программирования

Парадигма (от греч. παράδειγμα, «пример, модель, образец») – набор теорий, стандартов и методов, которые совместно представляют собой способ организации научного знания.

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

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

На сегодняшний день самые известные модели программирования:

– Императивная

Процедурное программирование

– Декларативная

Функциональное программирование

Логическое программирование

– Структурная

Модульное программирование

Объектно-ориентированное программирование

– Метапрограммирование

Генерация кода

Самомодифицирующийся код

Рассмотрим эти модели подробнее.[4]

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

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

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

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

Есть несколько подходов реализующих декларативную модель программирования:

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

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

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

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

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

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

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

Есть несколько подходов реализующих структурную модель программирования:

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

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

Класс – это тип, описывающий устройство объектов. Это в чистом виде абстрактный тип данных, создаваемый программистом.

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

Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления.

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

Есть несколько подходов реализующих модель метапрограммирования:

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

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

Внешне-языковые средства. Применяются в случаях, если простых средств вроде шаблонов недостаточно. Язык генератора составляется так, чтобы автоматически или с минимальными усилиями со стороны программиста реализовывать правила парадигмы или необходимые специальные функции. Фактически, это – более высокоуровневый язык программирования, а генератор – не что иное, как транслятор. Генераторы пишутся, как правило, для создания специализированных программ, в которых очень значительная часть стереотипна, либо для реализации сложных парадигм.[4]

Основные парадигмы и подходы к решению задач в современных языках программирования представлены в таблице 2.

Таблица 2

Парадигмы и подходы языков программирования

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

Парадигмы программирования

Основные подходы программирования

Java

императивная

структурная

объектно-ориентированный

C

императивная

процедурный

C++

мультипарадигмальный

метапрограммирование

процедурный

объектно-ориентированный

PHP

мультипарадигмальный

процедурный

объектно-ориентированный

C#

мультипарадигмальный

императивная

процедурный

объектно-ориентированный

Python

императивная

декларативная

структурная

процедурный

функциональный

объектно-ориентированный

Visual Basic

императивная

структурная

процедурный

объектно-ориентированный

Objective C

мультипарадигмальный

процедурный

объектно-ориентированный

Perl

мультипарадигмальный

декларативная

функциональный

объектно-ориентированный

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

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

Языки программирования классифицируются в зависимости от самых разных критериев. Но чаще всего они подразделяются на языки высокого и низкого уровня. Чем ближе язык к естественному языку, тем более вели его шансы попасть в категорию языков высокого уровня. И наоборот, если язык ближе к машинным командам, в этом случае его называют языком низкого уровня. Поэтому всё множество языков программирования можно разделить на две группы: языки низкого уровня и языки высокого уровня.

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

К языкам низкого уровня относятся языки ассемблера (от англ. to assemble - собирать, компоновать). В языке ассемблера используются символьные обозначения команд, которые легко понятны и быстро запоминаются. Вместо последовательности двоичных кодов команд записываются их символьные обозначения, а вместо двоичных адресов данных, используемых при выполнении команды, - символьные имена этих данных, выбранные программистом. Иногда язык ассемблера называют мнемокодом или автокодом.

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

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

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

1.4. Python

Python является интерпретируемым, изначально объектно-ориентированным языком программирования. Он чрезвычайно прост и содержит небольшое число ключевых слов, вместе с тем очень гибок и выразителен. Это язык более высокого уровня нежели Pascal, C++ и, естественно C, что достигается, в основном, за счет встроенных высокоуровневых структур данных (списки, словари, тьюплы). Python является кросс‑платформенным языком: обычно одна и та же программа на языке Python может запускаться и в Windows, и в UNIX‑ подобных системах, таких как Linux, BSD и Mac OS, для чего достаточно просто скопировать файл или файлы, составляющие программу, на нужный компьютер; при этом даже не потребуется выполнять «сборку», или компилирование программы. Конечно, можно написать на языке Python программу, которая будет использовать некоторые характерные особенности конкретной операционной системы, но такая необходимость возникает крайне редко, т. к. практически вся стандартная библиотека языка Python и большинство библиотек сторонних производителей обеспечивают полную кросс‑платформенность.[5]

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

Следующая немаловажная черта - расширяемость языка, этому придается большое значение и, как пишет сам автор, язык был задуман именно как расширяемый. Это означает, что имеется возможность совершенствования языка всеми всеми заинтересованными программистами. Интерпретатор написан на С и исходный код доступен для любых манипуляций. В случае необходимости, можно вставить его в свою программу и использовать как встроенную оболочку. Или же, написав на C свои дополнения к Python и скомпилировав программу,получить "расширенный" интерпретатор с новыми возможностями.[5]

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

  • Numerical Python - расширенные математические возможности, такие как манипуляции с целыми векторами и матрицами;
  • Tkinter - построение приложений с использованием графического пользовательского интерфейса (GUI) на основе широко распространенного на X-Windows Tk-интерфейса;
  • OpenGL - использование обширной библиотеки графического моделирования двух- и трехмерных объектов Open Graphics Library фирмы Silicon Graphics Inc.

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

1.5. Си и его разновидности

Си [C] - Многоцелевой язык программирования высокого уровня, разработанный Денисом Ритчи в начале 1970-х гг. на базе языка BCPL. Используется на миниЭВМ и ПЭВМ. Является базовым языком операционной системы Unix, однако применяется и вне этой системы, для написания быстродействующих и эффективных программных продуктов, включая и операционные системы. Для IBM PC имеется ряд популярных версий языка Си, в том числе - Turbo C (фирмы Borland), Microsoft C и Quick C (фирмы Microsoft ), а также Zortech C (фирмы Symantec). Многие из указанных версий обеспечивают также работу с Си и Си++.

Наследник C язык C++ быстро завоевал поддержку, являясь обновленной версией языка C.C++ был разработан шведским программистом по имени Бьярн Страуструп (Bjarne Stroustrup) в начале 1980-х. C++ имеет на вооружении несколько дополнительных команд и операторов, но основное отличие заключается в подходе к программированию.

Главная причина, по которой и сейчас C++ остается популярным, — он поддерживает объектно-ориентированное программирование (ООП). ООП — это иной способ написания программ, помогающий программисту писать программы быстрее и с наименьшим числом ошибок. ООП также позволяет повысить скорость обслуживания.

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

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

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

Популярность объектно-ориентированного языка C++ дала начало множеству новых языков для современного Интернета. Причиной успешного развития языка Java (Джава) (и его производных, таких как JavaScript) является широкомасштабное использование в нем языка C++, и хотя C++ не поддерживает достаточной безопасности программирования web-сайтов, его объектно-ориентированная природа делает Java хорошим кандидатом для программирования объектов Интернета. Компания Sun Microsystems изменила язык C++, добавив в него элементы обеспечения достаточной безопасности и убрав ряд сомнительных возможностей C++. (Примером является множественность наследования, которая позволяет генерацию одного объекта программирования, такого как окно, из набора нескольких родительских окон с различными характеристиками. Подобная концепция сбивает с толку даже при формулировании ее на высоком уровне.)

C# (C Sharp) – “Си Шарп”:объектно-ориентированный язык программирования, о разработке которого в 2000 г. объявила фирма Microsoft. По своему характеру он напоминает языки C++ и Java и предназначен для разработчиков программ, использующих языки C и С++ для того, чтобы они могли более эффективно создавать Интернет-приложения.

1.6. Visual Basic

Microsoft Visual Basic 6.0 (VB6) - одна из популярных в мире систем проектирования программ (приложений) для Windows.Среда Visual Basic может с успехом использоваться начинающими пользователями для познания секретов программирования и для создания несложных (поначалу) приложений и, в то же время, предоставляет мощные инструменты разработки опытным программистам. В нее включен собственно компилятор языка, а также набор полезных программ-утилит, помогающих в написании и отладке программ. Широкая популярность и успех Visual Basic связаны также с возможностью использования технологии визуального проектирования для создания компьютерных программ. В его визуальной среде разработки можно довольно быстро создать дизайн диалоговых окон пользовательского интерфейса. Visual Basic является мощным программным средством, с помощью которого можно реализовать широкий спектр практических задач.[8]

В названии этого языка слово Basic произошло от первых букв следующих слов:Beginner’s All Purpose Symbolic Instruction Code (Универсальный символьный программный код для начинающих). Поначалу это был очень простой язык,разработанный специально для обучения навыкам программирования.Слово же Visual в названии означает способ визуального создания графического пользовательского интерфейса (GUI).Основные возможности языка Visual Basic:поддержка технологии объектно-ориентированного программирования;создание гибкого и удобного пользовательского интерфейса с использованием средств визуального проектирования;  создание разнообразных многоуровневых меню; поддержка графических изображений и геометрических фигур; использование стандартных диалогов(например, цвет, параметры принтера, обработка файлов); использование встроенных средств отладки и тестирования приложений в среде разработки;  доступ к базам данных; поддержка сети Internet.Этот язык сочетает расширенные возможности Бейсика со средствами визуального проектирования. 

1.7. Java

Java—объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems. Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры. Дата официального выпуска - 23 мая 1995 года. Изначально язык назывался Oak («дуб») и разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе Java, поэтому на официальной эмблеме языка изображена чашка с парящим кофе.

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

К недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований: применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде, широкое использование платформенно-ориентированного (native-код) в стандартных библиотеках, аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).[2]

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

1.8. JavaScript

Вокруг JavaScript довольно много дезинформации и путаницы. Прежде чем двигаться дальше в изучении JavaScript, важно развенчать некоторые распространенные мифы, связанные с этим языком.

Одно из наиболее распространенных заблуждений о JavaScript состоит в том, что этот язык представляет собой упрощенную версию Java, языка программирова ния, разработанного в компании Sun Microsystems. Кроме некоторой синтаксической схожести и способности предоставлять исполняемое содержимое для веб броузеров, эти два языка между собой ничто не связывает. Схожесть имен – не более чем уловка маркетологов (первоначальное название языка – LiveScript – было изменено на JavaScript в последнюю минуту). Однако JavaScript и Java могут взаимодействовать друг с другом.[6]

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

Когда интерпретатор JavaScript встраивается в веб-браузер, результатом является клиентский JavaScript.

Клиентский JavaScript включает в себя интерпретатор JavaScript и объектную модель документа (Document Object Model, DOM), определяемую веббраузером. Документы могут содержать JavaScriptсценарии, которые в свою очередь могут использовать модель DOM для модификации документа или управления способом его отображения. Другими словами, можно сказать, что клиентский JavaScript позволяет определить поведение статического содержимого вебстраниц. Клиентский JavaScript является основой таких технологий разработки вебприложений, как DHTML, и таких архитектур, как Ajax.[6]

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

2. Способы реализации и классификация языков программирования

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

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

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

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

Компилятор создаёт законченный результат - программу в машинных кодах. Затем эта программа выполняется. Откомпилированный вариант исходной программы можно сохранить на диске. Для повторного выполнения исходной программы компилятор уже не нужен. Достаточно загрузить с диска в память компьютера откомпилированный в предыдущий раз вариант и выполнить его.

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

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

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

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

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

Достоинства интерпретаторов:

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

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

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

Недостатком интерпретаторов является то,что они тихоходны.Ими затрачивается слишком много времени на разгадывание того,что делать, вместо того чтобы заниматься действительно делом. При исполнении программных операторов,интерпретатор должен сначала сканировать каждый оператор с целью прочтения его содержимого(что этот человек просит меня сделать?),а затем выполнить запрошенную операцию. Операторы в циклах сканируются излишне много.В реальных системах программирования перемешаны технологии и компиляции и интерпретации. [7]

Причиной вновь вспыхнувшего интереса к компиляторам стало появление быстрых и сложных 64-разрядных микропроцессоров, типичным представителем которых можно считать Intel Itanium. Ответственность за увеличение производительности, на которое потенциально способны будущие 64-разрядные процессоры, ложится на компиляторы нового поколения.Такие компиляторы уже создаются в исследовательских лабораториях ряда компаний -- Hewlett-Packard, Intel, MetaWare, Microsoft и других. В феврале прошлого года компания Silicon Graphics объявила о том, что ее оптимизированные компиляторы позволяют увеличить на 30-100% по сравнению с существующими продуктами производительность программ, работающих на компьютерах с процессорами Itanium и операционной системой Linux. Как и их предшественники, оптимизированные компиляторы преобразуют программы на высокоуровневом языке в машинный код. Помимо этого они гарантируют максимально эффективное использование памяти (и в первую очередь процессорного кэша и механизма распараллеливания). Например, процессоры Itanium предназначены для того, чтобы одновременно обрабатывать до шести команд на каждый такт процессора.

В июне 2000 года Microsoft анонсировала C#, объектно-ориентированный язык программирования, согласованный с XML. Корпорация подавала новый язык как логическое продолжение Си и C++ для Web-приложений. Ключевыми модулями станут Common Language Runtime для C# и специальный компилятор, который преобразует текст, написанный на традиционных языках Кобол, Perl, Фортран или других, в промежуточный язык, который будет работать на новой платформе Microsoft .Net. Может появиться новое поколение компиляторов, позволяющих увеличить производительность до уровня, позволяющего убедить профессионалов в необходимости использовать 64-разрядные аппаратные архитектуры.

Таблица 3

Трансляторы современных языков программирования

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

Транслятор

Java

компиляция в байт-код интерпретатор

C

компилятор

C++

компилятор

C#

компиляция в MSIL-код

интерпретатор

Python

компиляция в байт-код интерпретатор

Visual Basic

компиляция в MSIL-код

интерпретатор,

компилятор

Perl

компиляция в байт-код интерпретатор

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

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

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

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

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

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

2.2. Машинно-ориентированные языки

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

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

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

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

Есть также языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются Автокоды. В различных программах встречаются некоторые достаточно часто использующиеся командные последовательности, которые соответствуют определенным процедурам преобразования информации. Эффективная реализация таких процедур обеспечивается оформлением их в виде специальных макрокоманд и включением последних в язык программирования, доступный программисту. Макрокоманды переводятся в машинные команды двумя путями - расстановкой и генерированием. В постановочной системе содержатся «остовы» - серии команд, реализующих требуемую функцию, обозначенную макрокомандой. Макрокоманды обеспечивают передачу фактических параметров, которые в процессе трансляции вставляются в «остов» программы, превращая её в реальную машинную программу. В системе с генерацией имеются специальные программы, анализирующие макрокоманду, которые определяют, какую функцию необходимо выполнить и формируют необходимую последовательность команд, реализующих данную функцию. Обе указанных системы используют трансляторы с ЯСК и набор макрокоманд, которые также являются операторами автокода. Развитые автокоды получили название Ассемблеры. Сервисные программы и пр., как правило, составлены на языках типа Ассемблер. Более подробно о языке Ассемблер я расскажу в главе

Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называется Макрос (средство замены). В основном, Макрос предназначен для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов-выдача выходного текста. Макрос одинаково может работать, как с программами, так и с данными.[7]

2.3. Машинно-независимые языки

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

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

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

Проблемных языков очень много, например: Фортран, Алгол - языки, созданные для решения математических задач; Simula, Слэнг - для моделирования; Лисп, Снобол - для работы со списочными структурами. О них я расскажу дальше.

Универсальные языки. Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков Пл/1. Второй по мощности универсальный язык называется Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Пл/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнение участков программ. Программы в Пл/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.

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

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

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

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

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

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

Заключение

Изобретение языка программирования высшего уровня позволило нам общаться с машиной, понимать её (если конечно Вам знаком используемый язык), как понимает американец немного знакомый с русским языком древнюю азбуку Кириллицы. Проще говоря, мы в нашем развитии науки программирования пока что с ЭВМ на ВЫ. На сегодняшний день, любое среднее и крупное предприятие, имеет в своем штате группу программистов, обладающими знаниями программирования различными языками, которые редактируют, изменяют, и модифицируют программы используемыми сотрудниками предприятия. Это говорит о том, что на рынке труда пользуются спросом обладающими знаниями и опытом работы с различными языками программирования.

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

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

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

· Язык C, разработанный компанией Bell Laboratories, является очень эффективным, но низкоуровневым языком программирования. Язык C — это основа современных языков.

· Самым большим преимуществом языка C++ над его предшественником является поддержка объектно-ориентированного программирования.

· Visual Basic, наследник языка BASIC, обеспечивает наилучшую базу программирования для начинающих.

· Выбор используемого языка определяется многими факторами.

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

Список литературы

  1. А.С. Есипов.«Информатика и информационные технологии» / А.С. Есипов.— СПБ:«БХВ-Петербург»,2004 г. — 480с.
  2. Брюс Эккель «Философия Java» / Брюс Эккель.—СПБ:Издательство «Питер» 2015г. — 1168с.
  3. Герберт Шилдт «C++. Базовый курс» / Герберт Шилдт.—Москва:
    «Вильямс» 2015г.— 624с.
  4. Городняя Л.В. «Основы функционального программирования». / Городняя Л.В.—Москва:Изд-во "Интернет-университет информационных технологий - ИНТУИТ.ру", 2004.— 280 c.
  5. Дэвид Бизли «Python. Подробный справочник» 4-ое издание» / Дэвид Бизли.—Москва:«Символ-Плюс»,2010г.— 864с.
  6. Дэвид Фланаган «JavaScript Подробное руководство» / Дэвид Фланаган,5-е издание.—Москва:«Символ-Плюс»,2008г.— 992с.
  7. Легалов А. И. «SoftCraft: разработка трансляторов:конспект лекций» http://www.softcraft.ru/translat/lect/
  8. Магдануров Г.И «Visual Basic на практике» / Мандагуров Г.И.—СПБ: «БХВ-Петербург».— 480с.
  9. М.Ф. Меняев «Информационные технологии управления» / М.Ф. Меняев.— Москва:«Омега-л»,2003г.—464с.
  10. С.В. Симонович “Информатика. Базовый курс» 3-е издание / С.В.Симонович.—СПБ Издательство «Питер» 2007.— 640с.

Приложения

Приложение 1

Некоторые особенности Python

1. Python, в отличие от многих языков (Pascal, C++, Java, и т.д.), не требует описания переменных. Они создаются в месте их инициализации, т.е. при первом присваивании переменной какого-либо значения. Значит, тип переменной определяется типом присваиваемого значения. В этом отношении Python напоминает Basic. 
Тип переменной не является неизменным. Любое присваивание для нее корректно и это приводит лишь к тому, что типом переменной становится тип нового присваиваемого значения.

2. В таких языках как Pascal, C, C++ организация списков представляла некоторые трудности. Для их реализации приходилось хорошо изучать принципы работы с указателями и динамической памятью. И даже имея хорошую квалификацию, программист, каждый раз заново реализуя механизмы создания, работы и уничтожения списков, мог легко допустить трудноуловимые ошибки. Ввиду этого были созданы некоторые средства для работы со списками. Например, в Delphi Pascal имеется класс TList, реализующий списки; для С++ разработана библиотека STL (Standard Template Library), содержащая такие структуры как векторы, списки, множества, словари, стеки и очереди. Однако, такие средства имеются не во всех языках и их реализациях.Одной из отличительных черт Python является наличие таких встроенных в сам язык структур как тьюплы (tuple), списки (list) и словари (dictionary), которые иногда называют картами (map). Рассмотрим их поподробней.

  1. Тьюпл. Он чем-то напоминает массив: состоит из элементов и имеет строго определенную длину. Элементами могут быть любые значения - простые константы или объекты. В отличие от массива, элементы

Продолжение приложения 1

тьюпла не обязательно однородны. А тем, что отличает тьюпл от списка (list) является то, что тьюпл не может быть изменен, т.е. мы не можем i-тому элементу тьюпла присвоить что-то новое и не можем добавлять новые элементы. Таким образом, тьюпл можно назвать списком-константой. Синтаксически тьюпл задается путем перечисления через запятую всех элементов, и все это заключено в круглые скобки:
(1, 2, 5, 8) 
(3.14, ‘ string ’, -4) 
Все элементы индексируются с нуля. Для получения i-го элемента необходимо указать имя тьюпла затем индекс i в квадратных скобках. Пример: 
t = (0, 1, 2, 3, 4) 
print t[0], t[-1], t[-3] 
Результат: 0 4 2 
Таким образом, тьюпл можно было назвать вектором-константой, если бы его элементы всегда были однородными.

  1. Список. Хорошим, частным примером списка может служить строка (string) языка Turbo Pascal. Элементами строки являются одиночные символы, ее длина не фиксирована, имеется возможность удалять элементы или, напротив, вставлять их в любом месте строки. Элементами же списка могут быть произвольные объекты не обязательно одного и того же типа. Чтобы создать список, достаточно перечислить его элементы через запятую, заключив все это в квадратные скобки:
    [3, 5.14, ‘s’] 
    [‘string’, (0,1,8), [1,1]] 
     В отличие от тьюпла, списки можно модифицировать по своему желанию. Доступ к элементам осуществляется также как и в тьюплах.

Продолжение приложения 1

Пример: 
l = [1, ‘s’, (2,8), [0,3,4]] 
print l[0], l[1], l[-2], l[-1][0] 
Результат: 1 s (2,8) 0

  1. Словарь. Напоминает тип запись (record) в Pascal или структуры (structure) в С. Однако, вместо схемы "поле записи"-"значение" здесь применяется "ключ"-"значение". Словарь представляет собой набор пар "ключ"-"значение". Здесь "ключ" - константа любого типа (но преимущественно применяются строки), он служит для именования (индексирования) некоторого соответствующего ему значения (которое можно менять).
    Словарь создается путем перечисления его элементов (пар "ключ"-"значение", разделенных двоеточием), через запятую и заключения всего этого в фигурные скобки. Для получения доступа к некоторому значению необходимо, после имени словаря, в квадратных скобках записать соответствующий ключ. Пример: 
    d = {'a': 1, 'b': 3, 5: 3.14, 'name': 'John'} 
    d['b'] = d[5] 
    print d['a'], d['b'], d[5], d['name'] 
    Результат: 1 3.14 3.14 John 
    Для добавления новой пары "ключ"-"значение" достаточно присвоить элементу с новым ключом соответствующее значение: 
    d['new'] = 'new value' 
    print d 
    Результат: {'a':1, 'b':3, 5:3.14, 'name':'John', 'new':'new value'}

3. Python в отличие от Pascal, C, C++ не поддерживает работу с указателями, динамической памятью и адресную арифметику. В этом он похож на Java.

Продолжение приложения 1

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

4. Весьма оригинальным является то, как в Python группируются операторы. В Pascal для этого служат операторные скобки begin-end, в C, C++, Java - фигурные скобки {}, в Basic применяются закрывающие окончания конструкций языка (NEXT, WEND, END IF, END SUB). 
В языке Python все гораздо проще: выделение блока операторов осуществляется путем сдвига выделяемой группы на один или более пробелов или символов табуляции вправо относительно заголовка конструкции к которой и будет относиться данный блок. Например:

 if x > 0:

      print ‘ x > 0 ’

      x = x - 8

 else:

      print ‘ x <= 0 ’

      x = 0

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