Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

POLYMORPHISM.

Presentasi serupa


Presentasi berjudul: "POLYMORPHISM."— Transcript presentasi:

1 POLYMORPHISM

2 Pengantar Polimorfisme Interface
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
KaryawanHarian KaryawanKomisi KaryawanTetap KaryawanKomisiTetap

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 Kelas 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 Faktur Pegawai 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 Implementasi Interface (lanjutan)
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

52 Catatan 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.

53 Catatan 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.

54 Catatan 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.


Download ppt "POLYMORPHISM."

Presentasi serupa


Iklan oleh Google