Uncategorized

Tutorial Pemrograman Berorientasi Obyek dengan C++ : Kelas, Obyek, dan Enkapsulasi (Studi Kasus)

Berikut ini merupakan program yang merupakan contoh penerapan kelas, obyek, dan enkapsulasi. Program ini ditulis dengan bahasa pemrograman g++ pada sistem operasi Linux. Program di bawah ini digunakan untuk menampilkan data mahasiswa berupa nama, alamat, dan usia. Listing code di bawah ini terdiri dari satu kelas yaitu kelas Mahasiswa.

// ------------------------------------------------------
//	Program percobaan kelas, obyek, dan enkapsulasi
//			menggunakan g++
// ------------------------------------------------------
//	Filename : MHS.CPP
// ------------------------------------------------------
#include <stdio.h>
#include <string.h>
// Deklarasi kelas Mahasiswa
class Mahasiswa
{
private:
char nama[25];
char alamat[30];
unsigned int usia;
public:
Mahasiswa (char Nama[], char Alamat[], unsigned int Usia);
void cetak();
void ganti(char Nama[], char Alamat[], unsigned int Usia);
void ambil(char Nama[], char Alamat[], unsigned int &Usia);
};
// Definisi metode-metode kelas Mahasiswa
Mahasiswa::Mahasiswa (char Nama[], char Alamat[], unsigned int Usia)
{
strcpy(nama, Nama);
strcpy(alamat, Alamat);
usia = Usia;
}
void Mahasiswa::cetak()
{
printf( "Data mahasiswa : \n" );
printf( "	Nama	: %s \n", nama);
printf( "	Alamat	: %s \n", alamat);
printf( "	Usia	: %d tahun \n \n",usia);
}
void Mahasiswa::ganti (char Nama[], char Alamat[], unsigned int Usia)
{
strcpy(nama, Nama);
strcpy(alamat, Alamat);
usia=Usia;
}
void Mahasiswa::ambil (char Nama[], char Alamat[], unsigned int &Usia)
{
strcpy(Nama, nama);
strcpy(Alamat, alamat);
Usia=usia;
}
//Program Utama
main()
{
Mahasiswa Andi("Andi Setyawan", "Jl. Diponegoro 25",25);
Mahasiswa Budi("Ahmad Budianto", "Sleman Yogyakarta", 32);
Mahasiswa Seseorang("Nama Anda", "Alamat Anda", 0);
printf( "Program Demonstrasi Kelas, Obyek, dan Enkapsulasi \n");
printf( "---------------------------------------------- \n \n");
printf( "< Data Awal >\n \n");
Andi.cetak();
Budi.cetak();
Seseorang.cetak();
Seseorang.ganti("Imam Wahyudi", "Klaten", 21);
printf( "< Setelah Diganti > \n \n" );
Seseorang.cetak();
char nama[25];
char alamat[30];
unsigned int usia;
Budi.ambil (nama, alamat, usia);
printf( "\n< Data Diambil > \n \n" );
printf( "	Nama	: %s \n", nama);
printf( "	Alamat	: %s \n", alamat);
printf( "	Usia	: %d tahun \n \n",usia);
}

Untuk lebih jelasnya berikut merupakan uraian serta pembahasan tentang masing-masing program di atas yaitu sebagai berikut :

