Часто можно услышать, что ООП естественно соответствует тому, как люди думают о мире. Но я бы категорически не согласился с этим утверждением: мы (или, по крайней мере, я) концептуализируем мир с точки зрения отношений между вещами, с которыми мы сталкиваемся, но в центре внимания ООП находится разработка отдельных классов и их иерархий.
Обратите внимание, что в повседневной жизни отношения и действия существуют главным образом между объектами, которые были бы экземплярами не связанных классов в ООП. Примеры таких отношений: «мой экран находится на вершине таблицы»; «Я (человек) сижу на стуле»; "машина на дороге"; «Я печатаю на клавиатуре»; «кофемашина кипит вода», «текст отображается в окне терминала».
Мы думаем в терминах двухвалентных (иногда трехвалентных, как, например, в «Я подарил вам цветы») глаголов, где глагол - это действие (отношение), которое воздействует на два объекта для получения некоторого результата / действия. Основное внимание уделяется действию, и два (или три) [грамматических] объекта имеют одинаковое значение.
Сравните это с ООП, где вы сначала должны найти один объект (существительное) и сказать ему выполнить какое-то действие с другим объектом. Способ мышления смещен с действий / глаголов, действующих на существительные, на существительные, действующие на существительные, - это как если бы все говорилось пассивным или рефлексивным голосом, например, «текст показывается окном терминала». Или, может быть, «текст рисуется в окне терминала».
Мало того, что акцент смещен на существительные, но одному из существительных (назовем это грамматическим предметом) дается более высокая «важность», чем другому (грамматическому объекту). Таким образом, нужно решить, скажете ли вы терминалWindow.show (someText) или someText.show (терминалWindow). Но зачем обременять людей такими тривиальными решениями без каких-либо эксплуатационных последствий, когда действительно нужно показать (TerminalWindow, someText)? [Последствия являются незначительными с точки зрения эксплуатации - в обоих случаях текст отображается в окне терминала - но могут быть очень серьезными при проектировании иерархий классов, а «неправильный» выбор может привести к запутанному и трудному в обслуживании коду.]
Поэтому я бы сказал, что основной способ выполнения ООП (на основе классов, одна отправка) сложен, потому что он НАТУРАЛЬНЫЙ и не соответствует тому, как люди думают о мире. Общие методы из CLOS ближе к моему мышлению, но, увы, это не распространенный подход.
Учитывая эти проблемы, как / почему случилось так, что в настоящее время основной способ сделать ООП стал настолько популярным? И что, если что, можно сделать, чтобы свергнуть это?