ほとんどのOOP言語では、オブジェクトは通常、限られた例外セット(たとえば、Pythonのタプルや文字列など)を使用して変更可能です。ほとんどの関数型言語では、データは不変です。
可変オブジェクトと不変オブジェクトの両方が、独自の長所と短所の完全なリストをもたらします。
たとえば、(明示的に宣言された)可変データと不変データがあるscalaのような両方の概念を結合しようとする言語があります(間違っている場合は修正してください、scalaの知識は限られています)。
私の質問は次のとおりです。完全な(原文のまま!)不変性-つまり、オブジェクトが作成された後はオブジェクトを変更できません-は、OOPコンテキストで意味をなしますか?
そのようなモデルの設計または実装はありますか?
基本的に、(完全な)不変性とOOPは反対ですか、それとも直交ですか?
動機:OOPでは通常、データを操作し、基礎となる情報を変更(変更)し、それらのオブジェクト間の参照を保持します。たとえば、別のオブジェクトを参照Person
するメンバーを持つクラスのオブジェクト。父親の名前を変更すると、更新の必要なく、これはすぐに子オブジェクトに表示されます。不変なので、父と子の両方に新しいオブジェクトを構築する必要があります。ただし、共有オブジェクト、マルチスレッド、GILなどを使用すると、kerfuffleがはるかに少なくなります。father
Person