In der objektorientierten und funktionalen Programmierung ist ein unveränderliches Objekt ein Objekt, dessen Status nach seiner Erstellung nicht mehr geändert werden kann. Die öffentliche API eines unveränderlichen Objekts garantiert, dass es sich während seiner Lebensdauer gleich verhält. In einigen Fällen wird ein Objekt als unveränderlich angesehen, selbst wenn sich intern verwendete Attribute ändern, der Status des Objekts jedoch von außen unverändert erscheint. Unten finden Sie ein Beispiel für eine grundlegende unveränderliche Klasse:
Klasse Benutzer {
privates Finale Long Ich würde;
private letzte Zeichenfolge Name;
Benutzer (lang Identifikation Schnur Name) {
Dies.id = Ich würde;
Dies.Name = Name;
}}
Alle Felder sind endgültig, was bedeutet, dass dem Compiler mitgeteilt wird, dass sich ihre Werte nach der Initialisierung nicht ändern dürfen. Alle Feldwerte werden dann an den Konstruktor übergeben.
Unveränderliche Objektvorteile
Da das Objekt unveränderlich ist, wissen Benutzer genau, was sie von ihm erwarten können. Der Code kann nicht geändert werden. Dies bedeutet, dass keine Inkonsistenzen auftreten können, die zu Laufzeitfehlern führen können. Unveränderliche Objekte sind threadsicher, sodass Synchronisationsprobleme vermieden werden. Sie sind einfacher zu entwerfen, zu implementieren und zu verwenden als veränderbare Klassen.
Sobald ein unveränderliches Objekt erstellt und überprüft wurde, kann kein anderer Thread oder Hintergrundprozess das Objekt ohne das direkte Wissen eines Benutzers ändern. Dies ist nützlich für Programme, die eine hohe Sicherheit benötigen. Wenn ein Problem auftritt, ist das Debuggen mit unveränderlichen Objekten einfacher, da der Ursprung eines Fehlers leicht verfolgt werden kann.
Unveränderliche vs. veränderbare Objekte
Während unveränderliche Objekte ihren Status nicht ändern können, können veränderbare Objekte dies. Veränderbare Objekte bieten Methoden zum Ändern des Inhalts eines Objekts und sind nicht so threadsicher wie unveränderliche Objekte.
Beispiele für veränderbare Objekte in Java sind StringBuilder und java.util.Date. Beispiele für unveränderliche Objekte sind alle Legacy-Klassen, Wrapper-Klassen und String-Klassen.
In Python sind Beispiele für veränderbare Typen list, dict und set. Unveränderliche Typen in Python sind int, float, bool, string, unicode und tuple.