C++ GUI Programmierung unter OS X

M

maic

Mitglied
Thread Starter
Dabei seit
29.12.2005
Beiträge
220
Reaktionspunkte
3
Hallo Zusammen,
ich muss für die Hochschule ein Schachspiel programmieren....
Welche Grafische Bibliothek ist unter OS X zu empfehlen?
Also was benutzt Ihr so, Cocoa, Carbon?

Hat jmd Erfahrungen? ... Was ist "leichter"?
Hat auch jmd nen vergleich zwischen Windows GUI Programmierung
und auf dem Mac? Also von der Schwierigkeit her...


Viele Grüße
Maic
 
Wenn ich es mir aussuchen kann, nehme ich Cocoa. Das ist aber nicht für C++, sondern Objective-C

Alex
 
Hmm weiß jmd wie es mit QT unter OS X aussieht?
Also gibt es irgendwelche Einschränkungen?

Grüße Maic
 
Eigentlich nicht. Ich verwende es immer wenn ich Sachen für die Uni machen muss, es hat eigentlich nur Vorteile, da man ja schön portabel arbeiten kann.
 
Guten Tag!

ich muss für die Hochschule ein Schachspiel programmieren....
Zwingend für / unter OS-X?

Welche Grafische Bibliothek ist unter OS X zu empfehlen?
Cocoa! (Cocoa!) Cocoa! Carbon definitiv nicht. Wenn Du alte Macs mit dem Spiel versorgen willst (kleiner als OS-X, dann Carbon).

Also was benutzt Ihr so, Cocoa, Carbon?
:rolleyes: Cocoa!

Hat jmd Erfahrungen? ... Was ist "leichter"?
:zwinker: Cocoa!

Hat auch jmd nen vergleich zwischen Windows GUI Programmierung
und auf dem Mac? Also von der Schwierigkeit her...
Jein. Kommt jetzt auf Deine Skills an. Bist Du eher Peter Professional oder Norbert Newbie? Also generell mag ich den Begriff "Mac Programmierung" und "Windows Programmierung" nicht, denn was bedeutet das eigentlich? Das bedeutet ja, das ich etwas differenziere, nur was eigentlich? Das ist die Frage. Ein Programm das in sauberem ANSI-C geschrieben ist, das kann sowohl unter OS-X, als auch Windows und sogar Linux lauffähig kompiliert werden ohne jeglichen Portierungsaufwand.

Jetzt ist es aber leider so, das C++ noch lange nicht C++ bzw. C noch lange kein C ist. Dies tritt dann ein, wenn ich externe Bibliotheken verwende, wie Cocoa unter OS-X oder MFC unter Windows. Erst hier beginnt eine Plattformabhängigkeit.

Generell würde ich sagen: Programmierst Du unter Windows, dann benutzt Du etwas aktuelles, Visual Studio zum Beispiel mit .NET 3.0 und C#.

Unter OS-X rate ich Dir dann wiederrum klar zu X-Code, Objective-C und Cocoa.

Wo ist jetzt der Unterschied? Nunja, ich würde sagen, man merkt eindeutig die unterschiedlichen Wurzeln! Zuerst einmal zu der IDE:

X-Code hat sehr viel von Eclipse (oder andersrum), es ist getrennt in den Code-Editor, der bis auf das MDI wirklich stark an Eclipse oder Visual Studio erinnert, und in den Interface Builder, welcher für die Gestaltung der grafischen Oberflächen genutzt wird.

Der integrierte Interface Builder im Visual Studio unterscheidet sich von der Bedienung nicht maßgeblich von dem in OS-X. Aber die Sprache die dahinter steckt tut das gewaltig, finde ich. Man merkt eindeutig das Objective-C "nur" ein C mit objektorientierter Erweiterung ist, die sehr stark an Smalltalk angelehnt ist.

