ich bin ein Änfänger in Sachen Python und OOP, habe bis vor 2 Jahren ein wenig mit Visual Basic programmiert- und vor 20 Jahren mit diversen Basic Dialekten (Atari, Ti-994A etc.).
Mit Python komme ich erstaunlich gut und schnell klar, an was es noch hapert ist OOP bzw. das Verständnis dafür. Diverse Beispiel im Net und Büchern mögen für sich zwar mehr oder weniger Sinn machen, aber ich fand noch nichts wofür ich direkte Verwendung hätte - und völlig sinnfrei nun eine Klasse „Auto“ oder ähnliches, ohne praktischen Bezug, zu erstellen bringt mich kaum wirklich weiter.
Für mich hat OOP noch was sehr zwanghaftes, bzw. erscheint es mir aufwendiger und umständlicher als wenn ich ähnliches per Funktionen ins Hauptprogramm einbaue. Verzichten könnte man darauf in Python zwar, lernen und verstehen will ichs trotzdem, zum einen aus Neugier zum anderen um eingebaute Klassen besser verstehen zu können und natürlich wegen der Wiederverwendbarkeit von Code.
Es geht mir in diesem Post also nur darum die Meinung von erfahrenen Leuten zu hören ob das was gleich kommt Sinn macht bzw. eine einigermaßen vernünftige Anwendung von OOP ist - wie gesagt, mir fehlt dazu noch das Gefühl.
Es geht um kleine Datenbanken, z.B. DVD Liste, Jogginglauftagebuch und ähnliches. Programmiert habe ich auf Python nun schon 2 solche Programme und die funktionieren auch tadellos, aber eben ohne selbstgebaute Klassen und Objekte.
Auffällig dabei ist das ein wesentlicher Teil der beiden Programmen sich um eine Basis, nämlich eindimensionale Listen und deren Manipulation dreht, nur halt mit unterschiedlichen Parametern.
Und genau da sehe ich nun erstmalig einen Sinn einer Klasse, vor allem wegen dem wiederverwendbaren Code.
Die einzelnen Datensätze wären also in meinem Denkansatz keine Objekte, sondern die ganze Liste würde ausschließlich von der Klasse bearbeitet werden, also statische Methoden und eine Klasse ohne Objekte.
Kurz noch zum Listenaufbau, den ich bisher verwendete:
Die Liste enthält eine Tabelle (Zeilen, Spalten = Datensätze), wobei sozusagen Zeile an Zeile geschrieben wird >> inhalt[0]= 1. Zeile, 1. Spalte; inhalt[1] = 1. Zeile, 2. Spalte ..... ...... inhalt[8] = 2. Zeile, 1. Spalte .... ..... inhalt[16] = 3. Zeile, 1. Spalte u.s.w.
Und das wäre die angedachte (statische) Klasse:
Klassenname: MeineListe
Attribute:
name (unter der die Tabelle mit pickle gespeichert und geladen wird)
idKey (eindeutige Referenz der Zeilen/Datensätze)
wert (zum Übergeben und holen von Einträgen als Tupel)
zeile (zum direkten ansprechen von Tabellenplätzen - Fehlersuche und Testen)
spalte( -wie zeile- )
Statische Methoden:
creatTabelle (neue Tabelle generieren)
plusSpalte (Tabelle nachträglich um eine Spalte erweitern)
setWert (neuen Wert in die Liste schreiben - Übergabe per Tupel)
getWert (Werte (Datensatz) aus Liste holen - per Tupel - brauche ich mehr zum testen siehe getNext)
setZeile (Liste um eine Zeile erweitern (neuen Datensatz anfügen))
destZeile (Datensatz entfernen)
searDaten (Suchen nach Schlüsselwörtern und markieren der betroffenen Datensätze)
getNext ( nächsten (evtl.) per Suche markierten Datensatz zurückgeben)
reset (per Suche markierte Datensätze rücksetzen)
loadTabelle (Tabelle laden)
saveTabelle (Tabelle speichern)
Der erste Reflex mag nun vielleicht sein „Warum verwendest du keine richtig Datenbank im Hintergrund ?“.
- Ich arbeite sehr gerne mit Listen, zudem habe ich mit Datenbanken keine Erfahrung, die Fehlersuche fällt mir also mit Listen wesentlich leichter da ich hier (gefühlt) alles unter Kontrolle habe und alles (programmtechnisch) auf einer Ebene liegt.
- Ich als Pythonanfänger mich nun nicht zeitgleich auch noch SQL Syntax herumschlagen will.
Nochmal, es geht mir nur um die Sinnhaftigkeit des Angedachten und ob das eine „vernünftige Art“ der Anwendung von OOP ist :K
Der Code an sich ist sicher kein Problem, das habe ich nun zweimal gemacht, nur dass da halt die ganzen Listenmanipulationen in bester Basic Tradition
MfG
Thomas
