Penso che la diapositiva 13 alla sua presentazione ( Il valore dei valori ) aiuti a capire questo:
Valori
- Non ho bisogno di metodi
- Posso inviarti valori senza codice
e stai bene
La mia comprensione è che Hickey suggerisce che se devo, per esempio, raddoppiare il valore che mi hai inviato, scrivo semplicemente un codice simile a
MyValue = Double(YourValue)
Vedi, il codice sopra è lo stesso, indipendentemente dal tipo di valore che hai inviato - una sorta di riutilizzo perfetto .
Ora, come apparirebbe nel linguaggio con oggetti e interfacce?
Doublable MyValue = YourValue.Double()
oh aspetta! cosa succede YourValue
se non implementare Doublable
? non che non possa essere raddoppiato, potrebbe essere perfettamente ma ... e se non ci fosse un metodo Double
? (cosa succede se esiste un metodo chiamato dire TwiceAsMuch
?)
Oh oh abbiamo un problema. YourValue.Double
non funzionerà, non può più essere riutilizzato . Secondo la mia lettura della diapositiva sopra, si tratta di ciò che Hickey intendeva quando disse: "Tutte quelle interfacce uccidono il tuo riutilizzo!"
Vedete, le interfacce presuppongono che gli oggetti vengano passati "insieme ai loro metodi", insieme al codice che opera su questi. Per usare gli oggetti, è necessario capire come invocare quel codice, quale metodo chiamare.
Quando manca il metodo previsto , c'è un problema, anche se semanticamente , l'operazione desiderata ha perfettamente senso per un oggetto. Come indicato nella presentazione, i valori non hanno bisogno di metodi ("Posso inviarti valori senza codice e stai bene"), consentendo di scrivere codice trattandoli in modo generico.
Nota a margine: l'idea di passare in giro valori senza codice mi ricorda in qualche modo un modello Flyweight in OOP.
un oggetto che minimizza l'uso della memoria condividendo quanti più dati possibile con altri oggetti simili; è un modo per usare oggetti in grandi numeri quando una rappresentazione ripetuta semplice utilizza una quantità inaccettabile di memoria ... Gli oggetti flyweight sono per definizione oggetti valore . L'identità dell'istanza dell'oggetto non ha alcuna conseguenza, pertanto due istanze Flyweight dello stesso valore sono considerate uguali ...
Gli usi a peso mosca che ho visto in genere hanno seguito lo stesso approccio di togliere il codice (metodi, interfacce) dagli oggetti e far circolare oggetti come pure valori senza codice , aspettandosi che ricevere codice abbia i mezzi necessari per operare su questi.
Sembra quasi come nella diapositiva, "i valori non hanno bisogno di metodi. Posso inviarti valori senza codice e tu stai bene".