Definicja stanu obiektu w OOP

11

Potrzebuję zwięzłej definicji „stanu obiektu” w programowaniu obiektowym (na papierze).

Przez około pół dnia szukałem artykułu, który mogę zacytować na ten temat, ale nie mogłem go znaleźć. Wszystkie artykuły, które znalazłem, były w większości ogólnymi artykułami na temat programowania obiektowego i nie definiowały stanu obiektu.

Nie jestem pewien, ale najlepiej zgaduję, że: Stan obiektu jest określony przez stan zmiennych instancji obiektu.

Szukam definicji stanu obiektu i / lub referencji na ten temat.

(przy okazji, czy mogę nazywać tę koncepcję „stanem obiektu”, czy jest to rzadkie?)

mrsteve
źródło
Myślę, że jest tu miejsce na dwuznaczność, dlatego powinieneś był dokładnie określić w swoim artykule, co rozumiesz przez „państwo”; jeśli nie możesz tego zrobić, być może nie jesteś w stanie zwolnić swojego papieru.
PJTraill

Odpowiedzi:

9

Możesz zajrzeć do (i zacytować) książki „Object-Oriented Analysis and Design” G. Boocha :

... Obiekt jest bytem, ​​który ma stan, zachowanie i tożsamość. Struktura i zachowanie podobnych obiektów są zdefiniowane we wspólnej klasie. Pojęcia instancja i obiekt są wymienne.

Rozważymy pojęcia stanu, zachowania i tożsamości bardziej szczegółowo w poniższych sekcjach. ...

I cały podrozdział opisuje pojęcie stanu :

... Z tego przykładu możemy utworzyć następującą definicję niskiego poziomu.

Stan obiektu obejmuje wszystkie (zwykle statyczne) właściwości obiektu oraz bieżące (zwykle dynamiczne) wartości każdej z tych właściwości ...

Vor
źródło
4
Rozmyte, jak zwykle. Co prawdopodobnie Booth miał na myśli: stan to przypisanie wartości do tych zmiennych.
reinierpost
3

Warto również pamiętać, że stan obiektu jest bytem „abstrakcyjnym”, określonym przez to, co można zaobserwować metodami. Na przykład obiekt, który implementuje tablicę skrótów ma jako swój stan kolekcję wartości przechowywanych w tablicy skrótów, a nie wszystkie szczegóły reprezentacji wewnętrznej.

Uday Reddy
źródło
2

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 „ funkcjonalnystan 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ętrznystan 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.

PJTraill
źródło
To jedna z najbardziej przydatnych odpowiedzi na temat stanu obiektu, który znalazłem. Jest jeden dokument PDF online i to w większości. Zwłaszcza część o reprezentacji (stanie wewnętrznym). Otwiera mi oczy i sprawia, że ​​myślę o obiekcie inaczej.
Miroslav Trninic
1

IBM ma słownik, który definiuje słowo „stan” w kilku różnych definicjach, które są do siebie bardzo podobne. Nie mówią konkretnie, że są związane z programowaniem obiektowym, ale można ekstrapolować i używać ich w tym kontekście.

Def 3: Etap w cyklu życia obiektu, który identyfikuje status tego obiektu.

Def 5: Stan lub sytuacja w trakcie życia obiektu, w trakcie której spełnia on pewien warunek, wykonuje jakąś czynność lub czeka na jakieś zdarzenie.

Def 8: Charakterystyka obiektu, która przejawia się w elementach danych publicznych i prywatnych i może być podzielona na dwie kategorie: stan zasadniczy i stan nieistotny.

Def 9: W maszynie stanu biznesowego jeden z kilku dyskretnych pojedynczych etapów, które są zorganizowane w kolejności w celu skomponowania transakcji biznesowej.

Def 10: Stan, w którym obwód pozostaje do momentu zastosowania odpowiedniego impulsu.

Słownik New World College Webstera definiuje „stan” jako:

Zestaw okoliczności lub atrybutów charakteryzujących osobę lub rzecz w danym czasie; sposób lub forma bycia: warunek

Ich wspólnym mianownikiem jest czas. Stan zmienia się w miarę upływu czasu. Taka jest natura zmiennych. Gdyby ktoś zapytał: „Jaki jest twój obecny stan?” Możesz dziś powiedzieć, że jesteś żonaty, a jutro możesz być singlem.

Biorąc pod uwagę wszystkie te definicje, można ekstrapolować, że „stan” jest sposobem, w jaki obiekt istnieje w określonym momencie określonym przez wartości jego atrybutów, a mianowicie jego właściwości / zmiennych.

Nie sądzę, żeby stało się to prostsze.

Robert Rocha
źródło
Jest to warte kilku głosów, ponieważ sprawia, że ​​potencjał niejednoznaczności jest wyraźniejszy niż inne odpowiedzi.
PJTraill
Re mój poprzedni komentarz: od tego czasu dodałem własną odpowiedź, aby dokładniej opisać dwuznaczność.
PJTraill
0

System obiektowy integruje warunki kodu i danych, wykorzystując pojęcie „obiektu”. Obiekt ma stan (dane) i zachowanie (kod). Stąd obiektami są instancje (zmienne) wewnątrz obiektu zawierającego dane.

Syed MEhran Hussain
źródło
To prawda, ale nie dodaje się wiele do istniejących odpowiedzi.
David Richerby
1
Może dla kogoś będzie to łatwe do zrozumienia :)
Syed MEhran Hussain
2
To jest źle. Myślę, że masz na myśli to, że stan to przypisanie wartości do tych zmiennych.
reinierpost