• Tidak ada hasil yang ditemukan

Pewarisan Sifat Objek

Dalam dokumen LSP Telematika. Cover (Halaman 76-82)

BAB IV Pemrograman Berorientasi Objek

4.3 Pewarisan Sifat Objek

class PROGRAMMER: public KARYAWAN { public:

void Bekerja() {

cout<<”Bekerja dengan membuat program di komputer”; cout<<end1;

} };

class GURU: public KARYAWAN { public:

void Bekerja() {

cout<<”Bekerja mengajar di depan kelas”; cout<<end1

} };

// Fungsi utama int main() {

// Melakukan instansiasi terhadap kelas KARYAWAN KARYAWAN A; // salah, tidak diizinkan oleh karyawan // Melakukan instansiasi terhadap kelas PROGRAMMER

PROGRAMMER B;

// Melakukan instansiasi terhadap kelas GURU

GURU C;

return 0 }

4.3 Pewarisan Sifat Objek

Salah satu ciri dari OOP, seperti yang telah disebut sebelumnya, adalah kemampuan suatu objek atau kelas untuk mewariskan sifat-sifat yang terdapat di dalamnya ke kelas turunannya. Hal ini dinamakan dengan

inheritance.

Kelas Dasar dan Kelas Turunan

Kelas dasar yang dimaksud di sini adalah sebuah kelas yang akan dijadikan sebagai induk dari kelas lain. Kelas dasar ini masih lebih dikenal dengan

istilah dalam bahasa asing yaitu base class. Sedangkan kelas baru yang merupakan hasil dari proses penurunan tersebut disebut dengan kelas turunan, atau sering juga diebut dengan derived class.

Dalam program, kelas dapat dijadikan sebagai kelas dasar (induk) untuk meudian diturunkan menjadi kelas-kelas selanjutnya. Misalnya terdapat kelas A yang diturunkan menjadi kelas B, selanjutnya kelas B diturunkan menjadi kelas C, begitu seterusnya. Disini, kelas B dan kelas C tentu akan memiliki sifat-sifat yang terdapat pada kelas A. Begitu juga kelas C, pasti akan mewarisi sifat-sifat yang terdapat pada kelas B.

Sintaks yang umum dipakai untuk membuat suatu kelas turunan adalah sebagai berikut:

Berikut ini adalah contoh program yang melakukan proses penurunan, dimana penurunan dilakukan dua kali seperti penjelasan di atas. Pada program ini kita akan melihat pewarisan dari sifat yang dimiliki kelas induk oleh kelas turunan.

#include<iostream.h>

//membuat kelas dasar dengan nama Induk class Induk{ int x; public: void SetX(int xx){ x = xx; } int GetX(){ return x; } };

//membuat kelas turunan dari kelas Induk dengan nama Turunan1 class Turunan1; public Induk{

int y; public:

void SetY(int yy){ y = yy;

}

int GetY(){

class nama_kelas_turunan: hak_akses nama_kelas_dasar{ //data-data dan fungsi-fungsi

… }

return y; }

};

//membuat kelas turunan dari kelas Induk dengan nama Turunan2 class Turunan2; public Turunan1{

int z; public: void SetZ(int zz){ z = zz; } int GetZ(){ return z; } }; //fungsi utama int main(){

//melakukan instansiasi terhadap kelas Turunan2 Turunan2 A;

//melakukan pengesetan nilai x,y,z melalui kelas Turunan2 A.SetX(20);

A.SetY(30); A.SetZ(40);

<<A.GetX();

cout<<”Nilai y yang dipanggil dari kelas Turunan2:” <<A.GetY(); cout<<”Nilai z yang dipanggil dari kelas Turunan2:” <<A.GetZ();

return 0; }

Hasil yang akan diberikan dari program di atas adalah sebagai berikut:

Hasil di atas menunjukkan bahwa kelas Turunan2 akan memiliki fungsi-fungsi yang dimiliki oleh kelas induknya (kelas Turunan1), yaitu fungsi SetY dan GetY. Namun perlu diperhatikan, di sini kelas Turunan1 adalah turunan dari kelas Induk, maka dari itu secara otomatis kelas Turunan2 juga akan memiliki fungsi-fungsi yang dimiliki oleh kelas Induk, yaitu fungsi SetX dan GetX. Walaupun demikian, sebuah kelas turunan tetap tidak dapat mewarisi data atau fungsi-fungsi yang bersifat private pada kelas induknya.

Hak Akses pada Proses Pewarisan

Dalam proses penurunan sebuah kelas, kita harus benar-benar pandai dalam memberikan hak akses data atau fungsi terhadap kelas turunan. Berikut ini

Nilai x yang dipanggil dari kelas Turunan2: 20 Nilai y yang dipanggil dari kelas Turunan2: 30 Nilai z yang dipanggil dari kelas Turunan2: 40

