Der Begriff " Zustand " kann in verschiedenen Sinnen verwendet werden, die möglicherweise nicht alle einer genauen Definition unterliegen. Es war daher wichtig, dass Sie eine Definition in Ihr Papier aufnehmen, um deutlich zu machen, wie Sie den Begriff verwenden. Im Folgenden biete ich keine eindeutige Definition des Zustands eines Objekts an, sondern versuche, eine Reihe von Denkweisen zu skizzieren, die in verschiedenen Kontexten angemessen sein können.
Zunächst müssen Sie jedoch überlegen , was Sie unter " Objekt " verstehen : Denken Sie an ein konzeptionelles Objekt, dh an eine Entität, die Sie modellieren möchten, oder an eine Instanz einer Klasse in einem bestimmten Programm? Vielleicht möchten Sie auch über den Status einer Variablen nachdenken, die sich zu unterschiedlichen Zeiten auf unterschiedliche Objekte oder auf ein System beziehen kann, möglicherweise über eine bestimmte Benutzeroberfläche.
Ein Teil der Schwierigkeit bei der Definition des Status eines Objekts in OOP besteht darin, dass wir beim Modellieren von Entitäten in einer bestimmten Sprache häufig nicht in der Lage sind, Objektattribute, die konzeptionell Teil derselben Entität sind, von anderen zu unterscheiden, die dies nicht sind. Beispielsweise besteht eine verknüpfte Liste von Car
aus einer Reihe von Link
Objekten, die Zeiger auf das nächste (und möglicherweise vorherige) Link
Objekt enthalten, obwohl die Liste konzeptionell ein einzelnes Objekt ist. Die Links können auch eingebettet sein inCar
-Objekte oder enthalten Zeiger darauf, aber in diesem Fall sind die verknüpften Objekte konzeptionell getrennt und nicht Teil der Liste. In einer Liste der letzten Änderungen dürfen die Änderungen jedoch nur in der Liste vorhanden sein und als Teil davon betrachtet werden. In diesen verschiedenen Fällen müssen wir entscheiden, ob wir den Zustand eines Objekts als den der verknüpften Objekte betrachten. Außerdem Car
kann a einen Link zu einem haben Registering_Authority
- wir betrachten den Zustand des Autos wahrscheinlich nicht als geändert, wenn seine Registrierungsstelle die URL seiner Website ändert. Wenn die Implementierungssprache es uns nicht erlaubt, verschiedene Arten von Verknüpfungen zu unterscheiden, ist es nicht möglich, den Zustand eines Objekts nur anhand der Sprache allgemein zu definieren.
Der " externe " oder " funktionale " Zustand könnte definiert werden als "wie er sich verhält", z. wie es auf Methodenaufrufe oder auf eine Benutzeroberfläche reagiert. Für ein Objekt als Klasseninstanz hängt diese Definition von dem Typ ab, zu dem das Objekt gehört: als a Circle
, die Farbe von aColoured_Circle
ist nicht sichtbar und daher für seinen Zustand irrelevant. Eine Schwierigkeit dabei ist, dass "wie es reagiert" möglicherweise in Bezug auf zurückgegebene Werte definiert werden muss, und diese "Werte" können die Zustände anderer Objekte sein. Eine Möglichkeit, dies zu formalisieren, besteht darin, zu sagen, dass zwei Zustände eines Objekts gleich sind, wenn alle möglichen zukünftigen Ausführungen eines Systems, in das es eingebettet ist, zu derselben Zuordnung von Eingaben zu diesem System zu Ausgaben von diesem führen. Es kann erforderlich sein, dass dieses umschließende System ein in sich geschlossenes System ist, das unabhängig von seiner Umgebung ausgeführt werden kann. Andererseits könnte man zulassen, dass es so klein ist wie das betreffende Objekt. In jedem Fall besteht ein mathematischer Ansatz darin, einen Zustand als Äquivalenzklasse von zu definieren
Der ' interne ' Zustand könnte als der Zustand der Darstellung definiert werden. Ein erster Versuch ist anscheinend kreisförmig, aber vielleicht hilfreich: "Der interne Zustand eines Objekts ist der Zustand seiner Mitglieder". Hier müssen wir darauf achten, wesentliche Aspekte der Darstellung von unbedeutenden zu unterscheiden: Auf der untersten Ebene kann die Darstellung eines Objekts durchaus Adressen anderer Objekte enthalten, es ist jedoch unwahrscheinlich, dass eine Änderung einer solchen Adresse in Betracht gezogen wird als Zustandsänderung. Andererseits ist eine Änderung des Status eines Caches für das Ergebnis einer Abfrage wichtig, obwohl sie keinen Unterschied zum Funktionsstatus (wie oben beschrieben) macht, wenn Leistungstests in Betracht gezogen werden.