Ich brauche eine präzise Definition des "Zustands eines Objekts" in der objektorientierten Programmierung (für eine Arbeit).
Etwa einen halben Tag lang suchte ich nach einem Artikel, den ich zu diesem Thema zitieren kann, aber ich konnte keinen finden. Alle Papiere, die ich gefunden habe, waren hauptsächlich allgemeine Papiere zur objektorientierten Programmierung und sie haben den Zustand eines Objekts nicht definiert.
Ich bin mir nicht sicher, aber meine beste Vermutung ist etwa: Der Status eines Objekts wird durch den Status der Instanzvariablen des Objekts definiert.
Ich suche nach einer Definition des Zustands eines Objekts und / oder einer Referenz zum Thema.
(Übrigens, könnte ich das Konzept als "Objektzustand" bezeichnen oder ist dies ungewöhnlich?)
Antworten:
Sie können das Buch "Objektorientierte Analyse und Design" von G. Booch lesen (und zitieren) :
Und es gibt einen ganzen Unterabschnitt, der den Begriff des Staates beschreibt :
quelle
Sie sollten auch bedenken, dass der Zustand eines Objekts eine "abstrakte" Entität ist, die durch das bestimmt wird, was mit den Methoden beobachtet werden kann. Beispielsweise hat ein Objekt, das eine Hash-Tabelle implementiert, als Status die Sammlung von Werten, die in der Hash-Tabelle gespeichert sind, und nicht alle Details der internen Darstellung.
quelle
IBM hat ein Glossar , das das Wort "Status" in verschiedenen Definitionen definiert, die einander sehr ähnlich sind. Sie geben nicht ausdrücklich an, dass sie mit der objektorientierten Programmierung zusammenhängen, aber man kann sie in diesem Kontext extrapolieren und verwenden.
Das New World College Dictionary von Webster definiert "Zustand" als:
Der gemeinsame Nenner all dieser ist die Zeit. Der Status ändert sich im Laufe der Zeit. Das ist die Natur von Variablen. Wenn jemand fragen würde: "Wie ist Ihr aktueller Zustand?" Sie könnten heute sagen, dass Sie verheiratet sind und morgen könnten Sie Single sein.
In Anbetracht all dieser Definitionen kann man extrapolieren, dass "Zustand" die Art und Weise ist, wie ein Objekt zu einem bestimmten Zeitpunkt existiert, der durch die Werte seiner Attribute bestimmt wird, nämlich seine Eigenschaften / Variablen.
Einfacher geht es nicht.
quelle
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 vonLink
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ßerdemCar
kann a einen Link zu einem habenRegistering_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 definierenDer ' 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.
quelle
Ein objektorientiertes System integriert die Begriffe Code und Daten unter Verwendung des Konzepts eines "Objekts". Ein Objekt hat Status (Daten) und Verhalten (Code). Daher sind die Zustände des Objekts die Instanzen (Variablen) innerhalb des Objekts, die die Daten enthalten.
quelle