Dalam pandangan saya, ini bukan masalah definisi sebagai masalah kegunaan.
Objek adalah abstraksi yang dimaksudkan untuk membuatnya lebih mudah untuk membaca, menulis, dan alasan tentang program yang kompleks. Untuk seorang programmer praktis, apakah suatu bahasa memenuhi semua kriteria definisi formal tertentu "berorientasi objek" (tampaknya ada beberapa yang bersaing!) Tidak benar-benar sama pentingnya dengan apakah alat yang ditawarkannya cocok untuk dipikirkan. program Anda dalam hal objek yang dikatakan - yaitu, benar-benar menuai manfaat produktivitas yang seharusnya dari OOP.
Dalam C ++, objek adalah abstraksi yang sangat bocor , sering memaksa programmer untuk bertengkar dengan masalah-masalah buruk terkait dengan bagaimana objek-objek itu terstruktur dalam memori - masalah yang lebih mengingatkan pada pengkodean dalam C langsung daripada bahasa OOP lainnya. Misalnya, C ++ Jawaban yang Sering Diajukan menawarkan kritik ini (antara lain):
Sangat bermanfaat bagi seorang praktisi untuk mendapatkan keakraban dengan sistem OO selain C ++, dan dengan definisi OO selain traps "enkapsulasi, pewarisan, polimorfisme" yang ditafsirkan dengan cara khusus yang memungkinkan C ++ dianggap "OO". Misalnya, klaim bahwa lingkungan yang tidak memiliki pemeriksaan batas atau pengumpulan sampah bukanlah lingkungan OO yang terdengar keterlaluan bagi orang-orang yang terbiasa dengan C ++. Tetapi dari banyak perspektif, itu sangat masuk akal. Jika ada yang bisa menimpa objek, di mana "enkapsulasi"? Jika membuang objek dapat menyebabkan referensi menggantung atau kebocoran memori, bagaimana sistem "berorientasi objek" ? Bagaimana dengan kemampuan untuk mengetahui objek apa yang terletak di tempat dan waktu tertentu? Anda mengatakan perangkat lunak itu berfungsi dengan objek - di mana mereka? Dan jika seseorang tidak dapat mengetahuinya, bagaimana seseorang seharusnya melakukan debug pada perangkat lunak?
C ++ berorientasi objek, tetapi tidak menyenangkan dan tidak lengkap: penggunanya harus mencurahkan banyak upaya untuk memastikan data mereka benar-benar berperilaku seperti objek "nyata" daripada bit yang salah. Yang mengatakan, banyak kode telah ditulis dalam C + + selama masa pakainya, sebagian besar menggunakan kelas dan pengiriman dinamis, jadi itu jelas sesuatu yang dapat Anda gunakan untuk OOP praktis.