Nella maggior parte dei linguaggi OOP, gli oggetti sono generalmente modificabili con un insieme limitato 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 linguaggi che cercano di sposare entrambi i concetti come ad es. scala dove hai (esplicitamente dichiarato) dati mutabili e immutabili (correggimi se ho torto, la mia conoscenza di scala è più che limitata).
La mia domanda è: Immutabilità completa (sic!) -i.e. nessun oggetto può mutare una volta creato, avere senso in un contesto OOP?
Esistono progetti o implementazioni di tale modello?
Fondamentalmente, sono (completa) immutabilità e OOP opposti o ortogonali?
Motivazione: In OOP normalmente usi i dati on , modificando (mutando) le informazioni sottostanti, mantenendo i riferimenti tra questi oggetti. Per esempio. un oggetto di classe Person
con un membro father
che fa riferimento a un altro oggetto Person
. Se cambi il nome del padre, questo è immediatamente visibile all'oggetto figlio senza necessità di aggiornamento. Essendo immutabile avresti bisogno di costruire nuovi oggetti sia per il padre che per il bambino. Ma avresti molto meno kerfuffle con oggetti condivisi, multi-threading, GIL, ecc.