OOP'un bileşimi ve ikamesi vardır.
C ++, çoklu kalıtım, şablon uzmanlığı, katıştırma ve değer / taşıma / işaretçi semantiğine sahiptir.
Java'nın tek miras ve arayüzleri, gömme ve referans semantiği vardır.
OOP okulunun bu dilleri kullanmasının ortak yolu, nesne ikamesi ve kompozisyon için gömme için miras kullanmaktır. Ama aynı zamanda ortak bir ataya ve çalışma zamanı yayınlamanın bir yoluna ihtiyacınız var (C ++ 'da denir dynamic_cast
, Java'da sadece başka bir arabirim ister).
Java tüm bunları kendi java.lang.Object
köklü hiyerarşisiyle yapar. C ++ önceden tanımlanmış bir ortak köke sahip değildir, bu nedenle aynı "resme" gelmek için en azından tanımlamanız gerekir (ancak bu, bazı C ++ olasılıklarını sınırlar ...).
Bundan sonra, derleme zamanı polimorfizmi (CRTP'yi düşünün) ve değer semantiğine sahip olma olasılığı, "OOP nesnesi" kavramının bir C ++ programına taşınması için başka alternatifler de sunabilir.
Hatta, geleneksel okul paradigmasını tersine çevirerek, kompozisyonu yönetmek için ikame ve özel miras yönetimi için gömme ve örtülü dönüşüm kullanacağını düşünebilirsiniz. (Elbette, bu yol diğerinden 20 yaş daha genç, bu yüzden bunu yaparken geniş bir topluluk desteği beklemeyin)
Veya tüm sınıflar için sanal bir ortak temel oluşturabilir, arabirimden uygulamalara dağıtım olarak "egemenlik" kullanarak "egemenlik" kullanarak, kısmen uygulanmış arabirimlerden, tam bir arabirim kümesinden geçerek, son sınıflara (tam uygulama) form arabirimi (uygulama yok) düşünebilirsiniz. -parallologram "kalıtım şeması.
Sadece bir ve tek OOP yolunun her iki dilin yeteneklerini sınırladığı varsayılarak OOP ile j ++ 'ın C ++ ile karşılaştırılması.
C ++ 'ı Java kodlama deyimlerine sıkı sıkıya bağlı kalmaya zorlamak, Java'yı C ++ benzeri bir dil olarak Java'yı denatüre etmeye zorlamak için C +' yı denatüre etmektedir.
"Duyarlılık" meselesi değil, iki dilin sahip olduğu farklı "toplama mekanizmaları" mıydı ve bunları birleştirmenin farklı bir yolu, bir deyim bir dilde diğerinden daha karlı hale geliyor, ya da tam tersi.