Bahasa Pemrograman II Modul 2 : Inheritance dan Interface Tujuan Praktikum Setelah praktikum modul ini, praktikan diharapkan : - Mengetahui pengertian dan tujuan inheritance dan interface pada bahaasa pemrograman C#. - Mengetahui maksud dan implementasi penggunaan inheritance dan interface.
Dasar Teori Pewarisan (inheritance) adalah kemampuan class untuk menurunkan sifat-sifat ke class turunannya. Dalam inheritance terjadi pewarisan properti dan perilaku dari kelas induk ke kelas anak. Misalnya class turunan dapat menggunakan properti dan method yang ada pada class induknya. Semua properti yang dimiliki oleh kelas induk akan dimiliki oleh kelas anak dengan sendirinya sehingga terjadi “Code Sharing” antara class induk dan class anak. Kelas yang dijadikan kelas induk merupakan kelas yang general sedangkan kelas anak merupakan kelas induk yang memiliki sesuatu yang spesifik. Dalam hal ini suatu class induk/parent disebut sebagai super class dan anak/child disebut sebagai sub class. Subclass didapatkan dari proses spesialisasi superclass.
Gambar 1 Hierarki Class
Struktur pewarisan:
class :
Berdasarkan struktur pewaridan diatas, pembuatan class melalui inheritance pada C# menggunakan operator “:”.
Misalkan kita membuat class mobil, motor dan kereta api dari class kendaraan. Kendaraan Mobil
Motor
Kereta Api
Berdasarkan hierarki class di atas, yang menjadi superclass adalah kendaraan. Mobil,motor dan kereta api adalah subclass dari kendaraan. Contoh diatas memperlihatkan bahwa class mobil, motor dan kereta api dibuat melalui proses inheritance class kendaraan. Inisialisai objek dari kelas turunan sama dengan inisialasi objek pada umunya. mobil m=
new mobil();
motor mo = new motor(); kereta_api ka = new kereta_api();
Inheritance akan menciptakan hirarki kelas sehingga tercipta relasi antar kelas. Kelas yang menjadi kelas induk pertama sekali disebut dengan kelas root. Kelas ini berdiri dengan sendirinya (tidak diturunkan dari kelas lainnya). Dari kelas root ini bisa diturunkan lagi menjadi kelas-kelas lainnya. Kelas baru bisa diciptakan dengan menurunkan kelas yang diturunkan dari kelas root dan begitu seterusnya. Hal ini akan membentuk inheritance chain yang menunjukkan urutan kelas-kelas tersebut seperti pada gambar dibawah ini.
Kelas C diturunkan menjadi kelas C11 dan C12. Kelas C11 diturunkan menjadi kelas C21, C22, C23. Kelas C31diturunkan dari kelas C22. Hubungan turunan dalam dalam inheritance chain ini bersifat transitive. C11 dan C12 merupakan direct subclass dari kelas C. Kelas C21, C22, dan C23 merupakan indirect subclass dari kelas C. Inheritance chain ini hanya bisa dilihat secara linear ke atas. Artinya kelas C21 bisa mengetahui kelas-kelas yang
menjadi nenek moyangnya. Artinya kelas C21 akan mewarisi seluruh properti yang method yang dimiliki oleh kelas-kelas nenek moyangnya. Namun kelas C21 tidak mengetahui tentang keberadaan saudara-saudaranya yaitu kelas C22 dan C23.
Interface Interface merupakan kelas yang tidak memiliki kode program ataupun data.Interface hanya berisi nama-nama method tapi tidak ada implementasi kodenya. Oleh karena tidak memiliki data dan implementasi kode, objek tidak bisa diciptakan dari interface. Larangan dalam interface : Mendefinisikan property/attribut Mendefinisikan construktor atau destruktor Menentukan acces modifier pada method Menempatkan type data pada interface Diturunkan dari class atau struct Saran untuk pendefinisian interface dimulai dengan “I”. Method pada interface tidak perlu menggunakan acces modifier karena semua method akan bersifat public. interface iweapon { string shoot(); string reload(); } class shotgun : iweapon { string iweapon.shoot() { .... } string iweapon.reload() { ... } }
Objek tidak bisa diciptakan dari sebuah interface. Kegunaan interface memang bukan sebagai “cetakan” untuk membuat objek akan tetapi lebih berfungsi sebagai “kontrak”. Interface harus diimplementasikan oleh kelas lain agar dapat berguna. Kelas lain yang mengimplementasikan sebuah interface harus mengimplementasikan seluruh method yang dideklarasikan dalam interface tersebut. Error akan muncul jika ada sebuah method yang dideklarasikan dalam interface tidak didefinisikan pada kelas yang mengimplementasikan interface tersebut. Sebuah kelas bisa mengimplementasikan lebih dari satu interface. Jika sebuah kelas mengimplementasikan lebih dari satu interface, maka setiap method yang ada dalam interfaceyang diimplementasikan harus didefinisikan dalam kelas yang mengimplementasikan interface tersebut. Hal ini berbeda dengan inheritance dimana pada inheritance sebuah kelas hanya boleh diturunkan dari 1 kelas lain, tidak boleh lebih
Abstract class Abstract class merupakan definisi class yang belum lengkap sehingga tidak dapat diinstansiasi. Abstract class berfungsi menghindari duplikasi data pada interface. Method pada abstaract class dapat berupa abstract method
Perbedaan Interface dan Abstract Class
Cara penggunaan Abstract Class adalah diturunkan, sedangkan cara penggunaan Interface adalah diimplementasikan. Pada C# lambang untuk menurunkan class dan menggunakan interfaces sama-sama menggunakan tanda “:” (titik dua). Tetapi untuk membedakan biasanya nama interface diawali dengan huruf I di depan misal: IEnumerable, IDisposable, dll. Sebuah class hanya dapat diturunkan dari satu abstract class tapi dapat menggunakan lebih dari satu interfaces. Method dan member variable pada abstract class boleh sudah ada isinya, sedangkan pada interfaces semua belum ada implementasinya. Pada Abstract Class semua method / member variable yang abstract harus diimplementasikan di class turunannya. Pada Interface semua member variable dan method harus diimplementasikan di class yang menggunakan interface tersebut. Access Modifier pada method dan member variable di Interface secara implisit adalah public.
Sealed class dan sealed method Sealed class merupakan class yang tidak dapat diturunkan/diwariskan. Pada sealed class terdapat sealed method yang juga tidak dapat diturunkan. Penguncian kelas dilakukan dengan menggunakan keyword sealed seperti contoh dibawah ini. sealed class armor { sealed string buy(); }
Penggunaan keyword sealed tersebut mengunci kelas yang bersangkutan untuk tidak bisa mewariskan properti dan method-nya ke kelas lain. Selain berlaku terhadap kelas, keyword sealed juga berlaku untuk method. Method yang menggunakan kata kunci sealed tidak akan diwariskan ke kelas turunannya.
Instruksi Praktikum 1. Bukalah IDE visual studio yang telah diinstal sebelumnya. Kemudian pilih New Project (ctrl + Shift + N). 2. Kemudian pilih console aplication dan beri nama “Praktikum02” kemudian OK. 3. Buat kelas baru melalui menu Project > Add Class. Beri nama “Inheritance” 4. Salinlah kode berikut pada kelas Inheritance :
5. Pada program utama salinlah kode berikut :
6. Simpan dan jalankan (Ctrl+F5) proram tersebut. 7. Hasilnya seperti :
Tugas Praktikum Kerjakan tugas yang diberikan oleh asisten/pengawas praktikum selama sisa jam praktikum. Kumpulkanlah jika telah selesai.