OOP hat Zusammensetzung und Substitution.
C ++ verfügt über Mehrfachvererbung, Template-Spezialisierung, Einbettung und Wert- / Verschiebungs- / Zeigersemantik.
Java verfügt über Einzelvererbung und Schnittstellen, Einbettungs- und Referenzsemantik.
Die OOP-Schule verwendet diese Sprachen üblicherweise, indem sie die Vererbung für die Objektsubstitution und die Einbettung für die Komposition einsetzt. Sie brauchen aber auch einen gemeinsamen Vorfahren und einen Weg zur Laufzeitumwandlung (in C ++ heißt das dynamic_cast
, in Java wird nur eine Schnittstelle von einer anderen abgefragt).
Java tut dies alles durch seine eigene java.lang.Object
verwurzelte Hierarchie. C ++ hat kein vordefiniertes gemeinsames Stammverzeichnis, daher sollten Sie es zumindest definieren, um zu einem "Bild" zu gelangen (dies schränkt jedoch einige C ++ - Möglichkeiten ein ...).
Danach kann die Möglichkeit, Polymorphismus zur Kompilierungszeit (nach CRTP denken) und Wertsemantik zu haben, auch andere Alternativen zu der Art und Weise bieten, wie das Konzept des "OOP-Objekts" in ein C ++ - Programm portiert werden kann.
Sie können sich sogar die Häresie vorstellen, die Einbettung und implizite Konvertierung zur Verwaltung der Substitution und die private Vererbung zur Verwaltung der Komposition zu verwenden, wobei das traditionelle Schulparadigma umgekehrt wird. (Natürlich ist dieser Weg 20 Jahre jünger als der andere. Erwarten Sie also keine breite Unterstützung durch die Community.)
Oder Sie können sich eine virtuelle gemeinsame Basis für alle Klassen vorstellen, von der Schnittstelle (keine Implementierung) bis zur endgültigen Klasse (vollständig implementiert), die teilweise implementierte Schnittstellen und gerade Schnittstellencluster durchläuft, wobei "Dominanz" als Versand von Schnittstelle zu Implementierungen über einen "Multi-Stack" verwendet wird -parallelogram "Vererbungsschema.
Der Vergleich von OOP mit Java mit C ++ unter der Annahme, dass es nur einen einzigen OOP-Weg gibt, schränkt die Fähigkeiten beider Sprachen ein.
Das Erzwingen der strikten Einhaltung von Java-Codierungsidiomen durch C ++ bewirkt eine Denaturierung von C ++, da Java gezwungen wird, sich wie eine C ++ - ähnliche Sprache zu verhalten, was Java denaturiert.
Geht es nicht um "Sensibilität", sondern um unterschiedliche "Aggregationsmechanismen", die die beiden Sprachen haben, und um sie auf unterschiedliche Weise zu kombinieren, was eine Redewendung in einer Sprache rentabler macht als in der anderen und umgekehrt.