Anda di halaman 1dari 12
3.1, BAB 3 INHERITANCE Tujuan Pembelajaran 1, Mengenal dan memahami konsep inheritance 2. Memahami cara menerapkan inheritance dengan constructor Dasar Teo “Duluan mana, telur atau ayam dulu?”, Pertanyaan tersebut pasti familiar di telinga anda. Tapi kali ini, kita tidak membahas hal itu, “Trus kalau nggak dibahas, buat apa ditulis di modul ini?”, Jawabannya adalah sebiigai berikut. Sebuah telur yang sudah beberapa bulan dierami oleh induknya, maka akan menetas menjadi anak ayam. Anak ayam yang dirawat dan dipelihara baik-baik, pastilah akan sama seperti ibunya, Demikian juga dalam kehidupan manusia. Kehicupan kita semua pasti memiliki karakter yang ‘hampir’ sama dengan orang tua kita, “Mengapa harus disebut hampir”?”” Karena tidak mungkin kita mirip 100% dengan orang tua kita. Selain bentuk fisik yang memiliki keseragaman yang hampir sama, tentunya kita juga memiliki beberapa karakter yang hampir sama dengan kedua orang tua kita, Misal : Ayah Nobita adalah orang yang. penyabar. Ada kemungkinan Nobita juga memiliki.sikap penyabar. Tapi di balik semua itu, pasti Nobita punya sifat yang tidak dimiliki oleh ayahnya, yaitu sifat pemalas, Dalam pemrograman, sifat orang tua yang diturunkan kepada anaknya dikenal dengan nama pewarisan (inheritance) Inheritance merupakan proses pewarisan data dan method dari suatu class yang telah ada kepada class baru, Class yang mewariskan disebut dengan kelas super (super class), sedangkan kelas yang mendapat warisan tersebut atau class yang diwariskan disebut dengan subkelas (sub class), Ibarat contoh di atas, berarti sedangkan Nobita berperan seba, ayah Nobita berperan sebagai super clas class. Untuk menggunakan inheritance, maka dibutuhkan keyword extends. Cara penulisannya adalah sebagai berikut 28|P BO(OOP T class nanaSubClass extends namaSuperclass 2 at 3 | //definisi kelas 4 } Contoh : Misalkan kita memiliki beberapa software di komputer. Software tersebut beraneka ragam. Ada software game, software edukasi, dan masih banyak lagi. Biarpun berbeda jenisnya, software tersebut pasti memiliki kesamaan dengan software sejenisnya, Dengan kata lain, apabila saya melihat dari segi pemrograman, maka class Software adalah superclass, sedengakan class Game adalah turunan dari class Software (subclass). Jadi penulisan script pada cl berikut ss Game adalah sebagai T class Game extends Software 4 //definisi Kelas Game 4} Berikut ini adalah beberapa menfaatapabila anda menggunakan konsep inheritance : 1. Bersifat Reusable Bayangkan saja apabila anda imemerlukan beberapa kelas yang berasa dari basis yang sama (data dan method yang sama), namun pada masing masing kelas akan ditambahkan data atau method tambahan, Dengan menggunakan inheritance, anda cukup mengambil data atau method pada class induknya dan memberikan beberapa tambahan data atau method pada class anaknya apabila diperlukan 2. Kemudahan dalam me-manage kelas yang dimiliki data dan method yang sama Bila anda ingin memodifikasi suatu data atau method pada semua subclass, anda tidak perlu melakukan perubahan pada masing-masing kelas pada subclass. ‘Anda cukup melakukan perubahan data atau method pada kelas super (superclass) yang mewarisi subclass tersebut. Keyword super digunakan oleh subclass untuk memanggil constructor atau method yang ada pada superclassnya, Berikut adalah cara penulisan “super” pada subclass untuk memanggil constructor pada superclass, 29|PBO(OOP super") —stau_|.super (parameter) Sedangkan, cara penulisan “super” pada subclass untuk memanggil method pada superclass adalah sebagai berikut : a super.namaMethod() | atau super.namaMethod(parameter) ———= Pereobaan Berdasarkan contoh di atas tentang Software, buatlah 3 buah class yang terdiri dari class Software, class Game dan class TesGame. Class Software harus memiliki beberapa ketentuan sebagai berikut : 1. Atribut berisi kode, nama, dan lisensi 2. Terdapat 2 buah constructor Software. Constructor pertama tidak memiliki parameter dan tidak ada isinya (kosongan), Sedangkan constructor kedua ‘memiliki parameter untuk mengeset nilai kode, nama, dan lisensi (freeware / shareware) berdasarkan inputan user. Terdapat method setter dan getter untuk mengeset / merubah dan mengambil nilai dari kode, nama, dan lisensi (freeware / shareware). Class Game harus memiliki beberapa ketentuan sebagai berikut 1. Atribut berisi jenis dan kode dan diberi nilai default “unknowa”. 2. Terdapat 2 buah cotistructor Game. Constructor pertama memiliki parameter untuk mengeset nilai Kode, nama, dan lisensi (freeware / shareware) berdasarkan inputan user. Data kode, nama, dan lisensi (freeware / shareware) diambil dari constructor kedua pada class Software (gunakan keyword super). Sedangkan constructor kedua memiliki parameter untuk mergeset nilai kode, nama, lisens (freeware / shareware), jenis (offline / online), dan tipe (action / areade / adventure / sport / puzzle) berdasarkan inputan user. Data kode, nama, dan_lisensi (freeware / shareware) diambil dari setter pada class Software (gunakan keyword super), 3. Terdapat method getter untuk mengambil nilai dari variabel kode, nama, dan lisensi (freeware / shareware) pada class Software serta mengambil nilai dari variabel jenis (offline / online) dan tipe (action/ arcade / adventure / sport / puzzle), 30|/P BO(OOP) Sedangkan pada class TesGame digunakan untuk memanggil class Game. Berikut ini gambaran class diagramnya : ape Gime [sees ais [ses aezer) ‘Anak panah “€” menggambarkan konsep inherintance, dimana class Game J caneistina ode Steanana Stina ears | caneisting ode, sting nana, Sunglisen, Sing jens Sing ts] merupakan turunan dari class Software. Sehingga variabel kode, nama, dan lisensi pada class Software tidak perlu dideklarasikan ulang, 3.3.1, Membuat kerangka class Software 31) public class Software ¢ a2 33 1s 45 16 0 ae 29 20 a} Setelah anda membuat class Software, simpan file tersebut dengan nama Software.java. 3.3.2. Mendeklarasi Variabel yang dibutuhkan dalam class Software 12 4 13) private String kode, nama, lisensi; 3.3.3. Mendeklarasi constructor dalam class Software af 3 19, Software (String kode, String nama, String lisensi) { | oe Bl) sacs ||| ea. 31/PBO(OOP) 3.3.4. Membuat method setter dalam class Software at mans a7 3.3.5. Membuat method getter dalam class Software : | PE camcy _ Sos Be cas a MOD a1 cys 3.3.6. Membuat kerangka class Game 31 publiG)class Game extends Software{ 2 ek 13 me os a8 16 evte: a7 ae} Setelah anda membuat class Game, simpan file tersebut dengan nama Game,java, Di dalam class Game, saya juga menyediakan tempat untuk mendeklarasikan variabel, constructor dan getter. Penggunaan extends menunjukkan bahwa class game merupakan turunan dari class Software. 3.3.7. Mendeklarasi variabel yang dibutuhkan dalam class Game 2 < a private jenig = "unknown"; a privace fipe = “unknown"s Perlu diketahui bahwa dalam pembuatan class Game tidak diperlukan pendeklarasian variabel kode, nama, dan lisensi. 3.3.8. Mendeklarasi constructor dalam class Game 32|PBO(OOP) a6 2 2 2 2 2 2 26 Setelah membuat variabel yang dibutuhkan pada class Game, langkah selanjutnya anda membuat constructor Game. Constructor ini nantinya akan gone igion tat, fons sna. string een, nen ste, sin i] Sedangkan jika anda ingin memanggil setter / getter pada class induknya, anda dapat menggunakan keyword “super” yang kemudian dilanjutkan 33|PBO(OOP) dengan nama method yang dipanggil seperti constructor kedua pada Game (lihat script yang diberi kotak berwama biru pada gambar di atas). Artinya penggunaan keywoard “super” akan mengarah kepada constructor class induknya (lihat script yang diberi kotak berwama orange pada gambar i atas). Membuat method getter dalam class Game Setelah membuat constructor, anda tinggal membuat method getter untuk mengambil nilai dari masing-masing variabel. Hal ini bertujuan untuk mengambil nilai dari variabel pada class Game yang nantinya akan kita kembalikan ke dalam class ‘TesGame. Perlu diketahui pula, bahwa dalam pembuatan variabel pada parameter di method getter, harus sesuai dengan tipe data pada variabel yang dideklarasikan di kelas terscbut maupun di kelas induknya. Gambar di bawah ini menunjukkan deklarasi getter. 2 eo Publiq,String getKode(){ 23 [ retin super.getKode(): 30 , aE piblic String getNama(){ 33] t , BG @eithe String gottieensi (yt 35| | Feturn super-getLisensi(): a6] Co 37 a public String getJenis(){ se | return jenis: ee) + 40) public String getTipe(){ ar} | return tiper a) Seperti halnya penggunaan constructor kedua pada class Game yang menggunakan super.[nama_method], maka untuk method getKode(), getNama(), dan getLisensi() menggunakan keywoard “super” dikarenakan tidak dideklarasikan pada class Game. 34|PBO(OOP) 3.3.10, Membuat kerangka class TesGame 12) supose sere.ae. Lz) pobisc class foaGams ( 15 publac svatac rose mags (Scrang (1 segs) chtovs Exception ( # Bateereatendes Br ~ now Suffercaeader (new InputSeeeanieedes (Sveten.sc))+ is i n Fa = is x oo a ze o % 2B 1 2 2 3.3.11, Membuat instance of class Setelah anda membuat class TesGame, langkah berikutnya yang anda Jakukan adalah membuat sebuah objek yang bertipe class Game. Pembuatan variabel dengan bertipe kelas itulah yang dinamakan instance of class. Misalkan, objek yang saya buat adalah gameA dan gameB, dimana gameA menggunakan constructor pertama pada class Game dan gameB menggunakan constructor kedua pada class Game, 3.3.12, Membuat ment dan perulangan menu 20 whale (brue) 2a < 22 men 23 out .printin ( ——<"); 24. out princin(' MENU GAME eH 25, .out.printin ("\—————————") 7 26 .printiIn("1. Input Game A"); 21 -printin("2. Input Game B"); 28 -printin("3. Lihat Date Game" 29, sprintin("4, Keluaz"); 30 -printIn(™ abs a1 22 23 34 } 3.3.13, Membuat inputan yang diisi user 35/PBO(OOP) a 32 4 33 36 37 32 23 43) aL a 48 an 43 45 ar 48 43) 50 sL 52 53 ae a9 40 a 42) a 4 48 46 a 4 a8 so s1 52) 53 System.out.print("Mesukkan pilinan anda (1 s/d 4): ")e int pilin = Integer persefat (br.readLine()): System.ous.printin |); 3.3.14, Mengecek inputan user wicca Ga) 4 breaks breaks gefauie: syecem.exie Gh» : 3.3.15. Mengisi Case 1 (Input Game A) case 1) systesicut Beincin (" System-cbt.prigtin(” INPUT GAME A"); Systemoutyprintin (" ye Systeh, cHeprint ("Masukkan Kode : *): Sciing kode = br.readzine( Syscem-out.print ("Masukkan Nana : ")? Scring nama = br.readLine(); Syavem.out.print (Masukkan Lisensi +"); String lisenst = pr.reaatane(): gameA ~ new Game (kode, nama, Lisensi) ; Syatem.ouc. OF System.oub. ("oo-Date Sane A teleh disimpan~ break; Ketika user memilih inputan menu no, 1, maka dilakukan beberapa proses sebagai berikut : 1. Line 41-49 : berisi permintaan inputan kode, nama, dan lisensi yang nantinya akan diisi oleh user 36/PBO(OOP) st ss. 56 57 se 6 a a 6 6 66 6 «9 70 a 7 cy 2. Line 50 : merupakan proses mentransfer data kode, nama, dan lisensi pada tiap variabel dalam constructor pertama class Game. Setelah berhasil, program akan mencetak tulisan --Data Game A telah disimpan-- (Line 52). 3.3.16, Mengisi Case 2 (Input Game B) Byer. cub peticang "2 systemourprancin("1e0T Gave B": be ey System.cut prine("Masakkan Fede + *)+ ode = br. eedzine | Spathiae. point (MESH a 4 =] nama = br. readLane( Systen. out prine "Masukkan Lisensis =) Lissette. ceanine 3 Syeten.cut-prine (*maeukran ff string Jenis = br-readZine Qj syeten. out print (“Masukcan THC + 9 String EIB ~ be.reeazane(); amen = nev Gene (r00famn, 1teened, jens, BBR) 1 Systen. cut printin( Systen. out peinela( meats seo a Gane B celah disiupan—- Ketika user memilih inputan menit no, 2, maka dilakukan beberapa proses sebagai berikut Line 57-69 : berisi permintaan inputan kode, nama, dan lisensi, jenis, ddan tipe yang nantinya akan diisi oleh user. Line 70 : merupakan proses mentransfer data kode, mama, dan lisensi, jenis, dan tipe pada tiap variabel dalam constructor kedua class Game. Setelah berhasil, program ukan mencetak (ulisan —-Data Game B telah disimpan--- (line 72). 37|PBO(OOP) 3.3.17. Mengisi Case 3 (Lihat Data Game) 1s case 3 76 133 2 ” System.cut-printin( 7 Sysvem.out-printin(" n Syatem.cut_prantin (" e0 System.cut-prantin ("Gane A")? an System. cut.printin ("sds Gans A: "+gameA.getKode (}) 2] System.cul.printin ("lana Gane A: “+gameA.getMana(}); 3 Systen,oub.printin("Lisensi Gane & :"+gameR.gecLisensi |): ee System.cut.prantin("Jents Game & + "agamea. ane 85) Systen.cut.printin("Tips Gane A: "“+gameh.getTipe(}): 26 Syoten.cur-peintin(); 07 System.oub.printin ("Gane 5"); te System.out.printin ("Koa Gan= 5 : "+games.gecKode ()): 2 System cur prantin (sans Gens S : "4games.gertana()): 90) System. out.printin("iisensi Gane 5 :"+games.getLasensi |))? a System.out.printin(*Jenis Gane 5 : "+games! Ode 22 Systen.cot printin(*Tipe Gane 5 + "égameB.gatTépe (}); 33) System. out .printin ("== "17 3 break Ketika user memilih inputan menu no. 3, maka dilakukan beberapa proses sebagai berikut : 1. Line 81-85 : mencetak isi data kodey variabel gameA sudah ada pada variabel gameB 3.3.18. Hasil Running Progtam 38/PBO(OOP) Line 88-92 : mencetak isi data kode, nama, dan lisensi sudah ada pada nama, dan lisensi, jenis, dan tipe 3.4. Latihan 1. In jplementasikan class diagram berikut ini ke dalam sebuah program dengan ketentuan a. Class mobil sebagai superclass (Kelas induk) berisikan atribut merk, wama, jenis, Terdapat 2 buah constructor mobil, Constructor pertama tidak memiliki parameter. Sedangkan constructor kedua memiliki parameter untuk mengeset nilai merk, warna, dan jenis (ex : sport) . Class honda sebagai subclass (kelas anak) berisi atribut tahun dengan nilai default 0000. Terdapat 2 buah constructor honda. Constructor pertama memiliki parameter untuk mengeset nilai merk, wama, dan jenis. Data merk, wama, dan jenis diambil dari constructor kedua pada class mobil (gunakan keyword super). Scdangkan constructor keduia memiliki parameter untuk mengeset nilai merk, warna, jenis dan tahun berdasarkan inputan user. Data merk, wama, dan jenis diambil dari setter pada class mobil (gunakan keyword super). c. Class test digunakant untuk menianggil class honda, mobil Sting merk siting wana honda Sng jonis int tahun smebild ‘hondatiing merk, Sting warn Sting jens) smiling mek, Sing warna, Sting nis) Upemsatelina mete Sofhawerne, Eira [ois ris) + satero + tor + gaten) 39|PBO(OOP

Anda mungkin juga menyukai