Die Entwicklung von Objective-C und C++ geschah in etwa parallel. Allerdings basiert C++ auf Simula aus den späten 60ern (Ich glaube Simula-67), während Objective-C Smalltalk-80 zugruned liegt.
Das sind dann konzeptionell 13 Jahre. Witzig an der Geschichte ist übrigens, dass zu Zeiten von Simula der Begriff OOP noch gar nicht bekannt war. Der stammt nämlich von Alan Kay, der erst 1969 mit 29 Jahren sein Examen machte (so etwas wie ein 3D-OO-Modell) und erst ab 1970 zu Xerox wechselte um dort Smalltalk zu entwickeln. Mit anderen Worten: Als die Konzepte für Simula-67 und damit auch für C++ entworfen wurden, gab es OOP begrifflich noch gar nicht.
Nun mag man meinen, dass die Simula-Jungs Dahl und Nygaard irgndwie schon etwas geschaffen hatten, von dem sie gar nicht wusstern, dass es OOP ist und woraus später C++ wurde. Kay sieht das anders:
„I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.“
Deshalb sage ich ja auch immer, dass C++ gar nicht OOP sei, sonder COP (klassen-orientiert, nicht objekt-orientiert. Soweit ich sehe, gibt es in C++ auch gar kein Sprachmittel, das sich auf Objekte bezieht. Ursprünglich hieß übrigens C++ auch C with classes und nicht C with objects.
Diese Marketingleistung, dass alle welt C++ für OOP hält, lässt einen Stoßtrupp Respekt zollen.
Damit habe ich dann gleich auch meine Signatur erklärt.
+++
Aus der mangelnen OO von C++ erklären sich übrigens auch die Beschränkungen von C++:
a) C++ kennt eigentlich keine Methoden. Es kennt eigentlich nicht einmal Objekte. Es ist kein Zufall, dass C++ von member functions spricht, alle anderen von Methoden. Ein "Methodenaufruf" in C++ ist nämlich nichts anderes als:Oder anders formuliert: C++ erzeugt gar keinen Code für Dispatching. Tatschlich habe ich für ein Softwareprojekt so etwas in C gemacht ohne damals etwas von C++ zu wissen.
Das ist srtukturell nichts anderes als plain C.
b) Klassen sind daher auch einfache Strukturen, um eine vtab erweitert. Instanzen sind Instanzen dieser Strukturen. Das ist strukturell nichts anderes als plain C.
c) Dementsprechend kann es in C++ keinen typen id geben.
d) Das Wichtigste: Es gibt dementsprechend keine Nachrichten in C++. Gar nicht. Überhaupt nicht. OOP ist aber gerade das Versenden von Nachrichten an Objekte.
+++
BTW: Das Verhältnis von Smalltalk (ohne es zu kennen) zu Objective-C ist eindeutig so, dass Smalltalk mächtiger ist, insbesondere Blöcke kennt. Erst letztens habe ich einen guten Artikel dazu gelesen, dass der Grundgedanke von Objective-* war, Smalltalk um Eigenschaften zu berauben, um für den Preis der Mächtigkeit und Flexibilität einfachere Compiler zu bauen und vor allem Objective-* übrehaupt compilierbar zu machen. In Zeiten von JIT-Compiling sollte man sich allerdings mal wieder Smalltalk anschauen.
									
									
								Das sind dann konzeptionell 13 Jahre. Witzig an der Geschichte ist übrigens, dass zu Zeiten von Simula der Begriff OOP noch gar nicht bekannt war. Der stammt nämlich von Alan Kay, der erst 1969 mit 29 Jahren sein Examen machte (so etwas wie ein 3D-OO-Modell) und erst ab 1970 zu Xerox wechselte um dort Smalltalk zu entwickeln. Mit anderen Worten: Als die Konzepte für Simula-67 und damit auch für C++ entworfen wurden, gab es OOP begrifflich noch gar nicht.
Nun mag man meinen, dass die Simula-Jungs Dahl und Nygaard irgndwie schon etwas geschaffen hatten, von dem sie gar nicht wusstern, dass es OOP ist und woraus später C++ wurde. Kay sieht das anders:
„I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.“
Deshalb sage ich ja auch immer, dass C++ gar nicht OOP sei, sonder COP (klassen-orientiert, nicht objekt-orientiert. Soweit ich sehe, gibt es in C++ auch gar kein Sprachmittel, das sich auf Objekte bezieht. Ursprünglich hieß übrigens C++ auch C with classes und nicht C with objects.
Diese Marketingleistung, dass alle welt C++ für OOP hält, lässt einen Stoßtrupp Respekt zollen.
Damit habe ich dann gleich auch meine Signatur erklärt.

+++
Aus der mangelnen OO von C++ erklären sich übrigens auch die Beschränkungen von C++:
a) C++ kennt eigentlich keine Methoden. Es kennt eigentlich nicht einmal Objekte. Es ist kein Zufall, dass C++ von member functions spricht, alle anderen von Methoden. Ein "Methodenaufruf" in C++ ist nämlich nichts anderes als:Oder anders formuliert: C++ erzeugt gar keinen Code für Dispatching. Tatschlich habe ich für ein Softwareprojekt so etwas in C gemacht ohne damals etwas von C++ zu wissen.
Das ist srtukturell nichts anderes als plain C.
b) Klassen sind daher auch einfache Strukturen, um eine vtab erweitert. Instanzen sind Instanzen dieser Strukturen. Das ist strukturell nichts anderes als plain C.
c) Dementsprechend kann es in C++ keinen typen id geben.
d) Das Wichtigste: Es gibt dementsprechend keine Nachrichten in C++. Gar nicht. Überhaupt nicht. OOP ist aber gerade das Versenden von Nachrichten an Objekte.
+++
BTW: Das Verhältnis von Smalltalk (ohne es zu kennen) zu Objective-C ist eindeutig so, dass Smalltalk mächtiger ist, insbesondere Blöcke kennt. Erst letztens habe ich einen guten Artikel dazu gelesen, dass der Grundgedanke von Objective-* war, Smalltalk um Eigenschaften zu berauben, um für den Preis der Mächtigkeit und Flexibilität einfachere Compiler zu bauen und vor allem Objective-* übrehaupt compilierbar zu machen. In Zeiten von JIT-Compiling sollte man sich allerdings mal wieder Smalltalk anschauen.
Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
									25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
 Es gibt Spezies, die SQLs NULL mit einem Magic Key nachbilden, weil das Abfragen von NULL in PHP ja so umständlich sei - hmpf. Daher bin ich pessimistisch.
 Es gibt Spezies, die SQLs NULL mit einem Magic Key nachbilden, weil das Abfragen von NULL in PHP ja so umständlich sei - hmpf. Daher bin ich pessimistisch.