1. Semua baris yang ditandai dengan dua buah tanda slash (//), akan dianggap sebagai baris komentar dan tidak akan berpengaruh pada hasil. Biasanya, baris komentar dipakai oleh Programmer untuk memberikan penjelasan tentang program. Bagian dari program di atas yang menggunakan dua buah tanda slash (//) yaitu :

// ------------------------------------------------------
//	Program percobaan kelas, obyek, dan enkapsulasi
//			menggunakan g++
// ------------------------------------------------------
//	Filename : MHS.CPP
// ------------------------------------------------------
...
// Deklarasi kelas Mahasiswa
...
// Definisi metode-metode kelas Mahasiswa
...
//Program Utama
...

2. Pernyataan yang diawali dengan tanda (#) merupakan pernyataan untuk menyertakan preprocessor. Pernyataan ini bukan untuk dieksekusi. Pernyataan seperti #include <stdio.h> berarti memerintahkan kompiler untuk menyertakan file header stdio.h. Demikian juga pernyataan #include <string.h> berarti memerintahkan kompiler untuk menyertakan file header string.h Dalam file header ini, terdapat beberapa fungsi standar yang dipakai dalam proses input dan output. Seperti misalnya perintah printf yang dipakai dalam program utama merupakan bagian dari file header stdio.h dan perintah strcppy yang dipakai pada pendeklarasian  metode merupakan bagian dari file header string.h. Bagian dari program di atas yang menggunakan dua buah tanda (#) yaitu :

...
#include <stdio.h>
#include <string.h>
...

3. Untuk menyatakan suatu kelas dalam penulisan program berorientasi obyek digunakan fungsi class. Misalnya untuk membuat kelas dengan nama Mahasiswa, maka digunakan perintah class Mahasiswa. Selanjutnya untuk membuat suatu bingkai fungsi, sintaks formalnya ditulis diantara tanda kurung kurawal {…} seperti pada penulisan program di atas. Selain itu untuk memisahkan satu baris perintah dengan perintah lainnya maka di akhir penulisan suatu baris perintah diakhiri dengan tanda titik koma (;).

… 
class Mahasiswa
{
...;
};

4. Pada kelas Mahasiswa di atas terdapat dua sifat akses hak anggota kelas yaitu private dan public seperti terlihat pada ungkapan berikut :

{
private:
char nama[25];
char alamat[30];
unsigned int usia;
public:
Mahasiswa (char Nama[], char Alamat[], unsigned int Usia);
void cetak();
void ganti(char Nama[], char Alamat[], unsigned int Usia);
void ambil(char Nama[], char Alamat[], unsigned int &Usia);
};

Pada ungkapan di atas anggota kelas Mahasiswa yang mempunyai hak akses private yaitu variabel nama, alamat, dan usia. Hak akses private berarti data dan metode dalam blok private hanya dapat diakses oleh metode-metode dalam kelas Mahasiswa, dan tidak dapat diakses dari luar kelas tersebut. Ungkapan char dan unsigned int menyatakan tipe data yang dikandung masing-masing variabel. Char digunakan untuk menyatakan tipe data berupa karakter yang tidak dapat dilakukan perhitungan, sedangkan unsigned int merupakan tipe data bilangan integer (bulat) yang tidak bertanda. Tanda kurung siku […] digunakan untuk menyatakan panjang karakter tipe data char.

Ungkapan di atas juga menyatakan bahwa kelas Mahasiswa juga mempunyai hak akses public terhadap variabel-variabel seperti Mahasiswa, cetak, ganti, dan ambil. Tipe data void diartikan sebagai variabel tanpa tipe data dan tanpa pengembalian nilai. Sintaks untuk penggunaan tipe data void ini yaitu :

void variabel (tipedata1 variabel1, tipedata2 variabel2, …)

5. Berikut ini merupakan definisi metode-metode untuk kelas Mahasiswa :

…
Mahasiswa::Mahasiswa (char Nama[], char Alamat[], unsigned int Usia)
{
strcpy(nama, Nama);
strcpy(alamat, Alamat);
usia = Usia;
}
void Mahasiswa::cetak()
{
printf( "Data mahasiswa : \n" );
printf( "	Nama	: %s \n", nama);
printf( "	Alamat	: %s \n", alamat);
printf( "	Usia	: %d tahun \n \n",usia);
}
void Mahasiswa::ganti (char Nama[], char Alamat[], unsigned int Usia)
{
strcpy(nama, Nama);
strcpy(alamat, Alamat);
usia=Usia;
}
void Mahasiswa::ambil (char Nama[], char Alamat[], unsigned int &Usia)
{
strcpy(Nama, nama);
strcpy(Alamat, alamat);
Usia=usia;
}
...

Pada program di atas terdapat 4 metode dimana setiap metode mempunyai deklarasi metode dan method body masing-masing. Metode-metode tersebut yaitu Mahasiswa::Mahasiswa, Mahasiswa::cetak, Mahasiswa::ganti, dan Mahasiswa::ambil. Deklarasi metode ditulis sebelum method body. Method body ditulis setelah pendeklarasian metode, ditulis diantara tanda kurung kurawal ({…}). Bentuk  Mahasiswa::cetak  menyatakan bahwa metode tersebut berada pada jangkauan akses cetak. Bagian deklarasi metode yang ditulis dalam tanda kurung (…) disebut sebagai argument/parameter. Setiap fungsi menghasilkan suatu nilai dengan tipe data tertentu. Apabila terdapat suatu fungsi yang tidak menghasilkan suatu nilai apapun maka bagian return type ini diganti dengan void.

Strcpy digunakan untuk menyalin suatu data karakter dari satu variabel ke variabel lain. Proses penyalinan string tersebut akan berakhir setelah karakter bernilai NULL. Misal ungkapan strcpy(nama, Nama)berarti variabel Nama akan disalin (dicopy) ke variabel nama.

Printf digunakan untuk menghasilkan output yang akan ditampilkan ke layar. Misal dalam program di atas terdapat ungkapan printf( ”   Nama : %s \n”, nama); berarti isi dari variabel nama akan ditampilkan sesuai dengan format yang berada di tanda (“…”). %s merupakan suatu format yang akan menampilkan karakter string. Sedangkan \n merupakan format penulisan ganti baris.

Ungkapan yang berbentuk seperti Usia=usia berarti bahwa isi variabel usia dimasukkan ke dalam variabel Usia. Kemudian pada baris program di atas juga terdapat ungkapan &Usia berarti bahwa variabel tersebut memberikan referensi terhadap variabel Usia.

6. Program utama di atas ditandai dengan sintaks main() yang merupakan suatu inisialisasi terhadap program utama untuk dapat menghasilkan output dari keseluruhan program yang terbagi atas beberapa kelas dan metode-metode. Untuk menuliskan fungsi-fungsi maupun prosedur program utama tersebut diawali dan diakhiri dengan tanda kurung kurawal.

…
Mahasiswa Andi("Andi Setyawan", "Jl. Diponegoro 25",25);
Mahasiswa Budi("Ahmad Budianto", "Sleman Yogyakarta", 32);
Mahasiswa Seseorang("Nama Anda", "Alamat Anda", 0);
...

Baris-baris program di atas digunakan untuk memberikan nilai input data mahasiswa untuk kelas Mahasiswa. Isi data mahasiswa yang terdiri dari secara berurutan nama, alamat, dan usia di atas ditulis diantara tanda petik dua dan dipisahkan dengan tanda koma. Selanjutnya keseluruhan masing-masing input data untuk mahasiswa yang berbeda dipisahkan dengan tanda titik sesuai dengan aturan sintaks penulisan program.

Untuk mengeluarkan hasil input data mahasiswa di atas maka digunakan perintah berikut :

…
printf( "Program Demonstrasi Kelas, Obyek, dan Enkapsulasi \n");
printf( "---------------------------------------------- \n \n");
printf( "< Data Awal >\n \n");
Andi.cetak();
Budi.cetak();
Seseorang.cetak();
…

Dalam bahasa pemrograman C++ ungkapan yang berbentuk seperti Andi.cetak() digunakan untuk menampilkan (memberikan) hasil output data mahasiswa sesuai dengan prosedur metode cetak.

Demikian juga untuk ungkapan berikut ini yang berarti bahwa data mahasiswa baru akan ditampilkan sesuai dengan prosedur metode ganti, dimana metode ganti ini mempunyai prosedur untuk mengganti data mahasiswa tertentu dengan data mahasiswa baru dan dimasukkan ke dalam variabel seseorang. Untuk menampilkan kembali hasil penggantian data tersebut maka digunakan perintah Seseorang.cetak();.

...
Seseorang.ganti("Imam Wahyudi", "Klaten", 21);
printf( "< Setelah Diganti > \n \n" );
Seseorang.cetak();
…

Selanjutnya pada program utama juga terdapat ungkapan sebagai berikut :

…
char nama[25];
char alamat[30];
unsigned int usia;
Budi.ambil (nama, alamat, usia);
...

Ungkapan di atas berfungsi untuk mengambil atau memanggil salah satu data mahasiswa. Pada program di atas yang dipanggil adalah data mahasiswa milik Budi yang terdiri atas nama, alamat, dan usia. Pemanggilan data tersebut cukup dituliskan dengan perintah Budi.ambil (nama, alamat, usia);, menggunakan metode ambil. Tipe variabel-variabel yang diperlukan harus dideklarasikan terlebih dahulu.

Selanjutnya melalui perintah-perintah di atas selanjutnya data mahasiswa dapat ditampilkan ke layar sesuai dengan format berikut. Fungsi dan sintaks penulisan baris program di bawah ini sama dengan pembahasan sebelumnya.

...
printf( "\n< Data Diambil > \n \n" );
printf( "	Nama	: %s \n", nama);
printf( "	Alamat	: %s \n", alamat);
printf( "	Usia	: %d tahun \n \n",usia);
…

 

Program di atas selanjutnya disimpan dengan nama MHS.CPP pada folder yang sudah ditentukan. Untuk meng-compile sebuah file yang berisikan source code C++ menggunakan g++, digunakan perintah g++ di dalam shell Unix. Untuk meng-compile source code yang disimpan dengan nama MHS.CPP digunakan perintah ~$ g++ MHS.CPP .Perintah tersebut akan meng-compile MHS.CPP menggunakan compiler g++ menjadi sebuah file executable (file yang dapat dieksekusi/dijalankan) bernama a.out. Dengan demikian untuk menampilkan hasil eksekusi program yang telah dibuat pada notepad digunakan perintah ~$ ./a.out. Hasil pemanggilan dan eksekusi program di atas yang tampak pada layar yaitu sebagai berikut :

praktikum@komputer08:~$ g++ MHS.CPP
praktikum@komputer08:~$ ./a.out
Program Demonstrasi Kelas, Obyek, dan Enkapsulasi
----------------------------------------------
< Data Awal >
Data mahasiswa :
Nama    : Andi Setyawan
Alamat  : Jl. Diponegoro 25
Usia    : 25 tahun
Data mahasiswa :
Nama    : Ahmad Budianto
Alamat  : Sleman Yogyakarta
Usia    : 32 tahun
Data mahasiswa :
Nama    : Nama Anda
Alamat  : Alamat Anda
Usia    : 0 tahun
< Setelah Diganti >
Data mahasiswa :
Nama    : Imam Wahyudi
Alamat  : Klaten
Usia    : 21 tahun
< Data Diambil >
Nama    : Ahmad Budianto
Alamat  : Sleman Yogyakarta
Usia    : 32 tahun