Anfängerfrage zur OOP

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
suho
User
Beiträge: 5
Registriert: Montag 14. Januar 2008, 20:59

Moin,

ich bin seit einer Woche dabei mir Python beizubringen, hab vorher schon ein wenig in C programmiert und einen Einführungskurs in C++ mitgemacht. Jedoch bin ich mit der OOP (noch) nicht wirklich vertraut.
Nichtsdestotrotz, ich bin dabei das grundgerüst für eine art Cocktail-mix-Programm zu schreiben. Dafür wollte ich Klassen anlegen für die Pumpen, die Zutaten und die Rezepte ...
Dabei stieß ich auf ein Problem/Frage wie ich das letztentlich implementire. Anfangs dachte ich, dass es am besten wäre für jede Pumpe die ich an dem System anschließen möchte eine Instanz der Klasse "Pumpen" anzulegen jedoch soll dies dynamisch geschehen und die anzahl der pumpen und deren Anstereungscode beim programmstart aus einer datei/datenbank ausgelesen werden, was es möglich macht das system ohne probleme zu erweitern.
Jedoch gefällt mir dieser Ansatz überhaupt nicht weil ich dann quasi eine schleife über die datenbankeinträge iterieren lassen müsste die eine Liste mit instanzen anlegt und ich glaube irgendwie nicht das sowas in der praxis gemacht wird oder doch?
Der andere Ansatz der mir dann einfiel und den ich besser finde ist, bloß eine Instanz dieser genannten Klassen anzulegen und innerhalb der Instanz über Klassenvariabeln eine Liste der Pumpen zu speicher.
Was ist besser, oder ist beides schlechter stil?

Danke im vorraus.
lunar

Eine Pumpe ist ein reales Objekt, oder? Macht es also Sinn, mehrere Pumpen in eine einzige Instanz zu stopfen?

Warum gefällt dir die Liste eigentlich nicht, bzw. warum glaubst du, sowas ei unüblich? Glaubst du nicht auch, dass es schon seinen Grund hat, dass Listen in die Syntax der Sprache integriert sind?
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

der sinn einer Klasse ist die Darstellung eines Objektes.
Der Vorteil einer Klasse gegenüber einer Funktion ist dabei, das du dieses Objekt mehrmals erzeugen kansnt und dann jeweils individuell steuern kannst ohne das du den Code x Mal schreiben musst (sondern nur einmal)

Beliebtes beispiel ein Quader. Du brauchst einen Quader mit a = x, b = y und c = z; (Seitenlängen). Diesen Erzeugst du z.B. mit einem Aufruf der Klasse "Quader" und uebergibst die Werte a b und c. Wenn du nun noch einen Quader benötigst, rufst du die Klasse erneut auf und übergibst etwas anderes für a b und c. Über die Instanzen kannst du dann die verschiedenen Quader ansteuern.

Übertragen auf dein Pumpenproblem würde das also bedeuten, dass du für jede Pumpe eine Instanz hast. D.h. die Idee mit der Schleife und der liste, die die Instanzen aufnimmt, war schon der richtige weg.
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
suho
User
Beiträge: 5
Registriert: Montag 14. Januar 2008, 20:59

Ok, convinced ;)
Ich denke ich werde jeder Instanz eine eindeutige nummer/hash bei der intialisierung zuweisen und alle Instanzen dann in ein dictionary packen in der form {key=hash/num, instanz}.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nimm doch eine Liste oder ein Set. Die Instanzen haben doch schon ihre eigenen, eindeutigen IDs.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
suho
User
Beiträge: 5
Registriert: Montag 14. Januar 2008, 20:59

hmmm mal sehen ... ich steh aber wieder mal vor einem problem:

Ich hab bis jetzt eine Klassen
"pump"
"ingredient"
"recipe"
die nunja wie der Name schon sagt für Zutaten, Pumpen und Rezepte gedacht sind.

Außerdem hab ich unter Klasse "database" Funktionen zusammengefasst wie "addpump", "removeingredient" ... welche die Daten in einer sqlite3 Datenbank speichern. Die Löschfunktionen hab ich noch nich implementiert. Ich bin jetzt am überlegen wie ich meine Klassen "pump" ... im Detail implementieren möchte. Ich hatte daran gedacht in jeder "recipe" Instanz Referenzen zu den verschiedenen "ingredient" Instanzen zu speichern und in jeder "ingredient" Instanz, Referenzen zu den "recipe" Instanzen welche diese beinhalten. Das würde zwar bedeuten das ich alle Instanzen vorher intialisieren muss und dann erst mit daten füllen kann, weil ich ja nicht eine referenz auf eine noch nicht existierende Instanz speichern kann, aber das ist denk ich machbar.
Mein Gedankengang ist ganz einfach derer, dass es später dadurch (Das Ganze soll später in ein schönes GUI mit PyQt) einfach möglich ist, jedenfalls denke ich das, auf Aktionen des benutzers wie Lösche Zutat "O-Saft", ein Fenster erscheinen zu lassen das dem Benutzer mitteilt: "Zutat O-Saft ist mit Pumpe 3 verknüpft und wird für folgene Rezepte benötigt: "liste mit rezeptnamen", wenn Sie "Zutat" löschen werden auch die Rezepte aus der Datenbank entfernt ...
Meine Frage ist ganz einfach: Ist das eine gute und sinnvolle Implementation oder eher quatsch?
Antworten