• Tidak ada hasil yang ditemukan

– Pemanggilan dengan cara yang sama (nama metode dan parameter yang sama) dapat menghasilkan "banyak bentuk"

N/A
N/A
Protected

Academic year: 2022

Membagikan "– Pemanggilan dengan cara yang sama (nama metode dan parameter yang sama) dapat menghasilkan "banyak bentuk""

Copied!
54
0
0

Teks penuh

(1)

POLYMORPHISM

(2)

Pengantar

• Polimorfisme

– Memungkinkan "pemrograman berbentuk umum“

– Pemanggilan dengan cara yang sama (nama metode dan parameter yang sama) dapat menghasilkan "banyak bentuk"

• Interface

– Diimplementasikan oleh kelas untuk menetapkan

fungsi umum untuk kelas-kelas yang bisa-jadi tidak

memiliki relasi

(3)

Manfaat Polimorfisme

• Polimorfisme

– Ketika sebuah metode dipanggil melalui variabel superkelas, didasarkan atas tipe referensi variabel superkelas, dipanggil versi metode subkelas yang tepat/sesuai.

– Nama metode dan parameter yang sama dapat

melakukan tindakan berbeda, tergantung tipe objek (kelas) tempat metode dipanggil

– Memfasilitasi penambahkan kelas baru pada sistem dengan sedikit modifikasi pada kode program

(4)

Catatan

• Polimorfisme memungkinkan programmer dapat menangani generalisasi dan membiarkan komputer menangani secara spesifik. Pemrogram dapat memerintahkan objek untuk

berperilaku sesuai objek , tanpa mengetahui tipe obyek (asalkan objek memiliki hirarki pewarisan yang sama).

• Polimorfisme meningkatkan ekstensibilitas: Software yang

memanggil perilaku polimorfik tidak bergantung pada tipe objek yang mengirim pesan. Tipe objek baru yang dapat merespon

terhadap panggilan metode yang ada dapat dimasukkan ke dalam sistem tanpa memerlukan modifikasi dari sistem

sebelumnya. Hanya kode klien yang menginstantiasi objek baru harus dimodifikasi untuk mengakomodasi kelas baru

(5)

Perilaku Polimorfik

• Sebuah referensi superkelas dapat ditujukan pada obyek subkelas

– Hal ini dimungkinkan karena obyek subkelas merupakan obyek superkelas juga

– Ketika memanggil metode dari referensi di atas, tipe objek direferensikan ke objek sebenarnya, bukan

tipe referensi, menentukan metode yang dipanggil

• Sebuah referensi subkelas dapat ditujukan pada obyek superkelas hanya jika objek tersebut

di-”downcasted”

(6)

Contoh Polimorpisme

(7)

Contoh Polimorpisme ( lanjutan )

(8)

Kelas dan Metode Abstrak

• Kelas abstrak

– Kelas bersifat umum untuk membuat objek

– Digunakan hanya sebagai superkelas abstrak untuk

diimplementasikan pada subkelas dan untuk mendeklarasikan variabel referensi

– Banyak hirarki pewarisan memiliki superkelas abstrak yang ditempatkan beberapa level di posisi atas

– Keyword abstract

• Digunakan untuk mendeklarasikan kelas abstrak

• Juga digunakan untuk mendeklarasikan sebuah metode abstrak

– Kelas abstrak biasanya mempunyai satu atau lebih metode abstrak

– Semua implementasi subkelas dari superkelas abstrak harus mengoverride semua metode abstrak warisan

(9)

Kelas dan Metode Abstrak (

lanjutan

)

• Kelas Iterator

– Seperti sebuah array objek, dapat dipakai

menjelajah di semua objek dalam sekumpulan objek (array objek)

– Sering digunakan dalam pemrograman polimorfik

untuk dapat menjelajah sekumpulan referensi objek

dari berbagai tingkat hirarki pewarisan.

(10)

Catatan

• Sebuah kelas abstrak mendeklarasikan atribut dan metode umum dari berbagai kelas dalam hirarki kelas. Sebuah kelas abstrak biasanya berisi satu atau lebih metode abstrak

dimana subkelas wajib mengoverride jika subkelas harus

dibuat objek. Variabel instan dan implementasi metode dari kelas abstrak harus mengikuti aturan dalam pewarisan.

