Классификация языков программирования
Языки программирования — основные понятия
Эволюция языков программирования тесно связана с историей развития компьютерных наук, которая началась в XIV веке, вместе с изобретением первой механической вычислительной машины английским ученым Чарльзом Бэббиджем. Программа для нее, позволяющая вычислять числа Бернулли, была написана леди Адой Августой Лавлейс в 1842 году. В честь нее впоследствии был назван один из языков программирования — Ада.
В дальнейшем появились и первые ЭВМ, вместе с которыми начали развиваться языки программирования в их современном понимании.
Язык программирования — искусственный язык, созданный для разработки и записи программ, предназначенных для выполнения их определенным техническим объектом, способным быть запрограммированным (станки с ЧПУ, все виды компьютерной техники). Его назначение — представить задачу в понятной и выполнимой для ЭВМ форме.
Осторожно! Если преподаватель обнаружит плагиат в работе, не избежать крупных проблем (вплоть до отчисления). Если нет возможности написать самому, закажите тут.
Компьютерная программа — это последовательность определенных команд (инструкций), с помощью которых компьютер решает поставленную задачу.
Команда (инструкция) — указание процессору, какое действие (операцию) ему необходимо выполнить.
Число языков программирования постоянно растет. На сегодняшний день их рост замедлился, но общее количество (включая модификации) составляет более двух тысяч, среди которых самых популярных не больше сотни.
Программист-профессионал знает и использует в своей работе более десятка различных языков в зависимости от стоящих перед ним задач.
Их условно можно классифицировать:
- По степени зависимости от аппаратных средств (низкого уровня, высокого уровня).
- По принципам программирования (процедурные, непроцедурные, объектно-ориентированные).
- По ориентации на класс задач (универсальные и специализированные).
Составляющие части языка программирования
Несмотря на то, что в концепции построения языков наблюдаются принципиальные различия, строение их внутренней системы формально является одинаковым. Основными составляющими частями языков программирования являются:
- Алфавит — набор допустимых символов, из которых состоят служебные слова (операторы) и предложения (команды). Для каждого языка существует свой алфавит, но большинство из них помимо английских букв и арабских цифр содержит синтаксические знаки препинания, знаки математических операций (+, -, *, /) и отношений (=, >, <).
- Синтаксис. Существуют строго определенные синтаксические правила построения языковых конструкций (слов, предложений) из алфавита. Совокупность множества предложений и будет являться программой. В случае нарушения правил синтаксиса компьютер автоматически выводит программисту сообщение на экран.
- Семантика. Эта часть языка несет ответственность за смысл и назначение его конструкций. Она устанавливает интерпретацию отдельных его элементов, характеризует процесс, происходящий в результате выполнения команды.
- Словарь — это справочник ключевых (служебных) слов, имеющих строго определенное назначение в рамках правил использования конкретного языка (print, input, for, if и пр.)
Классификация современных языков программирования
По степени зависимости от аппаратных средств
Низкого уровня
Низкоуровневые языки программирования ориентируются на конкретный тип процессора, с учетом архитектуры и технических особенностей компьютера. Их еще называют машинно-ориентированными. Раньше почти для каждого типа процессора существовал свой низкоуровневый язык программирования и программу, написанную для одного типа, нельзя было использовать для другого.
Это происходило из-за того, что процессоры разных типов компьютеров имели отличающиеся наборы команд. И именно на эти конкретные команды были ориентированы операторы языка, близкие по своей структуре к машинному коду.
Для самых первых ЭВМ программы писались с помощью двоичного кода, то есть машинного языка (использовались только символы 0 и 1). Это было очень сложно, поэтому постепенно перешли на использование символьных машинных кодов в шестнадцатеричном формате. Символьные коды преобразуются в машинные в автоматическом режиме.
Чтобы писать программы с помощью таких машинно-ориентированных языков, программист должен иметь высокую квалификацию. Работать с ними сложно, но зато сами программы занимают мало места в памяти компьютера, являются компактными и работают быстрее высокоуровневых. Их эффективность обоснована прямым доступом к управлению всеми возможностями процессора.
С помощью низкоуровневых языков чаще всего разрабатываются драйверы и системные программы. Одним из таких языков является Ассемблер, который каждую из команд машинного кода представляет в виде мнемоник — условных символьных изображений.
Недостаток состоит в том, что созданные с их помощью алгоритмы представляют трудность для чтения даже самому разработчику, а для работы с ними необходимо разбираться в архитектурных особенностях компьютера.
Высокого уровня
Наибольшее распространение приобрели языки высокого уровня (машинно-независимые), с помощью которых можно писать программы независимо от типа процессора конкретного компьютера, его архитектуры. Понятия и структура высокоуровневых языков максимально удобны для восприятия человеком. Разрабатывать программы с помощью понятных и достаточно мощных команд, используемых ими, программисту гораздо проще.
При этом разработчик допускает меньше ошибок, а исходные тексты программ легко переносятся с помощью трансляторов и на другие платформы.
Транслятор — специальная программа-переводчик, являющаяся одним из инструментов среды программирования. Она считывает программу, написанную на высокоуровневом языке, и переводит ее в машинный код конкретного процессора. Все трансляторы работают либо по принципу интерпретации, либо по принципу компиляции.
Интерпретатор — программа, которая выполняет перевод (трансляцию) каждого отдельного оператора исходной программы с последующим его выполнением.
При этом сама программа остается в первоначальном виде. При ее повторном запуске процесс трансляции будет выполняться заново. Поэтому метод интерпретации считается недостаточно эффективным. Он имеет два недостатка:
- Один и тот же оператор, сколько бы раз он ни встречался в программе, будет транслироваться заново, что сказывается на производительности не в лучшую сторону.
- Программа-интерпретатор занимает определенный объем оперативной памяти компьютера, так как ее присутствие необходимо на этапе всего процесса выполнения исходной программы.
Тем не менее, интерпретаторы активно используются в качестве трансляторов в процессе разработки программ и их первоначальной отладки.
Компилятор — программа, которая полностью переводит текст исходной программы с высокоуровневого на низкоуровневый (машинный) язык.
Полученный при этом машинный код сохраняется в виде исполняемого файла с расширением «.exe», который можно многократно использовать уже без повторной трансляции.
При использовании компиляции сначала происходит полная трансляция исходной программы на язык машинных кодов, и только после этого она запускается на выполнение. В процессе исполнения программы транслятор становится ненужным, освобождая оперативную память. Это позволяет повышать производительность по сравнению с методом интерпретации для одной и той же программы.
Существуют также трансляторы, которые сочетают достоинства, как интерпретатора, так и компилятора. На этапе разработки и отладки они работают как интерпретаторы, а после окончательной отладки исходная программа методом компиляции транслируется в объектный модуль, который обрабатывается редактором связей Link (специальной программой ОС) и преобразуется в загрузочный модуль.
По принципам программирования
По принципам программирования языки делятся на:
- процедурные;
- непроцедурные;
- объектно-ориентированные.
В процедурном программировании роль компьютера состоит в механическом исполнении формальных предписаний о том, как именно решить конкретную задачу. Система, в которую объединяются эти предписания, и является программой процедурного типа. В непроцедурном программировании используется противоположный принцип. Компьютер получает задачу в общем виде, проводит ее исследование и самостоятельно находит алгоритм ее решения.
Процедурные
Основой процедурных языков является описание последовательной смены состояния процессора, ячеек памяти и других устройств компьютера. На этапе процедурного программирования разработчик детально описывает процесс решения задачи, составляет его алгоритм, не вдаваясь в подробности об ожидаемых свойствах результата.
Программист работает с операторами и данными, которые являются основными понятиями этого вида языков. Комбинация различных операторов при этом называется процедурой, откуда и взялось название процедурного программирования.
Поскольку процедурные языки имеют операторный тип, то алгоритм, написанный с их помощью, является последовательностью операторов. Их характерным признаком также считается наличие оператора присваивания (Basic, Fortran, Pascal, Algol, С).
Эти языки называю еще императивными, потому что программа, написанная с их помощью, напоминает повелительное наклонение (императив) в обычной речи, приказ что-то делать. Программа является последовательностью команд для их выполнения компьютером и имеет четкую, строгую структуру.
При процедурном программировании оперируют данными в пошаговом режиме с помощью пошаговых инструкций. Используя императивный стиль программирования, разработчик подробно расписывает компьютеру, как и что он должен пошагово сделать, чтобы решить задачу.
Непроцедурные
Непроцедурные языки более эффективны для написания программ по поиску больших объемов данных, а также, когда невозможно точно описать процесс решения задачи (например, при распознавании образов или переводе). К языкам непроцедурного программирования относят декларативные и объектно-ориентированные.
При использовании декларативных языков подробно описываются критерии, которым должен соответствовать искомый результат, имеющиеся исходные структуры и связи между ними, но не указываются способы его достижения (нет готового алгоритма, схемы решения).
При декларативном типе программирования используется декларативная семантика. Вместо понятия «оператор» декларируются высказывания (объявления) с помощью символьной логики.
Декларативные языки принято делить на две группы (или семейства):
- Логические, типичным представителем которых является PROLOG.
- Функциональные (Lisp).
При использовании логического программирования разработчик задает совокупность определенных фактов и логических правил, отношений между ними в виде формул, создает запросы по искомой проблеме. Система же сама решает данную проблему, применяя механизмы логического вывода, основанные на математической логике.
Программа, написанная на языке PROLOG, состоит из двух частей:
- фактов, совокупность которых составляет реляционную базу данных (в виде таблиц, с предопределенными связями между ними);
- правил, состоящих из заголовка и подцелей.
Основной операцией при работе с данными является сопоставление (унификация, согласование). Программа начинается с запроса по проблеме. С помощью операции сопоставления производится доказательство истинности определенного логического утверждения в пределах заданной совокупности правил и фактов.
Алгоритм этого логического доказательства и будет определять принципы работы программы. Чаще всего этот язык используют в программировании экспертных систем.
Функциональное программирование основано на формулировании задачи в качестве совокупности определенных функций. Программа выглядит как хаотичный набор уравнений, который определяет функции и значения. Эти значения, в свою очередь, сами являются функциями от других значений.
Программист лишь описывает способ решения задачи, не определяя строгую последовательность действий при нахождении решения. Основными свойствами таких языков являются модульность, отсутствие побочных эффектов, простота и краткость.
В восьмидесятые и девяностые годы XX века декларативные языки были весьма популярны в качестве программирования искусственного интеллекта, но так и не получили широкого применения из-за отсутствия возможности создавать быстродействующие программы для решения более содержательных задач.
Объектно-ориентированные
Методика ООП появилась в конце XX века. Объектно-ориентированные языки вместо «процедур» и «данных» оперируют понятием «объект». С помощью ООП создается окружение в виде большого количества объектов. Каждый из них является независимым блоком, работая как отдельный компьютер.
Блоки используют для решения задач, не вникая в принципы их внутреннего функционирования (C++, Visual Basic, Delphi, Java, Python). На сегодняшний день среди профессиональных программистов самым популярным является язык C++, который затмил собой по популярности процедурные аналоги.
Дальнейшее развитие языков нацелено на их использование в современном «параллельном программировании» (программы представляют собой набор процессов, исполняемых одновременно). В связи с этим создаются специализированные языки ООП, одним из которых является высокоуровневый язык MC#, разработанный для платформы «.NET». Он позволяет создавать программы, работающие с асинхронными вызовами в распределенной среде.
По ориентации на класс задач
Универсальные
Универсальные языки программирования нацелены на решение широкого спектра задач. Среди них сегодня наиболее распространены C++, Visual Basic, Pascal, Java, Delphi, Python.
Специализированные
Многие языки программирования разрабатывались для решения строго очерченного круга задач, с учетом специфики конкретной области. Например, COBOL был создан для обработки информации в области экономики.
Существуют также языки:
- для web-программирования (PHP, Perl);
- скриптов (Javascript), используемых для создания вспомогательных программ;
- разметки (HTML) для электронных документов;
- для работы с базами данных;
- для решения учебных задач (PRG);
- для первоначального обучения принципам программирования;
- для информационно-логических задач (LISP).
Оба направления (универсальные и специализированные языки) продолжают активно развиваться. Выбор для изучения достаточно обширен, все зависит от целей применения их в программировании.
Популярные языки
Краткая характеристика самых популярных языков:
- Fortran. Один из старейших языков. Является классическим в плане решения математических и инженерных задач.
- Basic (Бэйсик) — самый легкий для обучения азам программирования. Подходит для написания простых программ.
- Pascal. Разрабатывался для изучения на его основе принципов программирования в школе и вузе. Его качества оказались столь высоки, что он стал популярен и среди профессионалов. На его основе создан Turbo Pascal, ADA, Delphy.
- C (Си). Используется для разработки систем ПО, включая ОС. Сочетает возможности языков низкого и высокого уровней.
- C++. Пользуется заслуженной популярностью среди профессионалов, считающих владение им предметом первой необходимости. Основное преимущество — в его полной универсальности. Относительно прост в изучении, но не рекомендуется в качестве первого языка.
- Python. Создан для упрощения процесса написания сложных программ. Имеет низкую скорость исполнения, но зато прост и многофункционален.
- Visual Basic. Простой, многофункциональный, дает возможность быстрого прототипирования (создания «черновой» рабочей версии программы для ее анализа). Среди недостатков — невысокая скорость работы и совместимость только с ОС Windows и makOS.
- Delphy. Императивный язык с элементами ООП. Обладает многофункциональностью и возможностью подстройки под разные диалекты. Последнее является также его минусом. Программа, написанная с использованием определенного диалекта, может не подойти для другой версии устройства.
- Java. Универсальный язык, используемый в приложениях для большинства современных ОС. Из недостатков — занимает большой объем оперативной памяти, медлительность программ.
- Lisp. Относится к функциональным языкам, работает с большими списками данных, позволяет эффективно обрабатывать текстовую информацию в больших объемах.
- PROLOG. Язык логического программирования, создан для разработки элементов искусственного интеллекта.
Заметили ошибку?
Выделите текст и нажмите одновременно клавиши «Ctrl» и «Enter»
Нашли ошибку?
Текст с ошибкой:
Расскажите, что не так