Anda di halaman 1dari 7

PEMROGRAMAN 4 (OBJECT 1) Polymorphism Kelompok 3

Dosen : Dipl. Inf. Aly Akbar, B.Sc.,S.T. Disusun Oleh : Mochamad Yagi (0609U068) Kiki Andrianto (0609U080) Rifky E (0609U048) Risya Saumi R (0609U091) Nadia N (0608002)

Fakultas Teknik Teknik Informatika 2011

Polimorfisme dalam pemrograman berorientasi obyek


Salah satu pilar Pemrograman Berorientasi Objek adalah

polymorphism yaitu kemampuan objek bertipe sama beraksi berbeda terhadap pesan yang sama. Polymorphism berarti mempunyai banyak bentuk juga merupakan salah satu sifat class yang memungkinkan sebuah method mempunyai nama yang sama, namun memiliki aksi yang berbeda. Polymorphism adalah pemikiran bahwa objek dinamis suatu class dasar dapat berperilaku seperti class turunan. Jika objek menunjuk class dasar maka ia perilaku seperti class dasar, dan jika ia menunjuk class turunan ia akan berperilaku seperti class turunan. Dalam hal ini obkjek memiliki beberapa bentuk, tergantung ia menunjuk kemana. Dalam hal ini suatu objek atau class dan perubahan perilakunya adalah dari kelas dasar ke kelas turunan, tidak bisa objek kelas turunan menunjuk ke kelas dasar. Polimorfisme dimungkinkan karena adanya mekanisme ikatan dinamis, ikatan ini adalah ikatan yang terjadi ketika program dijalankan (run-time), ikatan yang terjadi pada saat compiling disebut ikatan dinamis. Ikatan dinamis hanya akan terjadi antara suatu objek dinamis dengan metode yang dinamis juga, dalam hal ini metode virtual (maya). Polimorfisme Subtipe , hampir secara universal disebut hanya polimorfisme dalam konteks pemrograman berorientasi obyek , adalah kemampuan untuk membuat sebuah variabel, fungsi, atau objek yang memiliki lebih dari satu bentuk. The word derives from the Greek "" meaning "having multiple forms". Kata ini berasal dari "" Yunani yang berarti "memiliki berbagai bentuk". Artikel ini merupakan pengantar diakses ke topik, yang membatasi perhatian terhadap paradigma berorientasi objek. Pada prinsipnya, polimorfisme namun dapat timbul dalam konteks komputasi lainnya dan saham kesamaan penting dengan konsep degenerasi dalam biologi. Tujuan dari polimorfisme adalah untuk menerapkan gaya pemrograman yang disebut pesan-melewati di mana objek dari berbagai jenis mendefinisikan interface umum operasi bagi pengguna. Dalam bahasa strongly typed,

polimorfisme biasanya berarti bahwa tipe A entah berasal dari tipe B, atau C jenis mengimplementasikan sebuah interface yang merupakan tipe B. Dalam lemah mengetik bahasa jenis secara implisit polimorfik. Operator overloading dari operator numerik (+, -, *, dan /) memungkinkan perlakuan polimorfik dari berbagai tipe numerik: integer, unsigned integer, float, desimal, dll, masing-masing yang memiliki rentang yang berbeda, pola bit, dan representasi. Contoh lainnya adalah penggunaan "+" operator yang memungkinkan perlakuan yang sama atau polimorfik nomor (penambahan), string (penggabungan), dan daftar (lampiran). This is a lesser used feature of polymorphism. Ini adalah fitur yang digunakan lebih rendah dari polimorfisme. Penggunaan utama dari polymorphism di industri ( pemrograman berorientasi obyek teori) adalah kemampuan benda milik jenis yang berbeda untuk merespon metode , lapangan , atau properti panggilan dengan nama yang sama, masing-masing menurut sebuah perilaku tipe yang tepat. Programmer (dan program) tidak harus mengetahui dengan tepat jenis objek terlebih dahulu, dan perilaku yang tepat ditentukan pada saat run-time (ini disebut terlambat mengikat atau dinamis yang mengikat ). Objek yang terlibat hanya perlu untuk menyajikan sebuah kompatibel antarmuka untuk klien '( rutinitas panggilan ). Artinya, harus ada atau internal metode publik, bidang, peristiwa, dan properti dengan nama yang sama dan sama set parameter di semua superclasses , subclass dan interface. Pada prinsipnya, jenis objek mungkin tidak terkait, tapi karena mereka berbagi interface umum, mereka sering diimplementasikan sebagai subclass dari superclass yang sama. Though it is not required, it is understood that the different methods will also produce similar results (for example, returning values of the same type). Meskipun tidak diperlukan, dapat dipahami bahwa metode yang berbeda juga akan menghasilkan hasil yang sama (misalnya, mengembalikan nilai dari jenis yang sama). Polimorfisme ini tidak sama dengan overloading metode atau metode override . Polimorfisme hanya berkaitan dengan aplikasi spesifik implementasi untuk sebuah antarmuka atau tempat kelas generik lebih. Metode overloading

