Objektive C vs. C++
-
Was ich mal gerne wissen würde:
Wo liegen die Unterschiede zwischen beiden?
Beide können doch OOP.
Aner was ist besser und noch wichtiger, warum ist es besser?
Wo sind die Vor- und Nachteile der jeweils genannten Sprachen?
-
Die meines Erachtens wichtigsten Unterschiede sind:
- Sie verwenden ein anderes Modell der Objektorientierung (Simula bei C++ und Smalltalk bei ObjC
- C++ ist ein offener Standard, ObjC steht de facto unter Apples Kontrolle
- ObjC ist dynamischer (Klassen zur Laufzeit basteln, alles wird spät gebunden, afaik alle Objekte auf dem Heap)
-
vllt. auch noch erwaehnenswert: ObjC wird (afaik) fast ausschliesslich fuer MacOS verwendet, und ausserhalb (z. B. in der Windows- oder Linuxwelt) so gut wie gar nicht.
-
Naja, generell in Nextstep-Umgebungen, zum Beispiel auch in GNUstep.
-
- objc ist ein echtes superset von C
- die Syntaxerweiterungen für objc brechen hart mit der C-Syntax (was imo zunächst kurios und hässlich wirkt, aber nach einer Zeit keineswegs stört)
-
ein wichtiger unterschied ist noch: das oo-system von objective-c ist höchst dynamisch. objekte schicken sich nachrichten über ein laufzeitsystem zu und rufen nicht gegenseitig hardkodierte funktionen auf (wie in c++ z.b.). zudem kann man zur laufzeit neue klassen erzeugen und eigenschaften von objekten abfragen, über die vorher nichts bekannt ist. so hat man auch reflection.
-
~fricky schrieb:
zudem kann man zur laufzeit neue klassen erzeugen
Das geht nicht. Man muß neue Klassen via Shared Libraries nachladen.
-
ObjC vs. CPP schrieb:
Beide können doch OOP.
Ojective-C hat C++ dynamisches Dispatching und die Unterstützung für Reflection voraus. Ansonsten wenn man kein OOP mit Dispatching machen will ist man in Objective-C auf reines C zurückgeworfen, weil es keine Sprachkonstrukte gibt Programmierung auf geringerer Abstraktionsebene unterstützen. Eigene Operatoren, Überladung, generische Funktionen bzw. Klassen Fehlanzeige.
Wenn man in Objective-C OOP macht muß man mit dynamischen Dispatching leben, da führt kein Weg daran vorbei. Selbst wenn man die Funktionalität nicht braucht, und es deutlich langsamer ist. Es gibt die Möglichkeit den Dispatch zu cachen, aber elegant ist etwas anderes.
-
~john schrieb:
~fricky schrieb:
zudem kann man zur laufzeit neue klassen erzeugen
Das geht nicht. Man muß neue Klassen via Shared Libraries nachladen.
ok, dann hab' ich wohl was missverstanden. ich selbst habe obj-c noch nie verwendet, nur was darüber gelesen.