Trong hầu hết các ngôn ngữ OOP, các đối tượng thường có thể thay đổi với một tập hợp ngoại lệ giới hạn (ví dụ: bộ dữ liệu và chuỗi trong python). Trong hầu hết các ngôn ngữ chức năng, dữ liệu là bất biến.
Cả hai đối tượng có thể thay đổi và bất biến đều mang lại một danh sách toàn bộ ưu điểm và nhược điểm của riêng chúng.
Có những ngôn ngữ cố gắng kết hôn với cả hai khái niệm như ví dụ scala nơi bạn có (được tuyên bố rõ ràng) dữ liệu có thể thay đổi và không thay đổi (vui lòng sửa cho tôi nếu tôi sai, kiến thức về scala của tôi bị hạn chế nhiều hơn).
Câu hỏi của tôi là: Liệu hoàn chỉnh (! Sic) không thay đổi -ie không có đối tượng có thể đột biến khi nó đã được created- thực hiện bất kỳ ý nghĩa trong bối cảnh OOP?
Có thiết kế hoặc thực hiện của một mô hình như vậy?
Về cơ bản, là (hoàn toàn) bất biến và OOP đối lập hay trực giao?
Động lực: Trong OOP bạn thường hoạt động trên dữ liệu, thay đổi (biến đổi) thông tin cơ bản, giữ các tham chiếu giữa các đối tượng đó. Ví dụ, một đối tượng của lớp Person
với một thành viên father
tham chiếu đến một Person
đối tượng khác . Nếu bạn thay đổi tên của người cha, điều này sẽ hiển thị ngay lập tức cho đối tượng con mà không cần cập nhật. Không thay đổi, bạn sẽ cần phải xây dựng các đối tượng mới cho cả cha và con. Nhưng bạn sẽ có ít kerfuffle hơn với các đối tượng được chia sẻ, đa luồng, GIL, v.v.