C++ oder Cocoa?

Dieses Thema im Forum "Software" wurde erstellt von mac-pc, 24. Dezember 2003.

  1. mac-pc

    mac-pc New Member

    Ich befaße mich seit kurzer Zeit mit dem xCode Developer Tool von Apple.
    Es stehen ja verscheiden Programmier Sprachen zu auswahl.Da ich schon ein bissel gehört habe von C++ und Cocoa würde es mich Wunder nehmen, was beßer wäre für den Anfang?


    Danke für Eure Antworten und noch frohe Weihnachten :wink:
     
  2. WoSoft

    WoSoft Debugger

    Cocoa ist eine Programmierumgebung basierend auf zwei mächtigen Klassenbibliotheken. Cocoa-Programme können in Objective-C oder Java geschrieben werden. Empfehlenswert ist Objective-C, eine Erweiterung von ANSI-C.
    C- bzw.. C+-Kenntnisse sind nützlich, aber nicht unbedingt Voraussetzung, jedenfalls nicht in dem Workshop, den ich gerade in der MACup gestartet habe (darf man hier MACup-Lektüre empfehlen???) In diesem Workshop werden C-Kenntnisse on the fly gelehrt.
    C++ findest du in Xcode unter Tools. Dort entstehen textbasierte Programme oder unter Carbon, was wohl kaum dein Thema sein dürfte (mittels Carbon können OS-9-Programme für OS-X umgeschrieben werden).
     
  3. mac-pc

    mac-pc New Member

    Aha, Danke für deine Infos.


    P.S: Hast du AIM?
     
  4. TomRadfahrer

    TomRadfahrer New Member

    Auch ich würde Objective-C empfehlen, um Programme für den Mac zu schreiben. Der Grund sind die damit verfügbaren Klassenbibliotheken. Diese Bibliotheken sind von C++ nicht erreichbar, C++ ist nicht mächtig genug.
    Es gibt zwar auch eine Adaption der Klassenbibliotheken für Java, diese ist aber nicht "perfomant" genug.

    Meine Argumentationskette ist deshalb:
    OS X ==> Cocoa ==> Objective-C

    TomRadfahrer
     
  5. WoSoft

    WoSoft Debugger

    Stimmt fast. C++ ist eine sehr mächtige Progammiersprache, aber halt nicht die für das Cocoa-API.
    Dass Java nicht performant ist, liegt daran, dass Java das Cocoa-API gar nicht direkt aufrufen kann, sondern alle Methodenaufrufe erst über die Java-Bridge geschickt werden müssen, die sie in Cocoa-Calls übersetzt.
     
  6. TomRadfahrer

    TomRadfahrer New Member

    C++ hat natürlich viele Fans, aber dieser Sprache fehlen schlichtweg Konstrukte, die man für Cocoa braucht. C++ kann nicht z.B. zur Laufzeit den Namen eines Objekts oder einer Methode interpretieren, und Aufrufe von Methoden, die zum Zeitpunkt des Compilierens nicht bekannt sind, ist in C++ schlichtweg unmöglich.
    C++ wurde als Add-on zu C konzipiert, ein Precompiler übersetzt C++ zunächst in C und benutzt dann auschließlich die Runtime von C. Aus diesem Konzept heraus resultieren die meisten Limitationen und Konzeptbrüche von C++.
    Mit diesen Einschränkungen von C++ ist es extrem unwahrscheinlich, dass Cocoa in nächster Zeit auf C++ angepasst wird.

    TomRadfahrer
     
  7. WoSoft

    WoSoft Debugger

    >C++ wurde als Add-on zu C konzipiert, ein Precompiler übersetzt C++ zunächst in C und benutzt dann auschließlich die Runtime von C. <

    Das galt für die ersten C-Compiler, ist aber längst Geschichte.
    Die Smalltalsk-Erweiterung in Ojective-C macht es möglich, dass die physische Adresse des Funktionscodes erst zur Laufzeit bestimmt wird. Diese dynamische, späte Bindung erlaubt es, zur Laufzeit objektspezifische Mehtoden auszuwählen.
    In reinem C ist dieses "Late Binding" nicht möglich, in C++ aber sehr wohl. Auch hier werden die Sprungadressen erst zur Laufzeit festgelegt, allerdings nicht so umfassend dynamisch wie in Smalltaks. Der Grund: Es wird eine sog. virtuelle Tabelle angelegt, in der die zur jeweiligen Klassen gehörenden Sprungadressen stehen. Die Methoden werden mit dieser Tabelle verknüpft, über die das Programm dann zur Laufzeit den Code zuordnet.
    Der Aufbau der Tabelle wird über virtuelle Basisklassen und virtuelle Funktionen gesteuert. Wenn die Bibliothken also entsprechend aufgebaut wären, könnte man damit auch Cocoa in C++ programmieren. Ich persönlich habe den Bedarf zwar nicht, Objective-C gefällt mir besser, aber wenn man wollte, ginge es.
     
  8. TomRadfahrer

    TomRadfahrer New Member

    Natürlich arbeitet heute kein seriöser C++ Compiler mehr mit dem alten Precompiler, allerdings hat dieser Precompiler den Sprachstandard C++ festgelegt, und C++ kommt auch heute mit den modernsten Compilern nicht aus den Begrenzungen heraus, die damals dieser Precompiler hatte.

    Das "late binding" von C++ basiert auf der bereits angesprochenen virtuellen Tabelle. Dort tut der C++ Compiler nur das hinein, was er zur Compile - Zeit bereits kennt (Was der Bauer nicht kennt, das frißt er nicht). Die Auswahl der Sprungadresse ist "late", der Aufbau der Tabelle hingegen nicht. Dies scheint mir der Unterschied zu sein.

    Im Prinzip kann man auch mit C++ schöne Bibliotheken schreiben, allerdings haben dies die Cocoa-Entwickler leider nicht getan. Ein Umstellen von Cocoa auf C++ erscheint mir nahezu unmöglich. Man müsste eine neue Bibliothek schreiben, die teilweise andere Objekte, ein anderes Memory-Modell und andere Methodennamen und -Parameter hat.

    @WoSoft: Für mich war die Einarbeitung in Cocoa etwas schwierig, und ich kenne auch jetzt nur einen Teil davon. Was empfiehlst Du, um sich in Cocoa einzuarbeiten? Gibt es da ein wirklich gutes Buch mit Kochrezepten?

    TomRadfahrer
     
  9. WoSoft

    WoSoft Debugger

    ich persönlich finde "Coca Programming for Mac OS X" von Aaron Hillegas ganz gut.
    Rezepte gibt es in "Cocoa Recipes for Mac OS X" von Bill Cheeseman.
    Was bisher alle Bücher nicht bringen, sind die neuen Controller Layer in Xcode. Damit spiele ich gerade.
     
  10. TomRadfahrer

    TomRadfahrer New Member

    Danke für die Buchtipps. Ich werde beide mal ausleihen.

    TomRadfahrer
     

Diese Seite empfehlen