Парадигмы программирования
Москаленко Дмитрий
О себе
Компания - WOXAPP
Текущая должность - СТО
Опыт разработчика - 8 лет (web, Android, IoT)
Опыт СТО - 5 лет
Основные языки программирования - Python, PHP, Java, SQL, Go
Хобби - Machine learning, Deep learning, IoT
IT Clubs Project - advisor в: JS Club, PHP Club, iOS Club
Агенда
- какие парадигмы программирования есть
- отличия между парадигмами
- в чем связь между парадигмами
- что нам дает знание парадигм
- когда и как это используется на практике
Что такое парадигма программирования
Паради́ гма программи́ рования — это совокупность идей и понятий, определяющих стиль написания компьютерных программ
(подход к программированию). Это способ концептуализации, определяющий организацию вычислений и структурирование
работы, выполняемой компьютером.
(с) Википедия
Зачем это нужно?
- понимания структуры программного кода
- опыт для оценки качества кода
- опыт для выбора нужного подхода разработки
Основные парадигмы программирования
1. Императивное программирование
2. Декларативное программирование
3. Структурное программирование
4. Функциональное программирование
5. Объектно-ориентированное программирование
6. Программирование управляемое данными
7. Событийно-ориентированное программирование
8. Предметно-ориентированное программирование
9. Реактивное программирование
Устаревшие парадигмы программирования
Императивное программирование
Основные понятия:
- инструкция
- состояние
Вспомогательные:
- присваивание
- переход
- указатель
Языки поддерживающие как основную:
- Assembler
- C
- C++
Языки поддерживающие как вспомогательную:
- Python
- Ruby
- Java
- PHP
Декларативное программирование
Языки поддерживающие как основную:
- SQL
- CSS
- HTML
Структурное программирование
Основные понятия:
- блок
- цикл
- ветвление
Языки поддерживающие как основную:
- C
Языки поддерживающие как вспомогательную:
- Python
- Ruby
- Java
- JavaScript
- С#
Парадигмы которые используются
Функциональное программирование
Принципы:
1. Переменные неизменяемые
2. Все функции - чистые
3. Все функции - первого класса и высшего порядка
4. Относительная прозрачность функций
5. Лямбда-исчисления
Определение чистой функции
1. Функция, вызывается от одних и тех же аргументов, всегда
возвращая одинаковое значение.
2. Во время выполнения функции не возникают побочные
эффекты.
Функции - первого класса и высшего
порядка
1. Если функцию возможно объявить в виде переменной она
считается первоклассной.
2. Функции высшего порядка - это функции принимающие
другую функцию как аргумент или возвращающие функцию.
Относительная прозрачность функций
Лямбда-исчисления
1. Все функции могут быть анонимные, поскольку единственная значимая часть
заголовка функции - это список аргументов.
2. Если функция вызывается с несколькими аргументами, то она сперва будет
выполнена с первым и вернет новую функцию, содержащую на 1 аргумент
меньше и немедленно выполнит ее.
Объектно ориентированное
программирование
Основные принципы:
- наследование
- полиморфизм
- инкапсуляция
- абстракция
Проблемы ООП
- тянет за собой все свое окружение
- это медленно
- запутанные связи (при не правильной реализации)
Программирование, управляемое
данными (data-driven)
Основная идея: важны в первую очередь данные, а
не то, как они между собой связаны.
Сфера применения:
- сервисы по агрегированию данных,
- админ панели,
- API
Проблемы:
- плохо совместим с концепциями ООП
- на больших проектах сложно поддерживать
Событийно-ориентированное
программирование (event-driven)
Основная идея: выполнение программы
определяется событиями. Логика построена на
двух базовых принципах: событие и обработка
события
Применение:
- серверные приложения
- игры
- пользовательские интерфейсы
Проблемы:
- проблемы с масштабированием
Обработка событий
Проблемно-ориентированное
программирование (domain-driven)
Основная идея: создание оптимальной системы
объектов
Применение:
- системы с большой бизнес-логикой
Принципы:
- ограниченные связи
- целостность
- взаимосвязь
Проблемы DDD
- требует тщательной проработки, что ведет
к увеличению затраченного ресурса и
удорожанию проекта
- определенные части становятся сложнее
в поддержке
Реактивное программирование (FRP)
Основная идея: моментальное реагирование на
изменения в системе
Применение:
- приложения любого типа
Принципы:
- событие
- поведение
ООП vs Функциональное
Как выбирать парадигму программирования
- область применения
- язык программирования
- цель разработки ПО
Как применять?
Спасибо за внимание!

Парадигмы программирования