나는 항상 보편적 인 어셈블리 언어의 필요성에 대한 C의 인기를 비난하는 경향이 있었다. 기계 수준의 특수성, 표준화 및 극도의 이식성으로 인해 C는 사실상 범용 어셈블리 언어 로 기능 할 수 있으며, 그로 인해 그 역할이 무한정 계속 될 것으로 생각됩니다.
OOP가 프로그래밍 과정에서 좋은 프로그래밍을위한 유일한 엔드 포인트 인 일종의 "최종 모델"로 제시 될 때 나는 항상 약간 놀랐습니다. 프로그래밍의 다른 많은 측면과 마찬가지로 OOP의 가치는 인간의 두뇌가 정보를 구성하는 방법, 사회 그룹이 장기적으로 소프트웨어를 지원하는 방법 및 객체 지향 프로그래밍의 경우 매우 깊은 측면을 포함하여 많은 경쟁 요소 간의 절충입니다. 우주 자체가 어떻게 작동하는지
그리고 마지막 요점은 조금 망치는 것입니다. 특정 프로그래밍 스타일이 존재하는 이유, 함께 작동하는 방식 및 향후 이러한 개념에 대해 확장 할 때 세계가 향하는 위치에 대한 물리 수준 탐색에 관심이있는 경우 자세히 읽어보십시오.
물리학의 대상은 시간이 지남에 따라 인식 가능한 일관성을 유지하는 것입니다. 그것은 우리 자신과 같은 단순한 생물이 우리의 생존을 심각하게 위험에 빠뜨리지 않고 적은 수의 비트만을 사용하여 물체를 표현하는 것을 피할 수있게합니다. 그러나 물리학의 관점에서 볼 때, 그러한 단순화를 쉽고 일반적으로 만들기 위해 정확히 맞아야하는 것들의 수가 엄청나게 많습니다. 솔직히 말해서 인간으로서 우리는 그 모든 것에 대해 많이 생각하지 않습니다. 그것이 사실이 아니라면 우리는 여기에 없었을 것입니다.
너무 추상적 인 소리? 정말 그렇지 않습니다. 예를 들어 자동차 대신 플라즈마 필드가 빠르게 진동하고 거대한 속도로 움직이는 물질이 순간적으로 응축되는 경우 친구의 집으로가는 길을 탐색하려고한다고 상상해보십시오. 그러한 시나리오는 사회화의 기회에 다소 깊이 영향을 줄 수 있습니다. 우리는 우리가 객체가 필요 하다 객체와 객체의 존재는 우리 주변 환경의 단순화의 거대한 및 매우 중요한 수준으로 우리를 제공합니다.
모든 것을 소프트웨어로 되돌려 봅시다. 실제 세계의 객체는 프로그래밍 측면에서 객체에 대해 무엇을 말해야합니까?
소프트웨어에서 "좋은"객체를 정의하는 것은 실제로 처리하는 데이터 유형이 시간이 지남에 따라 인식 가능한 지속성 의 아이디어를 쉽게 지원하는지 여부를 의미해야합니다 .
정의를 통해 가장 쉬운 OOP 형식을 쉽게 식별 할 수 있습니다. 그것들은 이미 "첨부"되었거나 사람, 집 또는 자동차와 같은 실제적이고 실제적인 물체에 의해 정의 된 데이터만을 사용하여 조금씩 제거하는 것입니다. 오늘날에도 이것은 사람들이 소프트웨어 과정에서 얻는 객체에 대한 유일한 정의입니다. 사소한 객체 지향 프로그램조차도 그보다 더 넓은 정의가 필요하기 때문에 너무 나쁩니다.
두 번째로 흥미로운 객체 범주는 내가 불멸의 실제 이벤트 라고 부르는 것 입니다. "불멸의"라는 말 은 현실 세계에서 잘 정의 된 실체 또는 소장품으로서 최소한 잠깐 존재하지만 물리적으로 의미있는 소장품으로 존재하지 않는 것을 의미합니다. 심포지엄은 훌륭한 예입니다. 심포지엄은 장소와 사람이 잘 정의되어있는 짧은 기간 동안 존재합니다. 그러나 아쉽게도 최고의 회의조차 끝내야하며,이를 구성한 개별 부분은 다른 활동으로 넘어갑니다.
그러나 컴퓨터와 네트워크를 사용하여 일시적인 심포지엄을 소프트웨어 개체로 메모리를 캡처하고 유지함으로써 장기적인 개체처럼 보이게 할 수 있습니다 . 우리가 컴퓨터와 데이터베이스로하는 많은 것들이 이런 종류의 일시적인 사건에 대한 불멸화에 해당합니다. 실제로 우리는 실제 우주에는 존재하지 않는 방식으로 실제 우주를 포착하고 확장함으로써 실제 우주를 더욱 풍요롭게하려고합니다. 예를 들어, 최근 판도라를 본 적이 있습니까? 이러한 현실 세계의 포착과 확장은 우리의 삶, 경제 및 선택을 놀라 울 정도로 풍요롭게하고 확장하는 데 도움이됩니다. 이것이 나에게 가장 주목할만한 영향을 미쳤고, 계속 가지고있는 객체 지향 프로그래밍의 중심입니다.
OOP의 최종 범주는 외부 이벤트와 밀접한 관련이 없지만 대신 인프라 인 개체로 구성됩니다.현실 세계의 불멸의 물건을 사용하여 현실의 지속적인 확장을 지원해야했습니다. 여기에서 컴퓨터의 (반) 금속으로 내려갈 수 있으며, 실제 세계의 화학 요소와 같은 새로운 현실 세계를 만들기 위해 빠르고 재미있는 방법으로 결합 할 수있는 지속적인 현실 조각을 만듭니다. 모바일 컴퓨팅은 이러한 종류의 고도로 재조합적인 접근 방식의 성장을 촉진하는 데 도움이되었으며, 이는 다시 여러 가지 방법으로 물리적 세계의 재조합 특징을 모방합니다. 또한 어려운 선택입니다. 좋은 선택처럼 보일 수있는 것은 예상치 못한 나쁜 선택 이었음을 입증 할 수 있습니다. 일반적으로 지원하지 않고 다양성과 확장을 차단하기 때문입니다.
이 마지막 범주는 프로그래밍을 위해 하나의 모델을 사용하는 것의 위험도 지적합니다. 실제와 마찬가지로 프로그래밍 된 세계에도 그렇지 않은 프로세스가 필요하기 때문입니다비교적 변하지 않는 물체에 잘 맞습니다. 지구는 물체로 가득 차 있지만 태양은 에너지가 적은 지구에서 물체와 활동을 "구동"시키는 데 필요한 매우 역동적 인 에너지 흐름으로 가득합니다. 마찬가지로, 컴퓨팅 세계를 만들 때 흐름과 변형을 다루어야하고 급변하는 컨텍스트를 다루어야하는 경우가 있습니다. 그럼에도 불구하고 객체 자체는 아니지만 더 높은 수준에서보다 간단하고 인간 친화적 인 객체를 사용하는 것이 절대적으로 중요합니다. . 커널 수준에서 수행 된 많은 프로그래밍이 눈에 띄게 객체와 유사하지 않거나 더 처리 지향적 인 C와 같은 언어에 크게 의존하는 경향은 우연이 아닙니다. 이들은 컴퓨터 생성 세계에서 우리가 볼 수있는 매혹적인 다양성을 보완하는 더 깊은 영역입니다.
OOP가 잘못 될 수있는 다른 영역은 오래된 개체 개념 에 너무 집중하고 있습니다 .
현실 세계의 물체, 특히 살아있는 물체는 복잡하고 미묘한 방식으로 환경과 상호 작용할 수있는 놀라운 수준의 능력을 가지고 있습니다. 서로를 살펴보고 호환성과 온 전성 검사를 수행하고 상호 작용하는 새로운 방법을 알아내는 컴포저 블 위젯은 단순한 프레임 워크와 단순한 상속 체계보다 실제 생물학적 개념에 가깝습니다. 코드 수준에서 (보통 필요에 따라!) 집중하십시오. 이것은 사이버 세계에서 객체의 성장 영역 중 하나이며, 프로그래밍 자체 내에서도 환경에 대한 반응성이 표준 인 "에이전트와 유사한"접근 방식입니다.
그리고 OOP의 나의 "비평"을 위해 너무나! 그럼에도 불구하고 더 풍부한 사이버 월드를 만드는 것이 "단 하나"만 있으면 충분하다고 생각하기보다는 다양한 프로그래밍 스타일을 포괄 하는 이유를 지적했으면 합니다. 제 생각에는 우리가 지금하는 일이 얼마나 평범한 지에 상관없이 정말 흥미로운 것들이 아직 오지 않았습니다!