OOP Grundaufbau



  • Hallo,
    ich will mich in die Welt des OOP vor tasten. Wenn ich jetzt zum Beispiel eine Konsolenanwendung mit Menü haben will, also das ich mich durch Eingabe von Zahlen durch die Menüs steuere macht man so was ach schon über Objekte?
    Oder ganz normal in der main loop?

    Viele Grüße



  • Prinzipiell kann man alles in Klassen packen, also auch ein Menü.
    Sinnvoll? Kommt auf den konkreten Fall an.



  • Kann man mit Konsolenanwendungen überhaupt effizient programmieren? Ich hänge ja quasi immer in einer Eingaberoutine im Menü. Kann man da noch im Hintergrund etwas laufen lassen?



  • Markus W. schrieb:

    Kann man mit Konsolenanwendungen überhaupt effizient programmieren? Ich hänge ja quasi immer in einer Eingaberoutine im Menü. Kann man da noch im Hintergrund etwas laufen lassen?

    Ja, aber Threads sind mit den Standardmitteln von C++ (noch) nicht möglich. Das ist also vom Betriebssystem abhängig und man muss die Funktionen des entsprechenden Betriebssystem nutzen. Alternativ kann man vielleicht mit select (POSIX-Standard) etwas basteln, aber insgesamt wirst du es wohl nicht zu 100% portabel lösen können.



  • Würde das mit einer Grafischen Oberfläche einfacher gehen und effizienter? Zur Verfügung hätte ich Microsoft Visual Studio 2008 Professionell über MSDNAA. Ist es besonders schwer ohne große C++ Erfahrung damit eine Grafische Oberfläche zu erstellen? Also sollte man lieber erst einmal in der Konsole bleiben?



  • Konsole. Absolut.

    Viele bleiben grundsätzlich in der Konsole. Für ein gescheites Programm brauchst du keine Oberfläche.

    Allerdings ist eine gute GUI natürlich Gold Wert für einfache Benutzbarkeit, aber man darf GUI Programmierung nicht als eine Art "höhere" Stufe der Programmierung angeschaut werden. Es ist in der Tat sogar bei vielen unbeliebter, als die eigentliche Anwendungsentwicklung. 😉



  • Hmm ich weiß halt nur noch nicht, wie ich das für meine Anwendung umsetzen soll. Ich komme von C auf Mikrocontrollern. Da habe ich immer sehr viel Wert darauf gelegt, dass das Programm an keiner Stelle hängt, und immer etwas macht. Jetzt möchte ich zum Test eine Anwendung programmieren, die mit dem Mikrocontroller kommuniziert. Das werde ich wahrscheinlich über RS232 machen. Jetzt brauche ich halt ein Menü, wo ich verschiedene Befehle an den Controller senden kann, aber auch der Controller permanent Daten sendet, welche dann vom PC verarbeitet werden.

    Wenn ich jetzt aber zum Beispiel ein Menü mache muss ich ja mit einer Eingaberoutine dem Benutzer die Möglichkeit geben sich durch die Menüs zu arbeiten. Aber an dieser Stelle hängt ja dann das Programm.

    Wie könnte man das am besten realisieren?


  • Mod

    Das Thema wurde letzte Woche in der "Expertenrunde" diskutiert:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-261900.html

    Das Ergebnis war, dass es mit reinen Standardmitteln nicht möglich ist. 😞



  • Und würde es mit einer Grafischen Oberfläche gehen? Denn da gibt es ja ein quasi Multitasking, denn die Eingabe blockiert ja nicht, oder?


  • Mod

    Markus W. schrieb:

    Und würde es mit einer Grafischen Oberfläche gehen? Denn da gibt es ja ein quasi Multitasking, denn die Eingabe blockiert ja nicht, oder?

    Umgekehrt: Das ist keine Eigenschaft grafischer Oberflächen, sondern eine Eigenschaft von Multitasking. Ob man Multitasking mit grafischer Oberfläche macht oder ohne, ist egal.

    Der Punkt ist nur, dass man ohne Multitasking keine vernünftig bedienbare grafische Oberfläche bauen kann. Eigentlich genau das gleiche Problem, was du gerade in Textform hast.

    Programme ohne Multitasking haben daher normalerweise andere Bedienkonzepte.

    Die Frage ist, was ist der Zweck deines Programms:
    - Eine coole Oberfläche haben? ➡ Multitasking lernen und Oberfläche programmieren. Egal ob als Text oder als Grafik.
    - Etwas anderes? ➡ Konzentrier dich auf diese Kernfunktionalität. Lass dich bei der Bedienung von anderen Konsolenprogrammen inspirieren.



  • Du kannst auch ohne threads nicht blockiernde abfragen machen
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39320.html

    Oder schau dir GUI tutorials an Google: qt tutorial



  • Also vorerst soll es einfach nur funktionieren, so wie ich es vorhin beschrieben habe. Und es kam so herüber, als wäre das mit einer Konsolen Oberfläche nicht möglich.

    Wenn grafisch würde ich gerne mit einer IDE Arbeiten also käme ja MFC in frage. Mit grafische Oberfläche habe ich bis jetzt nur mit Delphi gearbeitet, als wir das in der Schule hatten. Dort ging das eigentlich ganz gut.



  • SeppJ schrieb:

    Der Punkt ist nur, dass man ohne Multitasking keine vernünftig bedienbare grafische Oberfläche bauen kann.

    Windows 3.11, das auf DOS aufsetzt, hatte auch kein Multitasking und war "vernünftig bedienbar"

    Markus W. schrieb:

    Wenn grafisch würde ich gerne mit einer IDE Arbeiten also käme ja MFC in frage.

    Mit VS und MFC kannst Du dir ein Grundgerüst für eine grafische Anwendung generieren lassen, z.B. eine Dialogbox. Steuerelemente lassen sich per Drag'n'Drop einfügen und VS erzeugt Handler-Funktionen für Butten-Klicks, Menü-Klicks, usw.



  • Also was wäre denn für meine Anwendung besser geeignet, Konsole oder MFC. Wenn MFC gibt es da ein gutes Tutorial? Das einzig brauchbare, was ich gefunden habe ist dieses, aber das basiert auf einer Veralteten Version von VS.




  • Mod

    Z schrieb:

    SeppJ schrieb:

    Der Punkt ist nur, dass man ohne Multitasking keine vernünftig bedienbare grafische Oberfläche bauen kann.

    Windows 3.11, das auf DOS aufsetzt, hatte auch kein Multitasking und war "vernünftig bedienbar"

    Komisch, dann müssen die das Feature wohl wieder entfernt haben. Windows 1.0 konnte noch Multitasking...



  • Also das Tutorial hilft mir leider auch nicht weiter, da alles total anders geworden ist in der 2008 Version.



  • Was wäre denn nun für mein Vorhaben einfacher? In der Konsole bleiben? Wenn ja wie kann ich dann ein Menü programmieren, was unabhängig vom Rest arbeitet, also wo im Hintergrund quasi die Hauptschleife ganz normal weiter arbeitet?
    Oder ist es vlt. doch einfacher so ein Programm mit Visual Studio und MFC aufzubauen?



  • SeppJ schrieb:

    Z schrieb:

    SeppJ schrieb:

    Der Punkt ist nur, dass man ohne Multitasking keine vernünftig bedienbare grafische Oberfläche bauen kann.

    Windows 3.11, das auf DOS aufsetzt, hatte auch kein Multitasking und war "vernünftig bedienbar"

    Komisch, dann müssen die das Feature wohl wieder entfernt haben. Windows 1.0 konnte noch Multitasking...

    Das halte ich für ein Gerücht. Beide liefen unter MS-DOS. Multitasking konnten erst die Windows-NT Versionen. Hattest Du eine Endlosschleife in ein Windows-Programm unter 3.11, dann hing der ganze Computer fest.

    Markus W. schrieb:

    Was wäre denn nun für mein Vorhaben einfacher? In der Konsole bleiben? Wenn ja wie kann ich dann ein Menü programmieren, was unabhängig vom Rest arbeitet, also wo im Hintergrund quasi die Hauptschleife ganz normal weiter arbeitet?
    Oder ist es vlt. doch einfacher so ein Programm mit Visual Studio und MFC aufzubauen?

    Ich finde Menüs sind einfacher unter Windows. Mit VS2008 sollte es auch möglich seine, eine MFC-Dialoganwendung zu erzeugen (Ich habe nur VS2005, damit gehts definitiv).
    Du brauchst aber die Vollversion. In der Express Edition sind die MFC nicht enthalten.



  • Als Einstieg in die OOP würde ich nicht gerade mit GUI anfangen. In C++ gibt es viele GUI-Frameworks, und ein grosser Teil davon benutzt fragwürdiges und veraltetes, hässliches C++. Damit würdest du dir wahrscheinlich schlechte Dinge angewöhnen, zumal du noch nicht wirklich ein Gefühl für "schönes Design" hast.

    Wenn du wirklich parallel programmieren willst, kannst du Threads benutzen. Aber nur "um den Computer ausgelastet zu haben", auch wenn du die Leistung eigentlich gar nicht benötigst, würde ich das nicht tun. Denn Programmierung mit Threads ist nicht ganz trivial.

    Falls du dich doch für diesen Weg entscheidest: Ich kenne zwei plattformunabhängige Bibliotheken, die Funktionalität für Multithreading bereitstellen. Zum einen wäre das Boost, eine Sammlung diverser C++-Bibliotheken, die den Schwerpunkt auf die Sprache selbst legt. Zum anderen hättest du mit SFML ein Multimedia-Framework, das neben Threads auch Funktionalität für 2D-Grafik, Sound und Netzwerk anbietet.


Log in to reply