Ich denke, Folie 13 bei seiner Präsentation ( Der Wert der Werte ) hilft, dies zu verstehen:
Werte
- Nicht brauchen Methoden
- Ich kann Ihnen Werte ohne Code senden
und es geht Ihnen gut
Nach meinem Verständnis schlägt Hickey vor, dass ich, wenn ich beispielsweise den Wert, den Sie mir gesendet haben , verdoppeln muss, einfach Code schreibe, der so aussieht
MyValue = Double(YourValue)
Sie sehen, obiger Code ist derselbe, egal welchen Wert Sie gesendet haben - eine Art perfekte Wiederverwendung .
Wie würde dies nun in der Sprache mit Objekten und Schnittstellen aussehen?
Doublable MyValue = YourValue.Double()
Oh, Moment mal! Was ist, wenn YourValue
nicht implementiert Doublable
? nicht, dass es nicht verdoppelt werden kann, es mag perfekt sein, aber ... was ist, wenn es nur keine Methode gibt Double
? (Was ist, wenn es eine Methode namens say gibt TwiceAsMuch
?)
Oh, wir haben ein Problem. YourValue.Double
funktioniert nicht mehr , kann nicht mehr wiederverwendet werden. Nach meiner Lektüre der obigen Folie hat Hickey damit gemeint: "All diese Schnittstellen töten Ihre Wiederverwendung!"
Sie sehen, Interfaces setzen voraus, dass Objekte "zusammen mit ihren Methoden" und Code, der mit diesen arbeitet, weitergegeben werden. Um Objekte zu verwenden, muss man wissen, wie man diesen Code aufruft und welche Methode man aufruft .
Wenn die erwartete Methode fehlt, liegt ein Problem vor, obwohl die gewünschte Operation semantisch für ein Objekt durchaus sinnvoll ist. Wie in der Präsentation angegeben, benötigen Werte keine Methoden ("Ich kann Ihnen Werte ohne Code senden, und es geht Ihnen gut"), sodass Sie Code schreiben können, der sich allgemein mit ihnen befasst.
Randnotiz: Der Gedanke, codelose Werte weiterzugeben, erinnert mich irgendwie an ein Flyweight-Muster in OOP.
ein Objekt, das die Speichernutzung minimiert, indem so viele Daten wie möglich mit anderen ähnlichen Objekten geteilt werden; Es ist eine Möglichkeit, Objekte in großer Anzahl zu verwenden, wenn eine einfache wiederholte Darstellung eine nicht akzeptable Menge an Speicher benötigt ... Fliegengewichtobjekte sind per Definition Wertobjekte . Die Identität der Objektinstanz spielt keine Rolle, daher werden zwei Fliegengewicht-Instanzen mit demselben Wert als gleich angesehen ...
Ich habe gesehen, dass die Verwendung von Fliegengewichten in der Regel denselben Ansatz verfolgt, bei dem der Code (Methoden, Schnittstellen) von Objekten gestrippt und Dinge herumgereicht wurden, und zwar auch Werte ohne Code.
Das fühlt sich ziemlich ähnlich an wie auf der Folie: "Werte brauchen keine Methoden. Ich kann Ihnen Werte ohne Code senden und es geht Ihnen gut."