In den meisten OOP-Sprachen sind Objekte im Allgemeinen mit einer begrenzten Anzahl von Ausnahmen (wie z. B. Tupel und Zeichenfolgen in Python) veränderbar. In den meisten funktionalen Sprachen sind Daten unveränderlich.
Sowohl veränderbare als auch unveränderliche Objekte bringen eine ganze Reihe von Vor- und Nachteilen mit sich.
Es gibt Sprachen, die versuchen, beide Konzepte zu verbinden, wie z. B. Scala, bei denen Sie (explizit deklarierte) veränderbare und unveränderbare Daten haben (bitte korrigieren Sie mich, wenn ich mich irre, meine Kenntnisse über Scala sind mehr als begrenzt).
Meine Frage ist: Ist vollständige (sic!) Unveränderlichkeit - dh, kein Objekt kann sich ändern, wenn es einmal erstellt wurde - in einem OOP-Kontext sinnvoll?
Gibt es Entwürfe oder Implementierungen eines solchen Modells?
Sind (vollständige) Unveränderlichkeit und OOP grundsätzlich gegensätzlich oder orthogonal?
Motivation: In OOP Sie normal arbeiten auf Daten, Ändern (mutiert) , um die zugrunde liegenden Informationen, Referenzen zwischen den Objekten zu halten. ZB ein Klassenobjekt Person
mit einem Mitglied, das father
auf ein anderes Person
Objekt verweist . Wenn Sie den Namen des Vaters ändern, ist dies für das untergeordnete Objekt sofort sichtbar, ohne dass eine Aktualisierung erforderlich ist. Da Sie unveränderlich sind, müssen Sie neue Objekte für Vater und Kind konstruieren. Mit gemeinsamen Objekten, Multithreading, GIL usw. hätten Sie jedoch viel weniger Probleme.