Object-Oriented Programming (OOP), dikembangkan atas dasar kemampuan yang terbatas dari bahasa pemrograman prosedural, seperti C, Pascal, dan BASIC, dalam menangani masalah yang lebih rumit dalam suatu program. Bahasa pemrograman prosedural terorganisir dengan membagi setiap bagian program dalam suatu function, yang disebut juga procedure, atau subroutine, dalam bahasa pemrograman lain. Sekumpulan function dapat membentuk suatu kesatuan yang lebih besar yang biasa disebut dengan istilah module atau file.
Satu masalah dalam struktur yang berorientasi prosedural, ialah terlalu fokus pada function itu sendiri, tidak pada data. Suatu data dapat bersifat local untuk beberapa function, atau bisa juga global, akan tetapi tidak ada cara yang flexible dalam memberikan hak akses data tersebut, function mana yang berhak dan mana yang tidak memiliki hak akses.
Hal tersebut mengakibatkan masalah, ketika beberapa function harus mengakses suatu data yang sama. Agar dapat diakses oleh banyak function maka suatu data harus bersifat global. Akan tetapi, dengan membuat suatu data bersifat global hal tersebut akan membuat data tersebut dapat diakses oleh function lain yang tidak terkait. Hal tersebut dapat membuat banyak masalah dalam pemrograman untuk selanjutnya. Oleh karena itu diperlukan suatu cara untuk membatasi hak akses, function mana saja yang dapat mengakses data, dan mana saja yang tidak berhak.
Suatu function menjalankan suatu tugas, sedangkan data menyimpan informasi. Suatu object dalam OOP, mencakup dua hal tersebut, data dan function. Hal ini memudahkan programmer dalam mengembangkan program dengan pendekatan dunia nyata, serta mengatasi masalah global data yang ada pada bahasa pemrograman prosedural. Sementara itu, suatu class dapat disebut sebagai blueprint, untuk satu atau lebih object. Sebuah object sering disebut sebagai instance dari suatu class.
Berikut ini ialah contoh source code C++ untuk menjelaskan bagaimana class dan object bekerja.
#include <iostream>
using namespace std;
class Persegi
{
private:
double luasPersegi;
double kelilingPersegi;
public:
Persegi(double panjang, double lebar)// constructor
{
luasPersegi = panjang * lebar;
kelilingPersegi = 2 * (panjang + lebar);
}
void tampilkan()// tampilkan data luas dan keliling
{
cout << "Luas persegi ialah " << luasPersegi << endl;
cout << "Keliling persegi ialah " << kelilingPersegi;
}
};// akhir class Persegi
int main()
{
double panjangPersegi;
double lebarPersegi;
cout << "Masukkan panjang persegi ";
cin >> panjangPersegi;
cout << "Masukkan lebar persegi ";
cin >> lebarPersegi;
Persegi hitung(panjangPersegi, lebarPersegi);// instance hitung
cout << endl;
cout << "Hasil perhitungan" << endl;
hitung.tampilkan();// tampilkan data
return 0;
}
using namespace std;
class Persegi
{
private:
double luasPersegi;
double kelilingPersegi;
public:
Persegi(double panjang, double lebar)// constructor
{
luasPersegi = panjang * lebar;
kelilingPersegi = 2 * (panjang + lebar);
}
void tampilkan()// tampilkan data luas dan keliling
{
cout << "Luas persegi ialah " << luasPersegi << endl;
cout << "Keliling persegi ialah " << kelilingPersegi;
}
};// akhir class Persegi
int main()
{
double panjangPersegi;
double lebarPersegi;
cout << "Masukkan panjang persegi ";
cin >> panjangPersegi;
cout << "Masukkan lebar persegi ";
cin >> lebarPersegi;
Persegi hitung(panjangPersegi, lebarPersegi);// instance hitung
cout << endl;
cout << "Hasil perhitungan" << endl;
hitung.tampilkan();// tampilkan data
return 0;
}
Ada dua bagian utama dalam contoh program tersebut. Pertama ialah deklarasi class Persegi, yang memuat data dan function. Bagian yang kedua ialah main() function, yang berfungsi sebagai kendali utama jalannya program.
Pada class Persegi, terdapat satu function yakni tampilkan(), yang digunakan untuk menampilkan hasil luas dan keliling dari persegi. Dalam class Persegi juga terdapat constructor, yakni anggota khusus dari suatu function yang dipanggil dengan sendirinya seketika suatu instance (object) dibuat. Sebuah constructor selalu memiliki nama yang sama dengan class. Dalam constructor Persegi tersebut dilakukan proses menghitung luas dan keliling dari lingkaran.
Perhatikan pada source code C++ tersebut, terdapat kata kunci private dan public, dalam class Persegi. Kata kunci tersebut digunakan untuk menentukan hak, bagian object mana saja yang dapat diakses oleh bagian program lainnya. Data yang bersifat private hanya dapat diakses oleh anggota function dalam satu class. Sehingga data luasPersegi dan kelilingPersegi, tidak dapat diakses oleh main() function, karena main() function bukan merupakan anggota dari function Persegi.
Sementara itu anggota dari function Persegi, memiliki hak akses public, sehingga dapat diakses oleh main() function atau juga class lainnya.
Pada main() function, instance object hitung sebagai anggota dari class Persegi, yang mana instance object hitung tersebut dapat mengakses function tampilkan() dari class Persegi.