Đó là một vấn đề thực hiện so với ngụ ý . Các thuộc tính nằm trong OOP trước khi C ++ hoặc Java xuất hiện (chúng ở đó, với một chút gồ ghề xung quanh các cạnh, trong Simula và chúng là nền tảng cho Smalltalk). Các thực thể có thuộc tính khác về mặt khái niệm với các giá trị được đính kèm theo mã. Các tiền tố get & set trong một số quy ước ngôn ngữ chỉ phục vụ cho việc làm vũng nước; chúng làm cho bạn biết về sự khác biệt giữa các trường và thuộc tính, giả sử rằng các trường có thể được truy cập trực tiếp mà không cần get / set theo cách thành ngữ với ngôn ngữ và điều đó bị rò rỉ.
Toàn bộ quan điểm của OOP là đối xử với mọi thứ như thể chúng là các thực thể trong thế giới "thực", không chỉ là các cấu trúc với một số mã được trộn lẫn. Một lập trình viên khác cần biết rất ít về cách tôi đã thực hiện mọi thứ, và hoàn toàn không nên quan tâm đến giá trị nào trong số các giá trị khác nhau mà chúng được phép nhận và / hoặc thiết lập là thực và ảo. Nếu bạn chạy qua một vectơ của tôi, bạn không cần phải biết liệu tôi đang lưu trữ góc và độ lớn hay các thành phần thực và ảo bên trong đối tượng vector. Nếu tôi thay đổi đại diện trong V2.0 của thư viện của mình, nó sẽ không ảnh hưởng đến mã của bạn (mặc dù bạn có thể muốn tận dụng các tính năng mới thú vị). Tương tự, có các thuộc tính mà một thực thể có thể có phụ thuộc vào dữ liệu bên ngoài thực thể, nhưng đó là những đặc tính chắc chắn từ quan điểm từ vựng. Bạn hỏi mọi người "bạn bao nhiêu tuổi", chứ không phải "vui lòng thực hiện phép tính sẽ tiết lộ tuổi của bạn cho tôi", mặc dù bạn biết rằng dữ liệu có sẵn cho "đối tượng" đó là ngày sinh (một thành viên bất biến riêng tư) và ngày nay ngày (một tài sản môi trường công cộng, tăng tự động, phụ thuộc vào múi giờ, thời gian tiết kiệm ánh sáng ban ngày và Dòng ngày quốc tế). Tuổi là một tài sản, không phải là một phương pháp, mặc dù phải mất một số tính toán để đến đó và không thể (ngoại trừ trong các biểu diễn máy tính đồ chơi của những thứ có tuổi thọ giới hạn giả tạo) được lưu trữ dưới dạng một trường. mặc dù bạn biết rằng dữ liệu có sẵn cho "đối tượng" đó là ngày sinh (thành viên không thay đổi tư nhân) và ngày hôm nay (một tài sản môi trường gia tăng tự động, phụ thuộc vào múi giờ, thời gian tiết kiệm ánh sáng ban ngày và Dòng ngày quốc tế ). Tuổi là một tài sản, không phải là một phương pháp, mặc dù phải mất một số tính toán để đến đó và không thể (ngoại trừ trong các biểu diễn máy tính đồ chơi của những thứ có tuổi thọ giới hạn giả tạo) được lưu trữ dưới dạng một trường. mặc dù bạn biết rằng dữ liệu có sẵn cho "đối tượng" đó là ngày sinh (thành viên không thay đổi tư nhân) và ngày hôm nay (một tài sản môi trường gia tăng tự động, phụ thuộc vào múi giờ, thời gian tiết kiệm ánh sáng ban ngày và Dòng ngày quốc tế ). Tuổi là một tài sản, không phải là một phương pháp, mặc dù phải mất một số tính toán để đến đó và không thể (ngoại trừ trong các biểu diễn máy tính đồ chơi của những thứ có tuổi thọ giới hạn giả tạo) được lưu trữ dưới dạng một trường.
Thay vì nghĩ về các thuộc tính như là đứa con hoang của các lĩnh vực và phương thức, nó thỏa mãn hơn nhiều đối với các phương thức như một loại tài sản chuyên biệt - những thứ mà thực thể của bạn có thể làm hơn là những thứ mà chúng là. Mặt khác, bạn không xử lý khái niệm với đối tượng / thực thể, bạn đang xử lý các bộ sưu tập dữ liệu tình cờ có mã được đính kèm với chúng. Việc triển khai có thể giống hệt nhau, nhưng ý nghĩa là khác nhau.
Tuy nhiên, không cần phải nói rằng sự trừu tượng này phải trả giá. Nếu một lập trình viên sử dụng một lớp không thể biết liệu anh ta hoặc cô ta đang truy cập dữ liệu khi nó được lưu trữ hay nhận / thiết lập các giá trị cần được tính toán, thì sẽ có một mức độ mà ngôn ngữ cũng không nhất thiết là không chắc chắn (và do đó có thể yêu cầu mọi thứ yêu cầu mã phải trung gian giữa các bộ truy cập / bộ chọn và giá trị). Không có gì sai về mặt khái niệm với "cấu trúc mã" - chúng chắc chắn có thể hiệu quả hơn nhiều - nhưng chúng rò rỉ việc triển khai ở khắp mọi nơi, và đó là một trong những điều mà OOP cần phải loại bỏ.