Sự hiểu biết của tôi là thuật ngữ "referential transparency" chỉ có thể được áp dụng cho mã chức năng. Tuy nhiên, một lời gọi phương thức trên một đối tượng trong mã hướng đối tượng có thể có một thuộc tính tương tự, đó là giá trị trả về của phương thức và trạng thái của đối tượng sau khi gọi phương thức chỉ phụ thuộc vào trạng thái của đối tượng trước cuộc gọi và đối số của phương thức.Điều gì để gọi tương đương với "tính minh bạch tham chiếu" của OOP?
ví dụ: chức năng tham chiếu minh bạch:
i = foo(n, m);
// return value depends only on n, m
OO "tham chiếu minh bạch":
i = obj.foo(n, m);
// return value, and subsequent state of obj, depends
// only on initial state of obj, n, m
Có một tên cho khách sạn này?
Nếu tình trạng obj
không thay đổi trong suốt cuộc gọi đến foo()
, sau đó là "hướng đối tượng" phong cách tương đương với dạng hàm nếu function overloading được hỗ trợ kể từ khi nó có thể được viết lại như sau:
i = foo(obj, n, m);
// return value depends only on obj, n, m
Tuy nhiên , là khá phổ biến cho trạng thái của obj
để thay đổi trong một cuộc gọi phương pháp, vì vậy tôi không chắc chắn nếu điều này giúp phân tích ...
Ngoài ra, nếu a) chương trình của bạn phụ thuộc vào nhận dạng đối tượng của kết quả của 'o.foo (a) ', hoặc b)' o.foo (a) 'có một số tác dụng phụ như I/O, bạn không thể thay thế cuộc gọi. – retronym
Tôi cho rằng thật công bằng khi nói rằng tính minh bạch tham chiếu hoàn toàn có thể thực hiện được với mã OO. (Câu trả lời chuẩn có thể có thuộc tính này.) Nhưng câu hỏi chính của tôi là liệu có một tên cho thuộc tính yếu hơn nhưng vẫn hữu ích sau khi gọi phương thức, giá trị trả về và trạng thái cuối cùng của 'o' chỉ phụ thuộc vào trạng thái ban đầu của 'o' và đối số của phương thức. – mjs
Getters tiêu chuẩn được nhấn mạnh ** không ** liên tục minh bạch. Tính minh bạch tham chiếu có nghĩa là kết quả của bạn phụ thuộc vào các tham số được truyền vào ** chỉ **. Một getter ** có ** không có tham số pass-in (trừ khi bạn muốn bắt đầu nói về các tham số ngụ ý như 'this' /' self' trong trường hợp bạn đang thiếu điểm "trong suốt") và giá trị trả về của chúng phụ thuộc vào trạng thái của đối tượng liên quan trong cuộc gọi, một thực thể bên ngoài chức năng. Tính minh bạch tham chiếu là, về cơ bản, "bạn có được những gì bạn thấy và không có gì nhiều hơn". Nếu có những phần không nhìn thấy, thì nó không minh bạch. –