Uncategorized

Tutorial Pemrograman Berorientasi Obyek dengan C++ : Pewarisan Bertingkat (Studi Kasus)

Dalam pewarisan ini juga bisa terjadi pewarisan bertingkat (multi level inheritance), yaitu pewarisan dimana sebuah kelas turunan juga dapat berasal dari sebuah kelas turunan juga.

class a
{
};
class b : public class a
{
};
class c : public class b
{
};

Dari ilustrasi di atas didapatkan bahwa kelas B merupakan turunan dari kelas A dan kelas C juga merupakan dari kelas B. Proses seperti ini masih dapat berlanjut terus menerus sesuai dengan kebutuhan.

Berikut ini merupakan kode-kode program hasil praktikum yang merupakan salah satu contoh implementasi dari penggunaan konsep pewarisan bertingkat (multilevel inheritance). Program berikut ditulis dengan bahasa pemrograman C++.

 

// ---------------------------------------------
//	Program penerapan pewarisan bertingkat
// 	   menggunakan Turbo C++ versi 3.0
// ---------------------------------------------
//	Filename : PEGAWAI2.CPP
// ---------------------------------------------
# include <iostream.h>
# include <string.h>
class Orang
{
private:
char nama [50];
int usia;
public:
Orang (char *nama, int usia);
void info_orang();
};
class Pegawai : public Orang
{
private:
char bagian[25];
int nomor_pegawai;
public:
Pegawai (char *nama, int usia, char *bagian, int nomor_pegawai);
void info_pegawai();
};
class Manajer : public Pegawai
{
private:
char mobil [30];
public:
Manajer(char *nama, int usia, char *bagian, int nomor_pegawai, char *mobil);
void info_manajer();
};
// Definisi metode-metode
Orang::Orang (char *nama, int usia)
{
strcpy(Orang::nama, nama);
Orang::usia = usia;
}
void Orang::info_orang()
{
cout << "Nama		: " << nama << endl;
cout << "Usia		: " << usia << endl;
}
Pegawai::Pegawai(char *nama, int usia, char *bagian, int nomor_pegawai): Orang(nama, usia)
{
strcpy(Pegawai::bagian, bagian);
Pegawai::nomor_pegawai = nomor_pegawai;
}
void Pegawai::info_pegawai()
{
info_orang();
cout << "Bagian		: " << bagian << endl;
cout << "Nomor Peg. 	: " << nomor_pegawai << endl;
}
Manajer::Manajer (char *nama, int usia, char *bagian, int nomor_pegawai, char *mobil):Pegawai(nama,usia,bagian, nomor_pegawai)
{
strcpy(Manajer::mobil,mobil);
}
void Manajer::info_manajer()
{
info_pegawai();
cout << "Mobil		: " << mobil <<'\n'<<endl;
}
//Program utama
int main()
{
Manajer kabag_edp ("Udin", 35, "EDP", 11885, "Sedan Timor");
kabag_edp.info_manajer();
return 0;
}

Program di atas terdiri dari beberapa kelas yaitu kelas orang, kelas pegawai, dan kelas manajer. Kelas orang merupakan kelas induk dari semua kelas yang ada. Kelas pegawai merupakan kelas turunan dari kelas orang dan kelas manajer merupakan kelas turunan dari kelas pegawai. Inilah yang nantinya disebut sebagai bentuk pewarisan bertingkat.

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

