🧐 Вы не знаете что такое ООП 🧐
Ссылка на статью
Дерзкое заявление, знаю, но попробуйте ответить на вопрос: «Что такое ООП?» – не используя слова Инкапсуляци, Наследование, Полиморфизм и Абстракция.
Если вы не можете этого сделать (а не могут практически 90% разработчиков, даже использующих ООП), значит, вы не знаете, что такое ООП.
И я скажу даже больше, ООП бывает 2-х видов.
Так вот, что такое ООП и каким он бывает, сейчас и разберем:
Проблема в том, что в представленных языках я имею достаточно компетенции, чтобы заявлять, что на них хорошо ляжет ФОП, а на рубях я писал только используя рельсы и где-то лет 5 назад :(
С удовольствием добавлю Руби в ФОП, но мне нужна помощь более компетентного в Руби разработчика, чтобы убедиться, что они сочетаемы
4
4ront
2022-09-11 11:43
Прошу прощения. Не уточнил.
Я к этому предложению спросил: "А еще, поразительно и крайне смешно то, что практически единственным языком, который на максимум использует ООП архитектуру – Erlang один из самых каноничных функциональных языков программирования…"
Ruby — язык с сильным уклоном в объектно-ориентированное программирование. В языке много функций для работы с объектами: их создания, изменения, защиты и других действий с ними. Все возможности выстроены так, чтобы реализовывать ООП и работать с этим подходом было удобнее.
🦾
🦾 IT-Раздевалка 💪
2022-09-11 12:43
Понял
Как я описываю в статье, у нас есть 2 ООП: ООП синтаксис и ООП архитектура
Ruby полностью поддерживает синтаксис ООП
НО с точки зрения архитектуры полноценно отвечает именно Erlang: каждая функция Erlang представляет собой миниприложение, которое может принимать сообщения из внутренней очереди сообщений (механизм самого языка) и отправлять сообщения в другие функции (это сообщение тоже встанет в очередь)
Каждая функция полностью инкапсулированна, функции общаются сериализуемыми сообщения (об это редко говорят, но этот маленький аспект является крайне важной частью ООП и ни одним ООП язык не накладывает запрет на несирализиуемые аргументы в методах класса, что уже нарушение архитектуры ООП; тема очень большая и я думаю напишу отдельную статью посвящённую именно «сериализованным сообщениям в ООП»), каждая функция связана с набором других, с которыми она общается, выстраивая граф
Поэтому Erlang с точки зрения своего внутреннего устройства полностью отвечает архитектуре ООП, а Ruby (как и Java, C#, etc.) лишь даёт возможность использовать синтаксические конструкции ООП и самостоятельно реализовать архитектуру уже на уровне кода
4
4ront
2022-09-11 13:07
Здесь можно вспомнить и SmallTalk. Язык, в который Алан и заложил свои идеи ООП.
Основными идеями Smalltalk являются:
* Всё - объекты, и всё их взаимодействие — через посылку сообщений;
* Всё доступно для изменения;
* Динамическая типизация
———
Еще задолго до появления Smalltalk Алан Кей сформулировал три фундаментальных принципа объектно-ориентированного программирования (Simula-67):
* Объект - базовая единица объектно-ориентированной системы. * Объекты могут обладать состоянием. * Посылка сообщения - единственный способ обмена информацией между объектами.
🦾
🦾 IT-Раздевалка 💪
2022-09-11 13:58
Да, SmallTalk тоже отличный пример
Ситуация с Erlang меня крайне смешит именно из-за того, что он функциональный с точки зрения синтаксиса и на нем предпочтительно писать в функциональной архитектуре, но само устройство языка отвечает принципам ООП)
Кстати, вопрос, а откуда именно строка "все доступно для изменения"? Звучит крайне противоречащей инкапсуляции, может, я не совсем правильно ее понимаю
4
4ront
2022-09-11 15:16
Здесь без сюрпризов. С вики (статья на русском) взял.
* Всё доступно для изменения. Если вы хотите изменить саму интегрированную среду разработки и исполнения, вы можете сделать это в работающей системе, без остановки, перекомпиляции и перезапуска. Если вам необходима в языке новая управляющая конструкция языка, вы можете добавить её. В некоторых реализациях вы можете также изменить синтаксис языка или способ работы сборщика мусора.
🦾
🦾 IT-Раздевалка 💪
2022-09-11 15:18
Аааа, понял, это про Live Coding, то есть возможность изменять приложение без перезапуска, а прям на лету, когда оно уже работает в интерпретаторе + возможность изменять правила компиляции и конструкции языка