20 Januari, 2010

Class

 Konsep kelas dalam C++ ditujukan untuk menciptakan tipe data baru. Sebuah tipe terdiri dari kumpulan bit yang merepresentasikan nilai abstrak dari instansiasi tipe tersebut serta kumpulan operasi terhadap tipe tersebut. Sebagai contoh int adalah sebuah tipe karena memiliki representasi bit dan kumpulan operasi seperti \penambahan dua variabel bertipe int", \perkalian dua variabel bertipe int", dsb.
Dengan cara yang sama, sebuah kelas juga menyediakan sekumpulan operasi (biasanya public) dan sekumpulan data bit (biasanya non-public) yang menyatakan nilai abstrak objek dari kelas tersebut.
Hubungan antara kelas dengan objek dapat dinyatakan dengan analogi berikut:
class vs. object = type vs. variable

Pendeklarasian kelas (terutama fungsi anggotanya) menentukan perilaku objek dalam operasi penciptaan, pemanipulasian, pemusnahan objek dari kelas tersebut. Dalam pemrograman dengan bahasa yang berorientasi objek dapat dilihat adanya peran perancang kelas dan pengguna kelas. Perancang kelas menentukan representasi internal objek yang berasal kelas yang dirancangnya.
Pendeklarasian kelas dilakukan seperti pende_nisian sebuah struktur namun dengan mengganti kata kunci struct dengan class. Kata kunci class dalam C++ dapat dipandang sebagai perluasan dari kata kunci struct, hanya perbedaannya nama kelas (tag-name) dalam C++ sekaligus merupakan tipe baru.

Contoh Sebuah struct yang memiliki prosedur/fungsi
struct Stack { // nama tag "Stack" sekaligus menjadi tipe baru
 /*******************
 * function member *
 *******************/
 void Pop(int&);
 void Push (int);
 int isEmpty();
 // ... definisi fungsi lainnya

 /***************
 * data member *
 ***************/
 int topStack;
 int *data;
 // ... definisi data lainnya
 };

Sebuah kelas memiliki satu atau lebih member (analog dengan _eld pada struct). Ada dua jenis member:
·         Data member, yang merupakan representasi internal dari kelas
·         Function member, kumpulan operasi (service/method) yang dapat diterapkan terhadap objek, seringkali disebut juga sebagai class interface

Setiap _eld yang dimiliki sebuah struct dapat secara bebas diakses dari luar struktur tersebut. Hal ini berbeda dibandingkan dengan pengaksesan terhadap anggota kelas. Hak akses dunia luar terhadap anggota (data dan fungsi) diatur melalui tiga kata kunci private, public, dan protected. Setiap fungsi anggota kelas selalu dapat mengakses data dan fungsi anggota kelas tersebut (dimanapun data tersebut dideklarasikan: private, public, protected). Sedangkan fungsi bukan anggota kelas hanya dapat mengakses anggota yang berada di bagian public. Hak akses terhadap fungsi dan data anggota kelas dinyatakan dalam Tabel dibawah ini.

Wilayah member di deklarasikan
Makna
public
dapat diakses oleh fungsi di luar kelas (fungsi bukan anggota kelas tersebut) dengan menggunakan operator selektor (. atau ->)
private
hanya dapat diakses oleh fungsi anggota kelas tersebut
protected
hanya dapat diakses oleh fungsi anggota kelas tersebut dan fungsi-fungi anggota kelas turunan


Dalam deklarasi \kelas" Stack pada Contoh diatas, semua anggota bersifat public, karena hal ini sesuai dengan sifat sebuah struct. Namun jika, kata kunci \struct" diganti menjadi \class", maka semua anggota otomatis bersifat private.
Dalam contoh tersebut, fungsi-fungsi anggota Pop(), Push(), dsb hanya dideklarasikan namun belum dide_nisikan. Pende_nisian anggota fungsi dapat dilakukan dengan dua cara:
·         Di dalam class body, otomatis menjadi inline function
·         Di luar class body, nama fungsi harus didahului oleh class scope

Contoh dibawah menyajikan deklarasi kelas Stack dengan menggunakan kata kunci class 3
Contoh Deklarasi kelas Stack beserta fungsi anggota
class Stack {
public:
// function member
void Pop(int& ); // deklarasi (prototype)
void Push (int); // deklarasi (prototype)
/*--- pendefinisian di dalam class body ---*/
int isEmpty() {
return topStack == 0;
}
private:
// data member
int topStack; /* posisi yang akan diisi berikutnya */
int *data;
}; // PERHATIKAN TITIK KOMA !!!
// pendefinisian member function Pop di luar
// class body
void Stack::Pop(int& item) {
if (isEmpty()) {
// error message
}
else {
topStack--;
item = data [topStack];
}
} // TIDAK PERLU TITIK KOMA !!!
void Stack::Push (int item) {
if (isFull()) {
// error message
}
else {
data [topStack] = item;
topStack++;
}
}

0 komentar:

Posting Komentar