Brauche Beratung/Hilfe zu einem Cockpitsimulator (Flugzeug)
-
@hustbaer Danke für deinen Beitrag.
Darum geht es mir jetzt aber nicht. Mit C++ und Qt kann ich vieles besser und zusätzlich grafisches darstellen und mit dieser objektorientierten Programmiersprache kürzeren Code schreiben als mit Javascript.
Meinen Simulator will ich mit C++ schreiben, die mit Javascript ist Vergangenheit bzw. da mache ich nichts mehr mit. Im Visual Studio habe ich zudem auch einen viel besseren Überblick.
-
@stefanpc81 sagte in Brauche Beratung/Hilfe zu einem Cockpitsimulator (Flugzeug):
Der erste Weg sieht in etwa so aus, dass ich die Klasseninstanzen (current, engineL, engineR, fuel etc.) an andere Klassen, die die aktuellen Daten brauchen, über den Konstruktor übergeben habe. Ich wurde eines besseren belehrt, dass man gegenseitige Klassen nicht aufrufen sollte... Deshalb habe ich mein Konzept über den Haufen geschmissen.
Kürzlich habe ich verschiedene Möglichkeiten gefunden, mit denen Singleton-Objekte definiert werden.
Wie kommst du auf die Idee, dass man gegenseitig keine Klassen aufrufen soll. Composition ist ein gängiges und übliches Mittel. Auch Abhängigkeiten über den Konstruktor weiterzugeben ist üblich, siehe dependency injection.
Ich würde von Singletons abraten. Die machen es nur schwerer die einzelnen Komponenten mit Unittests zu testen.
Ansonsten habe ich gerade keine Zeit/Lust mir ein Klassendesign für einen Flugsimulator aus dem Ärmel zu schütteln. Ich würde dir raten, hier konkrete Fragen zu stellen, dann gibt es i.d.R. auch konkrete Antworten
@stefanpc81 sagte in Brauche Beratung/Hilfe zu einem Cockpitsimulator (Flugzeug):
Kann ich eine Klasse mit einem Qwidget und dem QPainter im drawEvent zusammen mit den Eigenschaften und Methoden zusammenpacken? Also z.B. Current mit den Schaltzuständen der Taster und die OHP "Electrics"-Anzeigen auf den QPushButtons im OHP.
Prinzipiell "kann" man sehr viel. Eigentlich sollte jede Klasse für eine einzige Sache zuständig sein. (Single-responsibility principle)
Wenn es um die konkrete Implementierung geht, dann bitte ein Beispiel mit Code, dass ist viel eindeutiger als jede Menge Text und Metaerklärungen.
-
@Schlangenmensch sagte:
Wie kommst du auf die Idee, dass man gegenseitig keine Klassen aufrufen soll.
Das schrieb Miglied Th69 bei https://www.c-plusplus.net/forum/topic/353112/problem-bei-zugriff-auf-eine-funktion-einer-anderen-klasseninstanz/2 Ich wusste nicht mehr genau den Kontext dazu, da habe ich etwas durcheinander gebracht...
Composition ist ein gängiges und übliches Mittel. Auch Abhängigkeiten über den Konstruktor weiterzugeben ist üblich, siehe dependency injection.
Ich würde von Singletons abraten. Die machen es nur schwerer die einzelnen Komponenten mit Unittests zu testen.
Danke für die Ratschläge.
Ansonsten habe ich gerade keine Zeit/Lust mir ein Klassendesign für einen Flugsimulator aus dem Ärmel zu schütteln.
Das war auch gar nicht meine Absicht. Mit deinen Infos bin ich jetzt schlauer und sicherer wie ich vorgehen KANN. Mir ging es mehr darum, wo ich etwas Neues erzeuge, aufrufe usw.
Ich würde dir raten, hier konkrete Fragen zu stellen, dann gibt es i.d.R. auch konkrete Antworten
Mach ich, sobald ich irgendwo nicht mehr weiterkomme.
@stefanpc81 sagte:
Kann ich eine Klasse mit einem Qwidget und dem QPainter im drawEvent zusammen mit den Eigenschaften und Methoden zusammenpacken? Also z.B. Current mit den Schaltzuständen der Taster und die OHP "Electrics"-Anzeigen auf den QPushButtons im OHP.
Prinzipiell "kann" man sehr viel. Eigentlich sollte jede Klasse für eine einzige Sache zuständig sein. (Single-responsibility principle)
Wenn es um die konkrete Implementierung geht, dann bitte ein Beispiel mit Code, dass ist viel eindeutiger als jede Menge Text und Metaerklärungen.Ok, danke!
-
@stefanpc81 sagte in Brauche Beratung/Hilfe zu einem Cockpitsimulator (Flugzeug):
Das schrieb Miglied Th69 bei https://www.c-plusplus.net/forum/topic/353112/problem-bei-zugriff-auf-eine-funktion-einer-anderen-klasseninstanz/2 Ich wusste nicht mehr genau den Kontext dazu, da habe ich etwas durcheinander gebracht...
In dem Beispiel wolltest du in A Sachen aus B aufrufen und aus B Sachen aus A. Das ist was anderes
-
@Schlangenmensch sagte in Brauche Beratung/Hilfe zu einem Cockpitsimulator (Flugzeug):
Wie kommst du auf die Idee, dass man gegenseitig keine Klassen aufrufen soll.
...
In dem Beispiel wolltest du in A Sachen aus B aufrufen und aus B Sachen aus A. Das ist was anderesJa genau, es geht hierbei um das "gegenseitig".
@stefanpc81: Ich würde außerdem auch dir raten, auf Singletons zu verzichten (neben der schlechteren Testbarkeit umgehen sie auch gutes Design, da sie - wie globale Variablen - von überall aufgerufen werden können).
-
@stefanpc81
Bevor du dich an die Implementierung machst, würde ich dir empfehlen ein UML Klassendiagramm zu entwickeln. So kannst du die einzelnen Komponenten deiner Simulation und deren Beziehungen erkennen.Ein Beispiel: Ein B777 Overhead Panel (OHP) besteht aus dem ND Monitor, dem PFD Monitor, usw.
Vom PFD soll weiterhin nur eine Instanz, also abgeleitet vom Singleton-Template und vom QWidget sein.
Und genau deswegen ist ein PFD Monitor kein Singleton. Nur weil ein Objekt A aus exakt einem Objekt B besteht, bedeutet dies nicht dass das Objekt immer nur einmal instanziiert werden darf.
-
@Quiche-Lorraine sagte in Brauche Beratung/Hilfe zu einem Cockpitsimulator (Flugzeug):
@stefanpc81
Bevor du dich an die Implementierung machst, würde ich dir empfehlen ein UML Klassendiagramm zu entwickeln. So kannst du die einzelnen Komponenten deiner Simulation und deren Beziehungen erkennen.Das habe ich noch nie gemacht. Aber ich habe aus älteren Versionen viel Code zum Kopieren bzw. zum Nachsehen. Ich mache mir teilweise auf Papier Pläne, wie mit dem aktuellen Projekt was wie ablaufen soll usw.
Ein Beispiel: Ein B777 Overhead Panel (OHP) besteht aus dem ND Monitor, dem PFD Monitor, usw.
Da hast du was falsch verstanden Das OHP befindet sich an der Decke und hat mehrere Schalter und Drehregler (bzw. in Englisch switches, selectors). Die Monitore sind unterhalb des Cockpitfensters angeordnet und haben (fast) keine direkte Eingabefunktion.
@all Vielen Dank nochmals! Das heutige aktuelle Projekt ist begonnen und bisher läuft es. Wenn ich Glück habe, bin ich auf dem richtigen Weg. Und vom Singleton habe ich mich persönlich auch verabschiedet!
-
@stefanpc81 sagte in Brauche Beratung/Hilfe zu einem Cockpitsimulator (Flugzeug):
@hustbaer Danke für deinen Beitrag.
Darum geht es mir jetzt aber nicht. Mit C++ und Qt kann ich vieles besser und zusätzlich grafisches darstellen und mit dieser objektorientierten Programmiersprache kürzeren Code schreiben als mit Javascript.Ich weiss dass es darum nicht ging. Ich wollte dir nur mitteilen dass du die Möglichkeiten und Performance von JavaScript vermutlich etwas falsch einschätzt. Auf die eigentliche Frage(n?) hab ich nicht geantwortet weil ich ehrlich gesagt zu faul war die ganze Wall-of-Text ausreichend aufmerksam zu lesen um die ne sinnvolle Antwort geben zu können.
Meinen Simulator will ich mit C++ schreiben, die mit Javascript ist Vergangenheit bzw. da mache ich nichts mehr mit. Im Visual Studio habe ich zudem auch einen viel besseren Überblick.
Darfst du natürlich gerne! Wünsche viel Spass und guten Erfolg damit. Und wie schon geschrieben wurde: kürzere Fragen, vielleicht auch mit kleinem Code-Beispiel, bekommen schneller/bessere Antworten. Wenn die Frage ist wie man etwas in C++ macht, kannst du auch gerne ein Code-Beispiel bringen in dem du die Teile wo du nicht weisst wie man es macht mit Kommentaren beschreibst.
-
@hustbaer Vielen Dank für die nette Antwort!
-
This post is deleted!