Функциональное программирование — парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних.

Императивное программирование — это подход программирования, в которой задаётся последовательность действий, необходимых для получения результата.

Объектно-ориентированное программирование и его принципы

Идеологически ООП — подход к программированию как к моделированию информационных объектов, решающий на новом уровне основную задачу структурного программирования: структурирование информации с точки зрения управляемости.

Объектно-ориентированное программирование — это парадигма разработки программных систем, в которой приложения состоят из объектов.

Класс — это описание того, какими свойствами и поведением будет обладать объект. А объект (экземпляр) класса — это экземпляр с собственным состоянием этих свойств.

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

<aside> 📌 Имена классов принято называть с большой буквы (PascalCase), а имена переменных, в которые помещаются экземпляры класса — с маленькой (camelCase).

</aside>

Плюсы и минусы объектно-ориентированного программирования

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

Инкапсуляция (от лат. in capsule — в оболочке) — это заключение данных и функционала в оболочку; объединение данных и поведения в одном классе.

В объектно-ориентированном программировании в роли оболочки выступают классы: они не только собирают переменные и методы в одном месте, но и защищают их от вмешательства извне (сокрытие).

<aside> ‼️ Важно! Инкапсуляция не является сокрытием. Сокрытие — это часть инкапсуляции.

</aside>

Полиморфизм

Полиморфизм (от греч. poly — много и morphe — форма) — один из главных столпов объектно-ориентированного программирования. Это свойство системы, позволяющее иметь множество реализаций одного интерфейса.

Полиморфизм позволяет классам переопределять поведение супер-класса.

<aside> 📌 Супер-класс — это класс, от которого наследуется или который реализует этот класс.

</aside>

Понятие «полиморфизм» в программировании тесно связано с типизацией или, если быть более точным, c системой типов.

<aside> 📌 Полиморфизм подтипов является истинным полиморфизмом.

</aside>

Все то, что во время компиляции или исполнения программы может содержать или обрабатывать значения различных типов — является полиморфным, например: