Định nghĩa trạng thái của một đối tượng trong OOP


11

Tôi cần một định nghĩa ngắn gọn về "trạng thái của một đối tượng" trong lập trình hướng đối tượng (cho một bài báo).

Trong khoảng nửa ngày tôi đã tìm kiếm một bài báo mà tôi có thể trích dẫn về chủ đề này, nhưng tôi không thể tìm thấy nó. Tất cả các bài báo tôi tìm thấy hầu hết là các bài viết chung về lập trình hướng đối tượng và chúng không định nghĩa trạng thái của một đối tượng.

Tôi không chắc chắn, nhưng phỏng đoán tốt nhất của tôi là một cái gì đó như: Trạng thái của một đối tượng được xác định bởi trạng thái của các biến thể hiện của đối tượng.

Tôi đang tìm kiếm một định nghĩa về trạng thái của một đối tượng và / hoặc một tài liệu tham khảo về chủ đề này.

(btw, tôi có thể gọi khái niệm này là "trạng thái đối tượng" hay điều này không phổ biến?)


Tôi nghĩ rằng có chỗ cho sự mơ hồ ở đây, do đó bạn nên nêu trong bài viết của mình chính xác những gì _you _ có nghĩa là 'trạng thái'; nếu bạn không thể làm điều đó, có lẽ bạn không ở vị trí để phát hành bài báo của mình.
PJTraill

Câu trả lời:


9

Bạn có thể xem (và trích dẫn) cuốn sách "Phân tích và thiết kế hướng đối tượng" của G. Booch :

... Một đối tượng là một thực thể có trạng thái, hành vi và bản sắc. Cấu trúc và hành vi của các đối tượng tương tự được định nghĩa trong lớp chung của chúng. Các điều khoản thể hiện và đối tượng có thể thay thế cho nhau.

Chúng tôi sẽ xem xét các khái niệm về trạng thái, hành vi và bản sắc chi tiết hơn trong các phần tiếp theo. ...

Và có cả một tiểu mục mô tả khái niệm nhà nước :

... Từ ví dụ này, chúng tôi có thể hình thành định nghĩa cấp thấp sau đây.

Trạng thái của một đối tượng bao gồm tất cả các thuộc tính (thường là tĩnh) của đối tượng cộng với các giá trị hiện tại (thường là động) của mỗi thuộc tính này ...


4
Mờ, như thường lệ. Điều mà Gian hàng có thể muốn nói: một trạng thái là sự gán giá trị cho các biến đó.
Revierpost

3

Bạn cũng sẽ muốn ghi nhớ rằng trạng thái của một đối tượng là một thực thể "trừu tượng", được xác định bởi những gì có thể quan sát được bằng các phương thức. Chẳng hạn, một đối tượng thực hiện bảng băm có trạng thái của nó, tập hợp các giá trị được lưu trữ trong bảng băm, không phải tất cả các chi tiết biểu diễn bên trong.


1

IBM có một thuật ngữ định nghĩa từ "trạng thái" trong một số định nghĩa khác nhau rất giống nhau. Họ không nói rõ rằng chúng có liên quan đến Lập trình hướng đối tượng nhưng người ta có thể ngoại suy và sử dụng chúng trong bối cảnh đó.

Def 3: Một giai đoạn trong vòng đời của một đối tượng xác định trạng thái của đối tượng đó.

Def 5: Một điều kiện hoặc tình huống trong vòng đời của một đối tượng trong đó nó thỏa mãn một số điều kiện, thực hiện một số hoạt động hoặc chờ đợi một sự kiện nào đó.

Def 8: Một đặc tính của một đối tượng được thể hiện trong các thành viên dữ liệu công khai và riêng tư của nó và có thể được chia thành hai loại: trạng thái thiết yếu và trạng thái không thiết yếu.

Def 9: Trong một máy trạng thái kinh doanh, một trong nhiều giai đoạn riêng lẻ được tổ chức theo trình tự để tạo một giao dịch kinh doanh.

Def 10: Một điều kiện trong đó mạch vẫn duy trì cho đến khi áp dụng một xung phù hợp.

Webster's New World College Dictionary định nghĩa 'trạng thái' là:

Một tập hợp các tình huống hoặc thuộc tính đặc trưng cho một người hoặc vật tại một thời điểm nhất định; cách hay hình thức hiện hữu: điều kiện

Mẫu số chung của tất cả những điều này là thời gian. Nhà nước thay đổi khi thời gian tiến triển. Đó là bản chất của các biến. Nếu ai đó muốn hỏi, "tình trạng hiện tại của bạn là gì?" Bạn có thể nói hôm nay bạn đã kết hôn và ngày mai bạn có thể độc thân.

Xem xét tất cả các định nghĩa này, người ta có thể ngoại suy 'trạng thái' đó là cách mà một đối tượng tồn tại tại một thời điểm cụ thể được xác định bởi các giá trị của các thuộc tính của nó, cụ thể là thuộc tính / biến.

Tôi không nghĩ nó đơn giản hơn thế.


Điều này đáng giá một vài phiếu, vì nó làm cho tiềm năng mơ hồ rõ ràng hơn các câu trả lời khác.
PJTraill

Re nhận xét trước đây của tôi: Tôi đã thêm một câu trả lời của riêng tôi để mô tả sự mơ hồ nhiều hơn.
PJTraill

1

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 Carsẽ bao gồm một số Link-objects, chứa con trỏ tới tiếp theo (và có thể trước đó) Linkmặ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 Carcó 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_Circlekhô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.


0

Một hệ thống hướng đối tượng tích hợp các điều khoản của mã và dữ liệu bằng cách sử dụng khái niệm "đối tượng". Một đối tượng có trạng thái (dữ liệu) và hành vi (mã). Do đó, các trạng thái của đối tượng là các thể hiện (biến) bên trong đối tượng chứa dữ liệu.


Điều này là đúng nhưng nó không phải là để thêm rất nhiều vào các câu trả lời hiện có.
David Richerby

1
Có lẽ nó sẽ dễ hiểu đối với ai đó :)
Syed MEhran Hussain 31/12/14

1
Cái này sai. Những gì bạn muốn nói, tôi nghĩ: một trạng thái là sự gán giá trị cho các biến đó.
Revierpost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.