Лекция тема 1.4

Лекция: Парадигмы программирования


1. Введение в парадигмы программирования

Парадигма программирования — это концептуальный подход к написанию кода, определяющий структуру, логику и стиль разработки программ.

Зачем изучать парадигмы?

  • Понимание разных подходов к решению задач.
  • Выбор оптимального инструмента для конкретного проекта.
  • Умение работать в команде с разработчиками разного профиля.

2. Основные парадигмы программирования

2.1. Императивное программирование

Суть: Программа описывает как достичь результата через последовательность команд.

Подходы:

  • Процедурное (C, Pascal):
    • Акцент на функциях и процедурах.
    • Пример: void calculateSum() {... }
  • Структурное (C, Ada):
    • Использование циклов, условий и подпрограмм.
    • Запрет оператора goto.

Плюсы:

  • Простота для начинающих.
  • Понятный поток выполнения.

Минусы:

  • Сложность масштабирования.
  • Риск побочных эффектов.

2.2. Объектно-ориентированное программирование (ООП)

Суть: Программа строится из объектов, взаимодействующих друг с другом.

Основные принципы:

  • Инкапсуляция: Сокрытие данных внутри объектов.
  • Наследование: Создание иерархии классов.
  • Полиморфизм: Разное поведение методов в зависимости от контекста.

Пример на Java:

java

class Animal {

    void sound() { System.out.println("..."); }

}

class Dog extends Animal {

    @Override

    void sound() { System.out.println("Гав!"); }

}

Плюсы:

  • Удобство для моделирования реальных систем.
  • Повторное использование кода.

Минусы:

  • Избыточность при неправильном проектировании.
  • Сложность для простых задач.

2.3. Функциональное программирование

Суть: Программа — это набор функций, работающих с данными.

Особенности:

  • Чистые функции (без побочных эффектов).
  • Неизменяемые данные.
  • Рекурсия вместо циклов.

Пример на Haskell:

haskell

factorial 0 = 1

factorial n = n * factorial (n - 1)

Плюсы:

  • Предсказуемость кода.
  • Упрощение тестирования.

Минусы:

  • Сложность для задач с изменяемым состоянием.
  • Высокий порог входа.

2.4. Логическое программирование

Суть: Программа описывает что нужно решить, а не как.

Основа: Работа с правилами и фактами (Prolog).

Пример:

prolog

parent(anna, ivan).

parent(ivan, petr).

grandparent(X, Y) :- parent(X, Z), parent(Z, Y).

Плюсы:

  • Эффективность для задач искусственного интеллекта.
  • Декларативный стиль.

Минусы:

  • Ограниченная область применения.
  • Сложность отладки.

2.5. Другие парадигмы

  • Аспектно-ориентированное (AOP): Разделение функционала на аспекты (логирование, безопасность).
  • Реактивное: Реакция на события и потоки данных (RxJS, Akka).
  • Мультипарадигменные языки (Python, JavaScript): Поддержка нескольких подходов.

3. Сравнение парадигм

Парадигма

Пример языка

Где применяется?

Сложность

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

C

Системное программирование

Низкая

ООП

Java

Веб-приложения, игры

Средняя

Функциональная

Haskell

Анализ данных, математика

Высокая

Логическая

Prolog

Экспертные системы, ИИ

Высокая


4. Современные тенденции

  • Гибридные подходы: Совмещение ООП и функционального стиля (Scala, Kotlin).
  • Декларативный UI: React, Flutter.
  • Domain-Specific Languages (DSL): Специализированные языки для узких задач (SQL, LaTeX).

5. Практические задания

  1. Напишите одну и ту же задачу (например, сортировку) на двух разных парадигмах.
  2. Сравните код на Python (мультипарадигменный) и Haskell (функциональный).
  3. Создайте простой класс на Java, демонстрирующий инкапсуляцию и наследование.

6. Заключение

Ключевые мысли:

  • Нет «лучшей» парадигмы — есть подходящая для задачи.
  • Современные разработчики должны уметь комбинировать подходы.
  • Понимание парадигм — основа для изучения новых языков.

Совет: Начните с императивного стиля, затем освойте ООП, а после — функциональный подход. Это расширит ваш профессиональный кругозор!


Дополнительные материалы:

  • Книга: «Структура и интерпретация компьютерных программ» (Харольд Абельсон).
  • Курс: «Programming Paradigms» (Stanford Online).
  • Статья: «Why Functional Programming Matters» (John Hughes).

7. Расширенные аспекты

7.1. Гибридные парадигмы

Современные языки часто сочетают несколько подходов:

  • Scala: Объединяет ООП и функциональное программирование.
  • Python: Поддерживает процедурное, ООП и функциональное программирование.

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

  • Макросы в Lisp позволяют изменять код на этапе компиляции.
  • Шаблоны в C++ генерируют код во время компиляции.

7.3. Параллельное программирование

  • Функциональные языки (Haskell, Erlang) упрощают написание параллельного кода.
  • Go использует горутины для легковесного параллелизма.

8. Кейс-стадии

  1. Разработка игры:
    • ООП для моделирования объектов (персонажи, уровни)
    • Императивный стиль для обработки событий
  2. Обработка больших данных:
    • Функциональный подход для работы с коллекциями
    • Параллельные вычисления для ускорения обработки
  3. Экспертные системы:
    • Логическое программирование для работы с правилами
    • Процедурный подход для интеграции с другими системами

9. Инструменты для изучения

  • Онлайн-компиляторы: Repl.it, Ideone
  • IDE с поддержкой нескольких языков: Visual Studio Code, IntelliJ IDEA
  • Библиотеки для функционального программирования: Lodash (JavaScript), PyFunctional (Python)

10. Перспективы развития

  • Квантовое программирование: Q# (Microsoft), Qiskit (IBM)
  • Визуальное программирование: Scratch, Blockly
  • Нейроморфные вычисления: SpiNNaker, TrueNorth

 

Last modified: Thursday, 11 September 2025, 2:32 PM