Creo que la diapositiva 13 en su presentación ( El valor de los valores ) ayuda a comprender esto:
Valores
- No necesito metodos
- Puedo enviarte valores sin código
y estás bien
Según tengo entendido, Hickey sugiere que si necesito, por ejemplo, duplicar el valor que me enviaste, simplemente escribo un código como
MyValue = Double(YourValue)
Verá, el código anterior es el mismo, sin importar el tipo de valor que envió, una especie de reutilización perfecta .
Ahora, ¿cómo se vería esto en el lenguaje que tiene objetos e interfaces?
Doublable MyValue = YourValue.Double()
¡Oh espera! ¿Qué YourValue
pasa si no se implementa Doublable
? no es que no se pueda duplicar, puede ser perfectamente, pero ... ¿y si simplemente no hay un método Double
? (¿Qué pasa si hay un método llamado say TwiceAsMuch
?)
Uh, oh, tenemos un problema. YourValue.Double
no funcionará, ya no se puede reutilizar . Según mi lectura de la diapositiva anterior, esto es sobre lo que Hickey quiso decir cuando dijo: "¡Todas esas interfaces matan su reutilización!"
Verá, las interfaces suponen que los objetos se pasan "junto con sus métodos", junto con el código que opera en estos. Para usar objetos, uno necesita entender cómo invocar ese código, a qué método llamar.
Cuando falta el método esperado , hay un problema, aunque semánticamente , la operación deseada tiene mucho sentido para un objeto. Como se indicó en la presentación, los valores no necesitan métodos ("Puedo enviarte valores sin código y estás bien"), lo que permite escribir código que trata con ellos de manera genérica.
Nota al margen: la noción de pasar valores sin código de alguna manera me recuerda a un patrón Flyweight en OOP.
un objeto que minimiza el uso de memoria al compartir la mayor cantidad de datos posible con otros objetos similares; es una forma de usar objetos en grandes cantidades cuando una simple representación repetida usaría una cantidad inaceptable de memoria ... Los objetos de peso mosca son, por definición , objetos de valor . La identidad de la instancia del objeto no tiene ninguna consecuencia, por lo tanto, dos instancias de Flyweight del mismo valor se consideran iguales ...
Los usos de peso mosca que he visto generalmente siguen el mismo enfoque de quitar el código (métodos, interfaces) de los objetos y pasar cosas como valores sin código , esperando que recibir código tenga los medios necesarios para operar en estos.
Esto se siente más o menos como en la diapositiva, "los valores no necesitan métodos. Puedo enviarle valores sin código y está bien".