在大多数OOP语言中,对象通常是可变的,只有少数例外(例如,python中的元组和字符串)。在大多数功能语言中,数据是不可变的。
可变对象和不可变对象都带来了它们自己的优点和缺点的完整列表。
有一些语言试图将两个概念结合起来,例如scala,其中您拥有(明确声明的)可变和不可变的数据(如果我错了,请更正我,我对scala的了解远远超过了限制)。
我的问题是:在OOP上下文中,完全(原文如此)不变性(即对象一旦创建就不能变异)是否有意义?
是否有这种模型的设计或实现?
基本上,(完整的)不变性和OOP是对立的还是正交的?
动机:在OOP中,您通常对数据进行操作,更改(变异)基础信息,并在这些对象之间保留引用。例如,类的对象Person
具有father
引用另一个Person
对象的成员。如果更改父亲的名字,则该子对象立即可见,无需更新。由于不可变,您将需要为父亲和孩子构造新的对象。但是与共享对象,多线程,GIL等相比,您将减少很多麻烦。