
5. Классификация языков программирования
Языки программирования используются для записи алгоритмов(конечных алгоритмов) с целью их последующего выполнения на компьютере, а алгоритм может быть составлен и записанс разной степенью подробности (детализации). Степень детализации, в свою очередь, зависит от того, насколько детально в записи алгоритмаучитывается архитектура компьютера, на котором предполагается выполнять программу. Иногда говорят, что программист пишет программу не для конкретного компьютера, а для некоторойабстрактной машины. Чем больше деталей устройства реального компьютера содержится в описании этой воображаемой машины, темниже уровень абстракции(более детально надо описывать решение задачи).
На самом низком уровне находится язык машинных командкомпьютера. Чуть выше - языкAssembler(но тоже низкого уровня). Появление языкаAssemblerпозволило перейти к программированию машинных команд с использованием символьных имен команд (вместо машинных двоичных кодов) и использованию имен вместо адресов.
Программирование на Assemblerимеет некоторыенедостатки:
программный коддостаточнодлинный(это кроме неудобства может служить еще и источником ошибок при выполнении программы на машине;
запись алгоритма решения сильно зависит от архитектурымашины, в связи с чем программист должен знать архитектуру машины.
Программирование на Assemblerтакже имеет определенныепреимущества(по сравнению с ЯВУ):
возможность получить в распоряжение программы все необходимые ресурсыкомпьютера из имеющихся;
максимум быстродействияпри работе программ.
В отличие от языка Assemblerязыки высокого уровня являютсямашинно-независимыми, то есть они позволяют использовать различные операции, не заботясь о деталях их реализации на конкретной архитектуре. Программы при этом оказываютсяболее короткими, надежными и универсальными, а процесс их составления сокращается. Программы на языках высокого уровня более понятны человеку - их легче читать, в нихпроще разобраться.
Все языки программирования высокого уровня с одной стороны(с точки зрения решаемых с их помощью задач - как и алгоритмы) делятся на:
- вычислительные языки (FORTRAN,BASIC, АЛГОЛ, С,PASCALи др.);
- языки символьной (нечисловой) обработки (ПРОЛОГ, СНОБОЛ, ЛИСП и др.).
С другой стороныязыки программирования высокого уровня можно разделить на:
- императивные или процедурные;
- непроцедурные или неимперативные (делятся на функциональные и логические);
- объектно-ориентированные.
Императивныеязыки программирования привязаны к традиционной фон-неймановской архитектуре (последовательное выполнение программы команда за командой). Должен быть разработаналгоритм(программа), который явно описывает действия и их порядок следования (последовательность, ветвление, цикл и т.п.). Результат вычисляется за счет выполнения всей последовательности действий алгоритма над введенными (исходными) данными.
Непроцедурные(декларативные) в отличие от императивных языков в декларативных не требуют явно определять последовательность действий.
В функциональныхязыках программирования используются функции, значения которых определяются по заданным (входным) параметрам. Традиционные переменные и операторы присваивания при этом уже не нужны (ввод значений переменных или присваивание им значения представляется как вызов функции) или, по крайней мере, не обязательны. Обычно каждая функция представляет из себя композицию более простых функций. Функциональная программа представляет из себянабор определений (деклараций) функций, вызывающих друг друга. В процессе выполнения программы функции получают параметры, вычисляют и возвращают результат на вход других функций, т.е. попутно вычисляя значения других функций. Программист при этом не должен описывать порядок вычислений. Ему достаточно в виде системы взаимосвязанных функций определить (описать), что представляет собой решаемая задача и что нужно сделать для достижения желаемого результата. Примерами функциональных языков являютсяLISP,Haskel,F# (вVisualStudio2010), РЕФАЛ (язык рекурсивных функций - Турчин).
В отличии от функциональных в логических(логико-ориентированных) языках функций нет (как нет и алгоритмов). Программист задает для решения задачи не программу (как последовательность действий), а описание предметной области и поставленной задачи (функции) в виде как говорятаксиоматической системы, а решение задачи сводится кпостроению выводав этой системе умозаключений (аксиоматической). Нужная (для решения задачи) последовательность действий (алгоритм)порождается не программистом, а интерпретатором правил(продукций), строящим вывод по определенной стратегии. Здесь от программист требуется описать в виде системы логических формул описать предметную область и такое множество отношений на (в) ней (в терминах исчисления предикатов типа если А, то В), которые с достаточной степенью полноты описывают поставленную задачу.
Примером логического языка программирования является Prolog.
Объектно-ориентированные языки программирования. В особую категорию в языках высокого уровня относят объектно-ориентированные языки программирования. Объектно-ориентированные языки упрощают программирование с использованием технологии объектно-ориентированного программирования C++,ObjectPascal,Ada-95,Java, С#.
Так же в особую категорию можно вынести:
- скриптовые языки(получили своё развитие за счет развитияInternet(JavaScript,JScript,PHP,Perl,Python,VBScript).