Je pense que la diapositive 13 de sa présentation ( La valeur des valeurs ) aide à comprendre ceci:
Valeurs
- Pas besoin de méthodes
- Je peux vous envoyer des valeurs sans code
et tout va bien
D'après ma compréhension, Hickey suggère que si je dois, par exemple, doubler la valeur que vous m'avez envoyée, j'écris simplement du code ressemblant à
MyValue = Double(YourValue)
Vous voyez, le code ci-dessus est le même, peu importe la valeur que vous avez envoyée - une sorte de réutilisation parfaite .
Maintenant, à quoi cela ressemblerait-il dans le langage ayant des objets et des interfaces?
Doublable MyValue = YourValue.Double()
Oh, attendez! Et si YourValue
ne met pas en œuvre Doublable
? non pas que cela ne puisse pas être doublé, ce pourrait être parfaitement mais ... et s'il n'y avait pas de méthode Double
? (et s'il y a une méthode appelée say TwiceAsMuch
?)
Euh oh on a un problème. YourValue.Double
ne fonctionnera pas, il ne peut plus être réutilisé . D'après ma lecture de la diapositive ci-dessus, c'est à propos de ce que Hickey voulait dire quand il disait: "Toutes ces interfaces tuent la réutilisation!"
Vous voyez, les interfaces supposent que les objets sont transmis "avec leurs méthodes", ainsi que le code qui les exploite. Pour utiliser des objets, il faut comprendre comment appeler ce code, quelle méthode appeler.
Lorsque la méthode attendue est manquante, il y a un problème, même si sémantiquement , l'opération souhaitée est parfaitement logique pour un objet. Comme indiqué dans la présentation, les valeurs n'ont pas besoin de méthodes ("je peux vous envoyer des valeurs sans code et tout va bien"), ce qui permet d'écrire du code les traitant de manière générique.
Note latérale: la notion de transmission de valeurs sans code me rappelle en quelque sorte un motif de poids mouche dans la POO.
un objet qui minimise l'utilisation de la mémoire en partageant autant de données que possible avec d'autres objets similaires; c'est une façon d'utiliser des objets en grand nombre lorsqu'une représentation répétée utiliserait une quantité de mémoire inacceptable ... Les objets Flyweight sont par définition des objets de valeur . L’identité de l’instance d’objet n’ayant pas d’importance, deux instances Flyweight de même valeur sont considérées comme égales ...
Les utilisations Flyweight que j'ai observées suivaient généralement la même approche consistant à supprimer le code (méthodes, interfaces) des objets et à leur transmettre des informations, ainsi que des valeurs sans code , en s'attendant à ce que le code reçu dispose des moyens nécessaires pour les utiliser.
Cela ressemble beaucoup à la diapositive: "Les valeurs n'ont pas besoin de méthodes. Je peux vous envoyer des valeurs sans code et tout va bien".