Acho que o slide 13 de sua apresentação ( O Valor dos Valores ) ajuda a entender isso:
Valores
- Não precisa de métodos
- Posso enviar valores sem código
e você está bem
Meu entendimento é que Hickey sugere que, se eu precisar, digamos, dobrar o valor que você enviou para mim, eu simplesmente escrevo um código parecido com
MyValue = Double(YourValue)
Veja, o código acima é o mesmo, independentemente do valor que você enviou - uma reutilização perfeita .
Agora, como isso seria na linguagem com objetos e interfaces?
Doublable MyValue = YourValue.Double()
Oh espere! e se YourValue
não implementar Doublable
? não que não possa ser duplicado, pode perfeitamente ser, mas ... e se simplesmente não houver método Double
? (e se houver um método chamado digamos TwiceAsMuch
?)
Oh, nós temos um problema. YourValue.Double
não funcionará, não poderá mais ser reutilizado . Pela minha leitura do slide acima, é sobre o que Hickey quis dizer quando disse: "Todas essas interfaces matam sua reutilização!"
Veja bem, as interfaces assumem que os objetos são passados "junto com seus métodos", juntamente com o código que opera neles. Para usar objetos, é preciso entender como chamar esse código, qual método chamar.
Quando o método esperado está ausente, há um problema, mesmo que semanticamente , a operação desejada faça todo o sentido para um objeto. Conforme declarado na apresentação, os valores não precisam de métodos ("Posso enviar valores sem código e você está bem"), permitindo escrever código lidando com eles de maneira genérica.
Nota lateral: a noção de passar valores sem código de alguma forma me lembra um padrão Flyweight no OOP.
um objeto que minimiza o uso da memória compartilhando o máximo de dados possível com outros objetos semelhantes; é uma maneira de usar objetos em grandes números quando uma representação repetida simples usaria uma quantidade inaceitável de memória ... Objetos Flyweight são, por definição, objetos de valor . A identidade da instância do objeto não tem importância, portanto, duas instâncias Flyweight do mesmo valor são consideradas iguais ...
Os usos do flyweight que eu vi normalmente seguiram a mesma abordagem de remover o código (métodos, interfaces) dos objetos e distribuir coisas ao redor, bem como valores sem código , esperando que o código de recebimento tenha os meios necessários para operar com eles.
Isso parece muito com o slide "valores não precisam de métodos. Posso enviar valores sem código e você está bem".