• Tidak ada hasil yang ditemukan

SuperKelas dan SubKelas (lanjutan) Hirarki Pewarisan

N/A
N/A
Protected

Academic year: 2024

Membagikan "SuperKelas dan SubKelas (lanjutan) Hirarki Pewarisan"

Copied!
44
0
0

Teks penuh

(1)

PEWARISAN

(Inheritance)

(2)

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

Subkelas akan mewarisi semua anggota

superkelas dan dapat ditambah anggota baru yang memiliki karakter lebih khusus

(3)

Pengantar (lanjutan)

• Pewarisan

– Merupakan bentuk relasi “is-a”

– Penggunaan kembali Software (kode program) – Membuat kelas baru dari kelas yang dibuat

sebelumnya

• Menampung variabel kelas dan perilaku dari superkelas

• Meningkatkan atau menambah atribut atau metode baru dari superkelas

(4)

Pengantar (lanjutan)

• Pewarisan

– Subkelas sebagai perluasan dari superclass

• Subclass

– Lebih spesifik dari superkelas-nya

– Mewarisi atribut dan perilaku dari superkelas

» Perilaku dapat disesuaikan

– Dapat ditambahkan atribut dan perilaku baru

(5)

Pengantar ( lanjutan )

• hirarki kelas

– Langsung superclass

Warisan eksplisit (satu tingkat hirarki)

– Tidak Langsung superclass

Warisan dua atau lebih tingkat hirarki

– Pewarisan Tunggal

Mewarisi dari satu superclass

– Pewarisan Jamak

Mewarisi dari beberapa superclasses

Java tidak mendukung Pewarisan Jamak

(6)

SuperKelas dan SubKelas

• SuperKelas dan SubKelas

– Obyek sebuah kelas “is-an” objek kelas lain

• Contoh: PersegiPanjang adalah Segiempat.

• Kelas PersegiPanjang mewarisi dari kelas Segiempat

• Segiempat: SuperKelas

• PersegiPanjang: SubKelas

(7)

SuperKelas dan SubKelas

• SuperKelas dan SubKelas

– SuperKelas mempunyai lingkup yang lebih luas daripada obyek SubKelas

• contoh

:

– SuperKelas: Kendaraan

» Mobil, truk, kapal, sepeda, ...

– SubKelas: Mobil

» Lebih sempit linkupnya, bagian yang lebih spesifik dari kendaraan

(8)

Contoh SuperKelas dan SubKelas

SuperKelas SubKelas

Mahasiswa Sarjana, PascaSarjana, Doktoran Bentuk2Dimensi Lingkaran, Segitika, Segiempat

Persewaan PersewaanMobil, PersewaanLahan, PersewaanRumah

Pegawai PegawaiDaerah, PegawaiPusat, Staf RekeningBank RekeningTabungan, RekeningGiro

(9)

SuperKelas dan SubKelas ( lanjutan )

• Hirarki Pewarisan

– Relasi Pewarisan:

• Seperti struktur pohon hirarki

– Setiap kelas menjadi

• SuperKelas

– Pasokan anggota kelas-kelas lain (SubKelas) ATAU

• SubKelas

– Mewarisi anggota dari kelas lain (SuperKelas)

(10)

Hirarki Pewarisan di UML

CivitasAkademika CivitasAkademika

Mahasiswa Mahasiswa Pegawai

Pegawai AlumniAlumni

Fakultas

Fakultas PusatPusat

StafStaf Jurusan

Jurusan

(11)

Hirarki Pewarisan

Bentuk Bentuk

Kubus Kubus DuaDimensi

DuaDimensi TigaDimensiTigaDimensi

Lingkaran

Lingkaran PersegiPersegi SegitigaSegitiga BolaBola KerucutKerucut

(12)

Anggota Protected

• Akses protected

– Level akses di antara public dan private – Anggota protected dapat diakses oleh:

• Anggota superkelas

