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

Проработать

  1. 10 принципов объектно-ориентированного программирования, о которых должен знать каждый разработчик
  2. Функторы, аппликативные функторы и монады в картинках
  3. О монадах по-человечески — Кирилл Бяков (Туту.ру)
  4. Почему стоит задуматься о функциональном программировании: плюсы, минусы и применение
  5. 019. Как функциональное программирование может сделать жизнь проще – Сергей Ткаченко
  6. Функциональное программирование — это не то, что нам рассказывают
  7. Основные принципы программирования: функциональное программирование
  8. Монады за 15 минут
  9. Слово на букву «М», или Монады уже здесь
  10. Функциональное программирование, знакомься — ООП
  11. Как улучшить код функциональным подходом || Android Studio КОДИНГ
  12. Моноид
  13. Паттерны функционального программирования

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

Спорный вопрос. Многие разделяют языки на эти типы, а многие видят в каждом языке элементы этих типов.

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

Императивный - объясняешь как получить. Поезжай прямо, на право, на лево...

C, C++, Java, Python etc.

Декларативное программирования

Декларативный - объясняешь что нужно. Адрес ул. Центральная 1.

SQL, HTML, Prolog, R etc.

ООП

ООП - методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования. (способ программирования, путем приравнивания частей кода с объектами из реального мира).

Принципы ООП

Абстракция

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

Наследование

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

Полиморфизм

Полиморфизм - один интерфейс - много реализаций. Интерфейс представляет контракт, который обязан быть реализован. Бывает:

Инкапсуляция

Инкапсуляция - сокрытие реализации. В Java регулируется при помощи модификаторов доступа. Все переменные должны быть private и доступ к ним должен осуществляться через set и get.

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

Функциональное программирование — парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании). На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных. Таким образом, в императивном программировании при вызове одной и той же функции с одинаковыми параметрами, но на разных этапах выполнения алгоритма, можно получить разные данные на выходе из-за влияния на функцию состояния переменных. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных. Это позволяет средам выполнения программ на функциональных языках кешировать результаты функций и вызывать их в порядке, не определяемом алгоритмом и распараллеливать их без каких-либо дополнительных действий со стороны программиста.

Концепции которые использует функционального программирования.

Функция высшего порядка

Функция высшего порядка(Higher-order function) - функция/метод которая принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Также в нее можно передать метод. Функции высших порядков позволяют использовать карринг.

Чистые функции

Чистые функции - функции, которые не имеют побочных эффектов(side effects) ввода-вывода и памяти.

Рекурсия

Подход к вычислению аргументов