In Sprachen wie Java und C ++ geben wir Konstruktoren Parameter.
Wie machst du das in Pharo Smalltalk?
Ich möchte etwas wie
%Vor%Oder ist das schlechte Praxis und sollte ich immer tun
%Vor%Die kurze Antwort ist, dass Sie in Smalltalk ziemlich genau dasselbe machen können. Aus dem aufrufenden Code würde es aussehen:
%Vor% Die lange Antwort ist, dass Sie in Smalltalk keine Konstruktoren haben, zumindest nicht in dem Sinne, dass Sie eine spezielle Nachricht haben, die nach der Klasse benannt ist. Was Sie in Smalltalk tun, ist die Definition von Nachrichten auf Klassenebene (d. H. Nachrichten, die von der Klasse verstanden werden, nicht die Instanz [*]), in denen Sie Ihre Instanzen instanziieren und konfigurieren können. Angenommen, Ihre Color
-Klasse hat eine name
-Instanzvariable und einen Setter für sie, die #named:
-Methode würde wie folgt implementiert:
Einige Dinge zu beachten:
#new
, um eine neue Instanz zu erstellen. Sie können sich die Nachricht #new
als primitiven Weg zum Erstellen von Objekten vorstellen (Hinweis: Sie können die Implementierer der Nachricht #new
durchsuchen, um zu sehen, wie sie implementiert wird). Color fromHexa:
) erstellen oder im Voraus erstellte erstellen (z. B. Color blue
). Color new
ausführen. Wenn Sie dieses Verhalten verbieten möchten, müssen Sie die #new
-Klassennachricht überschreiben. Es gibt viele gute Bücher, die Sie über Smalltalk-Grundlagen in Stefs kostenlosen Online-Smalltalk-Büchern
lesen können >[*] Dies ist aufgrund der orthogonalen Natur von Smalltalk ziemlich natürlich, da alles (einschließlich Klassen) ein Objekt ist. Wenn Sie interessiert sind, lesen Sie Kapitel 13 von Pharo by Example oder einen anderen Verweis auf Klassen und Metaklassen in Smalltalk.
HTH
In Smalltalk sind alle Mitgliedsfelder streng vertraulich, und um ihnen zuzuweisen, müssen Sie Zuweisungsmethoden definieren.
%Vor%Dann könnten Sie Ihr Objekt wie folgt erstellen:
%Vor%Zur Reduzierung der Ausführlichkeit wird häufig die Factory-Methode verwendet:
%Vor%Damit könnten Sie neue Objekte wie folgt erstellen:
%Vor%