Неструктурные языки (широко использовались 40-е годы)
Преимущества
- Оптимизация программы под аппаратную архитектуру.
- Как следствие, обеспечение высокой эффективности вычислений.
Недостатки
- Для каждого типа вычислительной машины должен был быть написан свой вариант исходного кода.
Применение
- Быстрые численные расчеты
- Создание драйверов устройств
Примеры языков: Ассемблеры.
Директивные (структурные) языки (появились в 50-е годы)
Преимущества
- Повторное использование ранее написанных блоков кода.
- Высокая степень независимости программы от типа вычислительной машины.
- Повышение эффективности труда разработчиков, в том числе и за счет абстрагирования от конкретных деталей аппаратного обеспечения.
Недостатки
- Некоторая потеря в скорости вычислений.
Применение
- Создание операционных систем и системных программ.
- Разработка небольших пользовательских приложений.
- Научные расчеты.
Примеры языков: FORTRAN, C, Pascal.
Декларативные (функциональные и логические) языки (зародились в 60-е годы)
Особенность
- Программный код на декларативном языке программирования представляет собой описание действий, которые можно осуществлять, а не последовательный набор команд.
Преимущества
- Легче формализуется математическими средствами.
- Как следствие, программы проще тестировать, т.е. проверять на наличие ошибок.
- Высокая степень абстракции.
Недостатки
- Снижение скорости работы программы.
Применение
- Доказательство теорем.
- Возможность обработки разнородных данных.
a) Функциональные языки
Особенность
- Программу на функциональном языке можно представить как функцию с одним или несколькими аргументами.
Преимущества
- Автоматическое динамическое распределение памяти компьютера для хранения данных.
- Программист получает возможность абстрагироваться от представления данных и других рутинных операциях и сосредоточиться на предметной области.
Недостатки
- Нелинейная структура программы, следовательно, такое программирование сложно для понимания.
- Относительно невысокая эффективность вычислений.
Применение
- Обработка рекурсивных структур данных.
- Обработка символьной информации.
Примеры языков: Haskell.
b) Логические языки
Особенность
- Программа представляет собой совокупность правил или логических высказываний.
- В программе могут быть логические причинно-следственные связи.
Преимущества
- Возможность откатов, т.е. возвращения к предыдущей подцели при отрицательном результате одного из вариантов в процессе поиска решения. Это избавляет от необходимости поиска решения путем полного перебора вариантов и увеличивает эффективность реализации.
Недостатки
- Узкий класс решаемых задач.
Применение
- Эмуляция искусственного интеллекта.
- Разработка экспертных систем.
Примеры языков: Prolog.
Объектно-ориентированные языки
Особенности
- Программа представляет собой описание объектов, их свойств (или атрибутов), классов и отношений между ними, способов взаимодействия.
Преимущества
- Смысловая близость к предметной области любой структуры и назначения. Механизм наследования свойств и методов позволяет строить производные понятия на основе базовых, создавая тем самым модели предметной области.
- Использование ранее созданных библиотек классов позволяет сэкономить время при разработке новых программных продуктов.
- Полиморфизм, заложенный в ООП, обеспечивает гибкость и универсальность программного обеспечения.
- Удобство разработки ПО группой лиц.
Недостатки
- Сложность полной формализации реального мира создает в дальнейшем трудности тестирования созданного ПО.
Применение
- Разработка больших пользовательских приложений.
Примеры языков (большинство современных языков программирования поддерживают концепцию объектно-ориентированного программирования): C++, Python.
Языки сценариев
Особенности
- Программа представляет собой совокупность возможных сценариев обработки данных. Выбор конкретного сценария зависит от наступления того или иного события.
Преимущества
- Основные достоинства данного класса языков программирования унаследованы от объектно-ориентированных языков.
- Легкость использования с инструментальными средствами автоматизированного проектирования и быстрого создания ПО.
Недостатки
- Сложность тестирования.
- Большое количество вариантов, которые требуется предусмотреть.
- Большая вероятность побочных эффектов.
Применение
Примеры языков: JavaScript, Python, PHP.