Termin „ stan ” może być używany w różnych sensach, które mogą nie być nawet podatne na precyzyjną definicję. Dlatego też ważne jest, aby zawierać definicję w swoim artykule, aby całkiem jasne, jak ty używali terminu. Poniżej nie oferuję unikalnej definicji stanu obiektu, ale raczej próbuję naszkicować wiele sposobów myślenia o nim, które mogą być odpowiednie w różnych kontekstach.
Najpierw jednak musisz pomyśleć, co rozumiesz przez „ obiekt ”: czy myślisz o obiekcie konceptualnym, tj. O jakiejś jednostce, którą próbujesz wymodelować, czy o instancji klasy w określonym programie; być może chcesz też pomyśleć o stanie zmiennej, która w różnych momentach może odnosić się do różnych obiektów lub systemu, może być dostępna za pośrednictwem określonego interfejsu użytkownika.
Część trudności w zdefiniowaniu stanu obiektu w OOP polega na tym, że kiedy modelujemy byty w określonym języku, język ten często nie pozwala nam odróżniać atrybutów obiektu, które są koncepcyjnie częścią tego samego bytu od innych, które nie są. Na przykład, połączona lista Carbędzie składać się z wielu Link-obiektów, które zawierają wskaźniki do następnego (i być może poprzedniego), Linkchociaż koncepcyjnie lista jest pojedynczym obiektem; linki mogą być również osadzone wCar-obiekty lub zawierają do nich wskaźniki, ale w tym przypadku połączone obiekty są koncepcyjnie odrębne, a nie częścią listy; jednak na liście ostatnich zmian zmiany mogą występować tylko na liście i być uważane za jej część. W tych różnych przypadkach musimy zdecydować, czy uważamy, że stan jednego obiektu obejmuje stan połączonych obiektów. Ponadto, Carmoże mieć link do Registering_Authority- prawdopodobnie nie uważamy, aby stan samochodu zmienił się, gdy organ rejestrujący zmieni adres URL swojej strony internetowej. O ile język implementacji nie pozwoli nam rozróżnić różnych rodzajów linków, nie będzie możliwe stworzenie ogólnej definicji stanu obiektu w odniesieniu do samego języka.
W „ zewnętrzny ” lub „ funkcjonalny ” stan można określić jako „jak się zachowuje”, ee.g. jak reaguje na wywołania metod lub interfejs użytkownika. W przypadku obiektu jako instancji klasy ta definicja zależy od typu, do którego obiekt jest postrzegany jako należący: postrzegany jako Circle, kolorColoured_Circlenie jest widoczny, a zatem nie ma znaczenia dla jego stanu. Trudność polega na tym, że „jak reaguje” może wymagać zdefiniowania w kategoriach zwracanych wartości, a te „wartości” mogą być stanami innych obiektów. Jednym ze sposobów sformalizowania tego jest stwierdzenie, że dwa stany obiektu są takie same, jeśli wszystkie możliwe przyszłe wykonania jakiegoś systemu, w którym jest on osadzony, skutkują tym samym odwzorowaniem między wejściami do tego systemu a wyjściami z niego. Ten system zamykający może wymagać systemu niezależnego, zdolnego do wykonywania niezależnego od środowiska; z drugiej strony można by pozwolić, aby był tak mały jak sam przedmiot. W każdym razie podejście matematyczne polega na zdefiniowaniu stanu jako klasy równoważności
Określenia „ wewnętrzny ” stan może być określony jako stan, w reprezentacji. Pierwsza próba jest pozornie okrągła, ale być może pomocna: „Wewnętrznym stanem obiektu jest stan jego członków”. W tym przypadku musimy zadbać o to, aby odróżnić znaczące aspekty reprezentacji od nieistotnych: na najniższym poziomie reprezentacja obiektu może równie dobrze obejmować adresy innych obiektów, ale jest mało prawdopodobne, aby rozważyć zmianę takiego adresu jako zmiana stanu. Z drugiej strony, zmiana stanu pamięci podręcznej dla wyniku zapytania, chociaż nie ma znaczenia dla stanu funkcjonalnego (jak opisano powyżej), będzie ważna przy rozważaniu testów wydajności.