Pertemuan 10 Inheritance Lanjutan Matakuliah : T0044/Pemrograman Berorientasi Obyek Tahun : 2005 Versi : 1.0 Pertemuan 10 Inheritance Lanjutan
Membuat diagram / skema class berdasarkan konsep Inheritance Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Membuat diagram / skema class berdasarkan konsep Inheritance
Class Diagram Hierarchy Outline Materi Multiple Inheritance Class Diagram Hierarchy
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:
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> };
Contoh Program Multiple Inheritance class Pegawai { protected: char NIP[10], Nama[30]; }; class Pendidikan char Tingkat[20], Sekolah[80]; class Manajer : public Pegawai, public Pendidikan { private: char Titel[20], Telpon[20]; class Peneliti : public Pegawai, public Pendidikan int Publikasi; class Satpam : public Pegawai { };
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: 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;
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 () { cout << "Masukkan Nomor Publikasi : "; cin >> Publikasi; void Peneliti :: Tampil_Data () { 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(); }
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).
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
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 Induk2 ( ) { cout << "Konstruktor klas Induk2 dijalankan !. \n"; } ~Induk2 ( ) { cout << "Destruktor klas Induk2 dijalankan !. \n"; } class Anak1 : public Induk1, public Induk2 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(); }
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; 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();
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