OOP memiliki komposisi dan substitusi.
C ++ memiliki banyak pewarisan, spesialisasi templat, embedding dan semantik nilai / pindahkan / pointer.
Java memiliki satu pewarisan dan antarmuka, semantik semantik dan rujukan.
Cara umum sekolah OOP menggunakan bahasa-bahasa ini adalah menggunakan pewarisan untuk penggantian objek dan menanamkan untuk komposisi. Tetapi Anda juga membutuhkan leluhur yang sama dan cara untuk runtime-cast (dalam C ++ disebut dynamic_cast
, di Jawa hanya meminta antarmuka dari yang lain).
Java melakukan semua ini dengan java.lang.Object
hierarki yang telah di-root sendiri . C ++ tidak memiliki root umum yang telah ditentukan, jadi Anda setidaknya harus mendefinisikannya, untuk datang ke "gambar" yang sama (tapi ini membatasi beberapa kemungkinan C ++ ...).
Setelah itu, kemungkinan untuk memiliki kompilasi-waktu polimorfisme (think to CRTP) dan nilai semantik juga dapat menawarkan alternatif lain dengan cara konsep "objek OOP" dapat porting ke dalam program C ++.
Anda bahkan dapat membayangkan bid'ah menggunakan penanaman dan konversi implisit untuk mengelola substitusi dan warisan pribadi untuk mengelola komposisi, bahkan membalikkan paradigma sekolah tradisional. (Tentu saja, cara ini 20 tahun lebih muda dari yang lain, jadi jangan berharap dukungan masyarakat luas dalam melakukan itu)
Atau Anda dapat membayangkan pangkalan bersama virtual untuk semua kelas, membentuk antarmuka (tidak ada implementasi) hingga kelas akhir (sepenuhnya diimplementasikan) melalui antarmuka yang diimplementasikan sebagian, bahkan cluster antarmuka, menggunakan "dominasi" sebagai pengiriman dari antarmuka ke implementasi melalui "multi-stacked". skema pewarisan -parallelogram ".
Membandingkan OOP ke java ke C ++ dengan asumsi hanya ada satu dan hanya cara OOP yang membatasi kemampuan kedua bahasa.
Memaksa C ++ untuk sepenuhnya mematuhi idiom pengkodean Java mendenaturasi C ++ karena memaksa Java untuk berperilaku sebagai bahasa mirip C ++ adalah denaturasi Java.
Bukan masalah "sensibilitas" tetapi "mekanisme agregasi" yang berbeda memiliki kedua bahasa dan cara yang berbeda untuk menggabungkan mereka yang membuat beberapa idiom lebih menguntungkan dalam satu bahasa daripada yang lain dan sebaliknya.