Обзор

Парадигмы программирования представляют какую-то классификации языков программирования на основе их ключевых особенностей.

В целом, общепринята и помогает в понимании различных подходов к программированию.

Императивная

  • Основные Особенности: Явное указание последовательности действий для достижения результатов.
  • Процедурная Подпарадигма: Организация кода в процедуры. Примеры языков: C, Pascal.

Объектно-Ориентированная Парадигма

  • Основные Особенности: Сочетание данных и методов в объектах. Наследование и полиморфизм. Примеры языков: Java, C++, Python.

Декларативная Парадигма

  • Основные Особенности: Описание желаемого результата без конкретизации процесса достижения.
    • Функциональная: Основана на определении и применении функций. Примеры: Haskell, Scala, Elixir.
    • Логическая: Основана на системе правил и логических выражениях. Примеры: Prolog, Datalog.
    • Реактивная: Фокус на потоках данных и их преобразованиях. Примеры: RxJava, ReactJS.

Метапрограммирование

  • Особенности: Реализация кода, который может читать, генерировать, анализировать или трансформировать другой код во время выполнения.
  • Примеры: Ruby (рефлексия), Lisp (макросы).

Мультипарадигменность

Разделение языков на парадигмы весьма условное и зачастую сложно отнести язык к какой-то одной парадигме.

Большинство современных языков интегрируют элементы различных парадигм, обеспечивая гибкость в подходах к разработке программ.

Виртуальные Машины

Виртуальные машины, такие как JVM (Java), CLR (C#), BEAM (Elixir), накладывают ограничения на то, в какой парадигме можно писать.

Модель Вычислений

Парадигмы определяются особенностями языков в управлении побочными эффектами и порядком выполнения операций.

Формальное описание модели вычислений называем спецификацией.

Виртуальная машина — реализация этой спецификации и может быть довольно разной, а ещё отличаться от этой спецификации.

См. больше про виртуальные машины.

Большое предположение

Любой язык программирования/парадигму можно выучить, хорошо понимая три вещи:

  • какие примитивы язык/парадигма предоставляет,
  • как мы можем эти примитивы связать между собой, т.е. какие способы композиции в языке/парадигме есть,
  • какие способы обобщения язык/парадигма предоставляет, или, правильнее сказать, какие язык/парадигма предоставляет способы абстрации.

Ссылки по теме