450 likes | 710 Views
PEWARISAN ( Inheritance ). Pengantar. Adalah proses pembentukan kelas baru yang disebut sebagai derived class atau inherited class atau kelas turunan atau subkelas dari kelas yang sudah ada sebelumnya yang disebut base class atau superkelas
E N D
Pengantar • Adalahprosespembentukankelasbaru yang disebutsebagaiderived classatauinherited class atau kelas turunan atau subkelasdarikelas yang sudahadasebelumnya yang disebutbase classatau superkelas • Subkelas akanmewarisisemuaanggota superkelas dandapatditambahanggota baru yang memilikikarakter lebihkhusus
Pengantar(lanjutan) • Pewarisan • Merupakanbentukrelasi “is-a” • PenggunaankembaliSoftware (kode program) • Membuatkelas baru dari kelas yang dibuatsebelumnya • Menampungvariabelkelas dan perilakudarisuperkelas • Meningkatkanataumenambahatributataumetodebarudarisuperkelas
Pengantar(lanjutan) • Pewarisan • Subkelassebagaiperluasandarisuperclass • Subclass • Lebih spesifikdarisuperkelas-nya • Mewarisiatribut dan perilaku dari superkelas • Perilakudapat disesuaikan • Dapatditambahkan atribut dan perilaku baru
Pengantar (lanjutan) • hirarki kelas • Langsung superclass • Warisan eksplisit (satu tingkat hirarki) • TidakLangsung superclass • Warisandua atau lebih tingkat hirarki • Pewarisan Tunggal • Mewarisi dari satu superclass • PewarisanJamak • Mewarisi dari beberapa superclasses • Java tidak mendukung PewarisanJamak
SuperKelasdanSubKelas • SuperKelasdan SubKelas • Obyek sebuahkelas “is-an”objek kelas lain • Contoh: PersegiPanjangadalah Segiempat. • Kelas PersegiPanjangmewarisi dari kelas Segiempat • Segiempat: SuperKelas • PersegiPanjang: SubKelas
SuperKelasdanSubKelas • SuperKelasdan SubKelas • SuperKelasmempunyailingkupyang lebih luasdaripada obyek SubKelas • contoh: • SuperKelas: Kendaraan • Mobil, truk, kapal, sepeda, ... • SubKelas: Mobil • Lebih sempitlinkupnya, bagian yang lebih spesifik darikendaraan
SuperKelasdanSubKelas (lanjutan) • Hirarki Pewarisan • RelasiPewarisan: • Seperti struktur pohon hirarki • Setiap kelas menjadi • SuperKelas • Pasokan anggota kelas-kelas lain (SubKelas) ATAU • SubKelas • Mewarisi anggota dari kelas lain (SuperKelas)
HirarkiPewarisan di UML CivitasAkademika Pegawai Mahasiswa Alumni Fakultas Pusat Jurusan Staf
HirarkiPewarisan Bentuk DuaDimensi TigaDimensi Lingkaran Bola Persegi Kubus Segitiga Kerucut
Anggota Protected • Akses protected • Level aksesdi antarapublicdan private • Anggota protected dapat diakses oleh: • Anggota superkelas • Anggota subkelas • Anggota kelas dalam paket yang sama • Akses subkelaspadaanggota superkelas • Menggunakankeywordsuperdiikutidengan operator titik (.)
Catatan • Metode subkelastidak dapat langsung mengakses anggota privatedari superkelas-nya. Sebuah subkelas bisa mengubah status variabel instanprivatemiliksuperkelas hanya melalui metode non-privateyang disediakan superkelas dan diwariskankesubkelas.
Catatan (lanjutan) • Mendeklarasikan variabel instanprivatedapatmembantu programmerdalammelakukanpengujian, debug dan modifikasi sistemsecarabenar. Jika subkelas bisa mengakses variabel instan privatesuperclass-nya, kelas yang mewarisi dari subkelas akanbisa jugamengakses variabel instan tersebut. Hal ini akan memperluasakses ke variabel instanprivate, sehinggamanfaat penyembunyian informasi akan hilang.
RelasiSuperkelasdanSubkelas • Contoh • HirarkiPewarisankelasKaryawanPemasarandankelasKaryawanTetapPemasaran • KelasKaryawanPemasaran • Atribut: nama, nik, totalJual, persenKomisi • KelasKaryawanTetapPemasaran • Atribut: nama, nik, totalJual, persenKomisi, gajiPokok
KelasKaryawanPemasaran • Turunan (extends) darikelas Object • Menggunakan keyword extends • Setiap kelas di Java merupakansecara default turunan (extends) darikelas Object • Kecualikelas Object • Setiap kelas mewarisi metodedarikelas Object • Setiap kelas baru secaraimplisit sebagaiturunan (extends) darikelas Object • Jika bukansebagaiturunan (extends) darikelas lain
Catatan • Compiler Java menetapkan sebagaisuperkelas adalahkelas Objectketika mendeklarasikankelas yang tidak secara eksplisit dituliskansebagaiturunan (extends) darikelas Object.
Catatan • Kesalahan sintaks akanterjadibilasebuahmetode di superkelas di-override padasubkelasdenganmenggunakan access modifier yang lebihterbatasjangkauannya. Misalkan: metode public di superkelas tidak bisa menjadi metode protectedatau private padasubkelas, sebuah metode protected di superkelas tidak dapatmenjadi metode private di subkelas. Karenaperlakuan di atasakan mematahkanrelasi"is-a" dimana diperlukan bahwa semua objekdarisubkelas dapat menanggapi panggilan metode yang dideklarasikansebagaimetode public di superkelasnya.
Catatan (lanjutan) • Jika metode public bisa di-override menjadimetode protected atau private, makaobyek subkelas tidak akan dapatmerespon terhadppemanggilan metode yang sama padaobyek superkelas. Bilametodedideklarasikansebagaipublicdi superkelas, makametode harustetap publicketika di-override padasubkelasbaikpewarisanlangsung maupuntidak langsung.
KelasKaryawanTetapPemasarantanpaPewarisan • Kelas KaryawanTetapPemasaran • Secara implisit turunandarikelasObject • Sebagian besar kode program mirip dengan kelasKaryawanPemasaran, meliputi: • variabel instan private • metode public • konstruktor • Tambahan • variabel instangajiPokok • Metode setGajiPokokdan getGajiPokok
Contoh: KelasKaryawanTetapPemasarantanpaPewarisan (lanjutan)
Catatan • Copy dan paste kode program dari satu kelas ke kelas lainnya dapat menambahpeluangterjadikesalahan di beberapa file kode program. Untuk menghindari duplikasi kode (dan mungkin terjadikesalahan), penggunaan konseppewarisan, bukan cara"copy-and-paste", dalam situasi di mana diinginkanmendeklarasikankelas yang dapat"menyerap" variabel instandan metode darikelas lain.
Catatan • Dengan konseppewarisan, variabel instandan metode umum darisemua kelas dalam hirarki pewarisandideklarasikan di superclass-nya. Bilaperubahan diperlukan darifitur-fitur umum, pengembang perangkat lunak hanya perlu membuat perubahan di superclass-subclass-nyakemudian mewarisikan perubahantersebut. Tanpa pewarisan, perubahan perlu dilakukan untuk semua file kode program yang berisi salinan dari kode tersebut.
Catatan • Kelas KaryawanTetapPemasaran • Turunandarikelas KaryawanPemasaran • “is-a” kelasKaryawanPemasaran • Memiliki variabel instangajiPokok • Mewarisi anggota public dan protected • Konstruktor tidak diwariskan
Catatan • Sebuah kesalahan kompilasi terjadi jika konstruktor subclass memanggilsalah satu konstruktor superclass dengan argumen yang tidak sama persis dengan jumlah dan jenis parameter yang ditentukan dalam salah satu deklarasi konstruktor superclass.
AnggotaProtected • Penggunaan variabel instan protected • Dimungkinkan subkelas untuk langsung mengakses variabel instan protected di superclass-nya • Anggota protectedsuperclass diwariskan kesemua subclases-nya
AnggotaProtected (lanjutan) • Penggunaanvariabel instan protected • Keuntungan • Subclass dapat memodifikasi nilai data secara langsung • Meningkatkan kinerjawalausedikit • Terhindardarimetode set/get • Kerugiannya • Tidak ada pemeriksaanvaliditas • subclass dapat menetapkan nilai ilegal • Implementasitergantung • metode subclass dimungkinkantergantung pada implementasi superclass • perubahan implementasi superclass dapat mengakibatkan modifikasi subclass • Perangkat lunak lemah
Catatan • Gunakan akses modifier protectedketika superclass harus menyediakan metode yang hanya untuk subclass dan kelas-kelas lain dalam paket yang sama, tetapi tidak untuk kelaslainnya. • Mendeklarasikan variabel instanprivate di superkelas (sebagai lawan protected) memungkinkan penggunaanvariabel instansuperclass tersebut tanpa mempengaruhi implementasi subkelas-nya
Review • Gunakan praktek rekayasa perangkat lunak yang baikdengan: • Deklarasikan variable instansebagai private • Menambahkanmetode set dan get sebagai public • Gunakan metode set dan get tersebutuntuk mendapatkan nilai dari variabel instan.
Catatan (lanjutan) • Ketika metode superkelas di-override di subkelas, sering versi subkelas memanggilversi superkelas untuk melakukan sebagian pekerjaan. Kelalaianpemberianawalan super.padapemanggilanmetode superkelas menyebabkan pemanggilanmetode di subkelas akanmemanggildirinyasendirisehinggaterjadikesalahan beruparekursi tak terbatas (infinite recursion).
KonstruktorSubkelas • Instansiasiobjeksubkelas • Sebagaiserangkaiandaripemanggilan konstruktor • Konstruktor subkelas memanggil konstruktor superkelas • Implisit atau eksplisit • Didasarkanhirarki pewarisan • Konstruktor terakhir yang dipanggiladalah konstruktor Objek dipilih • Konstruktorsubkelas dieksekusi paling akhir
Catatan • BahasapemrogramanJava menetapkanbahwa jika konstruktor tidak menentukannilai variabel instan, makavariabel instantersebutakandiinisialisasi ke nilai default (misalkan: 0 untuk tipenumerik primitif, false untuk boolean, dannull untuk referensi).
PenggunaanPewarisan di RPL • Disesuaikan terhadapperangkat lunak yang ada • Pewarisandari kelas yang sudahada (dibuat) • Penyertaan anggota tambahan • Pendefinisian kembali(override) anggota superkelas • Tidak ada modifikasikode sumber superkelas • Link ke kode objek • Tidaktergantungterhadapsoftware vendor (ISV) • Sebagai pengembangan kode berlisensi • Tersedia dalam format object-code • Pengguna dapatmemperoleh kelas baru • Tanpa memodifikasikode sumber yang telahdibuatsebelumnya
Catatan • Terlepas dari praktekpemrogrambahwa sebenarnyakonsep pewarisan kelas tidak perlumelakukanmodifikasikode sumber dari superkelas, tetapiseringkalipemrogramsering bersikeras inginmelihat kode sumber darisuperkelasuntuk memahami bagaimana superkelas diimplementasikan. Pemrogramhanyaingin memastikan bahwa kelas yang dikembangkanbenar-benarsolid, yaitukelas yang berkinerja baik dan dapatdiimplementasikandengan aman.
Catatan • Pada tahap desain sistem berorientasi objek, perancangsering menemukan bahwa terdapatbeberapakelastertentu memiliki hubungan erat. Perancang harusmemasukkanbeberapavariabel instan danmetodebersifatumum kedalamkodesumberdarisuperkelss. Kemudian perancangharus menggunakan konseppewarisanuntuk mengembangkan subkelas, sehinggadapatmemasukkananggotatambahandarisuperkelassebelumnyauntukkemudiandiwariskankesubkelas. • Jikadeklarasi subkelas tidak mengubahkode sumber superkelasnya, makapenggunaan pewarisan akandapatmenjaga integritas superkelas.
Catatan • Sama seperti perancang sistem non-object-oriented, merekajugaharus menghindari proliferasi (pengembangan)fungsi/subprogram yang telahada/dibuat, perancang sistem berorientasi objek harus menghindari proliferasi kelas. Proliferasi tersebut menciptakan masalah manajemen dan dapat menghambat usabilitas perangkatlunak, karena dalam kelas pustaka yang besar akanmenyulitkanuntuk menemukan kelas yang paling tepat. Sebagai alternatif adalah membuatsedikit kelas yang menyediakan fungsionalitas yang lebih besar, tetapi kelas tersebut bisa-jadirumit. • Jika subkelas lebih besar dari yang dibutuhkan(misalnya, memilikiterlalu banyak fungsi), memori dan pengolahan sumber daya mungkin menjadiboros/sia-sia. Pewarisansuperkelassebaiknyayang berisi fungsi sesuaikebutuhan.
KelasObject • Beberapametode yang terdapat di kelas Object: • clone • equals • finalize • getClass • hashCode • notify, notifyAll, wait • toString