hal-hal yang perlu Anda ketahui dalam membuat sebuah kelas turunan. Apabila kelas diturunkan sebagai public dari kelas induknya, maka:

o Bagian public yang terdapat pada kelas induk tetap akan menjadi bagian

public pada kelas turunannya.

o Bagian protected yang terdapat pada kelas induk tetap akan menjadi bagian protected pada kelas turunannya.

o Bagian private yang terdapat pada kelas induk tetap tidak dapat diakses oleh kelas turunannya.

Apabila kelas diturunkan sebagai private dari kelas induknya, maka:

o Bagian public yang terdapat pada kelas induk tetap akan menjadi bagian

private pada kelas turunannya.

o Bagian private yang terdapat pada kelas induk tetap akan menjadi bagian

protected pada kelas turunannya.

o Bagian private yang terdapat pada kelas induk tetap tidak dapat diakses oleh kelas turunannya.

Jika kita lihat program di atas, bagian public dari kelas induk (yaitu fungsi SetX dan GetX) tetap akan menjadi bagian public pada kelas Turunan1, sedangkan variabel X yang terdapat pada bagian private tetap tidak dapat diakses oleh kelas Turunan1. Sampai disini, berarti kelas Turunan1 telah mempunyai empat buah fungsi yang bersifat public (yaitu fungsi SetY. GetY, SetX, GetX). Selanjutnya kelas Turunan1 akan diturunkan lagi secara public terhadap kelas Turunan2. Hal ini menyebabkan bagian public yang terdapat pda kelas Turunan1 akan diwariskan semuanya kepada kelas Turunan2 sehingga kelas Turunan2, akan mempunyai enam buah fungsi yang bersifat

public (yaitu fungsi SetZ, GetZ, SetY. GetY, SetX, GetX). Itulah sebabnya

pada program di atas kita dapat mengakses fungsi-fungsi yang terdapat pada kelas Induk dan kelas Turunan1 melalui suatu objek (instance) dari kelas Turunan2.

Multiple Inheritance

Salah satu kelebihan dari C++ dibandingkan bahasa-bahasa pemrograman lain yang juga mendukung OOP adalah karena C++ mendukung adanya

multiple inheritance. Adapun multiple inheritance yang dimaksud disini adalah

dua kelas induk atau lebih. Sebagai contoh, kita memiliki kelas A dan B yang masing-masing berdiri sendiri. Kemudian kita ingin membuat kelas C yang merupakan turunan dari kelas A dan B. Dengan demikian, kelas C tentu akan mewarisi sifat-sifat yang terdapat pada kelas A dan kelas B.

Sebenarnya kita bisa juga melakukannya dengan proses yang berulang, yaitu dengan menurunkan kelas A menjadi kelas B, kemudian baru menurunkan kelas B menjadi kelas C. Namun hal ini tentu akan memakan waktu yang cukup lama dibandingkan kita menurunkannya dari beberapa induk secara langsung.

Adapun bentuk umum dari pembuatan kelas melalui proses multiple

inheritance adalah sebagai berikut:

/* membuat kelas dengan nama Induk2 yang tidak berkaitan dengan kelas Induk1 */

class Induk2{ int y; public:

void SetY(int yy){ y = yy; } class nama_kelas_turunan: hak_akses nama_kelas_induk1, hak_akses nama_kelas_induk2, hak_akses nama_kelas_indukN, … {

//data-data dan fungsi-fungsi …

};

#include<iostream.h>

//membuat kelas dasar dengan nama Induk1 class Induk1{ int x; public: void SetX(int xx){ x = xx; } int GetX(){ return x; }

int GetY(){ return y; }

};

// membuat kelas Turunan dari kelas Induk1 dan Induk2 class Turunan; public Induk1, public Induk2{

int z; public: void SetZ(int zz){ z = zz; } int GetZ(){ return z; } }; //fungsi utama int main(){

//melakukan instansiasi terhadap kelas Turunan Turunan A;

//memanggil fungsi-fungsi yang terdapat pada kelas Turunan A.SetX(100);

A.SetY(200); A.SetZ(300);

//menampilkan nilai yang diset cout<<”Nilai x :” <<A.GetX(); cout<<”Nilai y :” <<A.GetY(); cout<<”Nilai z :” <<A.GetZ();

return 0; }

Apabila program dijalankan, program akan memberikan hasil seperti di bawah ini:

Seperti yang telah dijelaskan di atas bahwa kelas Turunan akan memiliki fungsi-fungsi yang terdapat di bagian public atau protected pada kelas-kelas induknya. Pada contoh ini, fungsi-fungsi yang akan dimiliki kelas Turunan adalah fungsi SetZ, GetZ, SetY, GetY, SetX, dan GetX.

Nilai x : 100 Nilai y : 200 Nilai z : 300

Dalam dokumen LSP Telematika. Cover (Halaman 76-82)