gute XCode tutorials oder Bücher

KaeseGewitter

Pferdeapfel
Registriert
01.04.06
Beiträge
78
ich programmiere schon seit mehreren Jahren allerdings bisher nur mithilfe von Microsofts Entwicklungsumgebung. Nun kam mein switch zu Apple und ich möchte wieder anfangen zu programmieren, deshalb bin ich auf der Suche nach einem Tutorial oder einem Buch, welches mir Apples Entwicklerumgebung XCode etwas näher bringt, sodass ich das Potential entdecken kann, welches in ihr steckt. Daher möchte ich gerne wissen, welche Tutorials oder Bücher ihr mir empfehlen kann, sodass ich einen guten einstieg in XCode erhalte
 

KaeseGewitter

Pferdeapfel
Registriert
01.04.06
Beiträge
78
das sieht schonmal gut aus, habs mir ausgedruckt und werde es die Tage durcharbeiten. Wenn jemand noch Tutorials hat, soll er sie melden;)
 

KaeseGewitter

Pferdeapfel
Registriert
01.04.06
Beiträge
78
kann ich eigentlich ein Programm, dass eine Cocoa Oberfläche beinhalten soll, auch in C++ schreiben und nicht in Objective-C (hab in C++ mehr erfahrungen, da es eben für MFC üblich ist)?
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
KaeseGewitter schrieb:
kann ich eigentlich ein Programm, dass eine Cocoa Oberfläche beinhalten soll, auch in C++ schreiben und nicht in Objective-C (hab in C++ mehr erfahrungen, da es eben für MFC üblich ist)?
Klar geht das, du kannst mit C und C++ in deinem Code herumwerkeln. Um allerdings auf die API zuzugreifen bräuchtest du dann wieder Objective-C, also wirst du nicht darum kommen. Alternativ zu Cocoa gibt es auch Carbon, welches du nur mittels C und C++ benutzen kannst, allerdings wirst du damit kaum Spass haben. Cocoa nimmt dir wirklich sehr viel Arbeit ab, so dass es sich lohnt die nicht schwere Programmiersprache Objective-C zu lernen und sich in die Besonderheiten der API einzulesen.
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
Squart schrieb:
Cocoa nimmt dir wirklich sehr viel Arbeit ab, so dass es sich lohnt die nicht schwere Programmiersprache Objective-C zu lernen und sich in die Besonderheiten der API einzulesen.
Stimme zu. Und mit etwas Glueck und/oder Verschrobenheit erkennt man sogar die Schoenheit der Objective-C-Syntax. :)

Deshalb wuerde ich empfehlen, immer von einem Cocoa-Programm-Geruest auszugehen und dort dann Codeschnipsel <provozier>niederer</provozier> Sprachen einzusetzen, wo noetig oder gewuenscht. So mach' ich das jedenfalls immer.

@squart: Was ist denn nun mit squart.de? Meine 10 Euro setzen langsam Schimmel an... ;)
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
Evtl. sind folgende Links noch interessant:
http://www.unsanity.org/archives/000024.php
http://www.oreillynet.com/cs/user/view/cs_msg/3248

Oder Kurz: Mit Carbon kannst du mehr machen, (etwas) leichter portieren und wirst auch mit Sicherheit sehr lange von Apple unterstützt werden.
Mit Cocoa kannst du auch auf Carbon zugreifen, hast aber die volle Bandbreite an Apples zeit- und nervensparenden Technologien (wie CoreData, Bindings,...) sowie eine ziemlich saubere API, welche verglichen mit Carbon schnell gelernt und verstanden ist.
Carbon sollte man deswegen aber noch lange nicht als veraltet oder überflüssig darstellen.

Peter Maurer schrieb:
@squart: Was ist denn nun mit squart.de? Meine 10 Euro setzen langsam Schimmel an... ;)
Ich denke daran, nur kann ich bis in ~ 4 Wochen nicht an Entspannung denken und erst recht nicht an solch einen Luxus ^^. Grund: Partielle & totale Differenzierbarkeit sowie Taylor-Formeln sind sicher Thema einer schriftlichen, evtl. sogar mündlichen Prüfung - bis dahin muss ich ein Semester Lineare Algebra nachgeholt haben. In dem Sommerferien habe ich aber Zeit, massig Zeit sogar.
 

