OOP는 사람들이 세상에 대해 생각하는 방식과 자연스럽게 일치한다는 것을 종종들을 수 있습니다. 그러나 나는이 진술에 강력히 동의하지 않을 것이다. 우리 (또는 적어도 나는) 는 우리가 만나는 것들 사이 의 관계 측면에서 세계를 개념화 하지만, OOP의 초점은 개별 클래스와 계층을 설계하는 것이다.
일상 생활에서 관계와 행동은 대부분 OOP에서 관련없는 클래스의 인스턴스였던 객체 사이에 존재합니다. 이러한 관계의 예는 다음과 같습니다. "내 화면이 테이블 위에 있습니다"; "나는 (인간이) 의자에 앉아있다"; "자동차가 도로에있다"; "키보드에 입력하고 있습니다"; "커피 머신이 물을 끓인다", "텍스트가 터미널 창에 표시됩니다."
동사는 2가 (때로는 "나에게 꽃을 줬다"와 같이 3가) 동사로 생각되는데 여기서 동사는 두 개의 객체에서 작동하여 결과 / 동작을 생성하는 동작 (관계)입니다. 포커스 동작을하고, 두 개의 (또는 세) 문법] 개체 동등한 중요성을 갖는다.
OOP와는 대조적으로 먼저 하나의 오브젝트 (명사)를 찾아서 다른 오브젝트에 대한 조치를 수행하도록 지시해야합니다. 사고 방식은 명사에서 작동하는 동작 / 동사에서 명사에서 작동하는 명사로 이동합니다. 마치 마치 "단말기 창에 텍스트가 표시되는 것과 같이"수동적이거나 재귀적인 목소리로 모든 것이 말하는 것처럼 말입니다. 또는 "텍스트가 터미널 창에 그려집니다".
초점이 명사로 이동되었을뿐만 아니라 명사 중 하나 (문법 주제라고 함)에 다른 명사 (문법적 대상)보다 "중요도"가 높아집니다. 따라서 terminalWindow.show (someText) 또는 someText.show (terminalWindow) 중 어느 것을 말할 것인지 결정해야합니다. 그러나 실제로 show (terminalWindow, someText)를 의미 할 때 운영상의 결과가없는 사소한 결정을 내리는 사람들에게 왜 부담이됩니까? [결과는 운영상 미미합니다. 두 경우 모두 텍스트가 터미널 창에 표시됩니다. 그러나 클래스 계층 구조 디자인에서 매우 심각 할 수 있으며 "잘못된"선택은 코드를 복잡하고 유지하기 어려울 수 있습니다.]
그러므로 나는 OOP (class-based, single-dispatch)를하는 주류 방식은 비 자연적이며 인간이 세상에 대해 어떻게 생각하는지에 맞지 않기 때문에 어렵다고 주장한다. CLOS의 일반적인 방법은 내가 생각하는 방식에 더 가깝지만 아쉽게도 이것은 널리 퍼진 접근법이 아닙니다.
이러한 문제를 감안할 때 현재 OOP를 수행하는 주류 방식이 인기를 얻은 이유는 무엇입니까? 그리고 그것을 막기 위해 무엇을 할 수 있습니까?