Woher kommt Objective-C? C ++ oder C?

8

Ich bin sehr verwirrt über diese Programmiersprache, Objective-C, mit der ich gehört habe, dass sie zur Entwicklung von iOS-Anwendungen verwendet wird.

Ich weiß, dass es die Prinzipien von OOP verwendet. Wäre es einfacher zu lernen, wenn ich C ++ bereits kenne? Was ist mit dem Namen? Ist es eine Kombination zwischen der Programmiersprache C und den OOP-Prinzipien, die ich in C ++ verwende?

appoll
quelle

Antworten:

12

Brad Cox und seine Freunde fügten eine dünne Schicht Smalltalk auf C hinzu.

Objective-C hat daher viel mehr mit Smalltalks hochdynamischem OO zum Senden von Nachrichten zu tun als mit C ++.

Ein wesentlicher Unterschied besteht darin, dass Sie sich in Objective-C nicht allzu viele Gedanken darüber machen, welche Klasse etwas ist: Sie kümmern sich darum, welche Nachrichten etwas versteht. Sie können zur Laufzeit Objekte haben, die den Satz von Nachrichten ändern, die sie verstehen.

Obwohl die beiden Sprachen sehr unterschiedliche Vorstellungen davon haben, was OO ist, werden viele Ideen / Prinzipien immer noch geteilt: Vererbung, Delegation, Polymorphismus und so weiter. In Code, der in beiden Sprachen geschrieben ist, finden Sie leicht viele Beispiele für die verschiedenen OO-Muster.

Frank Shearar
quelle
2

Andere haben darauf hingewiesen, dass Objective-C eine OO-Ebene im SmallTalk-Stil ist, die zu C hinzugefügt wurde. Ich werde hinzufügen, dass C ++ als OO-Ebene im Simula-Stil gestartet wurde, die zu C hinzugefügt wurde (und dann wurden Vorlagen hinzugefügt, um eine gute Maßnahme zu treffen).

Ein Programmierer
quelle
1

Aus dem Maul des Pferdes :

Objective-C ist eine hybride Programmiersprache […], die durch Aufpfropfen des Smalltalk-80-Stils der objektorientierten Programmierung auf einen Wurzelstock der C-Sprache gebildet wird. Objective-C fügt genau einen neuen Datentyp hinzu, das Objekt, zu dem C bereits und genau eine neue Operation den Nachrichtenausdruck bereitstellt. Wie Smalltalk-80 unterscheidet Objective-C zur Kompilierungszeit nicht zwischen verschiedenen Arten (Klassen) von Objekten.

Ansprache "Wäre es einfacher zu lernen, wenn ich C ++ bereits kenne?" Ich glaube nicht, aber ich glaube auch nicht, dass es wehtun würde. Wenn Sie C ++ bereits kennen, sind Sie mit Konzepten wie Klassen und Objekten möglicherweise besser vertraut, werden jedoch feststellen, dass Objective-C Klassen auf eine ganz andere Weise als C ++ implementiert. Um eine Terminologie von Stroustrup auszuleihen, sind alle ObjC-Nachrichten "virtuell" und können von Unterklassen neu definiert oder sogar in der definierenden Klasse ausgetauscht werden. Diese und andere Feinheiten heben wahrscheinlich einen Teil des Vorsprungs auf, den Sie durch die Kenntnis von C ++ erhalten.


quelle
Die Methoden von Objective-C sind viel virtueller ("nur scheinbar vorhanden") als die von C ++ virtual: Ein Objekt muss nicht einmal eine Nachricht verstehen, um damit umgehen zu können. Es kann die Nachricht leise an ein internes Objekt weiterleiten, das die Nachricht verstehen kann, so dass transparentes Proxy-Verfahren beispielsweise das verzögerte Laden einer Instanz aus einer Datenbank unterstützt.
Frank Shearar
In der Tat habe ich mir die Terminologie geliehen, um die Idee vertraut zu machen. C ++ verwendet vtables, um virtuelle Methoden zu versenden, die ObjC erst kürzlich als Leistungsoptimierung hinzugefügt hat.
0

Ziel-C ist C mit einer Schicht Smalltalk.

Laut Wikipedia :

Objective-C ist eine reflektierende, objektorientierte Programmiersprache, die der Programmiersprache C Messaging im Smalltalk-Stil hinzufügt.

Es ist objektorientiert, stammt jedoch nicht direkt aus C ++.

Also ja, es ist C mit einigen der OO-Fähigkeiten von Smalltalk .

Dynamisch
quelle
5
noch ist es überhaupt von C ++ überhaupt. C ++ leiht sein Klassenmodell von Simula aus und die beiden Sprachen wurden ungefähr zur gleichen Zeit bearbeitet.