• Kesalahan kompilasi akan terjadi ketika melakukan instansiasi dari kelas abstrak.

• Tidak melakukan implementasi metode abstrak superkelas di subkelas akan menghasilkan kesalahan kompilasi kecuali bila di subkelas juga dideklarasikan sebagai metode abstrak.

(11)

Hirarki Pewarisan Karyawan

Karyawan Karyawan

KaryawanHarian

KaryawanHarian KaryawanKomisiKaryawanKomisi

KaryawanKomisiTetap KaryawanKomisiTetap KaryawanTetap

KaryawanTetap

(12)

Catatan

• Sebuah subkelas dapat mewarisi "interface" atau "implementasi"

dari superkelas. Hierarki dirancang untuk pewarisan

implementasi cenderung memiliki fungsionalitas yang tinggi dalam hirarki. Setiap subkelas baru mewarisi satu atau lebih metode yang diimplementasi di superkelas, dan subkelas dapat menggunakan implementasi superkelas tersebut.

• Hierarki dirancang untuk pewarisan “interface” yang cenderung memiliki fungsionalitas lebih rendah dalam hirarki. Superkelas menentukan satu atau lebih metode abstrak yang harus

dideklarasikan untuk setiap kelas implementasinya dalam hirarki, dan subkelas secara individu harus melakukan override metode ini untuk menyediakan implementasi subkelas yang spesifik.

(13)

Catatan

• Superkelas abstrak: Karyawan

– Metode getGaji() dideklarasikan abstrak

• Tidak ada implementasi dapat diberikan untuk metode getGaji() di kelas abstrak Karyawan

– Sebuah variabel array Karyawan akan menyimpan referensi pada obyek-obyek subkelas

• pemanggilan metode getGaji() dari variabel-variabel ini akan memanggil versi metode getGaji() yang sesuai

(14)

Contoh Polimorpisme

(15)

Contoh Polimorpisme (

lanjutan

)

(16)

Contoh Polimorpisme ( lanjutan )

(17)

Contoh Polimorpisme ( lanjutan )

(18)

Contoh Polimorpisme ( lanjutan )

(19)

Contoh Polimorpisme ( lanjutan )

(20)

Contoh Polimorpisme ( lanjutan )

(21)

Contoh Polimorpisme ( lanjutan )

(22)

Contoh Polimorpisme ( lanjutan )

(23)

Contoh Polimorpisme ( lanjutan )

(24)

Contoh Polimorpisme ( lanjutan )

(25)

Contoh Polimorpisme ( lanjutan )

(26)

Contoh Polimorpisme ( lanjutan )

(27)

Proses Polimorfisme

• Pengikatan dinamis (Dinamic Binding)

– Juga disebut sebagai “late binding”

– Pemanggilan metode override dijalankan pada

waktu eksekusi, berdasarkan pada tipe objek yang dirujuk

• Operator instanceof

– Menentukan apakah suatu obyek adalah sebuah

instansiasi dari tipe tertentu

(28)

Catatan

• Menetapkan (assigning) variabel superkelas ke variabel subkelas (tanpa menggunakan operator cast)

mengakibatkan terjadi kesalahan kompilasi.

• Jika pada waktu eksekusi referensi dari objek subkelas telah di-assign ke sebuah variabel salah satu

superkelas, akan dapat diterima untuk cast variabel referensi superkelas ke referensi subkelas. Sebelum melakukan operasi cast seperti itu, gunakan operator instanceof untuk memastikan bahwa objek tersebut memang sebuah objek dari tipe subkelas yang sesuai.

(29)

Catatan

• Ketika downcasting obyek, ClassCastException terjadi, jika pada waktu eksekusi objek tidak memiliki relasi “is-a” dengan tipe yang

ditentukan dalam operator cast. Sebuah objek dapat di-cast hanya untuk tipe-nya sendiri

atau dengan tipe salah satu dari superkelas

nya.

(30)

Proses Polimorfisme (

lanjutan

)

• Downcasting

– Mengkonversi referensi superkelas ke sebuah referensi subkelas

– Hanya diperbolehkan jika objek memiliki relasi “is-a”

dengan subkelas

• metode getClass

– Diwarisi dari kelas Object

– Mengembalikan (return) sebuah objek dari tipe Class

• Metode getName dari kelas Class

– Mengembalikan (return) dari nama Class

