Schnittstellen in Programmen für Dumme erklärt
-
Bis du denn schon mit C++ soweit vertraut, daß du Projekte (Konsolenanwendung, GUI-Anwendung, ...) erstellen kannst?
Für die GUI mit C++ könntest du z.B. entweder Qt (für 3D s. Qt 3D Overview) oder gleich Dear ImGUI (welches komplett auf einer Grafikengine wie z.B. OpenGl oder DirectX läuft) verwenden.Ansonsten würde ich eher C# + .NET empfehlen, da der Einstieg dadrin deutlich einfacher ist: .NET-Dokumentation
Ich nehme an, du willst eine Desktop-App für Windows entwickeln? Dann ständen als GUIs Windows Forms und WPF zur Verfügung (es gibt aber auch Crossplattform-GUIs wie Avalonia UI, Uno Platform, ..).
-
Danke der Nachfrage Auf jeden Fall bin ich, bis auf die C-Altlasten, nach nunmehr gut 10 Tagen ganz gut in C++ angekommen. Des Weiteren bin ich Rentner (70) und von daher erfreue ich mich jeden Tag meines Web-Application Framework was ich nunmehr auch mit C++ weiterentwickeln kann. In Sachen OOP komme ich von Perl 5, von daher sieht die Weiterentwicklung meines WebFW mit C++ ganz ähnlich aus, denn mein FW ist schon immer objektorientiert und C++ kommt der OO-Philosophie wohl näher als jede andere PL mit der ich bisher zu tun hatte.
Auf jeden Fall ist es schon ein Erfolg, daß sich meine mit C++ erzeugten Webseiten nicht von den anderen Seiten unterscheiden die mit Perl oder PHP erzeugt werden, die fügen sich nahtlos ein samt Navigations-Menu.
Für Konsolenanwendungen bevorzuge ich Perl, da allein ich die benutze. Auch das ist ein richtiges Framework mit einer CLI und die Idee zu diesem Command Line Interface kam mir beim Arbeiten mit CISCO Routern und SwichesDie nächste Idee für mein Consolen FW: Ein HTTP-Client der mir auf Knopfdruck aus dem Editor heraus meine cpp-Datei auf den produktiven Server lädt und gleich kompiliert.
Honorarprogramme schreibe ich nicht mehr, aber so manche Idee gebe ich gerne weiterViele Grüße!
-
@_ro_ro: Du hast dich im Thema vertan - diesmal warst du nicht gemeint.
Aber danke für deine Beschreibung (jetzt weiß ich ein bißchen mehr, wozu dein Code in den anderen Themen von dir gehört).
Und guten Rutsch wünsche ich.
-
-
@Th69
Ich habe noch nie etwas in C++ geschrieben (stimmt nicht ganz kleine Arduino Projekte mit den Kindern hab, eich mal gemacht, da wird glaube ich auch C++ oder C verwendet) und werde es wahrscheinlich vorerst auch nicht tun.Es geht mir um das Grundverständnis, um zu verstehen, was ich brauche oder für mich in Betracht ziehen kann, aber programmieren muss es jemand anderes!
(deshalb suche ich noch hier im Forum, ob es eine Ecke gibt, woher wer kommt, eventuell für ein Treffen oder eine Zusammenarbeit).Mein Projekt ist zur Zeit ein privates Projekt, aber wenn es Erfolg hat (d.h. es ist realisierbar), wird es in ein kommerzielles Projekt umgewandelt.
Ich setze auf C++, da dies eine Sprache ist, die Koppelort wird (schnell), ich einen Haufen Rohdaten vom Scanner bearbeiten (analysieren) muss, und die Maschinensteuerung über eine Schnittstelle zu C++ verfügt.
Daher würde ich die Software gerne in C++ erstellen lassen.
Da es sich aktuell um ein Ein man Project handelt, sollte ich zumindest in der Theorie verstanden habe wie so was geht.
Damit ich dann, wenn ich etwas beauftragen würde, auch weis, was ich da machen lassen möchte.Die Erklärung von @Quiche-Lorraine geht in die Richtung.
-
@_ro_ro sagte in Schnittstellen in Programmen für Dumme erklärt:
stimmt, sorry
Egal. Euch allen einen Guten Rutsch ins neue Jahr !!
_roro
Oh Mann und ich habe schon gedacht, ich habe was falsch verstanden.
Danke, das wünsche ich euch auch allen! Guten Start ins Jahr 2024.
-
@Muecke82 sagte in Schnittstellen in Programmen für Dumme erklärt:
Ich setze auf C++, da dies eine Sprache ist, die Koppelort wird (schnell)
Du meinst sicherlich "die kompiliert wird"?!
Das sind aber fast alle top-ranking* Sprachen, die native Kompilate erzeugen (C, C++, C#, Java, Delphi, ...), nur wenige benutzen Interpreter (Python oder Websprachen wie JavaScript oder PHP).
-
@Th69 sagte in Schnittstellen in Programmen für Dumme erklärt:
@Muecke82 sagte in Schnittstellen in Programmen für Dumme erklärt:
Ich setze auf C++, da dies eine Sprache ist, die Koppelort wird (schnell)
Du meinst sicherlich "die kompiliert wird"?!
Das sind aber fast alle top-ranking* Sprachen, die native Kompilate erzeugen (C, C++, C#, Java, Delphi, ...), nur wenige benutzen Interpreter (Python oder Websprachen wie JavaScript oder PHP).Oh sorry, ja das meinte ich.
Da ich für die Hardwaresteuerung schon eine Software im Einsatz habe, die alle Hardware Komponenten überwacht, steuert und Fehlerprüfungen übernimm und diese eine Schneit stelle zu C++ hat, dachte ich an C++.
-
@Th69 sagte in Schnittstellen in Programmen für Dumme erklärt:
Ich nehme an, du willst eine Desktop-App für Windows entwickeln? Dann ständen als GUIs Windows Forms und WPF zur Verfügung (es gibt aber auch Crossplattform-GUIs wie Avalonia UI, Uno Platform, ..).
Eine Windowsanwendung wäre schön, da dies sehr weit verbreitet ist, jedoch läuft aktuell die Hardware Steuer Software auf einem Linux Rechner, die der Rechner (für die Anzeige) an der Maschine fest verbaut ist, spielt es wahrscheinlich keine Rolle und es wäre geschickter auf Linux zu setzen, da hier schon die Hardwaresteuerung ist.
Der Rechner (für die Anzeige) soll nebenher nicht für andere Dinge genutzt werden vom Anwender.Das QT habe ich in einem anderen Projekt schon mal gelesen, dass damit was gemacht wurde, auch bei Linux.
Das schaue ich mir mal an, wenn ich mit den Schnittstellen Verständnis für mich weiter gekommen bin.
-
@Quiche-Lorraine:
Ok, da habe ich wieder was dazu gelernt, ich glaube dann meine ich nicht unbedingt die Schnittstellen, sondern Software-Module bzw. eine Mischung aus beiden.Das Beispiel von dir ist gut, mal schauen, ob ich es verstanden habe.
Um bei deinem Beispiel zu bleiben, den 3D -Scanner.Meine Software (wie nennt man das dann richtig Hauptsoftware?) benötigt verschiedene Dinge z.B. einen 3-D-Scanner, CNC-Steuerung etc.
Für den 3-D-Scanner benötige ich einen "Treiber" dieser ist in sich abgeschlossen und in einem extra "Modul" in der Hauptsoftware definite ich jedoch, welche Daten ich wie benötige (Schnittstelle) das bedeutet der "Treiber" muss dann die Daten egal welcher Scanner das da ist (der ist ja extra für den Scanner geschrieben) so bereitstellen.
Wenn der Scanner sich verändert (anderer Scan er) dann muss ein Neuer "Treiber her, der die Daten wieder so aufbereitet, dass meine "Hauptsoftware" damit umgehen kann.Du meintest das dann in den Dateien DLL stehen würde, die bei einem Programm mit geliefert werden. Diese kann ich dann auch später austauschen, z.B. bei einer neuen Generation von Scannen.
Soweit habe ich das verstanden. Da geht es dann um die Nutzung von Hardware.
Könnten wir so ein Beispiel mit einer Software teil durchspielen?
z.B. Meine Hauptsoftware folgt einem bestimmten Ablauf, bzw. hat verschiedene neue ich es mal Frames, kenne ich von Webseiten.
Diese Frames bauen aufeinander auf bzw. können entsprechend aufgerufen werden.
Damit ein bestimmter Frame aufgerufen werden kann, muss unter Umständen ein anderer Frame schon durchlaufen sein.Der Frame "Eingangsmessung" beinhaltet somit die Schnittstelle für den Scaner (denn die Daten müssen ja eingelesen werden, da die Schnittstelle selbst jedoch keine Aktion ausführt, muss die CNC Schnittstelle auch mit angesprochen werden.
Jetzt bekomme ich die Daten vom Scanner mit den Daten der CNC Schnittstelle. Das füge ich dann in einem separaten Modul zusammen (ist das dann auch ein ausgelagerter Code), wenn dies erfolgt ist kann erst die Eingangsanalyse erfolgen (was dann auch wieder ein ausgelagerter Code ist, und mir alle relevanten Dinge zur Verfügung stellt, (in einer Schnittstelle) diese relevanten Analyse Dinge (Fehler, Probleme etc am Model) kann ich dann nach einander abarbeiten und wenn das alles von Rot auf Grün springt dann kann ich das nächste Modul (ausgelagerter Code) ansprechen, dass das Model entsprechend mit den Schnittstellen Scanner CNC etc. bearbeitet.
Oh Mann, das ist ja dann ziemlich viel "Ausgelagerter" Modulcode"
Hab das halbwegs richtig verstanden?
gruß Mücke
-
Ausgelagert heißt nicht unbedingt, daß jedes in einer separaten Bibliothek (DLL) sein muß.
Stichwort: Separation of concernsFür C++ würde man einfach verschiedene Namensbereiche (
namespace
) und Klassen (class
) verwenden.Wichtig ist nur, daß diese möglichst unabhängig von anderen (konkreten) Klassen sind -> und genau dafür definiert man Schnittstellen (in C++ meist als abstrakte Klassen implementiert).
Über diese Schnittstellen "kommunizieren" dann die verschiedenen Klassen miteinander, z.B. per Dependency Injection (DI).Generell gibt es noch die SOLID Prinzipien, an denen sich die meisten objektorientierten Anwendungen halten sollten.
Ich weiß, das sind jetzt viele technische Begriffe, aber diese helfen dir dabei, dich mit dem eigentlichen Entwickler zu unterhalten.
-
@Muecke82 sagte in Schnittstellen in Programmen für Dumme erklärt:
Könnten wir so ein Beispiel mit einer Software teil durchspielen?
z.B. Meine Hauptsoftware folgt einem bestimmten Ablauf, bzw. hat verschiedene neue ich es mal Frames, kenne ich von Webseiten.
Diese Frames bauen aufeinander auf bzw. können entsprechend aufgerufen werden.
Damit ein bestimmter Frame aufgerufen werden kann, muss unter Umständen ein anderer Frame schon durchlaufen sein.
Der Frame "Eingangsmessung" beinhaltet somit die Schnittstelle für den Scaner (denn die Daten müssen ja eingelesen werden, da die Schnittstelle selbst jedoch keine Aktion ausführt, muss die CNC Schnittstelle auch mit angesprochen werden.
Jetzt bekomme ich die Daten vom Scanner mit den Daten der CNC Schnittstelle. Das füge ich dann in einem separaten Modul zusammen (ist das dann auch ein ausgelagerter Code), wenn dies erfolgt ist kann erst die Eingangsanalyse erfolgen (was dann auch wieder ein ausgelagerter Code ist, und mir alle relevanten Dinge zur Verfügung stellt, (in einer Schnittstelle) diese relevanten Analyse Dinge (Fehler, Probleme etc am Model) kann ich dann nach einander abarbeiten und wenn das alles von Rot auf Grün springt dann kann ich das nächste Modul (ausgelagerter Code) ansprechen, dass das Model entsprechend mit den Schnittstellen Scanner CNC etc. bearbeitet.
Oh Mann, das ist ja dann ziemlich viel "Ausgelagerter" Modulcode"
Hab das halbwegs richtig verstanden?Oh je, jetzt raucht mir die Birne.
Bei deinem Text habe ich eher das Gefühl, wir befinden uns in der ersten Phase der Software-Entwicklung, der Analyse. Hierzu wäre ein Hilfsmittel ein UML Klassendiagramm hilfreich.
Und wie Th69 schon sagte, ein Modul muss nicht unbedingt eine externe Bibliothek (.dll) sein, es kann auch eine interne Bibliothek (.lib) oder auch einfach Menge von Quelldateien sein.
-
@Quiche-Lorraine sagte in Schnittstellen in Programmen für Dumme erklärt:
Oh je, jetzt raucht mir die Birne.
Bei deinem Text habe ich eher das Gefühl, wir befinden uns in der ersten Phase der Software-Entwicklung, der Analyse. Hierzu wäre ein Hilfsmittel ein UML Klassendiagramm hilfreich.
Ja das ist richtig, ich kenne mich mit so was nicht wirklich aus, als ich das gemacht habe, habe ich da nur sehr einfache dinge gemacht.
Das mit dem UML Klassendiagramm habe ich nicht ganz verstanden. Da ich eins erstelle, was ich mir wie vorstelle?
Das klingt sehr interessant und würde die Gazen Punkte der Software, was eigentlich gemacht werden muss etc. veranschaulichen, das gefällt mir ganz gut. Es ist auch definiert, was wie dargestellt werden soll / muss. So dass es andere verstehen.
Gibt es da ein Software (Windows), mit der man solche Modelle erstellen kann? Die entsprechend mit wachsen können? Wenn mir weitere dinge einfallen? Oder klar werden, die ich noch nicht bedacht habe?Und wie Th69 schon sagte, ein Modul muss nicht unbedingt eine externe Bibliothek (.dll) sein, es kann auch eine interne Bibliothek (.lib) oder auch einfach Menge von Quelldateien sein.
Ok, das muss noch etwas sacken im Kopf.
-
Ich habe mir einige Videos über Qt angesehen. Habe ich das richtig verstanden?
Qt kann die GUI mit Buttons darstellen, Werteingabe, Text, Grafikausgabe etc. und man kann dann die ganzen Elemente mit Code füttern bzw. mit anderem Code verknüpfen, so dass dann entsprechende Werte dorthin übergeben werden bzw. von dort zurückgesendet werden zur Darstellung?Grob verglichen, mit HTML zur Darstellung.
Auf der Seite von Qt habe ich allerdings nur Downloads gefunden, die man bezahlen muss, im Internet habe ich aber auch gelesen, dass es kostenlose Versionen geben soll. (Sind die dann legal?)Denn wenn das so ist, könnte ich mir dann eine GUI zusammenbasteln und damit die Funktionen der Software darstellen, noch ohne echten ausführbaren Code im Hintergrund?
Gruß Mücke
-
@Muecke82
Ja, die miesten Teile von QT sind kostenlos verwendbar - auch für kommerzielle closed source Projekte. Einige speziellere Teile sind GPL etc., da gibt es strengere Restriktionen.Es gibt auch unofiziell Installer dafür, welche je nachdem etwas praktischer sind:
https://github.com/miurahr/aqtinstallAlles ohne Probleme verwendbar.
-
Ja, bzgl. der Funktionsweise hast du das richtig verstanden.
Am besten, du benutzt dafür dann den zugehörigen Editor "Qt Creator", so daß du mit dem dann visuell die GUI erstellen kannst (anstatt nur über Code aus).
Es gibt zwei unterschiedliche Qt-GUI Komponenten (und damit verbundene Projekte):- (neuere) QML
- klassische Qt
Es kann sein, daß nur für QML ein Designer verfügbar ist.
Ansonsten, so wie @Leon0402 gerade geschrieben hat, ist der meiste Teil kostenlos (mit entsprechender Lizenz).
Die direkten Downloads gibt es unter Qt Downloads: Official Releases (da gibt es auch den Download zu dem separaten Qt Design Studio, falls du ersteinmal nur die GUI erstellen möchtest, ohne Code).Edit: Es gibt wohl nur bis Version 2.3.1 das Qt Design Studio als Community Edition frei zum Download, aber das müßte für dich zum Test erst einmal ausreichen.
-
Ok, das ist schon mal gut, dass ich das richtig verstanden habe (grundlegend)
Ja, ich würde die GUI erst einmal ohne Code erstellen.
Da gibt es so viel verschiedenes.
Ich benötige das "Qt Design Studio" um die GUI ohne Code zu erstellen (später kann man dann code dranhängen)
Bei deinem Downloade Link wäre das dann der Ordner "qtdesignstudio/" da sehe ich jedoch die Version 3.5.0 aus dem Jahr 13-Jul-2022.Das müsste ich mir installieren? (auf meinen WIN 10 Rechner)? Mehr benötige ich dann vorerst nicht?
-
Für die Versionen 3.x gibt es nur "designstudio_branding_and_extradata.zip" zum Herunterladen (dies ist wohl nur ein Addon für die aktuelle, aber nicht kostenlose, Version).
Daher auch mein Edit in meinem letzten Beitrag.
Du müßtest also (aus dem Ordner "2.3.1") "qt-designstudio-windows-x64-2.3.1-community.exe" herunterladen.Edit:
Und aus der erstellten GUI kannst du dann den Qt-Code (QML) generieren lassen, so daß dieser dann in einen C++ Projekt (mit Qt) benutzt werden kann, d.h. dort dann die Ereignisse (z.B. Button-Klicks) per Code ausgefüllt werden können.
Und auch nachträglich kann dann dieser Prozess immer wieder durchgeführt werden, d.h. die GUI im C++ Projekt aktualisiert werden (nur bei größeren Änderungen müssen dann evtl. Teile des Codes geändert oder neu hinzugefügt werden).
-
Oh, das ist ja cool.
Das habe ich heruntergeladen und installiert. (mein Rechner stockt nun ab und an, ich glaube das der nicht der beste ist)Ich glaube jetzt muss ich das Forum wechseln, um mit der Software klarzukommen.
(die kann man nicht zufälligerweise auf Deutsch umstellen?)
habe es gefunden: Tools → Options → Environment → Interface