1.      Baris-baris yang diawali dengan dua buah tanda slash (//) dianggap sebagai baris komentar dan tidak akan berpengaruh pada hasil eksekusi program. Baris komentar dipakai oleh Programmer untuk memberikan penjelasan atau keterangan tentang maksud program tersebut. Bagian dari program di atas yang menggunakan dua buah tanda slash (//) yaitu :

// ---------------------------------------------
//	Program penerapan pewarisan bertingkat
// 	   menggunakan Turbo C++ versi 3.0
// ---------------------------------------------
//	Filename : PEGAWAI2.CPP
// ---------------------------------------------
...
// Definisi metode-metode
...
// Program utama
...

2. Pernyataan yang diawali dengan tanda (#) merupakan pernyataan untuk menyertakan preprocessor. Pernyataan ini bukan untuk dieksekusi. Pernyataan seperti #include <iostream.h> berarti memerintahkan kompiler untuk menyertakan file header iostream.h. Dalam file header ini, terdapat beberapa fungsi standar yang dipakai dalam proses input dan output. Seperti misalnya perintah cout dan cin yang dipakai dalam program di atas merupakan bagian dari file header iostream.h.Selain itu, program di atas juga menggunakan preprocessor #include <string.h>. File header ini digunakan untuk melakukan manipulasi data bertipe karakter (char), misalnya fungsi strcpy. Bagian dari program di atas yang menggunakan dua tanda (#) yaitu :

…
# include <iostream.h>
# include <string.h>
…

3. Pada kelas orang (merupakan kelas induk), terdapat ungkapan-ungkapan sebagai berikut :

class Orang
{
private:
char nama [50];
int usia;
public:
Orang (char *nama, int usia);
void info_orang();
};

Pada kelas orang, nama kelas ditulis dengan sintaks class Orang, yang menunjukkan bahwa orang adalah nama suatu kelas. Tampak bahwa terdapat dua buah perubah akses (anggota kelas) yang digunakan pada kelas ini yaitu private dan public. Yang termasuk perubah akses private yaitu variabel nama (bertipe data karakter (char) dengan panjang maksimum 50 karakter) dan usia (bertipe data bilangan bulat / integer).Yang termasuk perubah akses public yaitu metode Orang dan info_orang (bertipe void). Suatu fungsi yang tidak menghasilkan suatu nilai apapun maka bagian return type ini diganti dengan void . Definisi atas metode-metode tersebut akan dipaparkan di bagian bawah.

4. Pada kelas pegawai (merupakan kelas turunan dari kelas orang), terdapat ungkapan-ungkapan sebagai berikut :

class Pegawai : public Orang
{
private:
char bagian[25];
int nomor_pegawai;
public:
Pegawai (char *nama, int usia, char *bagian, int nomor_pegawai);
void info_pegawai();
};

Pada kelas pegawai di atas, nama kelas ditulis dengan sintaks class Pegawai, yang menunjukkan bahwa pegawai adalah nama suatu kelas. Pernyataan class Pegawai : public Orang menunjukkan bahwa pada kelas ini akan digunakan data dan fungsi yang dapat diakses secara public pada kelas orang (kelas induk).  Tampak bahwa terdapat dua buah perubah akses (anggota kelas) yang digunakan pada kelas ini yaitu private dan public. Yang termasuk perubah akses private yaitu variabel bagian (bertipe data karakter (char) dengan panjang maksimum 25 karakter) dan nomor_pegawai (bertipe data bilangan bulat / integer). Variabel bagian dan  nomor_pegawai termasuk variabel yang bersifat khusus (private) yang membedakan dengan kelas induknya.Yang termasuk perubah akses public yaitu metode Pegawai dan info_pegawai (bertipe void). Suatu fungsi yang tidak menghasilkan suatu nilai apapun maka bagian return type ini diganti dengan void . Definisi atas metode-metode tersebut akan dipaparkan di bagian bawah.

5. Pada kelas manajer (merupakan kelas turunan dari kelas pegawai), terdapat ungkapan-ungkapan sebagai berikut :

class Manajer : public Pegawai
{
private:
char mobil [30];
public:
Manajer(char *nama, int usia, char *bagian, int nomor_pegawai,char *mobil);
void info_manajer();
};

Pada kelas manajer di atas, nama kelas ditulis dengan sintaks class Manajer, yang menunjukkan bahwa manajer adalah nama suatu kelas. Pernyataan class Manajer : public Pegawai menunjukkan bahwa pada kelas ini akan digunakan data dan fungsi yang dapat diakses secara public pada kelas Pegawai (kelas induk dari kelas manajer).  Tampak bahwa terdapat dua buah perubah akses (anggota kelas) yang digunakan pada kelas ini yaitu private dan public. Yang termasuk perubah akses private yaitu variabel mobil (bertipe data karakter (char) dengan panjang maksimum 30 karakter). Variabel mobil termasuk variabel yang bersifat khusus (private) yang membedakan dengan kelas induknya.Yang termasuk perubah akses public yaitu metode Manajer dan info_manajer (bertipe void). Suatu fungsi yang tidak menghasilkan suatu nilai apapun maka bagian return type ini diganti dengan void . Definisi atas metode-metode tersebut akan dipaparkan di bagian bawah.

6. Berikut ini merupakan definisi metode-metode pada kelas Orang :

Orang::Orang (char *nama, int usia)
{
strcpy(Orang::nama, nama);
Orang::usia = usia;
}
void Orang::info_orang()
{
cout << "Nama		: " << nama << endl;
cout << "Usia		: " << usia << endl;
}

Pernyataan seperti yang digunakan untuk mendefinisikan nama metode Orang yaitu  Orang::Orang (char *nama, int usia)artinya pada metode ini akan digunakan operasi yang memuat variabel nama (pointer, karena bertipe char) dan variabel usia yang bertipe integer (bilangan bulat). Kemudian pernyataan seperti strcpy(Orang::nama, nama); merupakan suatu perintah melakukan copy string atas isi variabel pointer nama obyek sebagai isi variabel nama dalam kelas Orang. Pernyataan Orang::usia = usia; digunakan untuk melakukan  perintah memasukkan isi variabel usia dalam kelas Orang yang sama dengan isi variabel usia suatu obyek.

Metode void Orang yang diinisialisasi sebagai info_orang()berfungsi untuk menampilkan Nama dan Usia suatu obyek sebagai output ke layar. Fungsi perintah cout secara umum sama dengan fungsi yang dijelaskan dalam analisis program pertama di atas.

7. Berikut ini merupakan definisi metode-metode pada kelas Pegawai :

Pegawai::Pegawai(char *nama, int usia, char *bagian, int nomor_pegawai): Orang(nama, usia)
{
strcpy(Pegawai::bagian, bagian);
Pegawai::nomor_pegawai = nomor_pegawai;
}
void Pegawai::info_pegawai()
{
info_orang();
cout << "Bagian		: " << bagian << endl;
cout << "Nomor Peg. 	: " << nomor_pegawai << endl;
}

Pernyataan seperti yang digunakan untuk mendefinisikan nama metode Pegawai di atas mempunyai fungsi yang sama seperti bentuk metode pada kelas Orang. Kemudian pernyataan seperti strcpy(Pegawai::bagian, bagian); merupakan suatu perintah melakukan copy string atas isi variabel pointer bagian obyek sebagai isi variabel bagian dalam kelas Pegawai. Pernyataan Pegawai::nomor_pegawai = nomor_pegawai; digunakan untuk melakukan  perintah memasukkan isi variabel nomor_pegawai dalam kelas Pegawai yang sama dengan isi variabel nomor_pegawai suatu obyek.

Metode void Pegawai yang diinisialisasi sebagai info_pegawai()berfungsi untuk menampilkan Nama (terdapat dalam kelas Orang), Usia (terdapat dalam kelas Orang), Bagian, dan Nomor Pegawai  suatu obyek sebagai output ke layar. Fungsi perintah cout secara umum sama dengan fungsi yang dijelaskan pada analisis program pertama di atas.

8. Berikut ini merupakan definisi metode-metode pada kelas Manajer :

Manajer::Manajer (char *nama, int usia, char *bagian, int nomor_pegawai, char *mobil):Pegawai(nama,usia,bagian, nomor_pegawai)
{
strcpy(Manajer::mobil,mobil);
}
void Manajer::info_manajer()
{
info_pegawai();
cout << "Mobil		: " << mobil <<'\n'<<endl;
}

Pernyataan seperti yang digunakan untuk mendefinisikan nama metode Manajer di atas mempunyai fungsi yang sama seperti bentuk metode pada kelas Orang. Kemudian pernyataan seperti strcpy(Manajer::mobil,mobil); merupakan suatu perintah melakukan copy string atas isi variabel pointer mobil obyek sebagai isi variabel mobil dalam kelas Manajer.

Metode void Manajer yang diinisialisasi sebagai info_manajer()berfungsi untuk menampilkan Nama (terdapat dalam kelas Orang), Usia (terdapat dalam kelas Orang), Bagian (terdapat dalam kelas Pegawai), Nomor Pegawai(terdapat dalam kelas Pegawai), dan Mobil  suatu obyek sebagai output ke layar. Fungsi perintah cout secara umum sama dengan fungsi yang dijelaskan pada analisis program pertama di atas.

9. Bagian program utama dalam keseluruhan program di atas yaitu sebagai berikut :

int main()
{
Manajer kabag_edp ("Udin", 35, "EDP", 11885, "Sedan Timor");
kabag_edp.info_manajer();
return 0;
}

Penulisan listing program untuk bagian program utama selalu diawali dengan fungsi int main (). Fungsi dari program utama di atas yaitu untuk menentukan prosedur dan langkah eksekusi terhadap masing-masing kelas yang telah dibuat. Pada program utama di atas ternyata prosedur yang digunakan untuk menampilkan output ke layar yaitu tanpa meminta input dari user, artinya obyek yang dimasukkan sudah ditentukan terlebih dahulu dalam program utama. Tampak bahwa program utama tersebut akan menampilkan obyek-obyek yang memuat metode-metode dalam kelas Manajer.

11. Tanda kurung kurawal ({…}) digunakan untuk menandai bagian suatu isi kelas, bagian isi metode-metode di dalam kelas (behaviour), serta bagian isi program utama.

12. Tanda titik koma (;) digunakan untuk menandai akhir penulisan data dan fungsi dalam program. Tanda titik koma tidak digunakan untuk mengakhiri nama kelas, nama metode, nama perubah akses, serta inisialisasi program utama.

Hasil eksekusi terhadap program di atas yaitu sebagai berikut :

praktikum@komputer07:~$ g++ PEGAWAI2.CPP
In file included from /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/backward/iostream.h:31,
from PEGAWAI2.CPP:8:
/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for  the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
praktikum@komputer07:~$ ./a.out
Nama            	: Udin
Usia            	: 35
Bagian          	: EDP
Nomor Peg.      	: 11885
Mobil           	: Sedan Timor