(31)

Catatan

• Aturan assignment superclass dan subclass

– Assigning (penugasan) sebuah referensi superkelas ke variabel superkelas secara langsung

– Assigning (penugasan) sebuah referensi subkelas ke variabel subkelas secara langsung

– Assigning (penugasan) sebuah referensi subkelas ke variabel superkelas dibolehkan karena relasi “is-a”

• Referensi pada subclass – hanya anggota melalui variabel superkelas merupakan kesalahan kompilasi

– Assigning (penugasan) referensi superkelas ke variabel subkelas mendatangkan kesalahan kompilasi

• Downcasting bisa mengatasi kesalahan ini

(32)

Metode dan Kelas Final

• Metode final

– Tidak dapat di-override di subkelas

– Metode private dan static secara implisit adalah final – Metode final diselesaikan pada waktu kompilasi, ini

disebut sebagai “static binding”

• Compiler dapat mengoptimalkan dengan kode inlining

• Kelas final

– Tidak dapat di-extends oleh subkelas

– Semua metode di kelas final secara implisit final

(33)

• Compiler dapat melakukan inline pemanggilan metode final inline dan akan melakukannya

untuk metode final kecil, sederhana. Inlining tidak melanggar prinsip enkapsulasi atau

penyembunyian informasi, tetapi tidak

meningkatkan kinerja karena menghilangkan overhead saat pemanggilan metode.

• Deklarasi subclass sebagai turunan dari kelas

final akan menghasilkan kesalahan kompilasi.

(34)

• Dalam Java API, sebagian besar kelas tidak dideklarasikan sebagai final. Hal ini

memungkinkan pewarisan dan polimorfisme – sebagai kapabilitas utama pada pemrograman berorientasi obyek. Namun, dalam beberapa kasus, perlu mendeklarasikan kelas final –

terutama untuk alasan keamanan.

(35)

Pembuatan dan Pemanfaatan interfase

• Interface

– Keyword interface

– Hanya berisi konstanta dan metode abstract

• Semua field secara implisit bersifat public, static dan final

• Semua metode secara implisit adalah metode public abstract

– Kelas dapat mengimplementasikan interface

• Kelas harus mendeklarasikan setiap metode dalam interface menggunakan penanda yang sama atau kelas harus dideklarasikan abstract

–Biasanya digunakan ketika kelas berlainan perlu untuk berbagi metode umum dan konstanta

–Biasanya dideklarasikan dalam file mereka sendiri dengan nama yang sama dengan nama interface dengan ekstensi .java.

(36)

Catatan

• Deklarasi metode interface tanpa menggunakan

keyword public dan abstract sangat disarankan karena secara implisit atau default sudah demikian sehingga tidak berlebihan dalam deklarasi metode interface .

Demikian pula, konstanta dideklarasikan tanpa keyword public dan static dan final karena akan berlebihan.

• Kegagalan implementasi metode interface pada sebuah kelas yang mengimplementasikan interface tersebut

dan menghasilkan kesalahan sintaks menunjukkan bahwa kelas tersebut harus dideklarasikan abstract.

(37)

Contoh Penggunaan interfase

• Interface Pembayaran

– Berisi metode getJumlahPembayaran

– Diimplementasi di kelas Faktur dan kelas Karyawan

• Representasi UML untuk interface

– interface dibedakan dari kelas dengan menempatkan kata "interface" dalam stereotype («dan») diatas nama interface

– Hubungan antara kelas dan interface disebut sebagai realisasi

• Sebuah kelas “realisasi" metode interface

(38)

Catatan

• Ketika mendeklarasikan sebuah metode dalam sebuah interface, pilih nama metode yang

menggambarkan tujuan metode tersebut

secara umum, karena metode tersebut dapat

diimplementasikan oleh berbagai kelas yang

tidak berhubungan.

(39)

Hirarki Pewarisan Pembayaran

<<interface>>

Pembayaran

<<interface>>

Pembayaran

Faktur

Faktur PegawaiPegawai

PegawaiTetap PegawaiTetap

(40)

Contoh Interface

(41)

Contoh Interface ( lanjutan )

(42)

Contoh Interface ( lanjutan )

(43)

Contoh Interface ( lanjutan )

(44)

Contoh Interface ( lanjutan )

(45)

Contoh Interface ( lanjutan )

(46)