• Anggota subkelas

• Anggota kelas dalam paket yang sama

– Akses subkelas pada anggota superkelas

• Menggunakan keyword super diikuti dengan operator titik (.)

(13)

Catatan

• Metode subkelas tidak dapat langsung

mengakses anggota private dari superkelas-

nya. Sebuah subkelas bisa mengubah status

variabel instan private milik superkelas hanya

melalui metode non-private yang disediakan

superkelas dan diwariskan ke subkelas.

(14)

Catatan ( lanjutan )

• Mendeklarasikan variabel instan private dapat membantu programmer dalam melakukan

pengujian, debug dan modifikasi sistem secara benar. Jika subkelas bisa mengakses variabel

instan private superclass-nya, kelas yang mewarisi dari subkelas akan bisa juga mengakses variabel instan tersebut. Hal ini akan memperluas akses ke variabel instan private, sehingga manfaat

penyembunyian informasi akan hilang.

(15)

Relasi Superkelas dan Subkelas

• Contoh

– Hirarki Pewarisan kelas KaryawanPemasaran dan kelas KaryawanTetapPemasaran

• Kelas KaryawanPemasaran

– Atribut: nama, nik, totalJual, persenKomisi

• Kelas KaryawanTetapPemasaran

– Atribut: nama, nik, totalJual, persenKomisi, gajiPokok

(16)

Kelas KaryawanPemasaran

• Turunan (extends) dari kelas Object

• Menggunakan keyword extends

• Setiap kelas di Java merupakan secara default turunan (extends) dari kelas Object

Kecuali kelas Object

• Setiap kelas mewarisi metode dari kelas Object

• Setiap kelas baru secara implisit sebagai turunan (extends) dari kelas Object

Jika bukan sebagai turunan (extends) dari kelas lain

(17)

Catatan

• Compiler Java menetapkan sebagai superkelas adalah kelas Object ketika mendeklarasikan

kelas yang tidak secara eksplisit dituliskan

sebagai turunan (extends) dari kelas Object.

(18)

Kelas KaryawanPemasaran

(19)

Kelas KaryawanPemasaran ( lanjutan )

(20)

Catatan

Kesalahan sintaks akan terjadi bila sebuah metode di superkelas di-override pada subkelas dengan

menggunakan access modifier yang lebih terbatas

jangkauannya. Misalkan: metode public di superkelas tidak bisa menjadi metode protected atau private pada subkelas, sebuah metode protected di superkelas tidak dapat menjadi metode private di subkelas. Karena

perlakuan di atas akan mematahkan relasi "is-a" dimana diperlukan bahwa semua objek dari subkelas dapat

menanggapi panggilan metode yang dideklarasikan

sebagai metode public di superkelasnya.

(21)

Catatan ( lanjutan )

• Jika metode public bisa di-override menjadi metode protected atau private, maka obyek subkelas tidak akan dapat merespon terhadp pemanggilan metode yang sama pada obyek superkelas. Bila metode dideklarasikan

sebagai public di superkelas, maka metode

harus tetap public ketika di-override pada

subkelas baik pewarisan langsung maupun

tidak langsung.

(22)

Tes Kelas KaryawanPemasaran

(23)

Tes Kelas KaryawanPemasaran

( keluaran )

(24)

Kelas KaryawanTetapPemasaran tanpa Pewarisan

• Kelas KaryawanTetapPemasaran

– Secara implisit turunan dari kelas Object

– Sebagian besar kode program mirip dengan kelas KaryawanPemasaran, meliputi:

variabel instan private

metode public

konstruktor

– Tambahan

variabel instan gajiPokok

Metode setGajiPokok dan getGajiPokok

(25)

Contoh: Kelas KaryawanTetapPemasaran

tanpa Pewarisan

(26)

Contoh: Kelas KaryawanTetapPemasaran

tanpa Pewarisan ( lanjutan )

