Tkinter objektorientiert?
Hallo,
Ich bin absoluter Programmier - Anfänger und arbeite gerade an einigen kleinen Programmen mit GUI, darunter ein Bildersortierer, ein Chemie-Rechner (mache in Chemie Abitur) und eine To-Do Liste mit Prioritäten.
Habe Tkinter nur über YouTube kennen gelernt und daher irgendwie die schlechte Angewohnheit, alles objektorientiert zu programmieren. Also eine Klasse für das Fenster, dass dann je nach Anwendung weitere Klassen für bestimmte Gruppen an Elementen, wie dem Menü zum Erstellen einer Aufgabe hat. Funktionen einer Klasse, die bei bestimmten Aktionen durch andere Klassen aufgerufen werden, sind als @staticmethod definiert.
Ein Beispiel wäre die Funktion, die die Liste mit dem Einträgen der To-do Liste aktualisiert, nachdem man eine Aufgabe bearbeitet hat.
Kann man das so machen oder ist das kompletter Blödsinn (Spaghetti-Code?) Ich bin kompletter Anfänger und möchte schlechte Angewohnheiten daher rechtzeitig korrigieren.
Mfg Jan
1 Antwort
(...) und daher irgendwie die schlechte Angewohnheit, alles objektorientiert zu programmieren. (...)
Wenn es die Komplexität des Anwendungfalls hergibt, spricht nichts gegen die Anwendung des objektorientierten Konzepts.
(...) Funktionen einer Klasse, die bei bestimmten Aktionen durch andere Klassen aufgerufen werden, sind als @staticmethod definiert. (...)
Das wäre ein Bruch des objektorientierten Konzepts. Es sollen doch nicht durchgehend Klassen über globale Aufrufe miteinander kommunizieren (und dabei vielleicht auch noch Zustände ändern), sondern Objekte.
Wenn du dein Programm also in Klassen aufteilst, dann lege Instanzen dieser Klassen an. Wenn es einer Kommunikation bedarf, gib eine Objektreferenz via Parameterübergabe an den Kommunikationspartner weiter (entweder erst bei Aufruf oder schon früher, z.B. via Konstruktor). Statische Funktionen sollten in dem Konstrukt die Ausnahme sein.
Auf diesem Weg wird der Programmverlauf nachvollziehbarer, so etwas wie Polymorphie kann stärker ausgespielt werden und du schränkst die Stakeholder ein, die Einfluss auf ein Objekt nehmen können.
Konkret würde ich dir empfehlen, dir das MVC Pattern anzuschauen. Dessen Idee ist es, die einzelnen Anwendungsschichten (grafische Oberfläche und Anwendungslogik) möglichst voneinander zu trennen. Dieser Artikel zeigt ein praktisches Beispiel.
Hab es jetzt komplett nach dem MVC Modell umgeschrieben... Jetzt gibt es keine globalen Funktionen oder Variablen mehr, alles ist in Klassen definiert
Mir ist erst jetzt aufgefallen, dass man ein Objekt zuerst in einer Variable speichern muss bevor man seine Methoden aufrufen kann.... Jetzt macht es Sinn, damit wären Funktionen mit Staticethod sowieso unnötig.... Hätte mich genauer mit OOP beschäftigen müssen....