Post on 21-Mar-2019
ABSTRACT CLASS DAN INTERFACE
1. Kompetensi Setelah menempuh materi percobaan ini, mahasiswa mampu mengenal:
1. Konsep abstract class
2. Abstract method
3. Notasi UML untuk abstract class
4. Konsep interface
5. Beda interface dengan abstract class
6. Cara membuat class yang implements ke interface
7. Notasi UML untuk interface dan relasi implements
2. Pendahuluan Abstract class memiliki banyak kemiripan dengan interface. Yaitu sama-sama tidak bisa di-instansiasi dan
keduanya dapat memiliki method yang dideklarasikan tanpa atau dengan implementasi.
Pada abstract class:
• Kita bisa membuat property yang tidak static dan final.
• Kita bisa membuat method yang public, protected dan private
Pada interface:
• Semua property secara otomatis public, static dan final.
• Semua method adalah public
Abstract class hanya bisa diwariskan satu kali (single inheritance) sedangkan interface bisa
diimplementasikan lebih dari satu.
Kapan menggunakan abstract class atau interface?
Gunakan abstract class jika:
• Kita ingin berbagi code/mewariskan code yang sama dengan class-class yang berhubungan.
• Kita ingin membuat beberapa class dengan method dan property yang hampir sama.
• Kita ingin mendeklarasikan property yang tidak static dan tidak final. Dengan cara ini kita bisa
mendefinisikan method dengan implementasi yang berbeda-beda di tiap class yang mewariskan
abstract class tersebut.
Gunakan interface jika:
• Kita ingin mengimplementasikan interface ke beberapa class yang tidak berhubungan secara hirarki.
• Kita ingin menspesifikasikan behavior dari beberapa object, namun tidak mau tau bagaimana
implementasi dari behavior tersebut.
• Kita ingin memanfaatkan multiple inheritance
3. Abstract Class Abstract class adalah sebuah class yang dideklarasikan sebagai abstract. Didalamnya bisa terdapat
method biasa, dan bisa terdapat abstract method. Abstract class tidak bisa di-instansiasi (dibuat object
nya). Untuk membuat object dari abstract class tersebut, pertama-tama harus diturunkan terlebih dulu
(diwariskan). Cara membuat abstract class:
Abstract method adalah method yang hanya dideklarasikan dan tanpa implementasi (diakhiri dengan
titik koma di akhir deklarasi, dan tidak ada kurung kurawal). Contoh abstract method:
Ketika sebuah class mewarisi sebuah abstract class, maka class tersebut harus mengimplentasikan ulang
semua abstract method yang ada di parent-nya. Jika tidak, maka class tersebut juga harus dideklarasikan
sebagai abstract. Perhatikan contoh berikut ini:
Pada class diagram diatas, class Phone adalah abstract class, maka nama class nya harus ditulis miring.
Didalamnya terdapat method call() dan endCall() yang merupakan abstract method, maka harus ditulis
miring juga. Sedangkan method setPhoneNumber() bukan abstract method, maka ditulis tegak.
Untuk meng-instansiasi class Phone tersebut maka dibuatlah class turunannya yaitu SmartPhone, yang
didalamnya mengimplementasikan ulang method-method abstract yaitu call() dan endCall(). Sedangkan
method setPhoneNumber() bukan method abstract, jadi tidak perlu diimplementasikan ulang.
Method abstract tanpa
implementasi
4. Percobaan 1
4.1 Tahap Percobaan 1. Perhatikan class diagram dibawah ini:
2. Buatlah abstract class Phone seperti dibawah ini:
3. Kemudian buatlah class MobilePhone yang menurunkan class abstract Phone:
Method abstract tanpa
implementasi
4. Kemudian class SmartPhone yang juga menurunkan class abstract Phone:
5. Kemudian class TestPhone:
Implementasi method dari
class abstract Phone
Implementasi method dari
class abstract Phone
6. Compile class TestPhone, cocokkan output anda:
4.2 Pertanyaan 1. Dari class Phone, SmartPhone, MobilePhone, manakah yang merupakan abstract class?
2. Mana sajakah yang merupakan abstract method?
3. Apa perbedaan dari abstract method dan method biasa?
4. Pada TestPhone, terdapat method checkPhoneNumber() yang menerima parameter bertipe Phone
(baris ke 19 pada gambar). Namun pada saat method tersebut dipanggil, object samsunk yang
notabene bertipe SmartPhone bisa dimasukkan sebagai parameter method tersebut (baris ke 16).
Mengapa demikian?
5. Cobalah membuat object dari class Phone pada TestPhone, seperti dibawah ini:
6. Percobaan nomor 5 diatas akan menghasilkan error. Mengapa demikian?
7. Coba hapus method call() dan endCall() pada class SmartPhone. Akan terjadi error, mengapa
demikian?
8. Apa yang dapat anda simpulkan dari percobaan diatas?
5. Interface Interface digunakan sebagai jembatan antar object agar bisa saling berkomunikasi tanpa melihat hirarki
pewarisan dari object tersebut. Untuk memudahkan memahami interface dan manfaatnya, coba amati
class diagram berikut ini:
Pada class diagram diatas, dapat kita lihat bahwa class MP3Player tidak ada hubungan hirarki dengan
class Phone, MobilePhone maupun SmartPhone. Akibatnya, class MP3Player tidak dapat dimasukkan
sebagai parameter di method charge() yang ada di class USBCharger. Sedangkan class MobilePhone dan
SmartPhone dapat dimasukkan ke method charge(), karena merupakan turunan dari class Phone.
Padahal harapannya, semua class bisa dimasukkan ke method charge(). Bagaimana solusinya? Kita bisa
gunakan interface.
Cara membuat interface adalah dengan menggunakan keyword interface:
Berbeda dengan abstract class, pada interface tidak boleh ada method yang ada implementasinya.
Method yang ada didalam interface hanya deklarasi saja (diakhiri dengan titik koma, tanpa ada kurung
kurawal). Seperti contoh berikut ini:
Interface dapat diimplementasikan oleh class lain. Caranya adalah dengan menggunakan keyword
implements. Sebagai contoh, class MP3Player yang mengimplementasikan interface ChargeAble:
Deklarasi method tanpa
implementasi
Semua method yang ada pada interface, harus diimplementasikan ulang pada class yang
mengimplementasikannya. Misal pada interface ChargeAble terdapat method doCharge(), maka class
MP3Player yang notabene meng-implements interface ChargeAble, harus mengimplementasikan ulang
method doCharge() tersebut. Contoh:
Adapun class diagram dari contoh diatas adalah sebagai berikut:
Pada interface, ditambahkan tanda << interface >> diatas nama interface-nya. Kemudian class yang
meng-implements interface tersebut diberi tanda panah dengan garis putus-putus yang mengarah ke
interface.
Deklarasi method tanpa
implementasi
Implementasi method dari
interface ChargeAble
6. Multiple Interface Kelebihan dari interface adalah satu class dapat meng-implements lebih dari satu interface. Oleh karena
itu interface dikatakan sebagai solusi jika kita ingin menerapkan multiple inheritance. Penulisan
implements yang lebih dari satu interface dipisahkan dengan koma ( , )
Misal, class MP3Player yang meng-implement ChargeAble dan ModAble:
Maka class MP3Player harus mengimplementasikan semua method yang ada di ChargeAble dan
ModAble.
Dengan demikian, kita bisa menerapkan interface pada contoh kasus ini. Untuk lebih lebih lengkapnya
ikuti percobaan berikut ini.
7. Percobaan 2
7.1 Langkah Percobaan 1. Amati class diagram dibawah ini
Dapat kita amati pada class diagram diatas, class MobilePhone, SmartPhone dan MP3Player,
semuanya mengimplements interface ChargeAble. Class-class tersebut juga mengimplentasikan
ulang method doCharge(). Kemudian pada class USBCharger, method charge() sekarang
menerima parameter yang bertipe ChargeAble, dengan demikian semua class yang meng-
implements ChargeAble dapat di-charge oleh USBCharger.
2. Buatlah interface ChargeAble seperti berikut ini:
3. Kemudian buat class USBCharger seperti berikut ini:
4. Buatlah class MP3Player yang meng-implements interface ChargeAble seperti berikut ini:
5. Kemudian ubah class MobilePhone dan SmartPhone tambahkan implements ChargeAble. dan
method doCharge() seperti berikut ini:
6. Kemudian TestPhone:
7. Cocokkan output anda:
7.2 Pertanyaan 1. Apa yang dimaksud dengan interface?
2. Apa perbedaan antara interface dengan abstract class?
3. Dari class-class diatas, yang manakah yang merupakan interface?
4. Apa maksud dari keyword implements?
5. Coba tambahkan method checkVoltage() pada ChargeAble seperti berikut ini:
Compile program anda. Apa yang terjadi? Jelaskan alasannya.
6. Perhatikan pada class USBCharger, method charge() menerima parameter bertipe ChargeAble.
Namun pada TestPhone, kita memanggil method charge() tersebut dengan memasukkan parameter
object noqia:
Namun hal ini dapat dilakukan, padahal notabene object noqia bertipe MobilePhone. Mengapa
demikian?
7. Mengapa terdapat method doCharge() pada class SmartPhone?
8. Apabila method doCharge() pada class SmartPhone dihapus, apa yang terjadi? Jelaskan alasannya.
9. Tambahkan method stopCharge() pada interface ChargeAble:
Kemudian tambahkan method stop() pada class USBCharger:
Lakukan perubahan seperlunya pada class-class lain yang sekiranya perlu dilakukan perubahan.
Kemudian uji dengan TestPhone berikut ini:
Output yang diharapkan:
10. Apa yang dapat anda simpulkan dari percobaan ini?
8. Tugas 1. Perhatikan class diagram dibawah ini:
Buatlah kode program dari class diagram diatas. Perhatikan bahwa class RaspberryPi dan Drone
meng-implement lebih dari satu interface (Multiple Interface). Uji dengan TestSignal berikut ini dan
cocokkan hasilnya:
Hasil yang diharapkan:
2. Sebuah game action adventure, didalamnya terdapat karakter, kendaraan, bangunan dan monster.
Semuanya (karakter, kendaraan dan bangunan) dapat dihancurkan oleh monster. Desainlah
programnya, dengan menerapkan konsep abstract class dan interface. Anda bebas menentukan
atribut dan method pada masing-masing class dan interface nya dan juga test class nya. Buat class
diagramnya dan kode programnya.