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?)
Odpowiedzi:
Możesz zajrzeć do (i zacytować) książki „Object-Oriented Analysis and Design” G. Boocha :
I cały podrozdział opisuje pojęcie stanu :
źródło
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.
źródło
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
Car
będzie składać się z wieluLink
-obiektów, które zawierają wskaźniki do następnego (i być może poprzedniego),Link
chociaż 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,Car
może mieć link doRegistering_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_Circle
nie 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ściOkreś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.
źródło
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.
Słownik New World College Webstera definiuje „stan” jako:
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.
źródło
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.
źródło