1. Pendahuluan
Bahasa C sangat digemari oleh banyak programmer karena latar belakang historisnya dan kemampuannya dalam pengendalian tingkat rendah. Namun, C bukanlah “bahasa berorientasi objek”. Artinya, bahasa C tidak secara langsung mendukung fitur-fitur pemrograman berorientasi objek seperti class, inheritance, dan encapsulation sebagaimana Java atau C++. Meski begitu, konsep pemrograman berorientasi objek tetap bisa diadaptasi di C dengan beberapa pendekatan tertentu. Pada artikel ini, akan dijelaskan bagaimana cara menerapkan pemrograman berorientasi objek di C, termasuk konsep dasar seperti enkapsulasi, pewarisan, dan polimorfisme.
2. Konsep Dasar Pemrograman Berorientasi Objek
Pemrograman berorientasi objek (OOP) bertujuan untuk mengelola data dan metode operasinya sebagai satu kesatuan. Dengan pendekatan ini, struktur program menjadi lebih jelas, dapat digunakan ulang, dan lebih mudah dalam pemeliharaan. Tiga konsep utama OOP adalah enkapsulasi, pewarisan, dan polimorfisme. Walaupun C tidak secara langsung mendukung konsep ini, kita tetap bisa mengimplementasikannya secara sederhana dengan sedikit kreativitas.
2.1 Enkapsulasi
Enkapsulasi adalah teknik menyatukan data dan operasi (metode) dalam satu unit, serta mengendalikan akses dari luar. Dalam C, hal ini bisa dilakukan dengan menggunakan struktur (struct
). Struct berfungsi seperti class pada bahasa lain, memungkinkan beberapa data disatukan dalam satu entitas.
typedef struct {
int age;
char name[50];
} Person;
Pada struct ini, tipe data Person
mengenkapsulasi informasi usia dan nama. Dengan demikian, Anda dapat membuat instance Person
dan memanipulasinya.
2.2 Pewarisan
C tidak memiliki konsep pewarisan secara langsung, sehingga tidak ada relasi parent-child seperti pada class. Namun, Anda bisa “meniru” pewarisan dengan menyisipkan satu struct sebagai anggota struct lainnya.
typedef struct {
int age;
} Parent;
typedef struct {
Parent parent;
int studentID;
} Child;
Kode di atas menunjukkan bagaimana struct Child
mengandung struct Parent
di dalamnya, sehingga mewakili pewarisan secara sederhana.
2.3 Polimorfisme
Polimorfisme adalah kemampuan satu operasi yang sama bekerja secara berbeda pada tipe data berbeda. Di C, hal ini dapat dicapai dengan menggunakan function pointer. Function pointer adalah variabel yang menyimpan alamat fungsi, memungkinkan pemanggilan fungsi secara dinamis.
typedef int (*OperationFunc)(int, int);
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
OperationFunc op = add; // Menetapkan fungsi add ke pointer
printf("%d", op(3, 4)); // Hasil: 7
op = multiply; // Mengubah ke fungsi multiply
printf("%d", op(3, 4)); // Hasil: 12
Dengan cara ini, function pointer yang sama dapat digunakan untuk berbagai operasi.

3. Cara Mengimplementasikan Class di C
Untuk menerapkan pemrograman berorientasi objek di C, kita perlu “memalsukan” konsep class. Ini bisa dilakukan dengan mengombinasikan struct dan function pointer sehingga membentuk struktur yang menyerupai class.
3.1 Menggunakan Struct sebagai Class
Untuk membuat class di C, data dan metode dikemas dalam struct. Metode didefinisikan sebagai fungsi, lalu function pointer digunakan dalam struct untuk menghubungkannya.
typedef struct {
int age;
void (*setAge)(struct Person*, int);
int (*getAge)(struct Person*);
} Person;
void setAge(struct Person* p, int age) {
p->age = age;
}
int getAge(struct Person* p) {
return p->age;
}
Person person = {0, setAge, getAge};
person.setAge(&person, 25);
printf("Age: %d", person.getAge(&person)); // Hasil: 25
Pada kode ini, struct Person
memiliki method setAge
dan getAge
melalui function pointer, sehingga berperilaku seperti class.
4. Implementasi Method
Untuk meniru fitur “method” pada OOP di C, digunakan function pointer sebagai anggota struct. Dengan begitu, method bisa dihubungkan dengan data yang sesuai.
typedef struct {
int age;
void (*setAge)(struct Person*, int);
} Person;
void setAge(struct Person* p, int age) {
p->age = age;
}
5. Kesimpulan dan Aplikasi
Meskipun C tidak secara native mendukung OOP, dengan menggunakan struct, function pointer, dan pengelolaan memori yang tepat, Anda dapat mengimplementasikan konsep seperti class dan pewarisan secara sederhana.