SlideShare a Scribd company logo
1 of 28
Download to read offline
Парадигмы программирования
Москаленко Дмитрий
О себе
Компания - 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 Функциональное
Как выбирать парадигму программирования
- область применения
- язык программирования
- цель разработки ПО
Как применять?
Спасибо за внимание!

More Related Content

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

Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Unguryan Vitaliy
 
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArtDataArt
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Andrii Gakhov
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФПAlexander Granin
 
Programming Concepts
Programming ConceptsProgramming Concepts
Programming ConceptsMister_Lee
 
Мобильный Мегаплан
Мобильный МегапланМобильный Мегаплан
Мобильный МегапланMikhail Sukhov
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Бизнес и системный анализ весна 2013 лекция 7
Бизнес и системный анализ весна 2013 лекция 7Бизнес и системный анализ весна 2013 лекция 7
Бизнес и системный анализ весна 2013 лекция 7Technopark
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04Computer Science Club
 
Сборник практических задании по Php
Сборник практических задании по PhpСборник практических задании по Php
Сборник практических задании по PhpRauan Ibraikhan
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноBubon Makabra
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Sergey Nemchinsky
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
чмв лекция №4
чмв   лекция №4чмв   лекция №4
чмв лекция №4student_kai
 
чмв лекция №7
чмв   лекция №7чмв   лекция №7
чмв лекция №7student_kai
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLNikolai Kireev
 
Прагматичный подход к разработке гибких программных систем
Прагматичный подход к разработке гибких программных системПрагматичный подход к разработке гибких программных систем
Прагматичный подход к разработке гибких программных системAlexander Byndyu
 

Similar to Парадигмы программирования (20)

Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
Programming Concepts
Programming ConceptsProgramming Concepts
Programming Concepts
 
Мобильный Мегаплан
Мобильный МегапланМобильный Мегаплан
Мобильный Мегаплан
 
лек11 7
лек11 7лек11 7
лек11 7
 
лек11 7
лек11 7лек11 7
лек11 7
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
Бизнес и системный анализ весна 2013 лекция 7
Бизнес и системный анализ весна 2013 лекция 7Бизнес и системный анализ весна 2013 лекция 7
Бизнес и системный анализ весна 2013 лекция 7
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04
 
Сборник практических задании по Php
Сборник практических задании по PhpСборник практических задании по Php
Сборник практических задании по Php
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
чмв лекция №4
чмв   лекция №4чмв   лекция №4
чмв лекция №4
 
чмв лекция №7
чмв   лекция №7чмв   лекция №7
чмв лекция №7
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
Прагматичный подход к разработке гибких программных систем
Прагматичный подход к разработке гибких программных системПрагматичный подход к разработке гибких программных систем
Прагматичный подход к разработке гибких программных систем
 

More from ITCP Community

"Best Practices for Designing a Pragmatic RESTful API
 "Best Practices for Designing a Pragmatic RESTful API "Best Practices for Designing a Pragmatic RESTful API
"Best Practices for Designing a Pragmatic RESTful APIITCP Community
 
"Generics+Decodable serving your API-client"
"Generics+Decodable serving your API-client""Generics+Decodable serving your API-client"
"Generics+Decodable serving your API-client"ITCP Community
 
"You shall not pass : anti-debug methodics"
"You shall not pass : anti-debug methodics""You shall not pass : anti-debug methodics"
"You shall not pass : anti-debug methodics"ITCP Community
 
Лайфхаки группового собеседования
Лайфхаки группового собеседованияЛайфхаки группового собеседования
Лайфхаки группового собеседованияITCP Community
 
Бла бла-бла поговорить или структура “неструктурированного” интервью
Бла бла-бла поговорить или структура “неструктурированного” интервьюБла бла-бла поговорить или структура “неструктурированного” интервью
Бла бла-бла поговорить или структура “неструктурированного” интервьюITCP Community
 
Не все святой скрам
Не все святой скрамНе все святой скрам
Не все святой скрамITCP Community
 
Самоорганизующиеся команды
Самоорганизующиеся командыСамоорганизующиеся команды
Самоорганизующиеся командыITCP Community
 
