Memahami Pemrograman Berorientasi Objek
Bagaimana jika sebuah program tidak hanya berisi kumpulan instruksi, tetapi juga dapat menggambarkan benda, karakter, atau sistem yang memiliki data dan perilakunya sendiri? Kenali konsep Object-Oriented Programming (OOP) dan cara menerapkannya dalam C++.
Ketika mulai belajar C++, kita biasanya membuat program dengan urutan instruksi. Kita mendeklarasikan variabel, menerima input, melakukan perhitungan, menggunakan percabangan, perulangan, hingga menyusun fungsi untuk membagi pekerjaan program menjadi beberapa bagian.
Cara tersebut sudah cukup untuk membuat berbagai program sederhana. Misalnya, program menghitung luas bangun datar, menentukan kelulusan murid, atau mengolah nilai ujian.
Namun, bayangkan jika kita ingin membuat program yang lebih besar, seperti sistem perpustakaan, aplikasi sekolah, permainan, atau sistem pengelolaan toko. Di dalamnya terdapat banyak hal yang saling berhubungan: murid, buku, guru, transaksi, produk, dan sebagainya.
Setiap hal tersebut memiliki informasi dan perilaku yang berbeda. Sebuah buku memiliki judul dan penulis, sedangkan perilakunya dapat berupa menampilkan informasi atau mengubah status peminjaman. Sebuah murid memiliki nama dan nomor identitas, sedangkan perilakunya dapat berupa menampilkan profil atau menghitung nilai rata-rata.
Jika seluruh data dan fungsi dibuat secara terpisah tanpa pengorganisasian yang baik, program akan semakin sulit dikelola ketika ukurannya bertambah.
Untuk mengatasi masalah tersebut, kita dapat menggunakan pendekatan pemrograman yang disebut Object-Oriented Programming (OOP) atau pemrograman berorientasi objek.
- Apa itu pemrograman berorientasi objek?
- Mengenal class dan object
- Atribut dan method
- Membuat class pertama dalam C++
- Memahami public dan private
- Mengenal constructor
- Mengenal keyword this
- Membuat banyak object
- OOP dibandingkan pemrograman prosedural
- Contoh penerapan OOP
- Empat konsep utama OOP
- Latihan dan tantangan
1. Apa Itu Pemrograman Berorientasi Objek?
Pemrograman berorientasi objek adalah pendekatan dalam membuat program dengan mengorganisasikan kode berdasarkan objek. Objek tersebut dapat memiliki data atau informasi, sekaligus fungsi yang menggambarkan tindakan yang dapat dilakukannya.
Untuk memahami konsepnya, mari kita ambil contoh sebuah mobil.
Sebuah mobil memiliki berbagai informasi, seperti merek, warna, tahun produksi, dan kecepatan. Mobil juga dapat melakukan berbagai tindakan, seperti menyalakan mesin, mempercepat kendaraan, mengurangi kecepatan, dan berhenti.
Jika kita menggambarkan mobil sebagai objek dalam program, informasi dan tindakan tersebut dapat dikelompokkan menjadi satu kesatuan.
Dengan pendekatan OOP, kita tidak perlu memisahkan semua informasi mobil dari fungsi-fungsi yang berkaitan dengannya. Kita dapat menyusunnya dalam satu struktur yang disebut class, kemudian membuat objek berdasarkan class tersebut.
2. Mengenal Class dan Object
Sebelum menulis kode OOP, kita perlu memahami dua istilah yang menjadi dasar pendekatan ini, yaitu class dan object.
Apa itu class?
Class adalah cetak biru atau rancangan yang digunakan untuk membuat objek. Di dalam class, kita dapat menentukan data apa saja yang dimiliki objek serta tindakan apa saja yang dapat dilakukannya.
Misalnya, kita ingin membuat program yang mengelola data mobil. Sebelum membuat mobil pertama, kita perlu menentukan rancangan mobil yang akan digunakan.
Rancangan tersebut dapat berisi informasi berupa merek, warna, dan kecepatan. Rancangan itu juga dapat menentukan tindakan seperti mempercepat dan menampilkan informasi mobil.
Rancangan inilah yang disebut class.
Apa itu object?
Object adalah hasil pembuatan atau perwujudan dari sebuah class. Jika class merupakan rancangan, maka object adalah sesuatu yang dibuat berdasarkan rancangan tersebut.
Misalnya, kita memiliki class bernama Mobil. Berdasarkan class tersebut, kita dapat membuat beberapa objek:
Ketiga mobil tersebut berasal dari rancangan yang sama. Namun, masing-masing dapat memiliki merek, warna, dan kecepatan yang berbeda.
Pendalaman: apakah class dan object merupakan hal yang sama?
Tidak. Class merupakan definisi atau rancangan, sedangkan object merupakan entitas yang dibuat berdasarkan definisi tersebut.
Class menentukan struktur dan perilaku yang tersedia. Object memiliki nilai aktual untuk atribut yang ditentukan oleh class.
Dalam C++, object biasanya dibuat sebagai variabel dengan tipe class yang telah didefinisikan.
3. Mengenal Atribut dan Method
Setelah memahami class dan object, kita perlu mengetahui dua bagian penting yang biasanya terdapat di dalam class, yaitu atribut dan method.
Atribut: informasi yang dimiliki object
Atribut adalah variabel yang didefinisikan di dalam class untuk menyimpan data atau karakteristik suatu objek.
Jika kita membuat class Mobil, atributnya dapat berupa:
(- ) merek untuk menyimpan nama merek mobil.
(- ) warna untuk menyimpan warna mobil.
(- ) kecepatan untuk menyimpan kecepatan mobil.
Setiap objek yang dibuat dari class tersebut dapat memiliki nilai atribut masing-masing.
Method: tindakan yang dapat dilakukan object
Method adalah fungsi yang didefinisikan di dalam class. Method digunakan untuk menggambarkan tindakan atau operasi yang dapat dilakukan oleh objek.
Contohnya, class Mobil dapat memiliki method:
(- ) percepat() untuk menambah kecepatan.
(- ) rem() untuk mengurangi kecepatan.
(- ) tampilkanInfo() untuk menampilkan informasi mobil.
Atribut
Method
Dengan demikian, atribut menjelaskan apa yang dimiliki sebuah objek, sedangkan method menjelaskan apa yang dapat dilakukan oleh objek tersebut.
4. Membuat Class Pertama dalam C++
Sekarang kita mulai menerapkan konsep tersebut ke dalam kode C++.
Untuk membuat class, kita menggunakan keyword class, kemudian diikuti nama class dan tanda kurung kurawal.
Bentuk dasarnya adalah:
class NamaClass {
// Atribut
// Method
};
Perhatikan tanda titik koma setelah kurung kurawal penutup class. Tanda tersebut wajib ditulis pada deklarasi class.
Mari kita buat class sederhana bernama Mobil.
#include <iostream>
#include <string>
using namespace std;
class Mobil {
public:
string merek;
string warna;
void tampilkanInfo() {
cout << "Merek: " << merek << endl;
cout << "Warna: " << warna << endl;
}
};
int main() {
return 0;
}
Mari kita uraikan bagian-bagiannya.
class Mobil
Mendefinisikan sebuah class dengan nama Mobil.
string merek; dan string warna;
Mendefinisikan dua atribut untuk menyimpan informasi mobil.
void tampilkanInfo()
Mendefinisikan method untuk menampilkan informasi mobil.
public:
Menentukan bahwa bagian setelahnya dapat diakses dari luar class. Kita akan membahasnya lebih lanjut pada bagian berikutnya.
Namun, pada contoh tersebut kita baru membuat rancangan class. Belum ada object yang dibuat. Untuk menggunakan class, kita perlu membuat object berdasarkan class tersebut.
Membuat object dari class
Setelah class Mobil tersedia, kita dapat membuat objek di dalam fungsi main().
#include <iostream>
#include <string>
using namespace std;
class Mobil {
public:
string merek;
string warna;
void tampilkanInfo() {
cout << "Merek: " << merek << endl;
cout << "Warna: " << warna << endl;
}
};
int main() {
Mobil mobilSaya;
mobilSaya.merek = "Toyota";
mobilSaya.warna = "Merah";
mobilSaya.tampilkanInfo();
return 0;
}
Hasil program:
Merek: Toyota
Warna: Merah
Perhatikan bagian Mobil mobilSaya;. Baris tersebut membuat object bernama mobilSaya dari class Mobil.
Untuk mengakses atribut dan method, kita menggunakan operator titik atau ..
Contohnya:
(- ) mobilSaya.merek mengakses atribut merek milik object mobilSaya.
(- ) mobilSaya.warna mengakses atribut warna milik object mobilSaya.
(- ) mobilSaya.tampilkanInfo() menjalankan method milik object mobilSaya.
Mobil menyediakan rancangan. Object mobilSaya dibuat berdasarkan rancangan tersebut, kemudian memiliki nilai atribut dan dapat menjalankan method yang tersedia.
5. Memahami public dan private
Ketika membuat class, kita mungkin tidak ingin semua atribut dan method dapat diakses secara bebas dari luar class.
Misalnya, bayangkan sebuah sistem rekening bank. Pengguna seharusnya dapat melihat saldo dan melakukan transaksi melalui prosedur yang telah ditentukan. Namun, pengguna tidak seharusnya dapat mengubah nilai saldo secara langsung tanpa aturan.
Untuk mengatur akses terhadap anggota class, C++ menyediakan access specifier.
Tiga access specifier yang perlu dikenal adalah:
| Access specifier | Fungsi |
|---|---|
public |
Anggota class dapat diakses dari luar class melalui object, selama tidak ada aturan lain yang membatasinya. |
private |
Anggota class hanya dapat diakses langsung dari dalam anggota class tersebut dan teman yang diberi izin khusus. |
protected |
Anggota dapat diakses dari dalam class dan class turunannya, dengan aturan tertentu. |
Menggunakan private
Mari kita kembali ke contoh mobil. Kita akan membuat atribut kecepatan menjadi private, sehingga nilainya tidak dapat diubah secara langsung dari luar class.
#include <iostream>
using namespace std;
class Mobil {
private:
int kecepatan = 0;
public:
void percepat() {
kecepatan += 10;
}
void tampilkanKecepatan() {
cout << "Kecepatan: "
<< kecepatan << " km/jam" << endl;
}
};
int main() {
Mobil mobilSaya;
mobilSaya.percepat();
mobilSaya.percepat();
mobilSaya.tampilkanKecepatan();
return 0;
}
Hasil program:
Kecepatan: 20 km/jam
Dalam contoh tersebut, atribut kecepatan disimpan sebagai private. Kita tidak dapat mengubahnya secara langsung melalui object dari fungsi main().
Sebaliknya, method percepat() dan tampilkanKecepatan() dibuat sebagai public. Karena itu, keduanya dapat dipanggil dari luar class.
Jika kita mencoba menuliskan:
Mobil mobilSaya;
mobilSaya.kecepatan = 100;
Compiler akan menolak kode tersebut karena kecepatan merupakan anggota private.
Pendalaman: apa perbedaan default class dan struct di C++?
Dalam C++, kita dapat membuat tipe data menggunakan class maupun struct. Keduanya dapat memiliki atribut, method, constructor, dan fitur OOP lainnya.
Perbedaan pentingnya adalah akses default. Anggota class secara default bersifat private, sedangkan anggota struct secara default bersifat public.
Contoh:
class DataA {
int nilai; // private
};
struct DataB {
int nilai; // public
};
6. Mengenal Constructor
Ketika membuat object, terkadang kita ingin memberikan nilai awal pada atributnya secara langsung. Kita memang dapat memberikan nilai setelah object dibuat, seperti contoh sebelumnya. Namun, jika atributnya semakin banyak, cara tersebut dapat menjadi kurang praktis.
C++ menyediakan fitur bernama constructor.
Constructor adalah fungsi khusus di dalam class yang dijalankan secara otomatis ketika object dibuat. Constructor biasanya digunakan untuk menginisialisasi atribut atau menyiapkan kondisi awal object.
Constructor memiliki beberapa ciri:
(- ) Namanya sama dengan nama class.
(- ) Tidak memiliki tipe pengembalian, bahkan bukan void.
(- ) Dipanggil secara otomatis ketika object dibuat.
(- ) Dapat memiliki parameter.
Membuat constructor sederhana
#include <iostream>
#include <string>
using namespace std;
class Mobil {
public:
string merek;
string warna;
Mobil() {
merek = "Belum diketahui";
warna = "Belum diketahui";
}
void tampilkanInfo() {
cout << "Merek: " << merek << endl;
cout << "Warna: " << warna << endl;
}
};
int main() {
Mobil mobilSaya;
mobilSaya.tampilkanInfo();
return 0;
}
Ketika Mobil mobilSaya; dijalankan, constructor Mobil() otomatis dipanggil. Karena itu, atribut merek dan warna langsung mendapatkan nilai awal.
Hasil program:
Merek: Belum diketahui
Warna: Belum diketahui
Constructor dengan parameter
Selain memberikan nilai awal yang sama, kita juga dapat membuat constructor yang menerima parameter. Dengan cara ini, setiap object dapat langsung dibuat dengan nilai atribut yang berbeda.
#include <iostream>
#include <string>
using namespace std;
class Mobil {
public:
string merek;
string warna;
Mobil(string m, string w) {
merek = m;
warna = w;
}
void tampilkanInfo() {
cout << "Merek: " << merek << endl;
cout << "Warna: " << warna << endl;
}
};
int main() {
Mobil mobilA("Toyota", "Merah");
Mobil mobilB("Honda", "Hitam");
mobilA.tampilkanInfo();
cout << endl;
mobilB.tampilkanInfo();
return 0;
}
Hasil program:
Merek: Toyota
Warna: Merah
Merek: Honda
Warna: Hitam
Perhatikan bahwa kita tidak perlu lagi mengisi atribut satu per satu setelah object dibuat. Nilai dapat langsung diberikan melalui constructor.
Menggunakan member initializer list
Ada cara yang lebih umum digunakan dalam C++ untuk memberikan nilai awal kepada anggota class, yaitu member initializer list.
class Mobil {
public:
string merek;
string warna;
Mobil(string m, string w)
: merek(m), warna(w) {
}
};
Bagian : merek(m), warna(w) merupakan member initializer list. Atribut diinisialisasi sebelum bagian isi constructor dijalankan.
Untuk contoh sederhana, kedua cara mungkin terlihat menghasilkan hal yang sama. Namun, member initializer list penting dalam C++ karena beberapa anggota class, seperti reference dan anggota bertipe const, harus diinisialisasi dengan cara tersebut.
Pendalaman: apa itu default constructor?
Default constructor adalah constructor yang dapat dipanggil tanpa memberikan argumen.
Jika kita tidak mendefinisikan constructor apa pun, compiler dapat menyediakan default constructor secara otomatis dalam kondisi tertentu.
Namun, ketika kita membuat constructor dengan parameter sendiri, compiler tidak otomatis menyediakan default constructor. Jika masih ingin membuat object tanpa argumen, kita perlu mendefinisikannya secara eksplisit.
7. Mengenal Keyword this
Ketika sebuah class memiliki atribut dan parameter method dengan nama yang sama, kita mungkin kesulitan membedakan keduanya.
Misalnya, kita memiliki atribut bernama nama dan constructor juga menerima parameter bernama nama.
Untuk membedakan anggota object dengan parameter tersebut, C++ menyediakan keyword this.
this merupakan pointer yang merujuk pada object yang sedang menjalankan method non-static tersebut.
#include <iostream>
#include <string>
using namespace std;
class Murid {
private:
string nama;
public:
Murid(string nama) {
this->nama = nama;
}
void tampilkanNama() {
cout << "Nama: " << this->nama;
}
};
int main() {
Murid muridA("Andi");
muridA.tampilkanNama();
return 0;
}
Hasil program:
Nama: Andi
Perhatikan baris:
this->nama = nama;
Penjelasannya:
(- ) this->nama merujuk pada atribut nama milik object yang sedang dibuat.
(- ) nama di sebelah kanan merupakan parameter yang diterima constructor.
Dengan demikian, perintah tersebut menyalin nilai parameter ke atribut object.
this merupakan pointer, anggota object diakses menggunakan operator panah ->, bukan operator titik ..
Pendalaman: apakah this dapat digunakan di semua method?
this tersedia pada fungsi anggota non-static. Pada fungsi anggota static, tidak ada object tertentu yang sedang menjalankan fungsi tersebut, sehingga this tidak tersedia.
Untuk tahap awal, cukup pahami bahwa this digunakan untuk merujuk pada object yang sedang menjalankan method.
8. Membuat Banyak Object dari Satu Class
Sekarang kita sudah memahami bagaimana membuat class, atribut, method, dan constructor. Selanjutnya, mari kita lihat bagaimana konsep tersebut membantu ketika sebuah program memiliki banyak objek.
Misalnya, kita ingin membuat program sederhana untuk menyimpan data beberapa murid. Setiap murid memiliki nama dan umur, tetapi nilainya berbeda-beda.
Kita dapat membuat satu class bernama Murid, kemudian membuat beberapa object dari class tersebut.
#include <iostream>
#include <string>
using namespace std;
class Murid {
public:
string nama;
int umur;
Murid(string n, int u) {
nama = n;
umur = u;
}
void tampilkanInfo() {
cout << "Nama: " << nama << endl;
cout << "Umur: " << umur << endl;
}
};
int main() {
Murid muridA("Andi", 16);
Murid muridB("Budi", 17);
Murid muridC("Citra", 16);
muridA.tampilkanInfo();
cout << endl;
muridB.tampilkanInfo();
cout << endl;
muridC.tampilkanInfo();
return 0;
}
Hasil program:
Nama: Andi
Umur: 16
Nama: Budi
Umur: 17
Nama: Citra
Umur: 16
Perhatikan bahwa kita hanya membuat satu class, tetapi dapat menghasilkan banyak object dengan data yang berbeda.
Setiap object memiliki nilai atributnya sendiri. Mengubah data milik muridA tidak otomatis mengubah data milik muridB atau muridC.
Inilah salah satu manfaat utama OOP: kita dapat membuat struktur yang sama untuk berbagai objek tanpa harus menulis ulang seluruh atribut dan method.
9. OOP Dibandingkan dengan Pemrograman Prosedural
Sebelum mempelajari OOP, kita lebih sering membuat program menggunakan pendekatan prosedural. Pada pendekatan ini, program disusun berdasarkan urutan instruksi dan fungsi-fungsi yang menjalankan tugas tertentu.
Contohnya, sebuah program pengelolaan data murid dapat memiliki variabel untuk menyimpan nama dan umur, kemudian memiliki fungsi untuk menampilkan data tersebut.
#include <iostream>
#include <string>
using namespace std;
string nama = "Andi";
int umur = 16;
void tampilkanInfo() {
cout << "Nama: " << nama << endl;
cout << "Umur: " << umur << endl;
}
int main() {
tampilkanInfo();
return 0;
}
Pendekatan tersebut dapat berjalan dengan baik untuk contoh sederhana. Namun, ketika jumlah data dan fungsi semakin banyak, pengelolaan variabel global dan fungsi yang saling berkaitan dapat menjadi lebih rumit.
Dengan OOP, kita dapat mengelompokkan data dan fungsi yang berkaitan ke dalam class.
| Aspek | Prosedural | Berorientasi objek |
|---|---|---|
| Fokus utama | Urutan instruksi dan fungsi. | Objek yang memiliki data dan perilaku. |
| Pengorganisasian | Data dan fungsi dapat dikelola secara terpisah. | Data dan method dapat dikelompokkan dalam class. |
| Pengelolaan data | Dapat menggunakan variabel dan struktur data. | Dapat menggunakan atribut dan aturan akses. |
| Pengembangan | Dapat menjadi sulit ketika fungsi dan data semakin kompleks jika tidak dirancang dengan baik. | Membantu mengorganisasikan sistem kompleks melalui objek dan class. |
Perlu dipahami bahwa OOP bukan berarti pendekatan prosedural sudah tidak digunakan. Keduanya merupakan pendekatan pemrograman yang dapat digunakan sesuai kebutuhan. Bahkan dalam program C++, kita dapat menemukan fungsi prosedural sekaligus class dan object dalam satu aplikasi.
10. Contoh Penerapan OOP: Program Data Produk
Agar konsep OOP lebih mudah dipahami, sekarang kita akan membuat contoh yang sedikit lebih nyata.
Bayangkan kita ingin membuat program sederhana untuk mengelola informasi produk di sebuah toko. Setiap produk memiliki nama, harga, dan jumlah stok. Program juga perlu menampilkan informasi produk serta menghitung nilai total stok berdasarkan harga dan jumlah barang.
Kita dapat membuat class Produk yang memiliki atribut dan method sesuai kebutuhan tersebut.
#include <iostream>
#include <string>
using namespace std;
class Produk {
private:
string nama;
double harga;
int stok;
public:
Produk(string n, double h, int s) {
nama = n;
harga = h;
stok = s;
}
void tampilkanInfo() {
cout << "Nama produk: " << nama << endl;
cout << "Harga: Rp" << harga << endl;
cout << "Stok: " << stok << endl;
}
double hitungNilaiStok() {
return harga * stok;
}
void tambahStok(int jumlah) {
if (jumlah > 0) {
stok += jumlah;
}
}
};
int main() {
Produk produkA("Buku Tulis", 5000, 20);
produkA.tampilkanInfo();
cout << "Nilai seluruh stok: Rp"
<< produkA.hitungNilaiStok()
<< endl;
produkA.tambahStok(5);
cout << endl;
cout << "Setelah stok ditambahkan:" << endl;
produkA.tampilkanInfo();
return 0;
}
Hasil program:
Nama produk: Buku Tulis
Harga: Rp5000
Stok: 20
Nilai seluruh stok: Rp100000
Setelah stok ditambahkan:
Nama produk: Buku Tulis
Harga: Rp5000
Stok: 25
Mari kita pahami bagaimana class tersebut bekerja.
Atribut sebagai penyimpan informasi
Class Produk memiliki tiga atribut:
(- ) nama untuk menyimpan nama produk.
(- ) harga untuk menyimpan harga produk.
(- ) stok untuk menyimpan jumlah barang yang tersedia.
Ketiga atribut tersebut dibuat sebagai private, sehingga tidak dapat diubah secara langsung dari luar class.
Constructor untuk memberikan nilai awal
Constructor Produk() menerima tiga parameter. Ketika object dibuat, nilai parameter tersebut digunakan untuk mengisi atribut nama, harga, dan stok.
Method untuk menjalankan tindakan
Class tersebut memiliki tiga method:
(- ) tampilkanInfo() untuk menampilkan informasi produk.
(- ) hitungNilaiStok() untuk menghitung nilai seluruh stok.
(- ) tambahStok() untuk menambah jumlah stok jika jumlah yang diberikan lebih dari nol.
Perhatikan bahwa method tambahStok() tidak memberikan akses langsung kepada pengguna untuk mengubah atribut stok. Perubahan dilakukan melalui method yang sudah memiliki pemeriksaan sederhana.
11. Mengenal Empat Konsep Utama OOP
Sejauh ini kita telah mengenal class, object, atribut, method, access specifier, dan constructor. Semua itu merupakan fondasi awal untuk memahami OOP.
Dalam pembahasan yang lebih mendalam, terdapat empat konsep utama yang sering digunakan untuk menjelaskan pemrograman berorientasi objek, yaitu encapsulation, inheritance, polymorphism, dan abstraction.
Kita akan mengenal gambaran dasarnya terlebih dahulu.
1. Encapsulation (Enkapsulasi)
Encapsulation adalah konsep menggabungkan data dan method yang berkaitan dalam satu kesatuan sekaligus mengatur akses terhadap data tersebut.
Contohnya adalah class Produk sebelumnya. Atribut harga dan stok dibuat private, sedangkan perubahan stok dilakukan melalui method tambahStok().
Dengan demikian, data tidak dapat diubah secara sembarangan dari luar class.
2. Inheritance (Pewarisan)
Inheritance adalah konsep ketika sebuah class dapat mewarisi atribut dan method dari class lain.
Misalnya, kita memiliki class Kendaraan yang memiliki informasi umum seperti merek dan warna. Kemudian, kita membuat class Mobil dan Motor yang mewarisi karakteristik umum tersebut.
Dengan inheritance, kita dapat menggunakan kembali bagian kode yang sudah dibuat sehingga tidak perlu menuliskan ulang semua karakteristik yang sama.
3. Polymorphism (Polimorfisme)
Polymorphism berarti satu antarmuka atau bentuk pemanggilan dapat memiliki perilaku berbeda bergantung pada objek atau tipe yang terlibat.
Misalnya, kita memiliki beberapa jenis kendaraan. Setiap kendaraan memiliki method bunyikanSuara(), tetapi suara yang dihasilkan dapat berbeda.
Mobil dapat menghasilkan suara klakson, sedangkan motor dapat menghasilkan suara klakson yang berbeda. Nama method dapat sama, tetapi implementasinya dapat berbeda melalui mekanisme polymorphism.
4. Abstraction (Abstraksi)
Abstraction adalah konsep menyederhanakan penggunaan suatu sistem dengan menampilkan bagian yang penting dan menyembunyikan detail implementasi yang tidak perlu diketahui oleh pengguna.
Misalnya, ketika kita menggunakan kendaraan, kita cukup mengetahui cara menghidupkan mesin dan mengendalikan kendaraan. Kita tidak harus memahami seluruh proses mekanis yang terjadi di dalam mesin.
Dalam pemrograman, abstraksi membantu pengguna class berinteraksi melalui antarmuka yang jelas tanpa harus mengetahui seluruh detail cara kerja internalnya.
| Konsep | Gagasan utama | Contoh sederhana |
|---|---|---|
| Encapsulation | Menggabungkan data dan method serta mengatur akses. | Atribut saldo diakses melalui method transaksi. |
| Inheritance | Mewariskan anggota class. | Mobil dan motor mewarisi class kendaraan. |
| Polymorphism | Satu antarmuka dapat memiliki perilaku berbeda. | Method suara pada jenis kendaraan berbeda. |
| Abstraction | Menyederhanakan penggunaan dengan menyembunyikan detail. | Pengguna mengoperasikan kendaraan tanpa memahami seluruh mekanisme mesin. |
Empat konsep tersebut akan dibahas lebih mendalam pada materi berikutnya. Untuk saat ini, pastikan kita sudah memahami hubungan antara class, object, atribut, dan method terlebih dahulu.
Setiap konsep memiliki pembahasan tersendiri dan contoh implementasi yang lebih lengkap.
(- ) Mengenal Encapsulation dalam C++
(- ) Mengenal Inheritance dalam C++
12. Latihan Pemahaman
Setelah mempelajari konsep OOP, cobalah mengerjakan latihan berikut untuk mengetahui sejauh mana pemahaman kita.
Jelaskan perbedaan antara class dan object menggunakan contoh selain mobil.
(- ) Apa yang dimaksud dengan class?
(- ) Apa yang dimaksud dengan object?
(- ) Mengapa satu class dapat menghasilkan banyak object?
Misalnya kita ingin membuat class bernama Buku untuk program perpustakaan.
Tentukan minimal empat atribut dan tiga method yang sesuai untuk class tersebut.
Lihat petunjuk
Pikirkan informasi yang dimiliki buku, seperti judul, penulis, dan tahun terbit. Kemudian pikirkan tindakan yang dapat dilakukan, seperti menampilkan informasi atau mengubah status peminjaman.
Apa perbedaan antara public dan private?
Mengapa atribut penting dalam sebuah class sering dibuat sebagai private?
Perhatikan deklarasi berikut:
class Produk {
public:
string nama;
double harga;
Produk(string n, double h) {
nama = n;
harga = h;
}
};
(- ) Apa fungsi constructor pada class tersebut?
(- ) Kapan constructor dijalankan?
(- ) Apa fungsi parameter n dan h?
Buatlah program C++ dengan class bernama DataMurid.
Ketentuan program:
(- ) Memiliki atribut nama, kelas, dan nilai.
(- ) Menggunakan constructor untuk memberikan nilai awal.
(- ) Memiliki method untuk menampilkan informasi murid.
(- ) Memiliki method untuk menentukan apakah murid dinyatakan lulus atau belum.
(- ) Gunakan batas kelulusan nilai 75.
Lihat kerangka awal program
#include <iostream>
#include <string>
using namespace std;
class DataMurid {
private:
string nama;
string kelas;
double nilai;
public:
// Buat constructor
// Buat method tampilkanInfo()
// Buat method cekKelulusan()
};
int main() {
// Buat object DataMurid
// Panggil method yang diperlukan
return 0;
}
13. Kesimpulan
Pemrograman berorientasi objek memberikan cara lain untuk menyusun program. Jika sebelumnya kita lebih sering mengelompokkan instruksi berdasarkan fungsi, melalui OOP kita dapat mengorganisasikan program berdasarkan objek yang memiliki data dan perilakunya sendiri.
Beberapa hal penting yang telah dipelajari:
(- ) OOP merupakan pendekatan pemrograman yang berorientasi pada objek.
(- ) Class merupakan rancangan untuk membuat objek.
(- ) Object merupakan hasil pembuatan dari sebuah class.
(- ) Atribut digunakan untuk menyimpan data atau karakteristik objek.
(- ) Method merupakan fungsi yang menjadi bagian dari class.
(- ) Access specifier seperti public dan private digunakan untuk mengatur akses terhadap anggota class.
(- ) Constructor digunakan untuk menginisialisasi object ketika dibuat.
(- ) Keyword this merujuk pada object yang sedang menjalankan method non-static.
(- ) Encapsulation, inheritance, polymorphism, dan abstraction merupakan empat konsep utama yang akan dipelajari lebih mendalam.
OOP sangat berguna ketika kita mulai membuat program dengan struktur yang lebih kompleks. Dengan memahami class dan object, kita sudah memiliki dasar untuk mempelajari bagaimana berbagai komponen program dapat bekerja sama secara terorganisasi.
Selanjutnya: Mengenal Encapsulation dalam C++
Kita sudah mengetahui bahwa sebuah class dapat memiliki atribut dan method. Namun, bagaimana cara memastikan data di dalam object tidak diubah secara sembarangan?
Pada materi berikutnya, kita akan membahas encapsulation secara lebih mendalam, mulai dari pembatasan akses menggunakan private, penggunaan getter dan setter, hingga cara menjaga agar data object tetap berada dalam kondisi yang valid.
Jika ada konsep yang ingin dipelajari kembali, silakan kunjungi materi berikut:
(- ) Belajar Variabel, Tipe Data, dan Konstanta dalam C++
(- ) Menerima Input dan Mengolah Data dalam C++
(- ) Mengelola Banyak Data dengan Array
0 comments:
Posting Komentar