it-swarm.com.de

Können wir sagen, dass Objekte Attribute, Zustände und Verhaltensweisen haben?

Ich habe die Einführung von Oracle in OOP Konzepte) gelesen und bin auf diese 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, Schwanz wedeln). Softwareobjekte ähneln konzeptionell realen Objekten: Auch sie bestehen aus Zustand und verwandtem Verhalten.

Mein Problem mit dieser Passage ist, dass bei der Beschreibung des Zustands seine Mischungsattribute dort sind zu. Zum Beispiel sind der Name und die Farbe eines Hundes seine Attribute, während er hungrig oder durstig ist.

Meiner Meinung nach ist es genauer, die Eigenschaften von Objekten in drei Teile zu unterteilen: Attribute, Zustände und Verhaltensweisen.

Sicher, wenn ich dies in eine Programmiersprache übersetze, kann ich sehen, dass die dreifache Partition eine zweifache wird, da sowohl Attribute als auch Zustände in Feldern/Variablen gespeichert werden, während Verhaltensweisen in Methoden/Funktionen gespeichert werden.

Konzeptionell ist es jedoch 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 die Frage, ob sie eingeschaltet ist oder nicht, Zustände sind, ist meiner Meinung nach eine Strecke. Die Lampengröße ist ein Attribut, kein Zustand, während das Ein- oder Ausschalten ein Zustand ist.

Oder habe ich etwas verpasst?

16
Daniel Scocco

Sie haben Recht damit, dass Objekte aus Attributen, Zuständen und Verhalten bestehen, wenn Sie Attribute so definieren, dass sie unveränderte Eigenschaften einer Instanz bedeuten. In der Tat ist es wichtig, diese Unterscheidung zu treffen, da es Objekte gibt, die nur Attribute (in Ihrem Sinne) und keinen Zustand enthalten; Sie heißen nveränderlich und sind sehr nützlich bei der Programmierung.

Diese dreiteilige Definition wird in der Tat in Programmiersprachen dargestellt, beispielsweise mit dem Schlüsselwort final in Java oder dem Schlüsselwort readonly in C #, um Instanzdaten zu bezeichnen, die darf sich während der gesamten Lebensdauer der Instanz nicht ändern.

Ich muss jedoch hinzufügen, dass unveränderte Instanzdaten normalerweise nicht als Attribute bezeichnet werden. Wir neigen dazu, sie als "endgültige" oder "schreibgeschützte" oder "konstante Daten" zu bezeichnen, 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.

13
Mike Nakis

Ich denke, es ist genauer zu sagen, dass Objekte nur zwei Eigenschaften haben. Am Beispiel von Oracle:

Hunde haben Zustand (Name, Farbe, Rasse, Hunger) und Verhalten (Bellen, Holen, Schwanz wedeln). Softwareobjekte ähneln konzeptionell realen Objekten: Auch sie bestehen aus Zustand und verwandtem Verhalten.

Die Tatsache, dass die Werte (Status) für Name, Farbe, Rasse und Hunger gespeichert im Objekt in Attributen sind, ist ein Implementierungsdetail. Sie brauchen überhaupt keine Attribute.

Wenn Sie Attribute als drittes Merkmal einschließen möchten, müssen Sie auch Methoden als viertes einschließen, da sich auch das Verhalten von Objekten (wie der Status) ändern kann. Zustand und Verhalten sind zwei abstrakte Merkmale von Objekten. Attribute und Methoden sind konkrete Implementierungen dieser Konzepte.

4
Bill the Lizard

Der Status besteht aus Attributen und entsprechenden Werten. Aus meiner Sicht haben Sie also nicht Recht (und Sie schaffen unnötige zusätzliche Komplexität für die einfache Definition).

1
Pavel Bucek

Wir können Dinge auf unzählige Arten klassifizieren und jede Klassifizierung hätte keine "richtige Antwort". Die Klassifizierung von Dingen ist nur dann von 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 für diese gute Arbeitsdefinitionen hat, hilft dies, die interne Kommunikation zu verbessern. Sie müssen jedoch flexibel sein, wenn Sie außerhalb dieser Gruppe kommunizieren.

Die Konzepte "hungrig" und "durstig" können aus grundlegenden Attributen (z. B. Blutzucker, Hydratationsgrad) abgeleitet werden, sodass wir uns den Zustand als Metaattribut vorstellen können, das aus Basisattributen abgeleitet wird, 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 Und resistance und den Funktionen voltage_switch() und shine() vorstellen. Die voltage_swich() ist dann eine Funktion eines Eingangs (z. B. manueller Schalter, Licht, Timer usw.) und shine() ist eine Funktion von applied_voltage Und resistance. Wir könnten ein Meta-Attribut namens light_state Deklarieren, das entweder wahr oder falsch ist, um das Objekt mental zu konstruieren, aber am Ende sind diese Ideen alles nur mentale Konstrukte, mit denen wir unsere Arbeit organisieren.

0
Blane