2017-12-07 14 views
0

우리는 GOF 디자인 패턴을 연구 중이며 위임의 처음 두 단락에서 차단됩니다. 우리는 표시된 단락에 설명 된 코드가 어떻게 생겼는지에 동의 할 수 없습니다. 이 구절GOF 위임 코드 예제를 작성할 수 있습니까?

+2

, 그것은 우리에게 도움이 될 것입니다 너희들 문제가 위치를 설명 할 수있는 경우 동의. 구현이 무엇이고 친구가 생각하는 것이 무엇이라고 생각합니까? – Gordon

+0

이것은 패턴에 관한 요점 : 코드를 설명하지 않습니다. 그들은 다양한 방법/언어로 구현할 수있는 전략을 설명합니다. 코드에 대해 묻는 대신 구현에 대한 특정 질문이있는 것이 좋습니다. – Doleron

답변

1

Delegation from GOF 내가 이해하기이 어렵게 중요한 것은 추측입니다 :

그러나 상속, 상속 작업은 항상 this 멤버 C에서 변수 ++과 self의를 통해 수신 객체를 참조 할 수 있습니다 잡담. 위임과 동일한 효과를 얻으려면 수신자가 자신을 대리자에게 전달하여 위임 된 작업이 수신자를 참조하도록합니다.

Quoting Wikipedia (강조 내)에서 위임

이 목적은 제 2 물체 (대리인)에 위임하여 요청을 처리한다. 대리자는 도우미 개체 인 이지만 원래 컨텍스트는입니다. 위임에 대한 언어 수준 지원을 사용하면 대리자의 self이 대리자 (받는 개체)가 아니라 원본 (보내는) 개체를 참조하도록 함으로서 암시 적으로 수행됩니다. 실제로입니다 self 또는 this 또는 current 또는 caller 언어 특정 여부

. 코드는 사각형이지만 대리자가 윈도우 인스턴스의 컨텍스트 내에서 영역을 실행하기 때문에

Window 
    int width: 640 
    int height: 480 
    Rectangle rectangle: new Rectangle() 
    int Area(): rectangle.Area() 

Rectangle 
    int Area(): self.width * self.height 

Window window: new Window() 
print window.Area() 

이것은 640 × 480의 결과를 인쇄 할 것이다 : 그것은 위임을 지원하는 언어는 다음 작동한다고 말한다. 즉, Window의 너비와 높이를 self까지 사용합니다. 이 자동 컨텍스트 통과를 지원하지 않는 언어에서

, 대신 대리인에게 발신자를 통과해야합니다 :

Window 
    int width: 640 
    int height: 480 
    Rectangle rectangle: new Rectangle() 
    int Area(): rectangle.Area(this) 

Rectangle 
    int Area(context): context.width * context.height 

Window window: new Window() 
print window.Area() 

우리가 (this를 통해) 대리인에게 윈도우 인스턴스를 전달하는 Area()를 호출 할 때. 그런 다음 대리자는 너비와 높이 멤버에 액세스하여 명시 적으로 전달 된 인수를 통해 계산을 수행합니다.

위의 가짜 언어는 유형이나 가시성과 같은 것에 대해 아무런 가정을하지 않으며 우리는 이처럼 Windows 인스턴스를 단순히 전달하고 그 멤버에 액세스 할 수 있다고 가정합니다. 사용 언어에 따라 마일리지가 다를 수 있습니다.

위임은 실제로 바인딩 컨텍스트에 관한 것이고 단순한 메서드 호출 전달에 관한 것이 아닙니다. 위키 피 디아의 페이지를 마지막으로 한 번 인용 :

"대표단은"종종 맥락에서 평가 보내는 목적은 단순히 수신 객체의 해당 멤버를 사용하여 전달의 독특한 개념을 참조하기 위해 느슨하게 사용하는 것으로

원본 개체가 아니라 수신 개체의.

0

패턴에 관한 한 클래스 다이어그램은 Window와 Rectangle이라는 두 클래스를 잘 보여줍니다.

실제 책을 아직 갖고 있지 않은 경우 (다이어그램이없는 경우) 다이어그램을 설명하는 이전 장 중 하나를 읽으십시오. 아니면 내가 틀렸어. 그 책에 없지만 다음 다이어그램이 무엇인지, 어떻게 작동하는지 설명하는 다른 OOAD/OOP 서적을 구하십시오.

만약 이것이 가치가있다면 GoF도 마찬가지라고 생각합니다. 이것은 "상속에 대한 집계"에 관한 것이며, 그 자체로는 공감할만한 가치가 있습니다. 너의 모든 "우리"가 아직 없다면, 왜 그렇게하지 않겠습니까? 다르게 작성된 코드/개념을 가지고 몇 가지 구체적인 예를 들어 토론하십시오.

는 는

도 참조 : 내 대답은 alredy 귀하의 질문에 대답하지 않는 경우