Definition des Status eines Objekts in OOP

11

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

mrsteve
quelle
Ich denke, hier gibt es Raum für Unklarheiten, so dass Sie in Ihrem Papier genau angegeben haben sollten, was Sie mit "Staat" gemeint haben; Wenn Sie das nicht könnten, wären Sie vielleicht nicht in der Lage, Ihr Papier freizugeben.
PJTraill

Antworten:

9

Sie können das Buch "Objektorientierte Analyse und Design" von G. Booch lesen (und zitieren) :

... Ein Objekt ist eine Entität mit Status, Verhalten und Identität. Die Struktur und das Verhalten ähnlicher Objekte werden in ihrer gemeinsamen Klasse definiert. Die Begriffe Instanz und Objekt sind austauschbar.

In den folgenden Abschnitten werden wir die Konzepte von Zustand, Verhalten und Identität genauer betrachten. ...

Und es gibt einen ganzen Unterabschnitt, der den Begriff des Staates beschreibt :

... Aus diesem Beispiel können wir die folgende Definition auf niedriger Ebene bilden.

Der Status eines Objekts umfasst alle (normalerweise statischen) Eigenschaften des Objekts sowie die aktuellen (normalerweise dynamischen) Werte jeder dieser Eigenschaften ...

Vor
quelle
4
Fuzzy wie immer. Was Booth wahrscheinlich sagen wollte: Ein Zustand ist eine Zuweisung von Werten zu diesen Variablen.
Reinierpost
3

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.

Uday Reddy
quelle
1

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.

Def 3: Eine Phase im Lebenszyklus eines Objekts, die den Status dieses Objekts identifiziert.

Def 5: Eine Bedingung oder Situation während der Lebensdauer eines Objekts, in der es eine Bedingung erfüllt, eine Aktivität ausführt oder auf ein Ereignis wartet.

Def 8: Das Merkmal eines Objekts, das sich in seinen öffentlichen und privaten Datenelementen manifestiert und in zwei Kategorien unterteilt werden kann: wesentlicher Zustand und nicht wesentlicher Zustand.

Def 9: In einer Geschäftszustandsmaschine eine von mehreren diskreten Einzelphasen, die nacheinander organisiert sind, um eine Geschäftstransaktion zu erstellen.

Def 10: Ein Zustand, in dem die Schaltung bis zum Anlegen eines geeigneten Impulses verbleibt.

Das New World College Dictionary von Webster definiert "Zustand" als:

Eine Reihe von Umständen oder Attributen, die eine Person oder Sache zu einem bestimmten Zeitpunkt charakterisieren; Art und Weise des Seins: Zustand

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.

Robert Rocha
quelle
Dies ist ein paar Stimmen wert, da es das Potenzial für Mehrdeutigkeiten klarer macht als die anderen Antworten.
PJTraill
Zu meinem vorherigen Kommentar: Ich habe seitdem eine eigene Antwort hinzugefügt , um die Mehrdeutigkeit gründlicher zu beschreiben.
PJTraill
1

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 Caraus einer Reihe von LinkObjekten, die Zeiger auf das nächste (und möglicherweise vorherige) LinkObjekt 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 Carkann 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_Circleist 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.

PJTraill
quelle
0

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.

Syed MEhran Hussain
quelle
Dies ist wahr, aber es scheint nicht viel zu den vorhandenen Antworten hinzuzufügen.
David Richerby
1
Vielleicht ist es für jemanden leicht zu verstehen :)
Syed MEhran Hussain
1
Das ist falsch. Was Sie damit sagen wollen, denke ich: Ein Zustand ist eine Zuordnung von Werten zu diesen Variablen.
Reinierpost