Penso che la diapositiva 13 alla sua presentazione ( Il valore dei valori ) aiuta a capire questo:
Values
- Don’t need methods
- I can send you values without code
and you are fine
La mia comprensione è che Hickey suggerisce che, se devo, ad esempio, raddoppiare il valore che mi hai inviato, scrivo semplicemente codice simile a
MyValue = Double(YourValue)
Vedete, il codice precedente è lo stesso, indipendentemente dal tipo di valore che avete inviato - una specie di riuso perfetto .
Ora, come sarebbe questo nel linguaggio con oggetti e interfacce?
Doublable MyValue = YourValue.Double()
oh aspetta! cosa succede se YourValue
non implementa Doublable
? non che non possa essere raddoppiato, potrebbe essere perfettamente ma ... e se non ci fosse un metodo Double
? (cosa succede se c'è un metodo chiamato say TwiceAsMuch
?)
Uh oh abbiamo un problema. YourValue.Double
non funzionerà, non può più essere riutilizzato . Per la mia lettura della diapositiva di cui sopra, si tratta di cosa intendeva Hickey quando ha detto: "Tutte quelle interfacce uccidono il tuo riutilizzo!"
Come vedi, le interfacce presuppongono che gli oggetti vengano passati "insieme ai loro metodi", insieme al codice che opera su questi. Per utilizzare gli oggetti, è necessario capire come richiamare quel codice, quale metodo chiamare.
Quando manca il metodo , c'è un problema, anche se semanticamente , l'operazione desiderata ha perfettamente senso per un oggetto. Come indicato nella presentazione, i valori non richiedono i metodi ("Posso inviare valori senza codice e stai bene"), consentendo di scrivere codice che li tratti in modo generico.
Nota a margine: la nozione di passare intorno ai valori senza codice mi ricorda in qualche modo un modello di peso vivo in OOP.
an object that minimizes memory use by sharing as much data as possible with other similar objects; it is a way to use objects in large numbers when a simple repeated representation would use an unacceptable amount of memory... Flyweight objects are by definition value objects. The identity of the object instance is of no consequence therefore two Flyweight instances of the same value are considered equal...
Usi di pesi mosca Ho visto in genere seguito lo stesso approccio di rimozione del codice (metodi, interfacce) dagli oggetti e il passaggio di oggetti in giro come, beh, valori senza codice , in attesa di ricevere il codice ha i mezzi necessari per operare su questi.
Questo sembra più o meno come nella diapositiva, "i valori non hanno bisogno di metodi. Posso inviare valori senza codice e stai bene".