Pemrograman berorientasi objek bukan tentang fitur sintaks, ini adalah coding dan desain filosofi. Pada intinya berdiri konsep objek , yang merupakan konstruksi yang dikelompokkan negara dengan rutinitas untuk menindaklanjutinya (atau, tergantung pada sudut pandang Anda, tanggapan terhadap pesan). Aspek penting lainnya dari OOP adalah enkapsulasi : membungkus detail implementasi ke dalam struktur yang buram dan menghubungkannya melalui antarmuka yang terdefinisi dengan baik. Hampir semua hal lain dalam teori OOP kembali ke dua dasar ini.
Jadi, bahasa apa pun yang dapat memodelkan objek (entitas yang berisi data dan kode) dan enkapsulasi dapat digunakan untuk melakukan OOP. Misalnya, di C Anda dapat menggunakan pointer fungsi untuk menyimpan fungsi dalam struct, dan Anda dapat menggunakan sistem file header / sumber untuk mewujudkan enkapsulasi. Ini tidak nyaman, tetapi cukup untuk melakukan OOP. Anda mungkin bahkan dapat membengkokkan sesuatu seperti Haskell atau ML untuk melakukan OOP, dan saya tidak akan terkejut jika seseorang dapat menemukan cara melakukan OOP dalam perakitan.
Secara praktis, bahasa dapat disebut 'berorientasi objek' jika ia menyediakan serangkaian fitur sintaksis lengkap untuk pemrograman berorientasi objek eksplisit. Biasanya, ini berarti bahwa bahasa tersebut harus memiliki: * gagasan tentang objek * gagasan tentang pemanggilan metode atau pesan yang lewat * cara yang nyaman dan mudah untuk mengontrol akses ke anggota objek * cara yang nyaman dan mudah mendefinisikan antarmuka
Akibatnya, saya akan memanggil sepotong kode berorientasi objek jika mematuhi prinsip-prinsip OOP dan menggunakan sintaks OOP yang tersedia.
BTW., Contoh kode Anda mungkin memang menggunakan polimorfisme dan fungsi virtual, meskipun sintaks C tidak membuatnya jelas. Saya bukan ahli SDL, tetapi saya berharap SDL_surface
untuk dapat mewakili berbagai jenis permukaan yang berbeda, masing-masing dengan set implementasinya yang spesifik - memadukan sesuatu ke dalam bitmap memori dan memadukannya ke permukaan layar memerlukan perbedaan yang sangat berbeda. kode, tetapi antarmuka (fungsi yang mengambil SDL_surface*
sebagai argumen) tetap sama. Sama seperti itu, ia juga mengimplementasikan enkapsulasi: Anda tidak dapat mengakses representasi yang mendasari permukaan secara langsung, Anda harus melalui fungsi yang tahu cara menangani SDL_surface
, karena hanya itu yang Anda miliki. Ini adalah contoh yang bagus tentang bagaimana Anda akan melakukan OOP di C.