KaeseGewitter

Pferdeapfel
Registriert
01.04.06
Beiträge
78
Habt ihr denn vielleicht noch ein Carbon Tutorial auf Lager, sodass ich die beiden Varianten vergleichen kann?
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
KaeseGewitter schrieb:
welche Tutorials oder Bücher ihr mir empfehlen kann, sodass ich einen guten einstieg in XCode erhalte
[Hil02] Hillegass, Aaron: Cocoa Programming for MacOS X. Addison-Wesley, Boston, 2002. Es gibt eine Neuauflage, die geht auf die Neuerungen ein (u.a. Xcode), das Buch ist noch für die alte IDE.
[Koc03] Kochan, Stephen G.: Programming in Objective-C. Sams Publishing, 800 East 96th Street, Indianapolis, Indiana 46240, November 2003.
 

KaeseGewitter

Pferdeapfel
Registriert
01.04.06
Beiträge
78
ich merk schon ihr mögt C++ nicht sonderlich ;) Was ist eigentlich der große Unterschied zwischen den beiden, jetzt mal von der Verbreitung und dem Syntax abgesehen. Ich würd gerne wissen, wo Objective-C seine stärken hat.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
KaeseGewitter schrieb:
Was ist eigentlich der große Unterschied zwischen den beiden, jetzt mal von der Verbreitung und dem Syntax abgesehen. Ich würd gerne wissen, wo Objective-C seine stärken hat.
Objective-C orientiert sich stark an SmallTalk, hat aber einige Nachteile gegenüber SmallTalk und C++. Während SmallTalk Bytecode benutzt und schon immer Garbage Collection hatte, kennt dies Objective-C nicht bzw. wird erst noch eingeführt.

Die Vorteile von Objective-C sind schnell aufgezählt, dynamisches Dispatching der Methoden, Anbindung von C Funktionen (Ist nur ein Vorteil gegenüber SmallTalk, aber selbst darüber kann man streiten. SmallTalk erlaubt auch die Verwendung von C APIs über spezielle Erweiterungen, die dann proprietär je nach SmallTalk Umgebung sind.), geringer Sprachumfang. Die Compilezeiten sind gegenüber C++ geringer.

Nachteile gegenüber C++:
Keine Unterstützung von systemnaher Programmierung, hierzu muß man komplett auf C zurückgreifen, keine echten Exceptions, keine Mehrfachvererbung, keine Templates, kein statisches Dispatching von Methoden, keine direkten Methodenaufrufe (daher auch keine Optimierung derselben), keine Objekte auf dem Stack möglich, kein RAII, kein statisches Metaprogramming möglich, kein Overloading von Operatoren/keine eigenen Operatoren, ...

Das läuft darauf hinaus, daß Objective-C durch die dynamisches Sprachkonstrukture einige wenige Probleme leichter lösen läßt, hier sei nur exemplarisch auf das Chain of Responsibility Pattern verwiesen, aber man erkauft sich das durch größeren Overhead und eine unnötige Verringerung der Stabilität des Programmes. Fehler kann man "dank" des dynamisches Dispatchings vielfach nur während der Laufzeit finden, selbst wenn man auf Grund des Design gar kein dynamisches Dispatching braucht.

Aus Sicht der Stabilität sollte man in einem Programm nur dann dynamisches Elemente verwenden, wenn es sich nicht vermeiden läßt, da man so möglichst viele Compilezeitfehler im Gegensatz zu Laufzeitfehler bezüglich möglicher Typfehler hat. Da man selbst mit Testcode nicht alle diese Fehler finden kann, verringern Programmiersprachen mit dem SmallTalk Paradigma die Stabilität der Software. Ada bzw. SPARK geht den anderen Weg, in SPARK gibt es KEINERLEI dynamischer Sprachkonstrukte, so daß man mit dem erfolgreichen Compilieren die Übereinstimmung mit der Spezifikation herbeigeführt hat. SmallTalk ist davon das andere Extrem.

P.S. Auch wenn ich Objective-C für eine der schlechteren Programmiersprachen halte, ist es immer noch der beste Weg mit Cocoa und Objective-C Programme für MacOS X zu schreiben.
 

KaeseGewitter

