Esta es una pregunta abierta, pero me gustaría solicitar algunas opiniones de la comunidad SO sobre los Rasgos; ¿Crees que los Rasgos en Squeak/Pharo son algo bueno, o deberías mantenerte alejado de ellos y usar composición y delegación en su lugar? Pregunto porque aunque sé cómo usarlos (gracias al libro de Pharo), no estoy seguro de cuán aceptable es usarlos o dónde está bien usarlos y dónde no.¿Los rasgos son buenos o malos?
Respuesta
No me gustan los rasgos porque introducen fuertes dependencias en el código. Estas dependencias pueden ser obvias (una clase que importa un rasgo, un rasgo que espera métodos), pero también muy sutiles (un rasgo que sombrea supermétodos/variables de instancia). Además, no existe un soporte de herramientas adecuado para los rasgos.
En mi experiencia delegación ofrece un diseño mucho mejor y más reutilizable en un lenguaje orientado a objetos de tipo dinámico como Smalltalk.
Las cosas tienen sus pros y sus contras. Lukas menciona con razón, muchos de los contras:
- Introducir dependencias fuertes en código.
- no hay soporte de herramientas adecuado.
Mientras que el segundo puede desaparecer algún día, el primero no.
El objetivo de los rasgos es evitar la duplicación de código que se produce cuando dos clases que no comparten una superclase distinta de Object comparten un método de instancia. Ahora, a veces la delegación puede arreglar eso, pero a menudo no puede. Por lo tanto, el profesional de los rasgos es:
- Reducción de la duplicación de código.
Mi veredicto aquí es que las desventajas superan. Creo que, hoy y para siempre, la duplicación de código está destinada a ocurrir. Y cuando la delegación no funciona, incluso puedo imaginar que la duplicación de código no es tan dañina, ya que a menudo precede a la evolución divergente de los fragmentos de código copiados.
- 1. ¿Cuáles son algunos buenos ejemplos de Mixins y/o Rasgos?
- 2. ¿Cuáles son los puntos buenos y malos de TransactionScope?
- 3. ¿Los indicadores son malos?
- 4. ¿Los índices son buenos o malos para una base de datos grande?
- 5. ¿Los Singleton son realmente tan malos?
- 6. ¿Por qué los globales son malos?
- 7. por qué los marcos son malos
- 8. ¿Los prototipos son malos en JavaScript?
- 9. ¿Los argumentos 'por ref' en WCF son incorrectos o buenos?
- 10. ¿Cuáles son los buenos podcasts SQL disponibles?
- 11. ¿Por qué los cuadros de diálogo modales son malos?
- 12. ¿Los espacios de nombres son malos para el rendimiento? (PHP)
- 13. ¿Cuáles son los buenos usos de los módulos empaquetados OCaml?
- 14. Los lados malos de C2dM
- 15. rasgos java o patrón mixins?
- 16. ¿Python o Ruby son buenos para las pruebas de penetración?
- 17. ¿Cuáles son los IDE "ricos" buenos para Lisp?
- 18. Iron Python: cuáles son los buenos usos de Iron Python
- 19. ¿Cuáles son los buenos complementos de análisis de código estático?
- 20. ¿Por qué los espacios adicionales y los saltos de línea en las consultas son malos?
- 21. ¿Cuáles son los buenos marcos de acoplamiento para Java/Swing?
- 22. Una pregunta sobre los rasgos
- 23. ¿Cuáles son algunos buenos tutoriales de Wireshark?
- 24. Los malos hábitos de su Scrum Master
- 25. Internet e Intellisense son malos para su memoria?
- 26. ¿Qué son buenos recursos OOP de JavaScript?
- 27. ¿Cuáles son los signos reveladores del diseño orientado a objetos malos?
- 28. ¿Necesita aprender a procesar varios buenos libros o buenos artículos?
- 29. ¿Cómo se escriben los buenos mensajes de error?
- 30. ¿Por qué son malos los prototipos de la función Perl 5?