Ich komme aus einem OOP-Hintergrund (Java) und lerne Scala alleine. Ich kann die Vorteile der Verwendung unveränderlicher Objekte zwar leicht erkennen, aber es fällt mir schwer, zu sehen, wie man eine ganze Anwendung so gestalten kann. Ich gebe ein Beispiel:
Angenommen, ich habe Objekte, die "Materialien" und ihre Eigenschaften darstellen (ich entwerfe ein Spiel, also habe ich dieses Problem wirklich), wie Wasser und Eis. Ich hätte einen "Manager", der alle derartigen Materialinstanzen besitzt. Eine Eigenschaft wäre der Gefrier- und Schmelzpunkt und was das Material einfriert oder schmilzt.
[BEARBEITEN] Alle materiellen Instanzen sind "Singleton", ähnlich einer Java-Enumeration.
Ich möchte, dass "Wasser" sagt, dass es bei 0 ° C zu "Eis" gefriert und "Eis" sagt, dass es bei 1 ° C zu "Wasser" schmilzt. Wenn jedoch Wasser und Eis unveränderlich sind, können sie nicht als Konstruktorparameter aufeinander verweisen, da einer von ihnen zuerst erstellt werden muss und der andere nicht als Konstruktorparameter auf den noch nicht existierenden anderen verweisen kann. Ich könnte das lösen, indem ich beiden einen Verweis auf den Manager gebe, damit sie ihn abfragen können, um die andere Materialinstanz zu finden, die sie jedes Mal benötigen, wenn sie nach ihren Gefrier- / Schmelzeigenschaften gefragt werden, aber dann habe ich das gleiche Problem zwischen den Managern und die Materialien, die einen Bezug zueinander benötigen, aber nur für eines von ihnen im Konstruktor bereitgestellt werden können, sodass weder der Manager noch das Material unveränderlich sein können.
Kann man dieses Problem nicht umgehen, oder muss ich "funktionale" Programmiertechniken oder ein anderes Muster verwenden, um es zu lösen?
h2o
Material