Pferdeapfel
Registriert
01.04.06
Beiträge
78
Wenn Objective-C solche Nachteile hat, wieso verwendet Apple dies als ihre Hauptprogrammiersprache?
 

Der Jan

Stechapfel
Registriert
27.08.04
Beiträge
160
Weil es DIE perfekte Programmiersprache nicht gibt.

Die meisten Nachteile existieren mehr oder weniger nur auf dem Papier. Nicht viele Programmierer stoßen auch wirklich an diese Grenzen. Ist halt auch immer eine Frage des Anwendungsbereichs. Die meisten Basic-Derivate haben z.B. noch wesentlich mehr Nachteile, bieten aber durch den begrenzten Funktionsumfang einen schnellen Einstieg auch für nicht Fachleute. So ist Visual Basic z.B. unter BWLer recht beliebt. Der Erfolg einer Software-Plattform hängt eben auch in erster Linie davon ab, ob es ihr gelingt auch Fachleute ohne tiefgehendes IT-Wissen einen Einstieg zu bieten.
Das war wohl auch die Intention bei Obj-C.
 

KaeseGewitter

Pferdeapfel
Registriert
01.04.06
Beiträge
78
ok, was empfehlt ihr denn, ich möchte mich nach meinem Ausflug über die Anwendungsprogrammierung etwas näher mit der Spieleprogrammierung auf dem Mac beschäftigen. Ist es dann auch sinnvoll noch Objective-C programmieren oder werden alle Spiele in C++ programmiert?
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
KaeseGewitter schrieb:
Wenn Objective-C solche Nachteile hat, wieso verwendet Apple dies als ihre Hauptprogrammiersprache?
Das ist historisch bedingt. Als Objective-C entworfen wurde, da war C++ noch nicht auf dem Stand von heute und SmallTalk kämpfte mit den Resourcen damaliger Computer.

Apple hat die Fusion mit NeXT hinter sich, mit NeXT kam auch OpenStep (Cocoa) zu Apple, welches Apple nun unter MacOS X als wichtiges FrameWork benutzt. OpenStep ist vollständig in Objective-C geschrieben. Auf Grund der Unterschiede zwischen C++ und Objective-C ist es nicht möglich Objective-C durch C++ zu ersetzen.

Hinzu kommt, daß viele mit Multiparadigmenprogrammiersprachen wie Ada oder C++ schlicht weg überfordert sind, weil die Sprachen einfach zu viele unterschiedliche Konzepte unterstützten, und das die betreffenden Personen nicht lernen wollen oder können.
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
tjp schrieb:
Objective-C orientiert sich stark an SmallTalk, hat aber einige Nachteile gegenüber SmallTalk und C++. Während SmallTalk Bytecode benutzt und schon immer Garbage Collection hatte, kennt dies Objective-C nicht bzw. wird erst noch eingeführt.

Aus meinen "Leiden" der vergangenen Wochen kann ich nur sagen, dass es nix schlimmeres gibt, einer GarbageCollection auf Gedei und Verderb ausgeliefert zu sein.
Wenn dem Programmierer die Kontrolle genommen wird, dann ist das mal garnichts gutes und ich sehe die GC mittlerweile als Nachteil und nicht als Vorteil.

tjp schrieb:
Nachteile gegenüber C++:
Keine Unterstützung von systemnaher Programmierung, hierzu muß man komplett auf C zurückgreifen

Sehe darin keinen Nachteil. Objective-C wird als "Erweiterung von C" verkauft und darum ist das kein Problem.

tjp schrieb:
keine echten Exceptions,

C++ kenne ich jetzt dazu zuwenig, aber gibt es die da?

tjp schrieb:
keine Mehrfachvererbung,

gibt es z.B. in Java auch nicht.. und Mehrfachverrbung ist nichts schönes.. IMHO!

tjp schrieb:
keine Templates, kein statisches Dispatching von Methoden, keine direkten Methodenaufrufe (daher auch keine Optimierung derselben), keine Objekte auf dem Stack möglich, kein RAII, kein statisches Metaprogramming möglich, kein Overloading von Operatoren/keine eigenen Operatoren, ...

Du wirst kaum eine Sprache finden, die das alles bietet.

tjp schrieb:
P.S. Auch wenn ich Objective-C für eine der schlechteren Programmiersprachen halte, ist es immer noch der beste Weg mit Cocoa und Objective-C Programme für MacOS X zu schreiben.