Wenn ich mir die Syntax von Objective-C ansehe, dann finde ich sie sehr "konfus". Ich weiß das jetzt gleich wieder Fanboys rausgekrochen kommen und mich dafür zur Sau machen, aber ich habe mehrjährige Erfahrung und als ich mit Objective-C anfing war es echt einfach nur konfus. Sobald es nämlich um die objektorientierte Programmierung geht ist die Syntax weit ab von allem C, C++ und Java Code. Natürlich Gewöhnungssache und natürlich entdeckt man dann noch Finessen der Syntax, die in anderen Sprachen nicht vorhanden sind oder schlechter umgesetzt. Aber ehrlich gesagt hätte ich diese nicht auf Anhieb verstanden oder als sinnvoll erachtet, wenn ich nicht schon viele andere Sprachen gelernt und aktiv benutzt hätte. (Konkret sprach ich eben von Dingen wie zum Beispiel Kategorien und Protokollen - Sprachfeatures.)

Auch die Arbeit mit dem Interface Builder von OS-X ist ein "wenig seltsam". Man bestimmt den Datenfluss der Objekte per Mausklick und derlei Sachen. Das ist zwar, einmal verstanden, alles nicht weiter schwer und vor allen Dingen - wie allso oft unter Mac OS-X - logisch, aber die Gewöhnungszeit ist hoch, da man das so von keinem anderen Interface Builder / GUI-Designer her gewohnt ist.

Zudem kommt bei Objective-C noch das Speichermanagement hinzu, das gravierend wird, wenn man GUI-Elemente wie ein NSOutlineView (Baumansicht) benutzt. Kurz und knapp ist Mac Programmierung (wenn man von einer anderen Sprache kommt) sehr "neu", spaßig und logisch, erfordert aber einiges an Lernbereitschaft, Umdenken und Aufwand und ist sicherlich (in meinen Augen ganz neutral betrachtet) alles andere als leicht, nicht zuletzt weil Literatur teuer und spärlicher als bei anderen Sprachen gesäht ist.

Studenten würde ich entweder (bei vorhandensein eines Visual Studio) zu C# raten, oder aber zu Java. Diese beiden Sprachen sind syntaktisch sehr leicht im direkten Vergleich zu purem C(++) oder Objective-C und eignen sich auch von den in der Sprache implementierten Konzepten sehr gut zum Erlernen der objektorientierten Programmierung.

Also C# oder Java. Für letztere würde ich dann Eclipse oder Netbeans als IDE und das Buch Java ist auch eine Insel empfehlen, kostenloser Download. Für C# eignet sich prima dieses Buch, ebenfalls kostenlos. Für C# nimmt man dann halt als IDE Visual Studio (Express Version ist kostenlos) oder Sharp Develop.

Natürlich wird jemand all das dementieren was ich hier so sage, aber das ist in der Natur der Mac User alles zu verfluchen und zu verpönen was nicht pro Mac ist. Generell rate ich Dir aber nicht dazu mit Objective-C als Programmieranfänger zu starten. :no:

Grüße, CocaColaZero
 
Zuletzt bearbeitet:
below schrieb:
Wenn ich es mir aussuchen kann, nehme ich Cocoa. Das ist aber nicht für C++, sondern Objective-C
Lässt sich denn Cocoa nicht auch über Objective-C++ programmieren? Das könnte man ja dann vielleicht mit C++ kombinieren, so wie man ja auch reinen C Code in Objective-C verwenden kann.
 
Lässt sich denn Cocoa nicht auch über Objective-C++ programmieren? Das könnte man ja dann vielleicht mit C++ kombinieren, so wie man ja auch reinen C Code in Objective-C verwenden kann.
Das ist Schwachsinn. Wie willst Du C++ mit Objective-C kombinieren, wie man C mit C++ kombiniert? C++ und Objective-C sind schon Erweiterungen zu C, die C beide um die objektorientierte Programmierung aufwerten. Objective-C und C++ entwickelten sich nur in zwei getrennte Richtungen beim Ansatz, wie man C erweitern soll. Apple (bzw. Next) entschied sich für Objective-C, weil sie es als das "bessere objektorientierte C" erachtet haben. Die zusätze "Objective" und "++" kennzeichen doch gerade diese objektorienterte Erweiterung.
 
