Thuật ngữ ' trạng thái ' có thể được sử dụng theo nhiều nghĩa khác nhau, thậm chí có thể không dễ bị ảnh hưởng bởi một định nghĩa chính xác. Do đó, điều quan trọng là bạn phải bao gồm một định nghĩa trong bài viết của mình, để làm rõ cách bạn sử dụng thuật ngữ này. Trong phần sau tôi không đưa ra một định nghĩa duy nhất về trạng thái của một đối tượng mà chỉ cố gắng phác thảo một số cách nghĩ về nó, có thể phù hợp trong các bối cảnh khác nhau.
Tuy nhiên, trước tiên, bạn cần nghĩ về ý nghĩa của ' đối tượng ': bạn đang nghĩ về một đối tượng khái niệm, tức là một số thực thể bạn đang cố gắng mô hình hóa, hoặc về một thể hiện của một lớp trong một chương trình cụ thể; có lẽ bạn cũng muốn nghĩ về trạng thái của một biến có thể tại các thời điểm khác nhau đề cập đến các đối tượng khác nhau hoặc về một hệ thống, có thể được truy cập thông qua một giao diện người dùng nhất định.
Một phần khó khăn trong việc xác định trạng thái của một đối tượng trong OOP là khi chúng ta mô hình hóa các thực thể trong một ngôn ngữ cụ thể, ngôn ngữ đó thường không cho phép chúng ta phân biệt các thuộc tính đối tượng là một phần khái niệm của cùng một thực thể với các thực thể khác. Ví dụ, một danh sách liên kết Car
sẽ bao gồm một số Link
-objects, chứa con trỏ tới tiếp theo (và có thể trước đó) Link
mặc dù về mặt khái niệm danh sách là một đối tượng; các liên kết cũng có thể được nhúng vàoCar
-objects hoặc chứa con trỏ cho chúng, nhưng trong trường hợp này, các đối tượng được liên kết là riêng biệt về mặt khái niệm chứ không phải là một phần của danh sách; trong một danh sách các thay đổi gần đây, bất chấp, những thay đổi chỉ có thể có trong danh sách và được coi là một phần của nó. Trong những trường hợp khác nhau này, chúng ta phải quyết định xem chúng ta có xem xét trạng thái của một đối tượng để bao gồm trạng thái của các đối tượng được liên kết hay không. Hơn nữa, một Car
có thể có một liên kết đến một Registering_Authority
- chúng tôi có thể không xem xét tình trạng của xe để thay đổi khi cơ quan đăng ký của nó thay đổi URL của trang web của nó. Trừ khi ngôn ngữ triển khai không cho phép chúng ta phân biệt các loại liên kết khác nhau, sẽ không thể đưa ra định nghĩa chung về trạng thái của một đối tượng chỉ bằng ngôn ngữ.
Các ' bên ngoài ' hoặc ' chức năng ' nhà nước có thể được định nghĩa là 'cách ứng xử', ee.g. làm thế nào nó phản ứng với các yêu cầu phương thức hoặc giao diện người dùng. Đối với một đối tượng là một thể hiện của lớp, định nghĩa này phụ thuộc vào loại mà đối tượng được xem là thuộc về: được xem như một Circle
, màu của mộtColoured_Circle
không nhìn thấy được, và do đó không liên quan đến trạng thái của nó. Một khó khăn với điều này là 'cách nó phản ứng' có thể cần được xác định theo các giá trị được trả về và các 'giá trị' này có thể là trạng thái của các đối tượng khác. Một cách để chính thức hóa điều này là nói rằng hai trạng thái của một đối tượng là như nhau nếu tất cả các thực thi trong tương lai có thể của một số hệ thống mà nó được nhúng trong cùng một ánh xạ từ đầu vào đến hệ thống đó đến đầu ra từ nó. Hệ thống kèm theo này có thể được yêu cầu là một hệ thống khép kín, có khả năng thực thi độc lập với môi trường của nó; mặt khác, người ta có thể cho phép nó nhỏ như chính đối tượng trong câu hỏi. Trong mọi trường hợp, một cách tiếp cận toán học sau đó là xác định trạng thái là một lớp tương đương của
Các ' nội ' nhà nước có thể được định nghĩa là tình trạng của đại diện. Nỗ lực đầu tiên rõ ràng là hình tròn nhưng có lẽ hữu ích: 'Trạng thái bên trong của một đối tượng là trạng thái của các thành viên'. Ở đây chúng ta cần lưu ý để phân biệt các khía cạnh quan trọng của biểu diễn với các khía cạnh không đáng kể: ở mức thấp nhất, việc thể hiện một đối tượng cũng có thể bao gồm địa chỉ của các đối tượng khác, nhưng không hữu ích khi xem xét thay đổi địa chỉ như vậy như một sự thay đổi trong trạng thái. Mặt khác, sự thay đổi trạng thái của bộ đệm cho kết quả của truy vấn, trong khi nó không tạo ra sự khác biệt nào với trạng thái chức năng (như được mô tả ở trên), sẽ rất quan trọng khi xem xét các bài kiểm tra hiệu năng.