Nella maggior parte dei linguaggi OOP, gli oggetti sono generalmente mutabili con una serie limitata di eccezioni (come ad esempio tuple e stringhe in Python). Nella maggior parte dei linguaggi funzionali, i dati sono immutabili.
Sia gli oggetti mutabili che quelli immutabili portano un intero elenco di vantaggi e svantaggi.
Ci sono lingue che provano a sposare entrambi i concetti come ad esempio scala in cui si hanno (dichiarati esplicitamente) dati mutabili e immutabili (per favore correggimi se sbaglio, la mia conoscenza di scala è più che limitata).
La mia domanda è: Ha completa (sic!) Immutabilità -cioè nessun oggetto può mutare una volta che è stato created- alcun senso in un contesto OOP?
Esistono progetti o implementazioni di tale modello?
Fondamentalmente, l'immutabilità (completa) e gli OOP sono opposti o ortogonali?
Motivazione: In OOP normalmente operi sui dati, modificando (mutando) le informazioni sottostanti, mantenendo i riferimenti tra tali oggetti. Ad esempio un oggetto di classe Person
con un membro che fa father
riferimento a un altro Person
oggetto. Se si modifica il nome del padre, questo è immediatamente visibile all'oggetto figlio senza necessità di aggiornamento. Essendo immutabile, dovrai costruire nuovi oggetti per padre e figlio. Ma avresti molto meno kerfuffle con oggetti condivisi, multi-threading, GIL, ecc.