POLYMORPHISM.

Slides:



Advertisements
Presentasi serupa
PERTEMUAN 4 PEMROGRAMAN API OOP Concept mudafiqriyan.com.
Advertisements

OOP berputar pada konsep dari obyek yang merupakan elemen dasar dari program Anda. Ketika kita membandingkan dengan dunia nyata, kita dapat menemukan.
Pemrograman Berorientasi Objek
Nur Hayatin, S.ST Referensi : Gunadarma University.
Nur Hayatin, S.ST Jurusan Teknik Informatika Universitas Muhammadiyah Malang Sem Genap 2010.
Abstract Class & Interface
Inheritance.
Polymorphism Viska Mutiawani, M.Sc.
Pemograman beorientasi objek
di OBJECT ORIENTED PROGRAMMING [OOP] Oleh H. SUMIJAN, Ir, M.Sc
Modul 1- Review Java.
Overriding, Overloading, Polymorphism
Inheritance Ery Setiyawan Jullev A.
7 Rekayasa Sistem Konsep Utama OOP Dedy Alamsyah, S.Kom.
Overriding, Overloading, Polymorphism
POLIMORFISME 2 Imam Fahrur Rozi 01.
Encapsulation, Inheritance, polymorphism, dan interface
Desain Berorientasi Obyek dan UML
INHERITANCE, POLYMORPHISM, DAN INTERFACE
Pewarisan, Polimorfisme, dan Interface
Inheritance (Pewarisan)
ABSTRACTION, ENCAPSULATION, INHERITANCE & POLYMORPHISM
Pemrograman Berorientasi Obyek Oleh Tita Karlita
- PERTEMUAN 6- INTERFACE
KELAS INNER, KELAS ABSTRACT, DAN INTERFACE
Abstract Class.
Pemrograman Berorientasi Obyek dengan JAVA Interface
Object Oriented Programming with JAVA 2011/2012
Polymorphism (bag. 2).
Inheritance, polymorphism, dan interface
Pemrograman Berorientasi Obyek (PBO)
Class and Object Matakuliah : XXXX / Algoritma dan Metode Object Oriented Programming II Pertemuan : 2 Tahun : 2008 Versi : 1/0.
INHERITANCE (Oleh : Nur Hayatin, S.ST)
Algoritma &Pemrograman 1
Pertemuan 6 PEWARISAN AND POLYMORPHISM
Polymorphism Pertemuan 9 Matakuliah: M0864/Programming I Tahun: 2009.
POLIMORFISME.
KELAS GENERIK.
Kelas A dapat memiliki referensi ke obyek dari kelas- kelas lain sebagai anggota. Kadang-kadang disebut sebagai hubungan “has-a”. Sebagai contoh, sebuah.
POLYMORPHISM, ABSTRACT CLASS DAN INTERFACE
Access Modifier.
Inheritance dan Kata Kunci static
Pemograman Berorientasi Objek
POLYMORPHISM, ABSTRACT CLASS DAN INTERFACE
Pewarisan Disusun Oleh: Reza Budiawan Untuk:
BAB ENCAPSULATION ( Enkapsulasi )
Abstract Class.
Outline: Abstract Class Interface Boxing dan Unboxing
Algoritma & Pemrograman 1
Pemrograman Berorientasi Objek
MEMBUAT CLASS SENDIRI 2.
Interface.
PEWARISAN (Inheritance)
Matakuliah : M0864/Programming I
Inheritance.
Interface Pertemuan 2.
Polymorphism (bag. 2).
Pemrograman Berorientasi Object
Pewarisan (Inheritance)
Encapsulation / Visibility, Getter Setter, Pewarisan, Overloading dan Overriding PBO.
Visibility, Getter Setter, Pewarisan, Overloading dan Overriding
Visibility, Getter Setter, Pewarisan, Overloading dan Overriding
ISTILAH-ISTILAH PENTING PEMROGRAMAN BERBASIS OBYEK
Inisiasi Class dan Object
Encapsulation / Visibility, Getter Setter, Pewarisan, Overloading dan Overriding Pemrograman.
TEORI DAN KONSEP PEMROGRAMAN BERBASIS OBJECT (OOP)
Encapsulation / Visibility, Getter Setter, Pewarisan, Overloading dan Overriding PBO.
Pemrograman berorientasi objek
Pemrograman Berorientasi Objek
Pemrograman Berorientasi Obyek (PBO) Disusun oleh : Khairan Marzuki, M.Kom Fakultas Teknik dan Kesehatan, Universitas Bumigora.
Transcript presentasi:

POLYMORPHISM

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

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

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

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”

Contoh Polimorpisme

Contoh Polimorpisme (lanjutan)

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

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.

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.

Hirarki Pewarisan Karyawan KaryawanHarian KaryawanKomisi KaryawanTetap KaryawanKomisiTetap

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.

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

Contoh Polimorpisme

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

Contoh Polimorpisme (lanjutan)

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

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.

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.

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

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

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

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.

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.

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.

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.

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

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.

Hirarki Pewarisan Pembayaran <<interface>> Pembayaran Faktur Pegawai PegawaiTetap

Contoh Interface

Contoh Interface (lanjutan)

Contoh Interface (lanjutan)

Contoh Interface (lanjutan)

Contoh Interface (lanjutan)

Contoh Interface (lanjutan)

Contoh Interface (lanjutan)

Contoh Interface (lanjutan)

Contoh Interface (lanjutan)

Contoh Interface (lanjutan)

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,…

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

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.

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.

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.