정신분열증(객체 지향 프로그래밍)
Schizophrenia (object-oriented programming)객체 정신분열증 또는 자기 정신분열증은 객체 지향 프로그래밍의 위임 및 관련 기술에서 발생하는 합병증으로, 여기서 this
/는 둘 이상의 객체를 참조할 수 있다.해리성 정체성 장애와 정신분열증(분할성격)의 정신분열증 진단을 혼동하는 비유로, 이 구성은 [1]객체 지향 프로그래밍에서 객체정신분열증 또는 자기정신분열증이라고 불린다.
개요
오브젝트는 데이터와 동작을 결합하여 동일성을 갖는 컴퓨팅 개념으로 정의할 수 있습니다.클래스 기반 프로그래밍에서 객체는 클래스 시스템 상에 구축되며, 여기서 객체는 클래스의 인스턴스입니다.클래스는 상속으로 관련지을 수 있습니다.기본 클래스는 오브젝트의 기본 또는 기본 동작을 제공하며 오브젝트를 작성하기 위한 템플릿으로 기능합니다.또한 파생 클래스는 기본 클래스의 동작을 재정의하기 위해 사용할 수 있으며 기본 클래스의 동작을 미세화하는 오브젝트의 템플릿으로 사용할 수 있습니다.
클래스와 상속의 대안으로 프로토타입과 [2]위임을 들 수 있습니다. 프로토타입 기반 프로그래밍에 사용되며 보다 역동적입니다.위임을 통해 한 클래스를 사용하여 다른 클래스를 세분화하는 대신 한 개체의 동작을 재정의할 수 있습니다.원래 오브젝트 a(파생 클래스 동작과 유사)는 메서드의 일부를 다른 오브젝트 b(기본 클래스 동작과 유사)에 위임할 수 있습니다.a가 foo 메서드를 b의 막대 메서드에 위임할 경우 a의 foo를 호출하면 b의 막대 메서드가 실행됩니다.단, 바(bar)는 오브젝트의 컨텍스트에서 실행됩니다.예를 들어 다음과 같습니다.self
식별자는 b가 아닌 a를 참조합니다.
위임을 사용하면 다음과 같은 문제가 발생합니다.의 가치는 무엇입니까?self
오브젝트 a의 메서드를 평가할 때 오브젝트 b의 메서드에 위임된 것은 무엇입니까?아이덴티티는 분할되어 있습니다.a 또는 b를 참조할 수 있습니다.두 개체는 서로 분리되어 있으며 서로 다른 물리적 ID를 가지고 있지만,self
(명시적이든 암묵적이든) 애매합니다.
이력 및 토론
Herrmann은[3] 이 용어가 IBM Research의 William Harrison에 의해 1997년 5월경에 만들어진 것으로 보고하고 있으며, 이 웹 페이지는 일반적인 디자인 패턴의 일부에 의해 발생하는 문제에 대해 논의했습니다(이러한 웹 페이지는 더 이상 공개적으로 사용할 수 없습니다).이 예에서는 일반적인 솔루션이 위임을 수행하는 동안 원래 리시버 객체에 대한 지식이 실제로 손실되는 더 약한 형태의 위임을 사용한다는 사실에 의해 문제가 악화되었습니다(전송이라고도 합니다.여기서 포워딩의 사용은 대부분의 주류 객체 지향 프로그래밍 언어가 보다 강력한 형태의 위임을 지원하지 않기 때문입니다.Harrison 등은 정적 구성에 의해 객체 정신분열증 문제를 회피하는 주체 지향 프로그래밍을 해결책으로 제안했다.스펙트럼의 반대편에서, Herrmann은 문맥적 역할을 특징으로 하는 언어가 역할 객체와 그것의 관련 기본 객체 사이의 행동을 공유하는 수단으로서 위임을 사용함에도 불구하고 객체 정신분열증의 잠재적 문제가 본질적으로 무관하도록 설계될 수 있다는 것을 보여준다.
「 」를 참조해 주세요.
- 혼란스러운 대리 문제 – 컴퓨터 보안 취약성