Ich habe die Einführung von Oracle in OOP-Konzepte gelesen und bin auf folgende Beschreibung gestoßen:
Objekte der realen Welt haben zwei Eigenschaften gemeinsam: Sie haben alle Zustand und Verhalten. Hunde haben Zustand (Name, Farbe, Rasse, Hunger) und Verhalten (Bellen, Holen, Schwanzwedeln). Softwareobjekte sind realistischen Objekten konzeptionell ähnlich: Sie bestehen ebenfalls aus Status und verwandtem Verhalten.
Mein Problem mit dieser Passage ist , dass bei der Beschreibung Zustand seiner Mixe Attribute auch dort. Zum Beispiel sind der Name und die Farbe eines Hundes seine Attribute, während es sein Zustand ist, hungrig oder durstig zu sein.
Meiner Meinung nach ist es daher genauer, die Eigenschaften von Objekten in drei Teile zu unterteilen: Attribute, Zustände und Verhaltensweisen .
Klar, wenn ich das in eine Programmiersprache übersetze, kann ich sehen, dass die dreifache Partition eine zweifache wird, weil sowohl Attribute als auch Zustände in Feldern / Variablen gespeichert werden, während Verhalten in Methoden / Funktionen gespeichert werden.
Aber konzeptionell ist es sinnvoller, die drei Dinge getrennt zu haben.
Hier ist ein weiteres Beispiel: Betrachten Sie eine Lampe. Zu sagen, dass sowohl die Lampengröße als auch, ob sie eingeschaltet sind oder nicht, Zustände sind, ist meiner Meinung nach eine Strecke. Die Lampengröße ist ein Attribut, kein Status, während das Ein- oder Ausschalten ein Status ist.
Oder habe ich etwas verpasst?
quelle
Antworten:
Sie haben Recht, dass Objekte aus Attributen, Zuständen und Verhalten bestehen, wenn Sie Attribute definieren, die unveränderte Merkmale einer Instanz bedeuten. Tatsächlich ist es wichtig, diese Unterscheidung zu treffen, da es Objekte gibt, die nur Attribute (in Ihrem Sinne) und keinen Zustand enthalten. Sie werden unveränderlich genannt und sind sehr nützlich bei der Programmierung.
Diese dreiteilige Definition wird in der Tat in Programmiersprachen dargestellt, beispielsweise mit dem
final
Schlüsselwort in Java oder demreadonly
Schlüsselwort in C #, um Instanzdaten zu kennzeichnen, die sich während der gesamten Lebensdauer der Instanz nicht ändern dürfen.Ich muss jedoch hinzufügen, dass sich nicht ändernde Instanzdaten normalerweise nicht als Attribute bezeichnet werden. Wir neigen dazu, von "endgültigen" oder "schreibgeschützten" oder "konstanten Daten" zu sprechen, je nachdem, welche Sprache wir verwenden. Der richtige Begriff für sie wäre "Invarianten", aber dann wird dieses Wort in diesem Sinne nicht häufig verwendet; es wird häufiger für andere Dinge verwendet.
quelle
Ich denke, es ist genauer zu sagen, dass Objekte nur zwei Eigenschaften haben. Ein Beispiel für Oracle:
Die Tatsache, dass die Werte (Status) für Name, Farbe, Rasse und Hunger in Attributen im Objekt gespeichert sind , ist ein Implementierungsdetail. Attribute braucht man eigentlich gar nicht.
Wenn Sie Attribute als drittes Merkmal einschließen, müssen Sie auch Methoden als viertes Merkmal einschließen, da sich das Verhalten von Objekten (wie der Zustand) ebenfalls ändern kann. Zustand und Verhalten sind zwei abstrakte Merkmale von Objekten. Attribute und Methoden sind konkrete Implementierungen dieser Konzepte.
quelle
Der Status setzt sich aus Attributen und entsprechenden Werten zusammen. Aus meiner Sicht haben Sie also nicht Recht (und Sie schaffen unnötige zusätzliche Komplexität für eine einfache Definition).
quelle
Wir können die Dinge auf unzählige Arten klassifizieren und jede Klassifizierung hätte keine "richtige Antwort". Das Klassifizieren von Dingen hat nur dann einen Vorteil, wenn die Klassifizierung zu einem tieferen Verständnis führt oder die Kommunikation verbessert. Wenn Ihr Team die Begriffe Attribute, Zustände und Funktionen bevorzugt und über gute Arbeitsdefinitionen für diese verfügt, kann dies zur Verbesserung der internen Kommunikation beitragen. Sie müssen jedoch bei der Kommunikation außerhalb dieser Gruppe flexibel sein.
Die Konzepte "hungrig" und "durstig" können von grundlegenden Attributen (z. B. Blutzucker, Flüssigkeitsspiegel) abgeleitet werden, sodass wir uns den Zustand als Metaattribut vorstellen können, das von Basisattributen abgeleitet ist, auf deren Grundlage wir zu "Wahr" oder "Falsch" wechseln können den Status der relevanten Basisattribute. Für das Lichtbeispiel könnten wir uns das Licht mit den Attributen
applied_voltage
undresistance
und den Funktionenvoltage_switch()
und vorstellenshine()
. Dasvoltage_swich()
ist dann eine Funktion einiger Eingänge (z. B. Handschalter, Licht, Timer usw.) undshine()
eine Funktion vonapplied_voltage
undresistance
. Wir könnten ein Metaattribut mit dem Namen "light_state
Wahr" oder "Falsch" deklarieren , um das Objekt mental zu konstruieren. Letztendlich handelt es sich jedoch nur um mentale Konstrukte, mit denen wir unsere Arbeit organisieren.quelle
Der Status eines Objekts wird entweder direkt oder indirekt in seinen Attributen codiert . Wenn Sie zum Beispiel möchten, dass Ihr Hund Durst hat, können Sie ihm ein
Alternativ können Sie es so etwas haben lassen
und schließen Sie, ob Ihr Hund durstig ist, indem Sie die aktuelle Zeit mit der Zeit vergleichen, zu der er zuletzt etwas getrunken hat.
In jedem Fall liegt der Zustand Ihrer Objekte in den Attributen.
Dann gibt es Klassen, die keine Attribute haben, meistens Dienstprogrammklassen. Normalerweise möchten Sie jedoch auch in diesem Fall keine Instanz von ihnen erstellen.
Um Aussagen begründen zu können, halten sich Wissenschaftler in der Regel an das Prinzip der Minimalität. Ich denke, deshalb hat Oracle state nicht explizit erwähnt. Sie kann aus dem Wert der Attribute abgeleitet werden.
quelle
Die realen Zusammenhänge sind fehlgeleitet. So würde ich es lehren (C ++ - Ansatz):
Es gibt also keine Unterschiede zwischen Status und Attribut. Es ist nur eine zufällige Ansammlung von Bits. Es ist nur eine willkürliche Unterscheidung, um sie zu trennen. Ich muss nur wissen, wofür es ein Alias ist.
quelle