download

Matakuliah
Tahun
Versi
: T0044/Pemrograman Berorientasi Obyek
: 2005
: 1.0
Pertemuan 10
Inheritance Lanjutan
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Membuat diagram / skema class
berdasarkan konsep Inheritance
2
Outline Materi
• Multiple Inheritance
• Class Diagram Hierarchy
3
Multiple Inheritance
• Pewarisan Ganda (Multiple Inheritance) adalah sebuah
klas yang diturunkan dari beberapa klas induk.
• Klas turunan tersebut dapat mewarisi karakteristik yang
dimiliki oleh klas-klas induknya.
• Beberapa bentuk hirarki klas yang merupakan contoh
pewarisan ganda (multiple inheritance) dapat dilihat
seperti di bawah ini:
4
C++ Syntax for multiple inheritance
• Setiap klas induk yang diwarisi dipisahkan
dengan tanda koma, dan masing-masing
klas induk harus didahului dengan jenis
akses (private, protected, public).
class Turunan : jenis_akses Induk1, jenis_akses Induk2
{ <Anggota_klas> };
5
Contoh Program Multiple Inheritance
class Pegawai
{ protected:
char NIP[10], Nama[30];
};
class Pendidikan
{ protected:
char Tingkat[20], Sekolah[80];
};
class Manajer : public Pegawai, public Pendidikan
{ private:
char Titel[20], Telpon[20];
};
class Peneliti : public Pegawai, public Pendidikan
{ private:
int Publikasi;
};
class Satpam : public Pegawai
{
};
6
Program - Multiple Inheritance
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
class Pegawai
{ protected:
char NIP[11], Nama[40];
void Masuk_Data ();
void Tampil_Data ();
};
class Pendidikan
{protected: char Tingkat[20], Sekolah[80];
void Masuk_Pendidikan ();
void Tampil_Pendidikan ();
};
class Manager : public Pegawai, public
Pendidikan
{ private:
char Titel[20], Telpon[20];
public:
void Masuk_Data ();
void Tampil_Data ();
};
class Peneliti : public Pegawai, public
Pendidikan
{ private:
int Publikasi;
public:
void Masuk_Data ();
void Tampil_Data ();
};
class Satpam : public Pegawai
{ public:
void Masuk_Data () { Pegawai :: Masuk_Data
(); }
void Tampil_Data () { Pegawai :: Tampil_Data
(); }
};
void Pegawai :: Masuk_Data() {
cout << "Masukkan Nomor Induk Pegawai : "; cin
>> NIP;
cout << "Masukkan Nama Pegawai : ";
gets( Nama );
}
void Pegawai :: Tampil_Data() {
cout << "Nomor Induk Pegawai = " << NIP <<
endl;
cout << "Nama Pegawai = " << Nama << endl; 7
}
Program - Multiple Inheritance (Lanjutan)
void Pendidikan :: Masuk_Pendidikan() {
cout << "Masukkan Tingkat Pendidikan : "; gets(
Tingkat );
cout << "Masukkan Nama Sekolah : "; gets( Sekolah
);
}
void Pendidikan :: Tampil_Pendidikan() {
cout << "Tingkat Pendidikan = " << Tingkat << endl;
cout << "Nama Sekolah = " << Sekolah << endl;
}
void Manager :: Masuk_Data () {
Pegawai :: Masuk_Data ();
Pendidikan :: Masuk_Pendidikan ();
cout << "Masukkan Titel : "; gets( Titel );
cout << "Masukkan Nomor Telpon : "; gets( Telpon );
}
void Manager :: Tampil_Data () {
Pegawai :: Tampil_Data ();
Pendidikan :: Tampil_Pendidikan ();
cout << "Titel = " << Titel << endl;
cout << "Telpon = " << Telpon << endl;
}
void Peneliti :: Masuk_Data () {
Pegawai :: Masuk_Data ();
Pendidikan :: Masuk_Pendidikan ();
cout << "Masukkan Nomor Publikasi : "; cin >>
Publikasi;
}
void Peneliti :: Tampil_Data () {
Pegawai :: Tampil_Data ();
Pendidikan :: Tampil_Pendidikan ();
cout << "Nomor Publikasi = " << Publikasi << endl;
}
void main()
{
Manager M1, M2;
Peneliti P1;
Satpam S1;
// memasukan data
cout << "\nMasukkan data manager 1 : \n";
M1.Masuk_Data();
cout << "\nMasukkan data manager 2 : \n";
M2.Masuk_Data();
cout << "\nMasukkan data peneliti 1 : \n";
P1.Masuk_Data();
cout << "\nMasukkan data satpam 1 : \n";
S1.Masuk_Data();
// menampilkan data
cout << "\nData dari manager 1 = ";
M1.Tampil_Data();
cout << "\nData dari manager 2 = ";
M2.Tampil_Data();
cout << "\nData dari peneliti 1 = ";
P1.Tampil_Data();
cout << "\nData dari satpam 1 = ";
S1.Tampil_Data();
getch();
}
8
Konstruktor dan Destructor
Klas Turunan
• Konstruktor untuk klas turunan perlu dibuat untuk melakukan
inisialisasi klas itu sendiri dan klas induknya.
• Jika konstruktor klas induk memiliki parameter (argument), maka
parameter konstruktor klas induk tersebut harus dimasukkan dalam
konstruktor klas turunan.
• Destruktor klas turunan dijalankan dengan urutan berbalikan
dengan urutan konstruktor, yaitu destruktor klas turunan dijalankan
dahulu baru destruktor klas induknya.
• Apabila klas turunan memiliki lebih dari satu klas induk, setelah
menjalankan destruktor klas turunan kemudian destruktor klas induk
terakhir dijalankan sampai destruktor klas induk pertama dijalankan
(sesuai dengan urutan terbalik dari penurunan klas-klas induk di
dalam definisi klas turunan tersebut).
9
Syntax Constructor for Derived
class
konstuktor_turunan (argumen ) : konstruktor_induk1 (argumen ), konstruktor_induk1 (argumen ), …
{ blok_pernyataan; }
Contoh :
class Induk
{ protected: int A;
public: Induk ( int a ) { A = a ; } // konstruktor_Induk
~ Induk ( ) { } // destruktor_Induk
};
class Turunan : public Induk
{ protected: int B;
public: Turunan ( int b ) : Induk ( a ) { } //konstruktor_Turunan
~ Turunan ( ) { } //destruktor_Turunan
};
10
Program – Mekanisme Constructor & Destructor class
Turunan
#include <iostream.h>
#include <conio.h>
class Induk1
{ public:
Induk1 ( )
{ cout << "Konstruktor klas Induk1 dijalankan !. \n"; }
~Induk1 ( )
{ cout << "Destruktor klas Induk1 dijalankan !. \n"; }
};
class Induk2
{ public:
Induk2 ( )
{ cout << "Konstruktor klas Induk2 dijalankan !. \n"; }
~Induk2 ( )
{ cout << "Destruktor klas Induk2 dijalankan !. \n"; }
};
class Anak1 : public Induk1, public Induk2
{ public:
Anak1 ( )
{cout << "Konstruktor klas Anak1 dijalankan !. \n"; }
~Anak1 ( )
{ cout << "Destruktor klas Anak1 dijalankan !. \n"; }
};
class Anak2 : public Induk2, public Induk1
{ public:
Anak2 ( )
{ cout << "Konstruktor klas Anak2 dijalankan !.
\n"; }
~Anak2 ( )
{ cout << "Destruktor klas Anak2 dijalankan !. \n";
}
};
void main ( )
{ //Create objek 'A1' dari klas turunan 'Anak1'
Anak1 A1;
cout << endl;
//Create objek 'A2' dari klas turunan 'Anak2'
Anak2 A2;
getch();
}
11
Program – konstruktor turunan
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
class Kendaraan
{protected:
char Kode[10], Jenis[30];
public:
Kendaraan();
Kendaraan( char *kd, char *jns );
void Tampil_Kendaraan();
};
class Mobil : public Kendaraan {
protected:
char Warna[10];
float Harga;
public:
Mobil() : Kendaraan() { }
Mobil( char *kd, char *jns ) : Kendaraan( kd, jns
){}
void Masuk_Mobil();
void Tampil_Mobil();
};
void Mobil :: Masuk_Mobil()
{ cout << “Masukkan warna mobil : “; cin >> Warna;
cout << “Masukkan harga mobil : “; cin >> Harga;
}
void Mobil :: Tampil_Mobil() {
cout << “Warna mobil : “ << Warna << endl;
printf ( “Harga mobil = Rp. %15.2f \n”, Harga );
}
Kendaraan :: Kendaraan() {
strcpy ( Kode, “P01” );
strcpy ( Jenis, “Mobil Keluarga” );
}
Kendaraan :: Kendaraan( char *kd, char *jns ) {
strcpy ( Kode, kd );
strcpy ( Jenis, jns );
}
void Kendaraan :: Tampil_Kendaraan() {
cout << “\n\n”;
cout << “Kode = “ << Kode << endl;
cout << “Jenis = “ << Jenis << endl;
}
void main()
{ Mobil M1, M2( “A01”, “Mobil Angkot” );
// Memasukkan data
M1.Masuk_Mobil();
M2.Masuk_Mobil();
// Menampilkan data
M1.Tampil_Kendaraan();
M1.Tampil_Mobil();
M2.Tampil_Kendaraan();
M2.Tampil_Mobil();
getch();
}
12
Tugas 10
• Tugas 10A: Mahasiswa membuat
ringkasan tentang multiple inheritance
sesuai petunjuk dosen
• Tugas 10B: Mahasiswa Membuat diagram
class dan mencari output program
inheritance
• Tugas 10C: Mahasiswa membuat program
sederhana dengan Multiple Inheritance
13