Hallo, ich wollte nur auf den Eingangssatz bei Wikipedia zu Objective C aufmerksam machen ... dort wird auch von Objective-C++ gesprochen als verquickung beider Ansätze. Auf diesem Wege müßte es doch eigentlich möglich sein, Cocoa mit C++-Syntax anzusprechen, oder?
Leider sind meine C++-Zeiten schon länger vorbei, da ich im Beruf hauptsächlich Java benötige ...

P.S.: Danke an CocaColaZero für die umfangreiche Beschreibung! Die finde ich sehr interessant :)
 
CocaColaZero schrieb:
Das ist Schwachsinn. Wie willst Du C++ mit Objective-C kombinieren, wie man C mit C++ kombiniert? C++ und Objective-C sind schon Erweiterungen zu C, die C beide um die objektorientierte Programmierung aufwerten. Objective-C und C++ entwickelten sich nur in zwei getrennte Richtungen beim Ansatz, wie man C erweitern soll. Apple (bzw. Next) entschied sich für Objective-C, weil sie es als das "bessere objektorientierte C" erachtet haben. Die zusätze "Objective" und "++" kennzeichen doch gerade diese objektorienterte Erweiterung.
Als ich bin gewiss kein Experte im Programmieren, aber es gibt doch Objective-C++:
http://developer.apple.com/releasenotes/Cocoa/Objective-C++.html
Mac OS X 10.1 introduces the Objective-C++ front-end to the Mac OS X version of the GCC compiler. Objective-C++ allows you to freely mix C++ and Objective C code in the same source source file. Using Objective-C++, you can directly call Objective-C objects from C++ code, and you can directly call C++ code from Objective-C objects. Thus, Objective-C++ allows you to use C++ class libraries directly from within your Cocoa application, or to use Cocoa or Foundation objects directly from within your C++ application.
 
Ja, natürlich geht das grundsätzlich erst einmal. Aber auf der von Dir verlinkten Seite werden als Grund dafür auch Templates und Namensräume angegeben, Sprachfeatures die sowohl C als auch Objective-C vermissen lassen.

Wenn man sich das im Detail anschaut, dann steckt hinter X-Code die GNU-Compiler Collection und ein paar Cocoa Bibliotheken. Natürlich kann man so ganz einfach C++ Code in ein Programm einbauen, sofern der GCC ihn versteht. Aber sinnvolle Einsatzmöglichkeiten lassen sich an fünf Fingern abzählen.

Es würde zum Beispiel keinen Sinn machen Klassen in C++ zu schreiben und dann in einem Cocoa Programm diese zu nutzen, da Objective-C von sich aus die Möglichkeit der Implementierung von Klassen bietet, welche dann auch alle von NSObject abgeleitet sind und so Speichermanagement und viele andere Methoden erleichtern.

Zusatz: Natürlich macht die Nutzung von C++ auch dann Sinn, wenn ich bereits fertige Bibliotheken in einem Cocoa Programm benutzen möchte, so dass ich diese nicht erst neu schreiben muss, klar. Aber wenn ich ein Programm von Grund auf neu schreibe und das mal reinzufällig nichts mit denen gemeinsam hat, die ich bisher entwickelt habe (eine Textverarbeitung wird keine mp4 Bibliothek benutzen), dann gibt es erstmal keine Gründe das ganze noch weiter zu verkomplizieren und C, C++ als auch Objective-C zu vermischen. Das verkompliziert die Angelegenheit nur unnötig. Man beachte dazu bitte die unterschiedlichen Wurzeln, auf die ich noch einmal mit Nachdruck hinweise:

Die Syntax von Objective-C erweitert die C-Syntax um objektorientierte Elemente. Diese Syntaxerweiterungen lehnen sich jedoch nicht an die C-Syntax an, wie es etwa viele verbreitete objektorientierte Programmiersprachen tun, sondern an die der Programmiersprache Smalltalk.
Quelle: http://de.wikipedia.org/wiki/Objective-C

