Обзор
Парадигмы программирования представляют какую-то классификации языков программирования на основе их ключевых особенностей.
В целом, общепринята и помогает в понимании различных подходов к программированию.
Императивная
- Основные Особенности: Явное указание последовательности действий для достижения результатов.
- Процедурная Подпарадигма: Организация кода в процедуры. Примеры языков: C, Pascal.
Объектно-Ориентированная Парадигма
- Основные Особенности: Сочетание данных и методов в объектах. Наследование и полиморфизм. Примеры языков: Java, C++, Python.
Декларативная Парадигма
- Основные Особенности: Описание желаемого результата без конкретизации процесса достижения.
- Функциональная: Основана на определении и применении функций. Примеры: Haskell, Scala, Elixir.
- Логическая: Основана на системе правил и логических выражениях. Примеры: Prolog, Datalog.
- Реактивная: Фокус на потоках данных и их преобразованиях. Примеры: RxJava, ReactJS.
Метапрограммирование
- Особенности: Реализация кода, который может читать, генерировать, анализировать или трансформировать другой код во время выполнения.
- Примеры: Ruby (рефлексия), Lisp (макросы).
Мультипарадигменность
Разделение языков на парадигмы весьма условное и зачастую сложно отнести язык к какой-то одной парадигме.
Большинство современных языков интегрируют элементы различных парадигм, обеспечивая гибкость в подходах к разработке программ.
Виртуальные Машины
Виртуальные машины, такие как JVM (Java), CLR (C#), BEAM (Elixir), накладывают ограничения на то, в какой парадигме можно писать.
Модель Вычислений
Парадигмы определяются особенностями языков в управлении побочными эффектами и порядком выполнения операций.
Формальное описание модели вычислений называем спецификацией.
Виртуальная машина — реализация этой спецификации и может быть довольно разной, а ещё отличаться от этой спецификации.
См. больше про виртуальные машины.
Большое предположение
Любой язык программирования/парадигму можно выучить, хорошо понимая три вещи:
- какие примитивы язык/парадигма предоставляет,
- как мы можем эти примитивы связать между собой, т.е. какие способы композиции в языке/парадигме есть,
- какие способы обобщения язык/парадигма предоставляет, или, правильнее сказать, какие язык/парадигма предоставляет способы абстрации.