(27)

Catatan

• Copy dan paste kode program dari satu kelas ke kelas lainnya dapat menambah peluang terjadi kesalahan di beberapa file kode

program. Untuk menghindari duplikasi kode (dan mungkin terjadi kesalahan), penggunaan konsep pewarisan, bukan cara "copy-and-

paste", dalam situasi di mana diinginkan

mendeklarasikan kelas yang dapat "menyerap"

variabel instan dan metode dari kelas lain.

(28)

Catatan

• Dengan konsep pewarisan, variabel instan dan metode umum dari semua kelas dalam hirarki pewarisan dideklarasikan di superclass-nya. Bila perubahan diperlukan dari fitur-fitur umum,

pengembang perangkat lunak hanya perlu

membuat perubahan di superclass-subclass-nya

kemudian mewarisikan perubahan tersebut. Tanpa pewarisan, perubahan perlu dilakukan untuk semua file kode program yang berisi salinan dari kode

tersebut.

(29)

Catatan

• Kelas KaryawanTetapPemasaran

– Turunan dari kelas KaryawanPemasaran – “is-a” kelas KaryawanPemasaran

– Memiliki variabel instan gajiPokok

– Mewarisi anggota public dan protected

– Konstruktor tidak diwariskan

(30)

Kelas KaryawanTetapPemasaran ( turunan

kelas KaryawanPemasaran )

(31)

Kelas KaryawanTetapPemasaran ( turunan

kelas KaryawanPemasaran )

(32)

Catatan

• Sebuah kesalahan kompilasi terjadi jika

konstruktor subclass memanggil salah satu konstruktor superclass dengan argumen yang tidak sama persis dengan jumlah dan jenis

parameter yang ditentukan dalam salah satu

deklarasi konstruktor superclass.

(33)

Anggota Protected

• Penggunaan variabel instan protected

– Dimungkinkan subkelas untuk langsung

mengakses variabel instan protected di superclass- nya

– Anggota protected superclass diwariskan ke

semua subclases-nya

(34)

Anggota Protected ( lanjutan )

• Penggunaan variabel instan protected

– Keuntungan

Subclass dapat memodifikasi nilai data secara langsung

Meningkatkan kinerja walau sedikit

Terhindar dari metode set/get

– Kerugiannya

Tidak ada pemeriksaan validitas

subclass dapat menetapkan nilai ilegal

Implementasi tergantung

metode subclass dimungkinkan tergantung pada implementasi superclass perubahan implementasi superclass dapat mengakibatkan modifikasi

subclass

» Perangkat lunak lemah

(35)

Catatan

• Gunakan akses modifier protected ketika

superclass harus menyediakan metode yang

hanya untuk subclass dan kelas-kelas lain dalam paket yang sama, tetapi tidak untuk kelas lainnya.

• Mendeklarasikan variabel instan private di superkelas (sebagai lawan protected)

memungkinkan penggunaan variabel instan

superclass tersebut tanpa mempengaruhi

implementasi subkelas-nya

(36)

Review

• Gunakan praktek rekayasa perangkat lunak yang baik dengan:

– Deklarasikan variable instan sebagai private

– Menambahkan metode set dan get sebagai public – Gunakan metode set dan get tersebut untuk

mendapatkan nilai dari variabel instan.

(37)

Catatan (lanjutan)

• Ketika metode superkelas di-override di subkelas, sering versi subkelas memanggil versi superkelas untuk melakukan sebagian

pekerjaan. Kelalaian pemberian awalan super.

pada pemanggilan metode superkelas menyebabkan pemanggilan metode di subkelas akan memanggil dirinya sendiri

sehingga terjadi kesalahan berupa rekursi tak

terbatas (infinite recursion).

(38)

Konstruktor Subkelas

• Instansiasi objek subkelas

– Sebagai serangkaian dari pemanggilan konstruktor

• Konstruktor subkelas memanggil konstruktor superkelas