Contoh Interface ( lanjutan )

(47)

Contoh Interface ( lanjutan )

(48)

Contoh Interface ( lanjutan )

(49)

Contoh Interface ( lanjutan )

(50)

Implementasi Interface

• Sebuah kelas dapat mengimplementasikan lebih dari satu interface sesuai kebutuhan

– Gunakan tanda koma untuk memisahkan antar satu interface dengan interface lainnya, tentunya dituliskan setelah keyword implements

– Contoh:

public class NamaKelas extends NamaSuperKelas implements NamaInterface1, NamaInterface2,…

(51)

• Obyek setiap subkelas dari kelas yang

mengimplementasikan interface juga dapat dianggap sebagai obyek interface

– Sebuah referensi ke sebuah obyek subkelas dapat ditugaskan (be assigned) ke variabel interface jika superkelas mengimplementasikan interface

tersebut

Implementasi Interface (

lanjutan

)

(52)

• Pewarisan dan interface serupa dalam implementasinya sebagaimana relasi "is-a". Sebuah objek dari kelas yang

mengimplementasikan interface dapat dianggap sebagai objek bertipe interface. Sebuah objek dari setiap subkelas dari kelas

yang mengimplementasikan interfacejuga dapat dianggap sebagai sebuah objek dari tipe interface.

• Relasi "is-a" hubungan antara superkelas dan subkelas, dan antara interface dan kelas yang mengimplementasikan-nya, berlaku

ketika mengirimkan objek ke metode (sebagai parameter). Ketika parameter metode menerima variabel dari tipe superkelas atau interface, metode memproses objek yang diterima sebagai

argumen polymorphically.

Catatan

(53)

• Penggunaan referensi superkelas, polymorphically dapat memanggil metode secara polimorfik yang ditentukan dalam deklarasi superkelas (dan di kelas Object).

Penggunaan referensi interface, dapat memanggil secara polimorfik metode apapun yang ditetapkan dalam

deklarasi interface (dan di kelas Object).

• Semua metode kelas Object dapat dipanggil dengan menggunakan referensi dari tipe interface. Sebuah

referensi mengacu pada suatu objek, dan semua obyek mewarisi metode dari kelas Object.

Catatan

(54)

• Interface dapat digunakan untuk mendeklarasikan

konstanta yang digunakan dalam banyak deklarasi kelas.

– Konstanta tersebut secara implisit adalah public, static dan final.

– Gunakan deklarasi import static sehingga memungkinkan penggunaan konstanta tersebut hanya dengan menulis nama konstanta-nya.

• Pada J2SE 5.0, hal di atas dianggap sebagai praktek pemrograman yang lebih baik untuk menciptakan sekumpulan konstanta sebagai enumerasi dengan keyword enum.

Catatan

Referensi

Dokumen terkait

Perbedaan : Komunikasi Antar pribadi dalam penelitian peneliti hanya di gunakan untuk membantu dalam memaparkan tujuan peneliti, berbeda dengan penelitian terdahulu

membujur pegunungan Meratus Utara dari barat ke timur yang juga menjadi.. batas wilayah Provinsi

Namun demikian tidak serta merta pembagian dengan sistem sama rata dan tanah gantungan diberikan kepada isteri seperti yang dipraktikkan pada keluarga Bapak Muhammad Khayun

Ketiganya adalah (1) kearifan berbeda dengan karakteristik kepribadian lainnya karena di dalam konsep tersebut diintegrasikan aspek kognitif, afektif, dan motivasi, (2)

Hasil penelitian menunjukkan bahwa pengembangan LKPD interaktif berbasis web dengan pendekatan CTL telah memenuhi kriteria valid, praktis, dan efektif untuk digunakan

Dari cerita di atas menunjukkan bahwa adat istiadat kebudayaan Karo yang asli diduga telah mengalami pergeseran nilai budaya Batak Karo pada masyarakat desa Durin pitu,

Hasil belajar yang didapatkan pada pra siklus adalah dengan jumlah siswa yang tuntas 27 dan siswa yang belum tidak tuntas sebanyak 9 siswa, dengan persentase

Tujuan pemberian makanan tambahan pada bayi usia lebih dari 6 bulan adalah untuk menambah energi dan zat-zat gizi yang diperlukan bayi karena ASI tidak dapat mencukupi kebutuhan