2010-07-12 19 views
9

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

6

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.

1

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.

I think, the best thing to do, as of today, is to keep automated track of code duplication, and always monitor when one end changes while the other doesn't. I'm currently writing a tool that'll keep track of such links, even across repositories. I'll report on it in my blog when it's ready.

Cuestiones relacionadas