Языки программирования
Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов – языков программирования. Смысл появления такого языка – оснащенный набор вычислительных формул дополнительной информации, превращает данный набор в алгоритм.
Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать
Языки программирования – это искусственно созданные языки. От естественных они отличаются ограниченным числом «слов» и очень строгими правилами записи команд (операторов). Совокупность подобных требований образует синтаксис языка программирования, а смысл каждой команды и других конструкций языка – его семантику.
Языки программирования – это формальные языки общения человека с ЭВМ, предназначенные для описания совокупности инструкций, выполнение которых обеспечивает правильное решение требуемой задачи. Их основная роль заключается в планировании действий по обработке информации. Любой язык программирования основан на системе понятий, и уже с ее помощью человек может выражать свои соображения.
В самом общем смысле языком программирования называется фиксированная система обозначений и правил для описания алгоритмов и структур данных.
Классификация языков программирования
Существуют различные классификации языков программирования. По наиболее распространенной классификации все языки программирования делят на языки низкого, высокого и сверхвысокого уровня.
Так же языки программирования можно классифицировать по различным признакам. Прежде всего, все языки программирования принято разделять на четыре большие группы:
- Машинно-ориентированные и машинно-независимые языки.
- Процедурные языки.
- Декларативные языки.
- Объектно-ориентированные языки.
- Машинно-ориентированные и машинно-независимые языки
Машинно-ориентированные языки — это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Машинно-ориентированные языки позволяют использовать все возможности и особенности машинно-зависимых языков. Машинно-ориентированные языки относятся к языкам низкого уровня. Примером языком низкого уровня являются Автокод, Ассемблер.
— высокое качество создаваемых программ (компактность и скорость выполнения);
— возможность использования конкретных аппаратных ресурсов;
— предсказуемость объектного кода и заказов памяти;
— для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
— трудоемкость процесса составления программ (особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;
— низкая скорость программирования;
— невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.
Машинно-независимые языки – это средства описания алгоритмов решения задач и информации, подлежащей обработке, которые не требуют от программиста знания особенностей функционирования конкретной ЭВМ.
Эти языки называются также еще языками высокого уровня. К ним относятся почти все используемые сегодня языки, например, Фортран, Алгол, Кобол, Паскаль, Бейсик, Си, Пролог. Программы, составленные на таких языках, представляют собой последовательности операторов, структурированные в соответствии с определенными правилами. Операторы языка описывают действия, которые должна выполнять система после трансляции программы на машинный язык. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.
Процедурные языки (называемые также директивными или императивными) – это языки, определяющие, как вычислять результат для какой-нибудь проблемы в соответствии с заданным алгоритмом. К ним относятся: Алгол, Фортран, Бейсик, Паскаль, Си.
Процедурные языки, в свою очередь, можно разделить на структурные и неструктурные языки программирования.
1) Неструктурное программирование допускает использование в явном виде команды безусловного перехода (в большинстве языков GOTO). Это влечет за собой массу серьезных недостатков: программу, которая содержит бесконечные переходы вверх-вниз, очень трудно изменять и дополнять. Типичными представителями неструктурных языков являются ранние версии Бейсика и Фортрана.
2) В структурном программировании задача разбивается на большое число мелких подзадач, каждая из которых решается своей процедурой или функцией. Такой подход позволяет разрабатывать большие проекты силами нескольких программистов. Например, на Паскале и Си.
Декларативные языки – это языки, оперирующие с помощью задания данных и отношений между ними. Вместо алгоритмов в таких языках используются правила логического вывода, которые позволяют системе находить нестандартные, заранее не определенные решения. Поэтому декларативные языки называют также еще языками искусственного интеллекта.
Главное различие между декларативными и процедурными языками заключается в том, что декларативная программа заявляет (декларирует), что должно быть достигнуто в качестве цели, а процедурная предписывает, как ее достичь.
В процедурной программе действия задаются явными командами, подготовленными ее составителем. Исполнитель же просто им следует. Хотя команды в различных языках процедурного программирования и выглядят по-разному, все они сводятся либо к присваиванию какой-нибудь переменной некоторого значения, либо к выбору следующей команды, которая должна будет выполняться. Присваиванию может предшествовать выполнение ряда арифметических и иных операций, вычисляющих требуемое значение, а команды выбора реализуются в виде условных операторов и операторов повторения (циклов).
Для классических процедурных языков характерно, что последовательность выполняемых команд, совершенно однозначно, определяется ее входными данными. Как говорят, поведение исполнителя императивной программы полностью детерминировано.
Декларативные программы не предписывают выполнять определенную последовательность действий, в них лишь дается разрешение совершать их. Исполнитель должен сам найти способ достижения поставленной перед ним составителем программы (программистом) цели, причем зачастую это можно сделать различными способами — детерминированность в данном случае отсутствует.
Декларативные языки, в свою очередь, делятся на функциональные (аппликативные) и логические языки.
1) В основе функциональных языков лежит понятие функции как «черного ящика», имеющего несколько параметров (аргументов) на входе и один результат на выходе – f(x1, x2, …, xn) = y.
В таких языках отсутствуют операторы: все действия, в том числе и управляющие конструкции, выполняются при помощи вызовов функций. Одним из первых функциональных языков стал Лисп, созданный американским ученым Джоном Маккарти в 1957 году.
2) Логическое программирование представляет собой попытку возложить на программиста только постановку задачи, а поиски путей ее решения предоставить транслятору. Логические языки (например, Пролог) имеют специальные конструкции для описания объектов и связей (отношений) между ними.
Объектно-ориентированные языки, разработанные в середине 70-х гг., представляют собой отображение объектов реального мира, их свойств (атрибутов) и связей между ними при помощи специальных структур данных. При объектно-ориентированном подходе для каждого объекта создается своя структура данных, называемая классом и содержащая свойства объекта (поля) и процедуры для управления объектом (методы). При этом каждый класс может содержать несколько подклассов, описывающих частные случаи общего объекта. Все подклассы содержат в себе, наряду с общими свойствами, также еще ряд специфических свойств, отличающих их от первоначального класса. Такой принцип называется принципом наследования свойств (от общего к частному).
Например, для описания объекта «геометрическая фигура» можно использовать класс, содержащий три свойства (цвет, координаты x и y, определяющие начальную точку рисования данной фигуры на экране) и два метода (поменять цвет и переместить фигуру в точку с координатами x, y).
Затем для данного класса можно определить подклассы, описывающие частные случаи геометрических фигур за счет добавления новых специфических свойств: прямоугольник (свойства ширина и высота), круг (свойство радиус) и т.п. При этом и для прямоугольника, и для круга будут применимы общие свойства и методы, заданные для класса «геометрическая фигура».
Типичными представителями объектно-ориентированных языков программирования являются C++, Java, Visual Basic.
С точки зрения принципов программирования языки программирования можно разбить на несколько групп:
Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих те или иные действия. Одним из важнейших квалификационных признаков процедурных языков является их уровень, характеризующий степень близости языка программирования и машинного языка. За начало отсчета уровней принимается машинный язык, уровень которого равен нулю. Язык человека рассматривается как язык наивысшего уровня. Примером процедурного языка является Паскаль.
Программа на таком языке представляет собой совокупность описаний функций и выражения, которые необходимо вычислить. Оно вычисляется посредством редукции (т. е. серии упрощений). Функциональное программирование не использует концепцию памяти как хранилища значений переменных. Операторы присваивания отсутствуют, вследствие чего переменные обозначают не области памяти, а объекта программы, что полностью соответствует понятию переменной в математике. Наличие стройной математической основы обеспечивает возможность использования алгебраических методов создания структуры, преобразования и исследования программ. Это в какой-то мере приближает их к описанию структуры мышления человека. Примером функционального языка является язык LISP (List Processing-обработка списков) Разработан и реализован в Массачусетском технологическом институте в 1959 г. Рассматривается специалистами как основной язык программирования систем искусственного интеллекта.
Логика и программирование долгое время были непересекающимися областями исследований. Только в 1973 впервые было опубликовано описание языка PROLOG (PROgramming in LOGic- программирование в терминах логики) Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами и цели. В логическом программировании нужно только специфицировать факты, на которых алгоритм основывается, а не определять последовательность шагов, которые требуется выполнить.
Корни объектно — ориентирования уходят в одну из ветвей логики, в которой первичной является не отношение, а объект. Прототипом объектно-ориентированного программирования явился язык SIMULA-67. Но оформилось оно в самостоятельный стиль программирования с появлением языка (SMALLTALK-1972 г.), первоначально предназначенного для реализаций функций машинной графики. Этот стиль программирования характеризуется богатыми графическими возможностями и средой программирования, развитой модульной структурой программ. Именно модульность упрощает разработку сложных программных продуктов. Как пример объектно-ориентированного языка можно назвать Visual Basic и Delfi.
Тест.Языки программирования
- Выберите один из вариантов в каждом из 5 вопросов;
- Нажмите на кнопку «Показать результат»;
- Скрипт не покажет результат, пока Вы не ответите на все вопросы;
- Загляните в окно рядом с номером задания. Если ответ правильный, то там (+). Если Вы ошиблись, там (-).
- За каждый правильный ответ начисляется 1 балл;
- Оценки: менее 2.5 баллов — НЕУДОВЛЕТВОРИТЕЛЬНО, от 2.5 но менее 3.75 — УДОВЛЕТВОРИТЕЛЬНО, 3.75 и менее 5 — ХОРОШО, 5 — ОТЛИЧНО;
- Чтобы сбросить результат тестирования, нажать кнопку «Сбросить ответы»;