Bei Objective-C sind die objektorientierten Eigenschaften komplett von der C-Syntax getrennt. Brad Cox orientierte sich beim Design der Sprache an Smalltalk, einer komplett objektorientierten Sprache. Hat man die Philiosophie, die hinter der objektorientierten Programmierung steckt, einmal verstanden, ist Objective-C - insbesondere im Vergleich zu C++ - sehr leicht zu erlernen. Man darf sich zu Recht fragen, warum C++ sich auf breiter Basis durchgesetzt hat, Objective-C hingegen aber weitestgehend ein Nischendasein fristet. Aber als Apple-User ist man ohnehin mit der Frage vertraut, warum sich ein technisch besseres System nicht durchsetzt. ;-)
Quelle: Buch Objective-C und Cocoa (von Klaus M. Rodewig) Kapitel 3 (C und Objective-C), Seite 73, ISBN: 3-908497-20-5 / Smart Books Verlag
 
Zuletzt bearbeitet:
Wie gesagt, ich bin kein professioneller Programmierer und was Du sagst ist sicher alles richtig. Aber wenn ich die Fragestellung dieses Threads richtig verstanden habe, dann möchte er vorhandenen (oder noch zu schreibenden) C++ Code mit einer Cocoa GUI kombinieren. Und ich denke dafür wäre dieses Objective-C++ doch geeignet und wahrscheinlich auch gedacht. Und darauf wollte ich hinaus.
 
Mir hat es eher den Anschein als würde er sich in der Programmierung von grafischen Oberflächen unter OS-X überhaupt nicht auskennen und generell erstmal annehmen, dass es üblich ist, das man unter Mac OS-X mit C++ die Programme schreibt, ohne aber zu wissen das hier eigentlich Objective-C die Regel ist. Ich denke er muss das Schachspiel von Grund auf Programmieren und macht sich erstmal schlau.
 
Ja, das kann gut sein. Aber wir können uns ja darauf einigen, dass es möglich ist C++ Code mit einer Cocoa GUI zu kombinieren. ;) Denn der Titel des Threads scheint diese Frage zu stellen, ist also vielleicht auch eine nützliche Info für andere die diese Frage haben und durch die Suche auf diesen Thread stossen.
 
Selbst wenn wir uns nicht einigen wollten, würde das nicht klappen, denn man kann ja Grundsätzlich C++ und Cocoa mischen. Wir könnten uns aber auch darauf einigen zu warten, bis der Themenstarter uns die Situation, in welcher er sich befindet, konkreter schildert.
 
:suspect:

Was wird denn das hier? Eine Frage "was der Threadersteller eigentlich hätte erfragen wollen aber nicht zu ahnen wagte?".

Es ist doch klar ersichtlich das da jemand einen Überblick über die Techniken mit kurzer Bewertung haben wollte und dabei auch an portable Systeme wie qt denkt! Laßt ihn doch weitere Fragen stellen, wenn noch Welche offen sind ;)
 
Ich denke dieser Überblick wurde ihm auch ganz gut vermittelt.
 
Magicq99 schrieb:
Lässt sich denn Cocoa nicht auch über Objective-C++ programmieren? Das könnte man ja dann vielleicht mit C++ kombinieren, so wie man ja auch reinen C Code in Objective-C verwenden kann.

Also, natürlich kann man Objective-C mit C++ Code mischen -- z.B. die GUI in Objective-C machen, und den Rest in C++.

Alex
 
Genau diesen Ansatz hab ich mir jetzt auch zurechtgelegt.
Hier gibt's ein Code-Beispiel dafür, wie man Cocoa, Carbon und C++ verkochen kann.
 
Hehe, yo ich bin kein Programmier Neuling, habe nur keine
Erfahrung auf der GUI Ebene also unter OSX...
Das Programm muss in c++ geschrieben werden und ehrlich gesagt
hab ich kein Bock auf Visual Studio ... das ist einfach nur eine Krankheit

Vielen Dank für die vielen, ausführlichen Antworten
Grüße Maic
 
Dann nimm einfach QT - Das hat den Vorteil, dass dein Programm Plattformunabhängig ist und du kannst (bzw. musst?) C++ benutzen.

Die Community-Version ist OpenSource, lässt sich aber nicht mit den MS-Compilern nutzen. Aber die GCC tut es prächtig. Dazu gibt es auch zu hauf howto's und Tutorials.

Und das schönste ist folgendes: Es sieht auf jeder Plattform nativ aus!
 
Zurück
Oben Unten