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?)


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 ...


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.


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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.