Mehr Mäuse

04.07.2017 03:31 Uhr

 

Rückkehr zu den Mäusen


Wir kehren zu den „Mäusen“ zurück. Dabei lernen wir verschiedene Möglichkeiten von Qt kennen, um Daten in Dateien zu schreiben und aus Dateien zu lesen.

Diese Möglichkeiten werden Ihnen im Laufe des Tages vermutlich komfortabler vorkommen, als die, die wir bisher verwendet haben. Beachten Sie aber bitte, dass es dabei um genau die gleichen Prinzipien geht wie bisher.

Anmerkung: In den bisherigen Semestern wurde eine „Leseschleifenwiederholungsstunde“ ohne Mäuse eingeschoben. Ob wir die nachholen, hängt vom Verlauf der Stunde ab.

M.a.W.: Das heutige Thema sind sozusagen „Mäuse plus Leseschleifen“.

1. Persistenz


Weniger salopp: Wir sehen uns heute an, wie man Daten aus Anwendungen so speichert, dass sie auch nach längeren Unterbrechungen der Arbeit immer noch zur Verfügung stehen.

Begriff: Daten, die so gespeichert sind, nennen wir persistent

Technisches Konzept: Um Dateien aus einem GUI heraus anzusprechen, verwenden wir die von Qt (oder einer äquivalenten GUI Umgebung) vorgegebenen Dateidialoge.

2. Dateien in Qt


Innerhalb von Qt stehen Dateiobjekte zur Verfügung, die den bisher verwendeten weitgehend
gleichen, jedoch etwas komfortabler zu verwenden sind.

Auf alle Fälle liefert ein Dateidialog nur den Namen einer zu bearbeitenden Datei. In der GUI orientierten Programmierung ist es meist üblich, den Zugriff (*.open()) auf eine und die Freigabe (*.close()) einer Datei in die direkt vom GUI aufgerufene Methode zu verpacken.

Technisches Konzept: Arten des Dateizugriffes unter Qt

3. Serialisieren


Der eigentliche Export der Daten einer Anwendung in die persistente Form wird dann von dem Objekt, das in eine Datei geschrieben werden soll, erledigt.

Merke: Das GUI ist verantwortlich, eine Verbindung zwischen Datei und Anwendung herzustellen.

Genauso, wie „ein Objekt“, also z.B. unsere Zeichnungen, „sich selbst gezeichnet hat“ – Methode paint() – erwartet man von ihm, dass es eine Methode bereitstellt, mit der „es sich in eine Datei exportiert“, bzw. später aus einer solchen „selbst importiert“.

Begriff: Das Hinausschreiben eines Objektes bezeichnen wir dabei als seine „Serialisierung“. (Da die potentiell komplexe interne Struktur in eine lineare Folge („Serie“) von Bytes gewandelt wird.)

Technisches Konzept: Qt unterscheidet zwischen den Dateien, die Methoden zur Einordnung der Dateien in die Gesamtstruktur der Directories auf einem Rechner bereitstellen, und den „Textströmen“, die den Zugriff auf den Dateiinhalt steuern.

4. Deserialisieren


Das exakte Gegenstück zum „Serialisieren“, dem Export einer internen Datenstruktur in die Bytefolge einer Datei, bildet das „Deserialisieren“, das Lesen der gespeicherten Daten und ihre Umwandlung in eine interne Struktur.

Dass dabei genau die Techniken zum Einsatz kommen, die wir bei den Leseschleifen kennengelernt haben, ist nicht zufällig.

Technische Konzepte: Umgang mit Textströmen zum Einlesen von Daten.

5. Stilfragen


Mit der Deserialisierung im letzten Beispiel haben wir eigentlich alle Details gelöst, die es unserer Anwendung erlauben, Daten zu speichern und später wieder zu verwenden. Viele Details bleiben offen (so sollte eine Anwendung dieser Art sicher einen Button haben, der die zuletzt bearbeitete Zeichnung löscht …).

Abgesehen davon, sollte aber mindestens eine Vorkehrung getroffen werden, damit eine Anwendung sich gut in eine komplexere IT Umwelt einfügt: Bei allen Dateien, die sie erzeugt, sollte aus den ersten Bytes klar werden, ob es sich um eine Datei handelt, die von dieser Anwendung erzeugt wurde oder nicht. In der angefügten Version der Serialisierung / Deserialisierung erledigen die Methoden dies durch einen (rudimentären) Header.

 

 

Download: Mehr Mäuse.zip