Часто можна почути, що ООП природно відповідає тому, як люди думають про світ. Але я категорично не погоджуюся з цим твердженням: ми (або, принаймні, я) концептуалізуємо світ з точки зору взаємозв'язків між речами, з якими ми стикаємось, але в центрі уваги ООП розробляються окремі класи та їхні ієрархії.
Зауважте, що в повсякденному житті стосунки та дії існують здебільшого між об'єктами, які були б випадками непов'язаних класів в ООП. Прикладами таких стосунків є: "мій екран знаходиться вгорі таблиці"; «Я (людина) сиджу на стільці»; "машина в дорозі"; "Я набираю клавіатуру"; "кавоварка кипить воду", "текст відображається у вікні терміналу."
Ми думаємо з точки зору двовалентних (іноді тривалентних, як, наприклад, у "Я подарував вам квіти") дієслів, де дієслово - це дія (відношення), яка діє на два об'єкти, щоб створити певний результат / дію. Основна увага приділяється дії, і два (або три) [граматичні] об'єкти мають однакове значення.
Порівнюйте це з OOP, де спочатку потрібно знайти один об’єкт (іменник) і сказати йому, щоб виконати якусь дію над іншим об'єктом. Спосіб мислення зміщується з дій / дієслів, що діють на іменники, на іменники, що діють на іменники - це як би все сказано пасивним чи рефлексивним голосом, наприклад, "текст відображається у вікні терміналу". А може, "текст малює себе у вікні терміналу".
Не тільки фокус зміщується на іменники, але одному з іменників (назвемо це граматичний предмет) надається вища «важливість», ніж інша (граматичний об’єкт). Таким чином, ви повинні вирішити, чи буде сказати terminalWindow.show (someText) або someText.show (terminalWindow). Але навіщо обтяжувати людей такими тривіальними рішеннями без жодних операційних наслідків, коли дійсно означає шоу (terminalWindow, someText)? [Наслідки є оперативно незначними - в обох випадках текст відображається у вікні терміналу, але може бути дуже серйозним у дизайні ієрархій класів, і «неправильний» вибір може призвести до перекрученого та важкого у підтримці коду.]
Тому я б заперечував, що основний спосіб ведення ООП (на основі класу, одноразовий) є важким, оскільки він НЕУТРУДНИЙ і не відповідає тому, як люди думають про світ. Загальні методи з CLOS ближче до мого мислення, але, на жаль, це не дуже поширений підхід.
Зважаючи на ці проблеми, як / чому сталося так, що поточний спосіб ведення OOP став таким популярним? І що, якщо що, можна зробити, щоб детронувати це?