Управление содержанием проекта
Управление содержанием проектаУправление содержанием проекта
Управление содержанием проектаITCP Community
 
Таргетированная реклама в Facebook
Таргетированная реклама в FacebookТаргетированная реклама в Facebook
Таргетированная реклама в FacebookITCP Community
 
Финансовое планирование бюджета IT-компании
Финансовое планирование бюджета IT-компанииФинансовое планирование бюджета IT-компании
Финансовое планирование бюджета IT-компанииITCP Community
 
Вам упаковать?
Вам упаковать?Вам упаковать?
Вам упаковать?ITCP Community
 
Клиент всегда прав?
Клиент всегда прав?Клиент всегда прав?
Клиент всегда прав?ITCP Community
 
Общение с клиентами на автопилоте
Общение с клиентами на автопилоте Общение с клиентами на автопилоте
Общение с клиентами на автопилоте ITCP Community
 
Kонтент решает все (почти)
Kонтент решает все (почти) Kонтент решает все (почти)
Kонтент решает все (почти) ITCP Community
 
Продукт с нуля
Продукт с нуляПродукт с нуля
Продукт с нуляITCP Community
 
Storytelling in the Digital Age
Storytelling in the Digital AgeStorytelling in the Digital Age
Storytelling in the Digital AgeITCP Community
 
Место карьеры в мире дизайна
Место карьеры в мире дизайнаМесто карьеры в мире дизайна
Место карьеры в мире дизайнаITCP Community
 

More from ITCP Community (20)

"Best Practices for Designing a Pragmatic RESTful API
 "Best Practices for Designing a Pragmatic RESTful API "Best Practices for Designing a Pragmatic RESTful API
"Best Practices for Designing a Pragmatic RESTful API
 
"Generics+Decodable serving your API-client"
"Generics+Decodable serving your API-client""Generics+Decodable serving your API-client"
"Generics+Decodable serving your API-client"
 
"You shall not pass : anti-debug methodics"
"You shall not pass : anti-debug methodics""You shall not pass : anti-debug methodics"
"You shall not pass : anti-debug methodics"
 
Лайфхаки группового собеседования
Лайфхаки группового собеседованияЛайфхаки группового собеседования
Лайфхаки группового собеседования
 
Бла бла-бла поговорить или структура “неструктурированного” интервью
Бла бла-бла поговорить или структура “неструктурированного” интервьюБла бла-бла поговорить или структура “неструктурированного” интервью
Бла бла-бла поговорить или структура “неструктурированного” интервью
 
Метрики
МетрикиМетрики
Метрики
 
Не все святой скрам
Не все святой скрамНе все святой скрам
Не все святой скрам
 
Самоорганизующиеся команды
Самоорганизующиеся командыСамоорганизующиеся команды
Самоорганизующиеся команды
 
Управление содержанием проекта
Управление содержанием проектаУправление содержанием проекта
Управление содержанием проекта
 
Таргетированная реклама в Facebook
Таргетированная реклама в FacebookТаргетированная реклама в Facebook
Таргетированная реклама в Facebook
 
Финансовое планирование бюджета IT-компании
Финансовое планирование бюджета IT-компанииФинансовое планирование бюджета IT-компании
Финансовое планирование бюджета IT-компании
 
Вам упаковать?
Вам упаковать?Вам упаковать?
Вам упаковать?
 
Клиент всегда прав?
Клиент всегда прав?Клиент всегда прав?
Клиент всегда прав?
 
Общение с клиентами на автопилоте
Общение с клиентами на автопилоте Общение с клиентами на автопилоте
Общение с клиентами на автопилоте
 
Kонтент решает все (почти)
Kонтент решает все (почти) Kонтент решает все (почти)
Kонтент решает все (почти)
 
Electron
ElectronElectron
Electron
 
It is a Test
It is a TestIt is a Test
It is a Test
 
Продукт с нуля
Продукт с нуляПродукт с нуля
Продукт с нуля
 
Storytelling in the Digital Age
Storytelling in the Digital AgeStorytelling in the Digital Age
Storytelling in the Digital Age
 
Место карьеры в мире дизайна
Место карьеры в мире дизайнаМесто карьеры в мире дизайна
Место карьеры в мире дизайна
 

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