Creo que la diapositiva 13 en su presentación ( El valor de los valores ) ayuda a comprender esto:
Valores
- No necesita métodos
- Puedo enviarle valores sin código
y tu estas bien
Mi entendimiento es que Hickey sugiere que si necesito, por ejemplo, duplicar el valor que me enviaste, simplemente escribo un código que parece
MyValue = Double(YourValue)
Verás, el código anterior es el mismo, independientemente del valor de clase que hayas enviado: 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é pasa si YourValue
no implementa Doublable
? no es que no se pueda duplicar, puede ser perfectamente pero ... ¿qué pasa si 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 . Por mi lectura de la diapositiva anterior, esto es sobre lo que Hickey quiso decir cuando dijo: "¡Todas esas interfaces matan su reutilización!"
Usted ve, las interfaces asumen 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, existe un problema, aunque semánticamente , la operación deseada tiene mucho sentido para un objeto. Como se indica en la presentación, los valores no necesitan los métodos necesarios ("Puedo enviarte valores sin código y estás bien"), lo que permite escribir código para tratarlos de manera genérica.
Nota al margen: la noción de pasar por valores sin código de alguna manera me recuerda a un patrón de peso mosca en POO.
un objeto que minimiza el uso de la memoria al compartir la mayor cantidad de datos posible con otros objetos similares; es una forma de usar objetos en grandes cantidades cuando una representación repetida simple 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 que dos instancias de peso mosca del mismo valor se consideran iguales ...
Los usos de peso mosca que he visto por lo general seguían el mismo enfoque de eliminar el código (métodos, interfaces) de los objetos y pasar cosas como, bueno, valores sin código , esperando que se reciban El código tiene los medios necesarios para operar en estos.
Esto se siente bastante como en la diapositiva, "los valores no necesitan métodos. Puedo enviarte valores sin código y estás bien".