Konsep Enkapsulasi pada C++

Pada tutorial sebelumnya kita telah membahas tentang kelas dan objek yang menjadi dasar tiap bahasa pemrograman berorientasi objek, kali ini kita masih di ranah pemrograman berorientasi objek yaitu konsep enkapsulasi. Tutorial kali ini akan mencakup tentang dasar konsep enkapsulasi dan merubah program yang telah dibuat di tutorial kelas dan objek menjadi menerapkan konsep enkapsulasi.

Sebelum masuk ke enkapsulasi, kita harus mengetahui bahwa pada dasarnya program C++ selalu terdiri dari:

  • Statement : Bagian program yang melakukan aksi dan dapat juga disebut fungsi.
  • Data : bagian program yang digunakan untuk menyimpan informasi yang akan diberi aksi oleh fungsi.

Pengertian Enkapsulasi

Pada pemrograman berorientasi objek, enkapsulasi adalah binding/pengikatan antara data-data dan fungsi-fungsi yang memanipulasi nya(data-data tersebut). Hal ini membuat data-data tersebut aman dari ganguan luar. konsep enkapsulasi memungkinkan dilakukannya konsep data hiding pada C++.

apa itu enkapsulasi pada pemrograman

Enkapsulasi pada C++

Enkapsulasi pada bahasa C++ dapat dicapai karena adanya kelas,  pada tutorial sebelumnya kita telah memakai spesifikasi akses public, dan kita telah menyinggung spesifikasi akses lain yang ada di bahasa C++ yaitu protected dan private.

  • Public : seperti yang telah kita ketahui bahwa spesifikasi akses public berarti dapat diakses dimanapun.
  • Private : Private hanya dapat diakes oleh member dari kelas saja, non member ataupun kelas turunan tidak dapat mengases method ataupun atrubut yang bersifat private.
  • Protected : Tidak bisa diakses dari luar kelas, dan bisa diakses oleh kelas turunan dan member kelas yang sama.

Perlu diingat bahwa secara default semua member dari kelas bersifat private.

Penerapan Enkapsulasi

pada tutorial sebelumnya kita telah membuat program yang memiliki kelas bernama Persegi seperti dibawah ini:

class Persegi
{
public:
  double panjang;
  double lebar;

  double hitungLuas(){
    return panjang*lebar;
  }
  double hitungKeliling(){
    return 2.0*panjang+lebar;
  }
};

Pada program diatas kita mendeklarasikan seluruh member sebagai public yang membuat semuanya dapat diakses di luar kelas Persegi. Hal terkadang bukanlah ide yang bagus, karena kita akan kehilangan kendali penuh terhadap data-data kita. contohnya bagaimana jika user menginput lebar bernilai negarif?. Kita akan memiliki perhitungan keliling yang salah. Maka dari itu seharusnya kita memberikan attribut panjang dan lebar memiliki spesifikasi akses private.

class Persegi
{
private:
  double panjang;
  double lebar;
public:
  double hitungLuas(){
    return panjang*lebar;
  }
  double hitungKeliling(){
    return 2.0*panjang+lebar;
  }
};

Akan tetapi pada program diatas kita tidak akan bisa mengakses attribut panjang dan lebar karena bersifat private, maka dari itu kita buat getter dan setter untuk masing-masing attribut. Pembuatan getter dan setter dari panjang dan lebar akan membuat kode program sebagai berikut:

class Persegi
{
private:
  double panjang;
  double lebar;
public:
  //getter dari panjang
  double getPanjang(){
  	return panjang;
  }
  //setter dari panjang
  void setPanjang(double p){
  	panjang=p;
  }
  //getter dari lebar
  double getLebar(){
  	return lebar;
  }
  //setter dari lebar
  void setLebar(double l){
  	lebar=l;
  }
  //end of getter setter
  double hitungLuas(){
    return panjang*lebar;
  }
  double hitungKeliling(){
    return 2.0*panjang+lebar;
  }
};

 

#tips: kebanyakan kita akan mengatur atribut/variabel dalam kelas sebagai private dan fungsi yang memanipulasinya sebagai public, akan tetapi kita juga dapat mengatur method sebagai private/protected, tergantung desain dari kelas kita. Hal terpenting adalah mengatur semua member sebagai private dan mengatur sebagai public/protected ke member yang benar-benar ingin kita ekspose keluar kelas.

Source Code lengkap

#include <iostream>
using namespace std;
class Persegi
{
private:
  double panjang;
  double lebar;
public:
  //getter dari panjang
  double getPanjang(){
  	return panjang;
  }
  //setter dari panjang
  void setPanjang(double p){
  	panjang=p;
  }
  //getter dari lebar
  double getLebar(){
  	return lebar;
  }
  //setter dari lebar
  void setLebar(double l){
  	lebar=l;
  }
  //end of getter setter
  double hitungLuas(){
    return panjang*lebar;
  }
  double hitungKeliling(){
    return 2.0*panjang+lebar;
  }
};

int main(){
  //membuat objek
  Persegi persegi1;
  Persegi persegi2;
  //memberikan nilai ke anggota masing" objek lewat getter dan setternya
  persegi1.setPanjang(5.2);
  persegi1.setLebar(8.2);
  persegi2.setPanjang(4.2);
  persegi2.setLebar(6.6);
  //memanggil method dari masing" objek
  cout << "Luas persegi1 : " << persegi1.hitungLuas() <<endl;
  cout << "Keliling persegi1 : " << persegi1.hitungKeliling() <<endl;
  cout << "Luas persegi2 : " << persegi2.hitungLuas() <<endl;
  cout << "Keliling persegi2 : " << persegi2.hitungKeliling() <<endl;
}

Sekian dari tutorial kali ini. Jika ada kritik,saran dan pertanyaan silahkan post komentar

HAPPY CODING

Referensi

https://www.tutorialspoint.com/cplusplus/cpp_data_encapsulation.htm

http://www.geeksforgeeks.org/encapsulation-in-c/ 

No Responses

Leave a Reply