Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
24.2.1. Отказ от классов.
24.2.2. Отказ от наследования.
24.2.3. Отказ от статической проверки типов.
24.2.4. Отказ от программирования.
24.2.5. Использование исключительно иерархий классов.
Вместо того, чтобы приоткрыть состояние и минимизировать его влияние на код,
Яркий контр-пример — MVC в вебе
MVC — это подход в ФП-стиле
Это, конечно, обзывают свежепридуманными ООП-терминами, но это дорога в ФП-сторону.
Что хорошего придумали на основе прекрасной ООП-парадигмы за время ее существования?
Роль контрактов в ФП выполняют развитые системы типов.
А вот в ООП я за 7 лет промышленного программирования контракты не видел чтобы применялись.
Интерфейсы — это часть системы типов вообще-то.
А wsdl описывает структуру данных, что тоже является частью системы типов.
Но в C# мы даже не можем на уровне системы типов сказать что параметр метода не может быть null.
Разумеется можно, нужно, и оно именно для этого и сделано.
Проблема в том, что в языке, в котором парадигма допускает неявные параметры и побочные эффекты, очень сложно давать сильные гарантии на уровне системы типов.
В Хаскеле это позволяют делать классы типов. В C# и Java — интерфейсы.
В центре ООП находится понятие объекта. Объект — это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные.
Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.
Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию.
Почему объектно-ориентированное программирование — это отстой