C++ Lanjutan | #1 Pemrograman Berorientasi Objek (OOP)

Pemrograman Berorientasi Objek (OOP) dalam C++
Thumbnail OOP C++

Pemrograman Berorientasi Objek (OOP) dalam C++

Pemrograman Berorientasi Objek (Object-Oriented Programming atau OOP) adalah paradigma pemrograman yang berfokus pada objek-objek yang berisi data dan fungsi. Dalam C++, OOP adalah konsep fundamental yang memungkinkan kita membuat program yang modular, fleksibel, dan mudah dipelihara. Artikel ini akan membahas elemen penting dalam OOP di C++, seperti kelas, objek, enkapsulasi, pewarisan, polimorfisme, dan banyak lagi.

1. Kelas dan Objek

Kelas adalah blueprint atau cetak biru dari objek. Kelas berisi data (atribut) dan fungsi (metode) yang menggambarkan perilaku objek. Objek adalah instance dari kelas tersebut.


#include <iostream>

class Kendaraan {
public:
    std::string merk;
    int kecepatan;

    void jalan() {
        std::cout << "Kendaraan berjalan dengan kecepatan: " << kecepatan << " km/h" << std::endl;
    }
};

int main() {
    Kendaraan mobil;
    mobil.merk = "Toyota";
    mobil.kecepatan = 120;
    mobil.jalan();
    return 0;
}
        

Pada contoh di atas, Kendaraan adalah kelas, dan mobil adalah objek yang dibuat dari kelas tersebut.

2. Enkapsulasi (private, public, protected)

Enkapsulasi adalah konsep menyembunyikan detail implementasi dan hanya menampilkan fitur yang diperlukan. Ini dilakukan dengan mengatur hak akses menggunakan kata kunci private, public, dan protected.


class Kendaraan {
private:
    int kecepatan;

public:
    void setKecepatan(int k) {
        kecepatan = k;
    }

    int getKecepatan() {
        return kecepatan;
    }
};
        

Dalam contoh di atas, variabel kecepatan disembunyikan dari luar kelas dengan private, tetapi dapat diakses melalui metode setKecepatan dan getKecepatan.

3. Konstruktor dan Destruktor

Konstruktor adalah fungsi khusus yang dipanggil saat objek dibuat. Konstruktor digunakan untuk menginisialisasi objek. Destruktor adalah fungsi yang dipanggil ketika objek dihancurkan.


class Kendaraan {
public:
    Kendaraan() {
        std::cout << "Kendaraan dibuat!" << std::endl;
    }

    ~Kendaraan() {
        std::cout << "Kendaraan dihancurkan!" << std::endl;
    }
};
        

Konstruktor otomatis dipanggil ketika objek dibuat, dan destruktor otomatis dipanggil ketika objek keluar dari scope atau dihancurkan.

4. Pewarisan (Inheritance)

Pewarisan memungkinkan kita membuat kelas baru berdasarkan kelas yang sudah ada. Kelas anak akan mewarisi semua atribut dan metode dari kelas induk.


class Mobil : public Kendaraan {
public:
    void klakson() {
        std::cout << "Mobil membunyikan klakson!" << std::endl;
    }
};
        

Dalam contoh ini, kelas Mobil mewarisi semua properti dan metode dari kelas Kendaraan.

5. Polimorfisme (Virtual Functions dan Overriding)

Polimorfisme memungkinkan satu fungsi memiliki banyak bentuk. Fungsi virtual adalah fungsi yang dapat dioverride di kelas anak untuk memberikan perilaku yang berbeda.


class Kendaraan {
public:
    virtual void jalan() {
        std::cout << "Kendaraan berjalan." << std::endl;
    }
};

class Mobil : public Kendaraan {
public:
    void jalan() override {
        std::cout << "Mobil berjalan." << std::endl;
    }
};
        

Dengan polimorfisme, kita dapat memanggil metode yang sama pada objek yang berbeda dan mendapatkan hasil yang berbeda tergantung pada kelas yang digunakan.

6. Abstraksi (Class Abstract dan Interface)

Abstraksi adalah proses menyembunyikan detail implementasi dan hanya menampilkan fungsionalitas penting. Kelas abstrak adalah kelas yang tidak bisa diinstansiasi secara langsung, tetapi harus diturunkan ke kelas anak.


class Kendaraan {
public:
    virtual void jalan() = 0; // Pure virtual function
};
        

Pada contoh di atas, Kendaraan adalah kelas abstrak, karena mengandung pure virtual function jalan.

7. Operator Overloading

C++ memungkinkan kita untuk meng-overload operator, yaitu memberikan arti baru pada operator ketika digunakan dengan kelas yang kita buat.


class Bilangan {
private:
    int nilai;
public:
    Bilangan(int n) : nilai(n) {}

    Bilangan operator+(const Bilangan& b) {
        return Bilangan(this->nilai + b.nilai);
    }

    void tampil() {
        std::cout << "Nilai: " << nilai << std::endl;
    }
};
        

Dengan operator overloading, kita dapat menggunakan operator seperti + untuk menambah dua objek Bilangan.

Kesimpulan

Pemrograman Berorientasi Objek adalah dasar penting dalam C++ yang memungkinkan kita membuat program yang lebih modular, terstruktur, dan mudah dikelola. Dengan memahami konsep-konsep seperti kelas, objek, enkapsulasi, pewarisan, polimorfisme, dan abstraksi, kita dapat memanfaatkan kekuatan penuh OOP dalam C++.

Komentar