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.