– Implisit atau eksplisit

• Didasarkan hirarki pewarisan

– Konstruktor terakhir yang dipanggil adalah konstruktor Objek dipilih

– Konstruktor subkelas dieksekusi paling akhir

(39)

Catatan

• Bahasa pemrograman Java menetapkan

bahwa jika konstruktor tidak menentukan nilai variabel instan, maka variabel instan tersebut akan diinisialisasi ke nilai default (misalkan: 0 untuk tipe numerik primitif, false untuk

boolean, dan null untuk referensi).

(40)

Penggunaan Pewarisan di RPL

• Disesuaikan terhadap perangkat lunak yang ada

– Pewarisan dari kelas yang sudah ada (dibuat)

Penyertaan anggota tambahan

Pendefinisian kembali (override) anggota superkelas

Tidak ada modifikasi kode sumber superkelas

Link ke kode objek

– Tidak tergantung terhadap software vendor (ISV)

Sebagai pengembangan kode berlisensi

Tersedia dalam format object-code

Pengguna dapat memperoleh kelas baru

Tanpa memodifikasi kode sumber yang telah dibuat sebelumnya

(41)

Catatan

• Terlepas dari praktek pemrogram bahwa sebenarnya konsep pewarisan kelas tidak perlu melakukan modifikasi kode

sumber dari superkelas, tetapi seringkali pemrogram sering bersikeras ingin melihat kode sumber dari superkelas untuk memahami bagaimana superkelas diimplementasikan.

Pemrogram hanya ingin memastikan bahwa kelas yang

dikembangkan benar-benar solid, yaitu kelas yang berkinerja baik dan dapat diimplementasikan dengan aman.

(42)

Catatan

• Pada tahap desain sistem berorientasi objek, perancang

sering menemukan bahwa terdapat beberapa kelas tertentu memiliki hubungan erat. Perancang harus memasukkan

beberapa variabel instan dan metode bersifat umum ke dalam kode sumber dari superkelss. Kemudian perancang harus

menggunakan konsep pewarisan untuk mengembangkan subkelas, sehingga dapat memasukkan anggota tambahan dari superkelas sebelumnya untuk kemudian diwariskan ke subkelas.

• Jika deklarasi subkelas tidak mengubah kode sumber

superkelasnya, maka penggunaan pewarisan akan dapat menjaga integritas superkelas.

(43)

Catatan

Sama seperti perancang sistem non-object-oriented, mereka juga harus menghindari proliferasi (pengembangan) fungsi/subprogram yang telah ada/dibuat, perancang sistem berorientasi objek harus menghindari proliferasi kelas. Proliferasi tersebut menciptakan masalah manajemen dan dapat menghambat usabilitas perangkat lunak, karena dalam kelas pustaka yang besar akan menyulitkan untuk menemukan kelas yang paling tepat. Sebagai alternatif adalah membuat sedikit kelas yang menyediakan fungsionalitas yang lebih besar, tetapi kelas tersebut bisa-jadi rumit.

Jika subkelas lebih besar dari yang dibutuhkan (misalnya, memiliki terlalu banyak fungsi), memori dan pengolahan sumber daya

mungkin menjadi boros/sia-sia. Pewarisan superkelas sebaiknya yang berisi fungsi sesuai kebutuhan.

(44)

Kelas Object

• Beberapa metode yang terdapat di kelas Object:

– clone – equals – finalize – getClass – hashCode

– notify, notifyAll, wait – toString

Referensi

Dokumen terkait

Proses belajar mengajar di dalam kelas bisa membuat para murid menjadi bosan jika guru yang bersangkutan menggunakan metode yang sama dari pertemuan pertama sampai dengan

Lebih leluasa untuk memilih mana proses bisnis yang harus tetap berjalan di private cloud dan mana proses bisnis yang bisa dipindahkan ke public cloud dengan tetap menjamin