Zustand eines Objektes

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
albertus
User
Beiträge: 52
Registriert: Mittwoch 7. Juli 2010, 14:48

Guten Morgen,

mir geht schon den ganzen Morgen folgendes Thema im Kopf umher:

Der Zustand eines Objektes wird durch den Zustand seiner Attribute bestimmt. Ändert sich der Zustand eines Objekt-Attributs, wird das Eltern-Objekt in einen anderen Zustand überführt. So weit so gut. Was ist aber jetzt nach obiger Definition der Zustand bei einer Python list oder eines Python dictionarys? Wo sind da die Attribute? Das sind doch reine C Datenstrukturen oder? Spricht man in so einem Fall von Zustand?

Ich beschäftige mich zur Zeit mit dem Thema Objekt-Persistenz und in diesem Kontext, entstand diese Frage, die zurzeit mein Hirn blockiert :?
Mit freundlichen Grüßen

Albertus
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wenn Du eine leere Liste hast und dort ein Element einfügst, hat sich diese Liste dann geändert? ;-) Damit hast Du doch schon die Antwort...

Im übrigen ist es egal, *was* sich technisch dahiner verbirgt! Letztlich muss sich ja auch die C-Datenstruktur ändern - ob man das "Objekt" nennt oder nicht, spielt dabei keine Rolle. Bei veränderlichen Datenstrukturen kann sich der Zustand eben ändern ;-)

Es gibt auch *unveränderliche* Datenstrukturen - diese werden oftmals von Sprachen mit starkem funktionalen Ansatz präferiert, wie etwa Lisp artige oder auch Haskell usw.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Wenn du etwas in eine Datei schreibst sich aber kein Attribut des Datei Objektes verändert, hat sich der Zustand dann verändert?

Zustand ist eigentlich bedeutungslos.
albertus
User
Beiträge: 52
Registriert: Mittwoch 7. Juli 2010, 14:48

DasIch hat geschrieben:Wenn du etwas in eine Datei schreibst sich aber kein Attribut des Datei Objektes verändert, hat sich der Zustand dann verändert?

Zustand ist eigentlich bedeutungslos.
Wenn ich etwas in eine Datei schreibe ändert sich eigentlich immer was an den Attributen, außer man ändert was an den File-System-Einstellungen.
Wenn der Zustand bedeutungslos ist dann könntest Du mir ja auch alles Geld von deinem Konto auf meinen Überweisen. Der Zustand des Kontos ändert sich ja nicht ;-) oder?
Mit freundlichen Grüßen

Albertus
BlackJack

@albertus: Erstens muss sich der Zustand des Kontos nicht ändern — kann ja auch leer oder in den Miesen sein ;-) — zweitens kann man eine Zustandsänderung in dem Fall auch als bedeutungslos ansehen — warum auch immer man das tun sollte. ;-)

(Ich verstehe die Aussage „Zustand ist eigentlich bedeutungslos.“ nach einer Frage nach Objekten die ja per Definition unter anderem Zustand kapseln auch nicht so wirklich. Falls das philosophisch oder im Kontext von rein funktionalen Sprachen gedacht war, geht's ein bisschen an der Frage vorbei.)

Es geht um *inneren* Zustand. Auf den kann man in einigen oder vielen Fällen über Attribute zugreifen, aber man kann ja auch so kapseln das es gar keine *öffentlichen* Attribute gibt, in sofern ist eine Definition von „Zustand“ über die Werte von Attributen wohl eher nicht so glücklich. Das Verhalten einer Liste ändert sich durch beispielsweise das hinzufügen eines Elementes ja. Ein Indexzugriff der vorher einen `IndexError` hervorgerufen hat, funktioniert plötzlich. Die `len()`-Funktion gibt einen anderen Wert für die Liste zurück. Eine Schleife die daüber iteriert läuft eine Iteration mehr als vorher. Also muss sich der innere Zustand der Liste offensichtlich geändert haben.
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

albertus hat geschrieben:Der Zustand eines Objektes wird durch den Zustand seiner Attribute bestimmt. Ändert sich der Zustand eines Objekt-Attributs, wird das Eltern-Objekt in einen anderen Zustand überführt. So weit so gut. Was ist aber jetzt nach obiger Definition der Zustand bei einer Python list oder eines Python dictionarys? Wo sind da die Attribute? Das sind doch reine C Datenstrukturen oder? Spricht man in so einem Fall von Zustand?
Die Attribute sind in C. Dies widerspricht der vorherigen Definition *nicht*, denn dort steht nirgends, dass die Attribute direkt in Python abrufbar sein müssen.

Ich vermute, die Definition will unterscheiden zwischen dem statischen Code von Methoden und dem sich ändernden Inhalt von Attributen. Soll heißen: Die Logik der Methoden ist vorher festgelegt. Es könnte zwar sein, dass im Fall von Zustand X der Codepfad A genommen wird und im Fall von Zustand Y hingegen der Pfad B beschritten wird, aber diese Verzweigung ist ja trotzdem vorab im Code definiert worden. Allein der beim Ausführen der Methode bestehende Zustand bestimmt darüber, welcher Pfad beschritten wird. Oder ganz allgemein: Der Zustand des oder der Attribute bildet die Grundlage für das Ergebnis des Methodenaufrufs.

Und für diese Unterscheidung ist nur wichtig, dass Attribute die Basis für das Verhalten von Methoden sind. Ob diese Attribute für den Benutzer der Objekte greifbar sind, ist in dem Moment egal. In einigen Programmiersprachen ist es sogar gängige Praxis, dass der Benutzer der API überhaupt nicht auf direktem Wege an die Attribute herankommen soll (Stichwort: Datenkapselung). Dort müssen dann immer Zugriffe über sogenannte Getter- und Setter-Methoden erfolgen. Die Attribute werden in dem Fall also nur als interne Hilfsmittel betrachtet, die für den Anwender quasi unsichtbar sind. Eben genau so unsichtbar wie es die in C vorliegenden Attribute einer Liste für dich als Python-Programmierer sind.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

albertus hat geschrieben:
DasIch hat geschrieben:Wenn du etwas in eine Datei schreibst sich aber kein Attribut des Datei Objektes verändert, hat sich der Zustand dann verändert?

Zustand ist eigentlich bedeutungslos.
Wenn ich etwas in eine Datei schreibe ändert sich eigentlich immer was an den Attributen, außer man ändert was an den File-System-Einstellungen.
Wenn der Zustand bedeutungslos ist dann könntest Du mir ja auch alles Geld von deinem Konto auf meinen Überweisen. Der Zustand des Kontos ändert sich ja nicht ;-) oder?
Nö, tut es nicht. Abgesehen von möglichem Buffer im Dateiobjekt muss sich an en Attributen gar nichts ändern nachdem du in eine Datei schreibst oder wenn du sie schliesst.

Sobald du ein nicht triviales Program hast und mit dem Betriebssystem kommunizierst gibt es Zustand den du nur mit Blick auf Python nicht mehr erfassen kannst.
Antworten