Problem bei Modularisierung

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
speechbubble21
User
Beiträge: 3
Registriert: Donnerstag 22. Januar 2015, 20:01

Hallo Forum,
ich arbeite jetzt schon längere Zeit an einem kleinen Projekt. Das ganze ist ein Elektronikprojekt und soll jetzt mit Python programmiert werden.
Für unterschiedliche Aufgaben habe ich jetzt Klassen erstellt. Die einfachen Funktionen funktionieren auch schon. Jetzt habe ich allerdings das Problem,
dass manche Klassen bzw. deren Methoden auf Methoden und Eigenschaften anderer Klassen zugreifen muss. Die Idee von mir war jetzt so etwas wie einen Kern zu schreiben von welchem
aus die Objekte usw. erzeugt und verwaltet werden. Da ich eventuell noch kleine Erweiterungen plane hielt ich das mal für den besten Ansatz.

Ich habe zum Beispiel ein Objekt von einer Klasse, das von einem Chip Eingänge liest und dann ein Dictionary mit den Werten und dessen Name speichert.
Dieser Wert kann dann über eine Property ausgelesen werden. Eine anderes Objekt repräsentiert ein Menü welches auf die Inputs reagieren muss und je nach Bedarf Text ausgibt, welcher von einem
anderen Objekt auf ein angeschlossenes Display schreibt.

Im Prinzip sollen die Objekte die Eingaben registrieren diese an den Kern liefern und Objekte, die von diesen Werten abhängig sind, diese aus dem Kern lesen.

Wie löse ich das am besten? Mittels Threads? Oder gibts da eine andere Lösung?
Sollte jemand einen komplett anderen Ansatz im Kopf haben, nur her damit. :o
Hoffe man konnte mein Problem nachvollziehen, wenn nicht steh ich für Fragen selbstverständlich bereit.

Lg Andi

PS: Python läuft auf einem Raspberry Pi unter Version 2.7.3
BlackJack

@speechbubble21: Hm, das ist alles sehr allgemein beschrieben. Dieser Kern könnte bedeuten dass der jedes Objekt kennt und die Objekte alle über den Kern auf alle anderen Objekte zugreifen können, was schlecht wäre, weil das letzendlich eine zentrale Stelle wäre wo irgendwie *alles* drin steckt, also letztendlich ein etwas komplizierteres ``global``. Es könnte aber beispielsweise auch bedeuten Du hättest da eine zentrale Stelle bei der Objekte selbst Nachrichtenquellen anmelden können und andere Nachrichtenquellen abonnieren können (publish-subscribe-pattern).

Ob da irgendwo Threads ins Spiel kommen kommt darauf an ob es Sachen gibt die nebenläufig passieren müssen. Je nachdem mit welchem Modul Du die GPIO-Pins ansprichst kann das eventuell auch schon Threads im Hintergrund starten, zum Beispiel wenn das Modul die Möglichkeit bietet die Pins nicht nur zu ”pollen” sondern sich auch per Interrupt über Zustandsänderungen informieren zu lassen.
speechbubble21
User
Beiträge: 3
Registriert: Donnerstag 22. Januar 2015, 20:01

Hallo BlackJack,
erstmal danke für deine Antwort.
Also würde es rein theoretisch funktionieren, wenn ich einen Kern schreibe, der alle Objekte als global definiert? Können dann die anderen Klassen auf diese gloabeln
Objekte zugreifen und die ändern?

Lg Andi
BlackJack

@speechbubble21: Funktionieren tut vieles. Nochmal: Man kann aus Deiner Beschreibung nicht ablesen ob Du da etwas vernünftiges oder sehr grossen Murks machen willst, der zwar ”funktioniert”, aber der selbst wenn er fehlerfrei ist, doch fehelanfällig, und schwer durchschaubar ist. Und damit Fehler schlechter aufzufinden sind, und das Ganze schwieriger wart- und erweiterbar macht. Tendenziell ist ”global” nicht gut, und nur zur Sicherheit: vergiss die ``global``-Anweisung erst einmal komplett.
speechbubble21
User
Beiträge: 3
Registriert: Donnerstag 22. Januar 2015, 20:01

Danke für deine Antwort!
Wie könnte den ein Ansatz ohne global aussehen?
Wie sollen denn dann die Objekte untereinander kommunizieren?
Und ja, das Programm sollte durchaus vernünftig laufen :D

LG Andi
Antworten