Schnittstellen in Programmen für Dumme erklärt
-
@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