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
Zustand eines Objektes
- 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.
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
assert encoding_kapiert
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.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 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
Albertus
@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.
(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.
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.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?
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.
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.albertus hat geschrieben: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.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 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?
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.