¿Por qué el cacao usa delegados en lugar de herencia?¿Por qué el cacao usa delegados en lugar de herencia?
Respuesta
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
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.
¿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
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). –
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. –
discutido extensamente aquí: http://www.cocoadev.com/index.pl?ExtendsIsEvil
y Java chicos saben esto también: http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html
fuerza también poner un comentario si usted no va a elaborar. ¿Qué sucede si estos enlaces se vuelven muertos, como el primero? – pqsk
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
- 1. ¿por qué usa el movl en lugar de push?
- 2. Intentando Implementar Herencia de Delegados
- 3. ¿Por qué el iPhone SDK utiliza categorías, en lugar de protocolos, para algunos delegados?
- 4. ¿Por qué el cacao no usa el mismo estilo de declaración enum en todas partes?
- 5. ¿Por qué UnderscoreJS usa toString.call() en lugar de typeof?
- 6. ¿Por qué se usa constructor en lugar de funciones?
- 7. ¿Por qué usa Forth IF ENTONCES ... en lugar de ENDIF?
- 8. ¿Por qué OpenGL usa grados en lugar de radianes?
- 9. ¿Por qué RTP usa UDP en lugar de TCP?
- 10. ¿Por qué Ruby usa responder_a? en lugar de responde_ a?
- 11. ¿Por qué la doctrina usa DONDE EN lugar de LÍMITE?
- 12. ¿Por qué necesitamos delegados de C#
- 13. Herencia en lugar de typedef
- 14. ¿Por qué Java ArrayList usa conversión por elemento en lugar de conversión por matriz?
- 15. Incrustación en lugar de herencia en Ir
- 16. ¿Por qué falla el enlace dinámico cuando se usa la herencia de la interfaz?
- 17. ¿Por qué JDK usa el desplazamiento en lugar de multiplicar/dividir?
- 18. ¿Objective-C se usa sin cacao?
- 19. ¿Por qué la herencia influye en el manejo de excepciones?
- 20. ¿Por qué DataMapper usa mixins vs inheritance?
- 21. ¿Por qué la flecha sube en herencia?
- 22. ¿Por qué Apple usa el objetivo C?
- 23. ¿Por qué Xcode 4.2 usa @autoreleasepool en main.m en lugar de NSAutoreleasePool?
- 24. ¿Por qué se usa console.log? ¿Qué hace?
- 25. ¿Por qué Lua usa un recolector de basura en lugar de contar la referencia?
- 26. ¿Por qué la clase Java Pattern usa un método de fábrica en lugar de un constructor?
- 27. ¿Por qué darcs en lugar de git?
- 28. ¿Por qué IPv6 usa dos puntos como delimitador en lugar de punto?
- 29. ¿Por qué Ruby on Rails usa http://0.0.0.0:3000 en lugar de http: // localhost: 3000?
- 30. ¿Por qué wordpress coloca "text/rocketscript" en lugar de "text/javascript" cuando se usa wp_register_script()?
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
¿Qué es iirc? No he oído hablar de eso. – Casebash
iirc = si recuerdo correctamente – ChristopheD