Vom C++ Command Line Tool zur Mac App - was soll ich zuerst lernen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Vom C++ Command Line Tool zur Mac App - was soll ich zuerst lernen?

    Hallo zusammen,

    ich lese hier schon seit einiger Zeit im Forum etwas mit, hab mir schon gute Tips zum Umgang mit dem CoreMidi Framework geholt, mich mit Xcode angefreundet und ihm beigebracht makefile Projekte zu kompilieren etc. Ich habs in den anderen posts immer schon mal erwähnt, aber um es besser einordnen zu können:
    Ich bin langjähriger Mac User, mag das System. Ich studiere aktuell E-Technik im Master, mit einem Schwerpunkt auf Signalverarbeitung, hab dort C sowohl für Mikrocontroller, DSP als auch Linux Command Line Tools gelernt und mir selbst C++ angeeignet. Ich habe inzwischen auch schon erfolgreich einige klassische Command Line Tools in C++ mit Xcode erstellt, primär für irgendwelche (Audio)Signalverarbeitungsanwendungen. Was ich aber immer noch vor mir her schiebe ist ein einarbeiten in das Thema GUI-Programmierung und vielleicht auch das einarbeiten in Objective C oder vielleicht auch Swift.

    Ich wäre nämlich gerne in der Lage vielleicht das ein oder andere selbst geschriebene Command Line Tool mit einer GUI zu versehen.

    Als einen Startpunkt habe ich mir schon das eine oder andere web Tutorial der Art „Ich baue mir in Xcode eine erste App die mir auf Button Klick den Inhalt eines Textfeldes auf ein Label gibt“, angesehen und die Konzepte zuerst auch mal ganz grundsätzlich verstanden, sowohl in Swift als auch in Objective C (wobei mich hier die Sprache noch etwas verwirrt). Dabei habe ich den grundsätzlichen Umgang mit den Elementen der GUI verstanden. Um da nun aber richtig mit loszulegen wäre mir zuerst ein besseres Verständnis der genutzten Programmiersprache, rein von der Syntax her wichtig. Es liegt auf der Hand, dass ich in Ojective C relativ einfach meinen schon bestehenden C++ Code einbinden könnte. Nur frage ich mich, ob es sich lohnt, zuerst diese doch in meinen Augen im Gegensatz zu C++ deutlich weniger intuitive und sperrige Sprache zu lernen um dann damit eigentlich kaum mehr als die GUI-Funktionalität zu realisieren. Andererseits frage ich mich, ob das deutlich aufgeräumter wirkende Swift im Endeffekt gar nicht mehr so einfach und eher als die falsche Wahl erscheint, sobald ich versuche, massenhaft C++ Funktionen aus dem Swift Code aufzurufen. Vielleicht sollte ich zum Lernen auch besser erst mal ein Command Line Tool komplett in Objective C oder Swift portieren? Die nächste Überlegung ist dann wieder gar ganz von Cocoa weg zu gehen und auf irgendeine Cross-Plattform fähige GUI Lösung zu gehen, die eh in C++ programmiert wird.

    Angenommen ich nutze Cocoa, würde ich jedoch auch gerne völlig unabhängig von der genutzten Sprache erst einmal das Konzept von AppDelegate und ViewController besser verstehen um mir zu überlegen, wie ich sinnvoll mein Command Line Tool in ein event-gesteuertes Tool umbaue. Sollte ich also besser erst mal bei den Programmierkonzepten starten?

    Kurz gesagt, es fehlt mir gerade an Konzept und Ansatzpunkten, um mir möglichst zeiteffizient das nötige Wissen anzueignen um mein Vorhaben möglichst sauber und ordentlich umzusetzen.

    Freu mich auf Anregungen!
  • uC_J schrieb:


    Nur frage ich mich, ob es sich lohnt, zuerst diese doch in meinen Augen im Gegensatz zu C++ deutlich weniger intuitive und sperrige Sprache zu lernen...
    Zum Glück hast du das "in meinen Augen" noch hinzugefügt ;)

    Es hängt davon ab was du realisieren willst. Wenn du einfach nur die Ein- und Ausgabe des Programms in eine GUI bringen willst, brauchst du ja kaum Delegates etc.
    Am einfachsten geht das natürlich in Obj-C weil du dort Obj-C und C++ code beliebig mixen kannst.
  • Willst du massenhaft bestehenden C++ Code nutzen kommst du um Obj-C nicht rum, da du für Swift einen Obj-C Wrapper um den C++ Code bauen musst. Und auch wenn Apple was anderes behauptet finde ich Obj-C leichter zu lernen als Swift. Möchtest du es wie von Gritsch angedeutet machen kannst du Problemlos Swift nutzen, da wäre dann NSTask dein Suchbegriff um Command Line Tools aus der GUI aufzurufen und die Ausgabe aufzubereiten.

    Andernfalls finde ich den Ansatz eines deiner Tools auf Event gesteuert umzubauen nicht schlecht. Willst du es komplett neu machen ist Swift ein Weg, möchtest du vorhandene Datenstrukturen/Methoden oder sogar fremde Bibliotheken weiter nutzen würde ich eher zu Obj-C raten.

    Zu deiner letzten Frage, ja du solltest dich erst einmal mit den Grundlagen der GUI Programmierung beschäftigen, ich nehme dafür meistens ein Einführungsbuch zur Hand und nach dem Lesen versuche ich das gelesene auf eigene Projekte zu übertragen. Und da du es erwähnt hast, ein Plattform unabhängiges GUI Toolkit in C++ wäre Qt, die Teile haben meiner Meinung nach nur den Nachteil, dass ein Programm sich nur unter einer Plattform nativ anfühlt, auf anderen Plattformen als der eigentlichen Zielplattform nutzt es zwar native Elemente wie Buttons, aber die ganze Menüführung/Kontextmenüs usw. entspricht halt nur bedingt der Plattform auf der es den noch zusätzlich läuft.
    Das Herz besitzt Gründe, die die Vernunft nicht kennt.
  • Wenn Du bei C++ bleiben möchtest und GUI programmieren willst, dann mach das mit Qt5. Anleitungen usw. gibt's unter doc.qt.io/qt-5/qt5-intro.html. Kannst Du auch mittels Xcode programmieren.

    Objective-C ist einfacher als C++. Da gibt's nix wegzudiskutieren. Das liegt daran, dass die Sprache C++ sehr umfangreich ist. Keine Frage, man muss nicht unbedingt die Sprache bis zum letzten ausnutzen. Vermutlich kennen die aller-aller-aller-wenigsten alles von C++ (einschließlich STL). Wenn Du in C++ programmierst, dann musst Du das Programmieren unter einer Objektorientierten Sprache verstanden haben. Dann ist Obj-C kein Problem.

    Natürlich kommt man bei Qt oder Cocoa nicht rum, das Framework kennen zu lernen. Dafür gibt's Bücher. Was man auch braucht sind: Entwurfsmuster.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von manoh ()

  • Moin, danke für eure Rückmeldungen!


    pierredrks schrieb:

    Möchtest du es wie von Gritsch angedeutet machen kannst du Problemlos Swift nutzen, da wäre dann NSTask dein Suchbegriff um Command Line Tools aus der GUI aufzurufen und die Ausgabe aufzubereiten.
    Mit NSTask habe ich sogar schon einmal vor längerer Zeit mehr schlecht als recht irgendwas schnell zusammengeschoben. Das wäre in diesem Fall jedoch nicht die Vorgehensweise die ich vorziehen würde, da ich auch gerne die Strukturen zum erstellen einer etwas anspruchsvolleren Anwendungen erlernen möchte.

    pierredrks schrieb:

    Willst du massenhaft bestehenden C++ Code nutzen kommst du um Obj-C nicht rum, da du für Swift einen Obj-C Wrapper um den C++ Code bauen musst
    Okay, ich dachte das ginge ohne den Umweg über Obj-C. Aber dieses Argument überzeugt mich jetzt dann doch vollkommen. Swift - auch wenn als Programmiersprache bestimmt spannend - schiebe ich also erst einmal etwas weiter nach hinten in die Warteschlange der Dinge die ich gerne mal lernen möchte. Vielleicht auch gar nicht schlecht noch etwas zu warten bis sich die Sprache etwas weiterentwickelt hat - bei der Recherche dazu kam es mir so vor als würde sich der Syntax aktuell noch von Version zu Version immer wieder ändern. Schön - da hat sich die Auswahl schon mal etwas verkleinert.

    Bleibt also Cocoa und Obj-C oder QT und C++.

    "Massenhaft bestehender C++ Code" ist vllt. sogar auch übertrieben. Ich habe ein bisschen was schon produziert, schaue aber auch in die Zukunft. Neben bestehendem Code will ich gerne die Kern-Algorithmen an sich weiterhin in C++ runterprogrammieren um sie portabel zu halten. Sprich das Modell Obj-C Cocoa GUI über C++ Anwendung würde ich wahrscheinlich auch für die Zukunft noch weiterverwenden, anstatt anzufangen komplett auf Obj-C umzusteigen.

    Was für mich gerade für QT spricht:
    - Ich würde wahrscheinlich schneller reinkommen, weil ich C++ flüssig "lesen" kann. Damit hätte ich schneller ein vernünftig programmiertes Ergebnis.
    - Auch wenn ich gerade nur etwas für mich und meinen Mac bastle - wenn ich den Algorithmus darunter schon Cross-Plattform portabel auslege, wäre eine Cross-Plattform GUI vielleicht ne tolle Sache falls mal etwas bei meiner Programmiererei rauskommt, was noch wo anders verwendet werden könnte.

    Was für mich gerade für Cocoa inkl. Obj-C spricht:
    - Ich wäre "gezwungen" mich mal ordentlich in Obj-C einzuarbeiten. Daher würde ich am besten mal damit starten zu Lernzwecken ein sauberes Command Line Programm in Obj-C zu entwerfen, bevor ich mich auf die GUI stürze. Bedeutet aber auch mehr Arbeitszeit bis zum ersten GUI-Ergebnis.
    - Würde ich schon mal Obj-C lernen, könnte mir das helfen an der einen oder anderen Stelle, falls nötig oder einfacher, mal gebrauch von Obj-C basierten Apple Frameworks zur Ansprache von Systemfunktionen zu machen.
    - Xcode bietet allem Anschein nach schon eine ziemlich gute Oberfläche um Fenster zu bauen. Das finde ich auf den ersten Blick auch sehr reizvoll.


    manoh schrieb:

    Was man auch braucht sind: Entwurfsmuster.
    Ja, das denke ich auch. Hab halt dann doch keine Informatik studiert, da sind dann solche Denk- und Programmierstrukturen das, was mir gerade am meisten fehlt. Der verlinkte Wikipedia-Eintrag ist ziemlich allgemein, magst du mal ein paar dem Experten evtl. geläufige Stichworte zu Entwurfsmustern für GUI-Programme zum Googeln nennen?
  • Die Grund-Muster und -Konzepte (MVC, Target-Action, Delegates, etc.) werden in Apples Entwickler Doku erklärt. Es gibt dort noch ein generelles Stichwortverzeichnis, in dem auch die Entwurfsmuster (und andere nützliche Dinge) erklärt werden.

    Sonstige Stichworte zum Suchen "oop design patterns cocoa objc".
    * Kann Spuren von Erdnüssen enthalten.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von NSObject ()

  • Ich würde an deiner Stelle mit einer App MIT GUI anfangen: XCode->File->New->Project dann OSX Application und Cocoa Application auswählen und du hast deine App samt GUI. Finde ich einfacher als im Dunkeln von Commandline-tools zu stochern. Mit dem GUI in cocoa läßt sich es sich einfacher arbeiten als man denkt. Zudem erkennst du dann sofort das Grundprinzip mit der Aufteilung in Klassen, Actions, Delegates und Notifications.