2010-01-14 12 views
6

¿Por qué el cacao usa delegados en lugar de herencia?¿Por qué el cacao usa delegados en lugar de herencia?

+2

no sé lo suficiente sobre obj-/cacao para responder a esta pregunta con deudas (seguramente se darán respuestas excelentes), pero el argumento principal es que el uso de delegados permite el acoplamiento "más flexible" y el uso de la herencia (múltiple) (imposible en obj-c). – ChristopheD

+0

¿Qué es iirc? No he oído hablar de eso. – Casebash

+0

iirc = si recuerdo correctamente – ChristopheD

Respuesta

6

Con los delegados, puede hacer que un objeto sea el delegado de muchos otros objetos. Por ejemplo, puede hacer que su instancia de MyController sea la delegada de un NSTableView, un NSTextField, un NSWindow y cualquier otro objeto que componga su interfaz. Esto le da un lugar compacto para poner todo su código de interfaz de usuario relacionado con una sección de su UI.

Si desea hecho de que con la subclasificación, habría que crear una subclase cada objeto que quería devoluciones de llamada de.

Además, esta es una pregunta clásica inheritance vs composition

+0

supongo que esto realmente es sólo la herencia vs composición problema – Casebash

+0

Buen punto de escribir un controlador para múltiples objetos de la interfaz de – Casebash

5

En general la creación de una subclase puede ser un proceso que consume tiempo, que requiere una gran cantidad de bases, y diversos métodos plantilla primordiales.

Mientras tanto, el uso de un delegado le permite crear un objeto simple que responde a algunas preguntas específicas o reacciona de diferentes maneras.

Ahora, cuando se combina esto con el dinamismo que se puede lograr mediante el canje de los delegados sobre la marcha se puede crear un sistema robusto muy flexible que promueve más la reutilización de código.

Hay algunas discusiones generales con respecto a estas cosas here y here. También puede encontrar algunas preguntas SO más antiguas, here y here.

+1

¿De qué manera una plantilla requiere menos esfuerzo para crear que una subclase? Por otro lado, la capacidad de cambiar sobre la marcha podría ser útil en algunas circunstancias, pero no veo por qué es necesario para Cocoa. – Casebash

+0

Ni siquiera estoy tan seguro de que sea menos trabajo, pero menos niveles de herencia conducen a un diseño generalmente más simple. La simplicidad es una buena cosa (tm). –

+0

En cuanto a la necesidad. Nada es absolutamente necesario, la opinión de los diseñadores del marco fue que, dadas las limitaciones del lenguaje, la composición por delegación era la mejor elección de diseño que podían hacer. Después de trabajar en él por alrededor de un año, me inclino a aceptar que la elección fue buena. Pero fue un poco extraño para mí cuando llegué por primera vez a Cocoa desde otros idiomas. –

0
+0

fuerza también poner un comentario si usted no va a elaborar. ¿Qué sucede si estos enlaces se vuelven muertos, como el primero? – pqsk

+0

Los delegados simplifican la personalización del comportamiento de los objetos al tiempo que minimizan el acoplamiento entre las clases. La herencia se define en tiempo de compilación, la delegación no está restringida de esa manera y puede hacerse en tiempo de ejecución. – bbaassssiiee

Cuestiones relacionadas