Đến từ nền tảng OOP (Java), tôi đang tự học Scala. Mặc dù tôi có thể dễ dàng nhìn thấy những lợi thế của việc sử dụng các đối tượng bất biến riêng lẻ, tôi gặp khó khăn khi xem cách người ta có thể thiết kế toàn bộ ứng dụng như thế. Tôi sẽ đưa ra một ví dụ:
Giả sử tôi có các vật thể đại diện cho "vật liệu" và thuộc tính của chúng (Tôi đang thiết kế một trò chơi, vì vậy tôi thực sự có vấn đề đó), như nước và băng. Tôi sẽ có một "người quản lý" sở hữu tất cả các trường hợp vật liệu như vậy. Một đặc tính sẽ là điểm đóng băng và nóng chảy, và những gì vật liệu đóng băng hoặc tan chảy.
[EDIT] Tất cả các cá thể vật chất là "singleton", giống như một Enum Java.
Tôi muốn "nước" nói rằng nó đóng băng thành "băng" ở 0C và "băng" để nói rằng nó tan chảy thành "nước" ở 1C. Nhưng nếu nước và băng là bất biến, chúng không thể lấy tham chiếu cho nhau dưới dạng tham số của hàm tạo, bởi vì một trong số chúng phải được tạo trước và không thể tham chiếu đến tham số khác chưa có trong tham số của hàm tạo. Tôi có thể giải quyết điều này bằng cách cung cấp cho họ cả tài liệu tham khảo cho người quản lý để họ có thể truy vấn nó để tìm phiên bản vật liệu khác mà họ cần mỗi khi họ được yêu cầu về các đặc tính đóng băng / tan chảy của họ, nhưng sau đó tôi gặp vấn đề tương tự giữa người quản lý và các tài liệu, rằng chúng cần một tài liệu tham khảo cho nhau, nhưng nó chỉ có thể được cung cấp trong hàm tạo cho một trong số chúng, vì vậy người quản lý hoặc tài liệu không thể thay đổi được.
Là họ không có cách nào xung quanh vấn đề này, hay tôi cần sử dụng các kỹ thuật lập trình "chức năng", hoặc một số mô hình khác để giải quyết nó?
h2o
nguyên liệu