2010-01-14 3 views
6

왜 코코아는 상속이 아닌 대리자를 사용합니까?왜 코코아는 상속이 아닌 대리자를 사용합니까?

+2

나는를 OBJ/코코아에 대해 충분히 모른다 (분명히 훌륭한 답변을 따를 것입니다.)하지만 iirc의 주된 주장은 대리자를 사용하면 (여러 개의) 상속 (obj-c에서는 불가능)을 사용하여 '느슨한'연결을 허용한다는 것입니다. – ChristopheD

+0

iirc가 무엇입니까? 나는 그것에 대해 들어 본 적이 없다. – Casebash

+0

iirc = 만약 내가 정확히 – ChristopheD

답변

6

대리인을 사용하면 하나의 개체를 다른 많은 개체의 대리인으로 지정할 수 있습니다. 예를 들어, MyController 인스턴스를 NSTableView, NSTextField, NSWindow 및 인터페이스를 구성하는 다른 객체의 대리자로 가질 수 있습니다. 이렇게하면 UI의 한 섹션과 관련된 사용자 인터페이스 코드를 모두 넣을 수 있습니다.

서브 클래 싱을 사용했다면 콜백을 원할 모든 객체마다 하나의 서브 클래스를 만들어야합니다.

또한,이

+0

이게 실제로 상속 vs 구성 문제라고 가정 해 보겠습니다. – Casebash

+0

인터페이스에 여러 객체에 대해 하나의 컨트롤러를 작성하는 것이 좋은 점 – Casebash

5

일반적으로 하위 클래스를 만드는 데는 많은 시간이 소요되며 많은 기초 작업이 필요하며 다양한 템플릿 방법을 재정의 할 수 있습니다.

한편 델리게이트를 사용하면 몇 가지 특정 질문에 답하거나 다양한 방식으로 반응하는 간단한 개체를 만들 수 있습니다.

이제 델리게이트를 즉시 교체하여 얻을 수있는 역 동성과 결합하면 코드 재사용을 촉진하는 매우 유연하고 견고한 시스템을 만들 수 있습니다.

herehere과 관련된 몇 가지 일반적인 논의가 있습니다. 당신은 또한 어떤 오래된 노호 질문 herehere을 찾을 수 있습니다.

+1

으로 게시해야합니다. 템플릿이 어떻게 하위 클래스를 만드는 것보다 적은 노력을합니까? 반면에, 즉시 바꿀 수있는 능력은 어떤 상황에서는 유용 할 수 있지만 코코아가 필요한 이유는 알 수 없습니다. – Casebash

+0

나는 그것이 일이 적다는 것을 너무 많이 확신하지는 않지만, 상속의 수준이 낮을수록 일반적으로 더 단순한 디자인이된다. 단순성은 좋은 것 (tm)입니다. –

+0

필요성에 관해서. 절대적으로 필요한 것은 없습니다. 위임을 통한 작곡이 그들이 만들 수있는 최선의 디자인 선택이라는 언어의 제약을받는 것은 프레임 워크 설계자의 의견이었습니다. 약 1 년 동안 그 일을 한 후에 나는 좋은 선택이라는 것에 동의하는 경향이 있습니다. 그러나 처음에는 다른 언어로 코코아에 왔을 때 다소 이상했습니다. –

0

여기에 길이에서 논의 고전 inheritance vs composition 질문은 : http://www.cocoadev.com/index.pl?ExtendsIsEvil

그리고 자바들도 이것을 알고 : 이 http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html

+0

정교하게 다루지 않을 경우 댓글을 달 수도 있습니다. 이 링크가 처음과 같이 죽어 버리면 어떻게됩니까? – pqsk

+0

대리인은 클래스 간의 커플 링을 최소화하면서 개체 동작의 사용자 지정을 단순화합니다. 상속은 컴파일 타임에 정의되며 위임은 이와 같이 제한되지 않으며 런타임에 수행 할 수 있습니다. – bbaassssiiee

관련 문제