Für mich gehört Obj-C zu einer der "durchdachteren" Sprachen. Die Syntax finde ich sehr gut, Eingewöhnungsphase vorausgesetzt. Ausserdem wird dem Entwickler ermöglicht, dass wenn die Möglichkeiten von Obj-C erschöpft sind, er auf C zurückgreifen kann...
 

blutaermer

Ingrid Marie
Registriert
31.12.03
Beiträge
273
buchtipps:
'programming in objective-c' von kochan ist glaube ich das beste um objective-c richtig kennen zu lernen (ich meine _nicht_ cocoa, dafuer kann es bessere buecher geben).

um xcode kennen zu lernen hilft eventuell 'step into xcode' von anderson weiter. ein paar kniffe finden sich auf jedenfall da drin.

problem ist, das xcode viel mehr im wandel ist als objective-c. das letzte buch kann also nach der naechsten wwdc schon partiell veraltet sein.
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
KaeseGewitter schrieb:
Habt ihr denn vielleicht noch ein Carbon Tutorial auf Lager, sodass ich die beiden Varianten vergleichen kann?
Da wirst du nur schlecht etwas finden, habe vor längerem danach gesucht und Carbon ist anscheinend nicht mehr so aktuell, dass jemand es für sinnvoll hält eines zu schreiben.

Somit bist du der Apple Dokumentation (http://developer.apple.com/documentation/Carbon/index.html) ausgeliefert oder aber den etwas älteren Büchern wie:
http://www.amazon.de/gp/product/0596001614/028-8721157-3034952?v=glance&n=52044011
http://www.amazon.de/gp/product/0672322676/028-8721157-3034952?v=glance&n=52044011
http://www.amazon.de/gp/product/3826608410/028-8721157-3034952?v=glance&n=299956&s=gateway&v=glance

Im Web findest du noch ein paar hilfreiche Artikel unter www.stepwise.com, aber Summa Summarum findest du sehr wenig. Daher ist der Einstieg in Carbon wirklich schwer.

Blutaermers Buchtipp kannst du trauen, dies "Programming in Objective-C" ist ein wirklich klar strukturiertes Buch und gehört zu meiner Lieblingsfachliteratur.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
MatzeLoCal schrieb:
Aus meinen "Leiden" der vergangenen Wochen kann ich nur sagen, dass es nix schlimmeres gibt, einer GarbageCollection auf Gedei und Verderb ausgeliefert zu sein.
Man muß das im Kontext sehen. SmallTalk ist eine Programmiersprache für eine höhere Abstraktionsebene, für Systemprogrammierung bietet SmallTalk keinerlei Unterstützung. Es gibt verschiedene mögliche Implementationen für GC, die neueren haben deterministisches Laufzeitverhalten. In diesem Rahmen ist GC nicht unbedingt schlecht.

Wenn man systemnah programmieren will, dann ist GC eher hinderlich. Aber in diesem Fall liegt bei persönliche Präferenz eh nicht bei SmallTalk/Objective-C.
Wenn dem Programmierer die Kontrolle genommen wird, dann ist das mal garnichts gutes und ich sehe die GC mittlerweile als Nachteil und nicht als Vorteil.
Ada und C++ erlauben es sehr viel besser das Laufzeitverhalten des Programmes zu steuern.
Sehe darin keinen Nachteil. Objective-C wird als "Erweiterung von C" verkauft und darum ist das kein Problem.
Das ist ein gravierender Nachteil, da man sehr viel leichter Fehler im Programmcode einbauen kann. C++ bietet hier fast alle Sprachkonstrukte auch bei systemnaher Programmierung, das ist eindeutig besser als C.
C++ kenne ich jetzt dazu zuwenig, aber gibt es die da?
Ja, es gibt vollwertige Exceptions in Objective-C ist das nur rudimentär vorhanden.
Du wirst kaum eine Sprache finden, die das alles bietet.
Objective-C ist weder Fisch noch Fleisch, für das Programierem auf hohem Abstraktionsniveau finde ich SmallTalk besser und für systemnahes Programmieren sind Ada und C++ deutlich besser geeignet. Wobei beiden nur dynamisches Dispatching gegenüber SmallTalk fehlt -> Reflection Pattern.