Często można usłyszeć, że OOP naturalnie odpowiada temu, jak ludzie myślą o świecie. Ale zdecydowanie nie zgodziłbym się z tym stwierdzeniem: my (lub przynajmniej ja) konceptualizujemy świat w kategoriach relacji między rzeczami, które napotykamy, ale OOP koncentruje się na projektowaniu poszczególnych klas i ich hierarchii.
Zauważ, że w życiu codziennym relacje i działania istnieją głównie między obiektami, które byłyby instancjami niepowiązanych klas w OOP. Przykładami takich relacji są: „mój ekran jest na stole”; „Ja (człowiek) siedzę na krześle”; „samochód jest w drodze”; „Piszę na klawiaturze”; „ekspres do kawy gotuje wodę”, „tekst jest wyświetlany w oknie terminala”.
Myślimy w kategoriach czasowników dwuwartościowych (czasami trójwartościowych, jak na przykład w „Dałem ci kwiaty”), gdzie czasownik jest działaniem (relacją), która działa na dwóch obiektach w celu uzyskania pewnego wyniku / działania. Skupić się na działaniu, a dwa (lub trzy) [gramatyczne] obiekty mają jednakową wagę.
Porównaj to z OOP, gdzie najpierw musisz znaleźć jeden obiekt (rzeczownik) i powiedzieć mu, aby wykonał jakąś akcję na innym obiekcie. Sposób myślenia jest przenoszony z czynności / czasowników działających na rzeczownikach na rzeczowniki działające na rzeczownikach - to tak, jakby wszystko mówiono głosem pasywnym lub zwrotnym, np. „Tekst jest wyświetlany w oknie terminala”. A może „tekst rysuje się w oknie terminala”.
Nie tylko skupiono się na rzeczownikach, ale także na jednym z rzeczowników (nazwijmy to podmiotem gramatycznym) przypisuje się większą „wagę” niż drugiemu (obiektowi gramatycznemu). Dlatego należy zdecydować, czy powiesz terminalWindow.show (someText) czy someText.show (terminalWindow). Ale po co obciążać ludzi tak trywialnymi decyzjami bez żadnych konsekwencji operacyjnych, skoro naprawdę oznacza się show (terminalWindow, someText)? [Konsekwencje są nieistotne operacyjnie - w obu przypadkach tekst jest wyświetlany w oknie terminala - ale mogą być bardzo poważne w projektowaniu hierarchii klas, a „zły” wybór może prowadzić do zawiłego i trudnego do utrzymania kodu.]
Dlatego argumentowałbym, że główny nurt robienia OOP (oparty na klasach, single-dispatch) jest trudny, ponieważ JEST NIENATURALNY i nie odpowiada poglądom ludzi na temat świata. Ogólne metody CLOS są bliżej mojego sposobu myślenia, ale niestety nie jest to powszechne podejście.
Biorąc pod uwagę te problemy, w jaki sposób / dlaczego tak się stało, że obecnie popularny sposób wykonywania OOP stał się tak popularny? Co można zrobić, aby zdetronizować to?