mengacu pada metode yang memiliki nama yang sama tetapi berbeda tanda tangan di dalam kelas yang sama. Method overriding is where a subclass replaces the implementation of one or more of its parent's methods. Metode utama adalah di mana subclass menggantikan pelaksanaan satu atau lebih metode orangtua-nya. Baik overloading metode atau metode utama yang dengan sendirinya implementasi polimorfisme. Pada dasarnya ada 2 tipe polymorphism, yaitu: 1. Static atau trivial Merupakan, function overloading (penggunaan kembali nama fungi yang sama tapi dengan argumen yang berbeda) yang terbagi dalam 3 signature yaitu: - Jenis Array - Letak Array - Type Array Contoh function overloading : void tambah (int a, int b); void tambah(float d, float c); 2. Dynamic atau true Merupakan function overriding (sebuah fungsi dalam class turunan yang memiliki nama, return type argumen function yang sama dengan fungsi dalam class induk). Menggunakan virtual method. Pure Virtual Method (tanpa function body) contoh : virtual void jalan() = 0; Squasi Virtual Method (ada function body) contoh : virtual void info() {;}

C++
#include <iostream> # Include <iostream.h> #include <string> # Include <string>

using namespace std ; using namespace std; class Animal kelas Hewan {{ public : publik: Animal ( const string & name ) : name ( name ) { } Hewan (const string & nama): nama (nama) {} virtual string talk ( ) = 0 ; string virtual talk () = 0; const string name ; const string nama; } ; }; class Cat : public Animal class Cat: public Animal {{ public : publik: Cat ( const string & name ) : Animal ( name ) { } Cat (const string & nama): Animal (nama) {} virtual string talk ( ) { return "Meow!" ; } bicara virtual string () {return "Meow!";} } ; }; class Dog : public Animal class Anjing: public Animal {{ public : publik: Dog ( const string & name ) : Animal ( name ) { } Anjing (const string & nama): Animal (nama) {} virtual string talk ( ) { return "Arf! Arf!" ; } string virtual talk () {return "Arf!! Arf";} } ; }; // prints the following: / / Mencetak berikut: // / / // Missy: Meow! / / Missy: Meow! // Mr. Mistoffelees: Meow! / / Mr Mistoffelees: Meow! // Lassie: Arf! / / Lassie: Arf! Arf!! Arf! // / / int main ( ) int main () {{ Animal * animals [ ] = Hewan * hewan [] = {{ new Cat ( "Missy" ) , Cat baru ("Missy"), new Cat ( "Mr. Mistoffelees" ) , Cat baru ("Mr Mistoffelees"),

new Dog ( "Lassie" ) baru Dog ("Lassie") } ; }; for ( int i = 0 ; i < 3 ; i ++ ) for (int i = 0; i <3; i + +) {{ cout << animals [ i ] - > name << ": " << animals [ i ] - > talk ( ) << endl ; cout <<binatang [i] -> nama <<":" <<binatang [i] -> talk () <<endl; delete animals [ i ] ; menghapus binatang [i]; }} return 0 ; return 0; }}

Perhatikan bahwa talk() metode secara eksplisit dinyatakan sebagai


virtual

. Hal ini karena polimorfis pemanggilan metode non-sangat efisien

dalam C + + dan pemanggilan metode polimorfik secara kasar setara dengan memanggil fungsi melalui pointer yang disimpan dalam array. Untuk mengambil keuntungan dari efisiensi-polimorfik panggilan non, semua metode panggilan diperlakukan sebagai non-polimorfik, kecuali secara eksplisit ditandai sebagai virtual oleh pengembang. Contoh codingan polymorphism: #include <> /* class DENGAN virtual( POLYMORPHISME)==========*/ class tbujursangkar_vir { protected : double panjang; //panjang sisi bujur sangkar public: tbujursangkar_vir(double pj) {panjang = pj;} double panjangf() {return panjang;} virtual double lebarf() {return panjang;} double luasf() {return panjangf()*lebarf();} double keliling() {return 4*panjang;} };

class tpersegipanjang_vir:public tbujursangkar_vir { protected: double lebar; //lebar persegi panjang public: tpersegipanjang_vir(double pj, double lb): tbujursangkar_vir(pj) {lebar = lb;} virtual double lebarf() {return lebar;} double keliling() {return 2*panjang+2*lebar;} }; //=========================================main============// void main() { double a,b; tbujursangkar_vir *bujur = new tbujursangkar_vir(a); tpersegipanjang_vir *persegi = new tpersegipanjang_vir(a,b); cout<<"===========hasil pada class tbujursangkar================"< cout<<"panjang = "< cout<<"lebar = "< cout<<"luas = "< cout<<"keliling = "<< cout<<"===========hasil pada class tpersegipanjang================"< cout<<"panjang = "< cout<<"lebar = "< cout<<"luas = "< cout<<"keliling = "< delete bujur; delete persegi; system("pause"); }

Anda mungkin juga menyukai