Apa polimorfisme, apa itu, dan bagaimana itu digunakan?
Jika anda berpikir tentang akar yunani dari istilah, itu harus menjadi jelas.
Jadi polimorfisme adalah kemampuan (dalam pemrograman) untuk menyajikan antarmuka yang sama untuk berbeda yang mendasari bentuk-bentuk (tipe data).
Misalnya, dalam banyak bahasa, bilangan bulat dan mengapung secara implisit polimorfik karena anda dapat menambah, mengurangi, mengalikan dan sebagainya, terlepas dari fakta bahwa jenis yang berbeda. Mereka're jarang dianggap sebagai objek dalam istilah yang biasa.
Tapi, dalam cara yang sama, kelas seperti BigDecimal
atau Rasional
atau Imajiner
juga dapat menyediakan operasi-operasi tersebut, meskipun mereka beroperasi pada berbagai jenis data.
Contoh klasik adalah Bentuk
kelas dan semua kelas yang dapat mewarisi dari itu (persegi, lingkaran, dodecahedron, poligon yang tidak teratur, gigi dan sebagainya).
Dengan polimorfisme, masing-masing dari kelas-kelas ini akan memiliki berbagai data yang mendasari. Titik bentuk yang hanya membutuhkan dua koordinat (dengan asumsi itu's dalam ruang dua dimensi saja). Lingkaran kebutuhan pusat dan jari-jari. Persegi atau persegi panjang membutuhkan dua koordinat untuk bagian kiri atas dan kanan bawah sudut dan (mungkin) rotasi. Sebuah poligon yang tidak teratur membutuhkan serangkaian garis.
Dengan membuat class yang bertanggung jawab untuk kode serta data, anda dapat mencapai polimorfisme. Dalam contoh ini, setiap kelas akan memiliki sendiri Draw()
fungsi dan kode klien hanya bisa melakukan:
shape.Draw()
untuk mendapatkan perilaku yang benar untuk setiap bentuk.
Hal ini berbeda dengan cara lama melakukan hal-hal di mana kode itu terpisah dari data, dan anda akan memiliki fungsi seperti drawSquare()
dan drawCircle()
.
Orientasi objek, polimorfisme dan warisan semua erat berkaitan dengan konsep-konsep dan mereka're penting untuk tahu. Ada banyak "peluru perak" selama karir yang panjang yang pada dasarnya hanya melempem tapi OO paradigma telah berubah menjadi salah satu yang baik. Belajar, mengerti, cinta itu - anda'akan senang anda lakukan :-)
(a) saya awalnya menulis itu sebagai lelucon, tapi ternyata itu benar dan, oleh karena itu, tidak lucu. Monomer stirena yang terjadi harus dibuat dari karbon dan hidrogen, C8Jam8
, dan polistirena dibuat dari kelompok itu, (C8H8)n
.
Mungkin aku harus menyatakan bahwa polip adalah banyaknya kemunculan huruf p
meskipun, sekarang bahwa saya've harus menjelaskan lelucon, bahkan yang doesn't tampak lucu baik.
Kadang-kadang, anda hanya harus berhenti sementara anda're balik :-)
Polimorfisme adalah ketika anda dapat memperlakukan suatu objek sebagai versi generik dari sesuatu, tetapi ketika anda mengaksesnya, kode menentukan yang tepat jenis dan panggilan kode terkait.
Berikut ini adalah contoh dalam C#. Membuat empat kelas dalam aplikasi konsol:
public abstract class Vehicle
{
public abstract int Wheels;
}
public class Bicycle : Vehicle
{
public override int Wheels()
{
return 2;
}
}
public class Car : Vehicle
{
public override int Wheels()
{
return 4;
}
}
public class Truck : Vehicle
{
public override int Wheels()
{
return 18;
}
}
Sekarang membuat berikut di Main() modul untuk aplikasi console:
public void Main()
{
List<Vehicle> vehicles = new List<Vehicle>();
vehicles.Add(new Bicycle());
vehicles.Add(new Car());
vehicles.Add(new Truck());
foreach (Vehicle v in vehicles)
{
Console.WriteLine(
string.Format("A {0} has {1} wheels.",
v.GetType().Name, v.Wheels));
}
}
Dalam contoh ini, kita membuat sebuah daftar dari kelas dasar Kendaraan, yang tidak tahu tentang berapa banyak roda masing-masing sub-kelas, tetapi tidak tahu bahwa masing-masing sub-kelas yang bertanggung jawab untuk mengetahui berapa banyak roda yang dimilikinya.
Kemudian kami menambahkan sebuah Sepeda, Mobil dan Truk untuk daftar.
Selanjutnya, kita dapat loop melalui setiap Kendaraan dalam daftar, dan memperlakukan mereka semua sama, namun ketika kita mengakses setiap Kendaraan 'Roda' properti, Kendaraan kelas delegasi eksekusi kode yang terkait sub-kelas.
Kode ini dikatakan polimorfik, sebagai kode yang tepat yang dilakukan ditentukan oleh sub-kelas yang direferensikan pada saat runtime.
Saya berharap bahwa ini akan membantu anda.
Dari Memahami dan Menerapkan Polimorfisme dalam PHP, Terima kasih Steve Guidetti.
Polimorfisme adalah kata yang panjang untuk sebuah konsep yang sangat sederhana.
Polimorfisme menjelaskan pola dalam pemrograman berorientasi objek di mana kelas-kelas yang memiliki fungsi yang berbeda sementara berbagi antarmuka umum.
keindahan dari polimorfisme adalah bahwa kode yang bekerja dengan kelas yang berbeda tidak perlu tahu yang mana kelas ini menggunakan karena mereka semua menggunakan cara yang sama. Analogi dunia nyata untuk polimorfisme adalah sebuah tombol. Semua orang tahu bagaimana menggunakan tombol: anda hanya menerapkan tekanan untuk itu. Apa tombol "tidak," namun, tergantung pada apa yang terhubung ke dan konteks di mana ia digunakan — tapi hasilnya tidak mempengaruhi bagaimana ia digunakan. Jika atasan anda meminta anda untuk menekan tombol, anda sudah memiliki semua informasi yang dibutuhkan untuk melakukan tugas.
Di dunia pemrograman, polimorfisme adalah digunakan untuk membuat aplikasi lebih modular dan extensible. Bukannya berantakan pernyataan bersyarat menggambarkan program yang berbeda dari tindakan, anda membuat dipertukarkan benda-benda yang anda pilih berdasarkan kebutuhan anda. Itu adalah tujuan dasar dari polimorfisme.
Jika ada yang mengatakan CUT untuk orang-orang ini
Apa yang akan terjadi?
Jadi di atas representasi menunjukkan Apa yang polimorfisme (nama yang sama, perilaku yang berbeda) dalam OOP.
Jika anda akan untuk wawancara dan pewawancara meminta anda memberitahu/menunjukkan contoh hidup untuk polimorfisme dalam ruang yang sama kita sedang duduk di, katakanlah-
Jawaban - Pintu / Jendela
Bertanya-Tanya Bagaimana?
Melalui Pintu / Jendela - orang bisa datang, air bisa datang, cahaya bisa datang, hujan bisa datang, dll.
Untuk memahami dengan lebih baik dan dengan cara yang sederhana saya menggunakan contoh di atas.. Jika anda membutuhkan referensi untuk kode berikut di atas jawaban.
Presiden Amerika Serikat mempekerjakan polimorfisme. Bagaimana? Yah, dia memiliki banyak penasihat:
Setiap orang Harus bertanggung jawab untuk satu hal: Contoh:
Presiden tidak ahli dalam lapisan seng, atau fisika kuantum. Dia doesn't tahu banyak hal - tetapi dia hanya tahu satu hal: bagaimana untuk menjalankan negara.
It's agak sama dengan kode: keprihatinan dan tanggung jawab yang harus dipisahkan untuk yang relevan kelas/orang. Jika tidak, anda'd memiliki presiden mengetahui secara harfiah segala sesuatu di dunia - seluruh Wikipedia. Bayangkan memiliki seluruh wikipedia dalam kelas kode anda: itu akan menjadi mimpi buruk untuk mempertahankan.
Mengapa itu ide yang buruk untuk seorang presiden harus tahu semua ini hal-hal tertentu?
Jika presiden yang secara khusus memberitahu orang-orang apa yang harus dilakukan, yang berarti bahwa presiden perlu tahu ** apa yang harus dilakukan. Jika presiden perlu tahu hal-hal tertentu sendiri, yang berarti bahwa ketika anda perlu untuk membuat perubahan, maka anda'akan perlu untuk membuat itu di dua tempat, tidak hanya satu.
Misalnya, jika EPA perubahan polusi undang-undang maka ketika itu terjadi: anda'd harus membuat perubahan untuk EPA Kelas juga Presiden kelas. Mengubah kode di dua tempat lebih dari satu bisa berbahaya - karena itu's jauh lebih sulit untuk mempertahankan.
Apakah ada pendekatan yang lebih baik?
Ada pendekatan yang lebih baik: presiden tidak perlu tahu secara spesifik apa - apa- dia dapat permintaan saran terbaik, dari orang-orang yang secara khusus bertugas melakukan hal-hal tersebut.
Ia dapat menggunakan polimorfik pendekatan untuk menjalankan negara.
Contoh - menggunakan polimorfik pendekatan:
Semua presiden tidak meminta orang-orang untuk menyarankan dia - dan yang's apa yang sebenarnya dia lakukan di kehidupan nyata - dan yang's apa presiden yang baik harus dilakukan. penasihat semua merespon secara berbeda, tetapi mereka semua tahu apa yang presiden berarti oleh: Menyarankan(). Dia's punya ratusan orang streaming ke kantornya. Itu doesn't benar-benar peduli siapa mereka. Semua presiden tahu adalah bahwa ketika ia meminta mereka untuk "Saran" mereka tahu bagaimana untuk merespon sesuai:
public class MisterPresident
{
public void RunTheCountry()
{
// assume the Petraeus and Condi classes etc are instantiated.
petraeus.Advise(); // # Petraeus says send 100,000 troops to Fallujah
condolezza.Advise(); // # she says negotiate trade deal with Iran
healthOfficials.Advise(); // # they say we need to spend $50 billion on ObamaCare
}
}
Pendekatan ini memungkinkan presiden untuk menjalankan negara secara harfiah tanpa mengetahui apa-apa tentang hal-hal militer, atau perawatan kesehatan atau diplomasi internasional: rincian diserahkan kepada para ahli. Satu-satunya presiden perlu tahu adalah ini: "Saran()".
Apa yang anda DON"T ingin:
public class MisterPresident
{
public void RunTheCountry()
{
// people walk into the Presidents office and he tells them what to do
// depending on who they are.
// Fallujah Advice - Mr Prez tells his military exactly what to do.
petraeus.IncreaseTroopNumbers();
petraeus.ImproveSecurity();
petraeus.PayContractors();
// Condi diplomacy advice - Prez tells Condi how to negotiate
condi.StallNegotiations();
condi.LowBallFigure();
condi.FireDemocraticallyElectedIraqiLeaderBecauseIDontLikeHim();
// Health care
healthOfficial.IncreasePremiums();
healthOfficial.AddPreexistingConditions();
}
}
TIDAK! TIDAK! TIDAK! Dalam skenario di atas, presiden melakukan semua pekerjaan: dia tahu tentang meningkatnya jumlah pasukan dan pra-kondisi yang ada. Ini berarti bahwa jika timur tengah perubahan kebijakan, maka presiden akan memiliki untuk mengubah perintah-nya, serta Petraeus kelas juga. Kami hanya harus mengubah Petraeus kelas, karena Presiden seharusnya't harus terjebak dalam semacam itu detail. Dia doesn't perlu tahu tentang rincian. Semua dia perlu tahu bahwa jika ia membuat satu order, semuanya akan diurus. Semua detail harus diserahkan kepada para ahli.
Hal ini memungkinkan presiden untuk melakukan apa yang dia lakukan yang terbaik: menetapkan kebijakan umum, terlihat baik dan bermain golf :P.
Yang berlaku adalah polimorfisme, singkatnya. Bagaimana itu dilakukan? Melalui "mengimplementasikan antarmuka umum" atau dengan menggunakan kelas dasar (warisan) - lihat di atas jawaban yang detail ini dengan lebih jelas. (Agar lebih jelas memahami konsep ini, anda perlu tahu apa yang antarmuka, dan anda akan perlu untuk memahami apa warisan. Tanpa itu, anda mungkin berjuang.)
Dengan kata lain, Petraeus, Condi dan HealthOfficials semua akan menjadi kelas yang "mengimplementasikan interface" - let's menyebutnya IAdvisor
antarmuka yang hanya berisi satu metode: Menyarankan()
. Tapi sekarang kita masuk ke spesifik.
Ini akan menjadi ideal
public class MisterPresident
{
// You can pass in any advisor: Condi, HealthOfficials,
// Petraeus etc. The president has no idea who it will
// be. But he does know that he can ask them to "advise"
// and that's all Mr Prez cares for.
public void RunTheCountry(IAdvisor governmentOfficer)
{
governmentOfficer.Advise();
}
}
public class USA
{
MisterPresident president;
public USA(MisterPresident president)
{
this.president = president;
}
public void ImplementPolicy()
{
IAdvisor governmentOfficer = getAdvisor(); // Returns an advisor: could be condi, or petraus etc.
president.RunTheCountry(governmentOfficer);
}
}
Semua yang anda benar-benar perlu tahu adalah ini:
Aku benar-benar berharap hal ini membantu anda. Jika anda don't mengerti apa-apa posting komentar dan saya'll mencoba lagi.
Polymorphism adalah kemampuan untuk mengobati suatu kelas objek seolah-olah itu adalah kelas induk.
Sebagai contoh, misalkan ada sebuah kelas yang disebut Hewan, dan kelas disebut Anjing yang mewarisi dari Hewan. Polymorphism adalah kemampuan untuk mengobati Anjing objek sebagai objek Hewan seperti:
Dog* dog = new Dog;
Animal* animal = dog;
Polimorfisme:
Itu adalah konsep dari pemrograman berorientasi objek.Kemampuan dari objek yang berbeda untuk merespon, masing-masing dengan caranya sendiri, identik dengan pesan yang disebut polimorfisme.
Polimorfisme hasil dari fakta bahwa setiap kelas yang hidup dalam dirinya sendiri namespace. Nama-nama yang ditugaskan dalam sebuah definisi kelas tidak bertentangan dengan nama-nama yang ditugaskan di mana saja di luar itu. Hal ini berlaku baik contoh variabel dalam suatu obyek data dan struktur dari objek metode:
Hanya sebagai ladang C struktur yang dilindungi namespace, jadi adalah sebuah objek adalah instance variabel.
Nama metode yang juga dilindungi. Tidak seperti nama-nama fungsi C, nama metode bukan simbol global. Nama metode dalam satu kelas tidak dapat bertentangan dengan nama metode dalam kelas-kelas lain; dua sangat berbeda kelas dapat menerapkan identik bernama metode.
Nama metode ini adalah bagian dari sebuah objek antarmuka. Ketika pesan dikirim meminta sebuah benda melakukan sesuatu, pesan nama metode objek harus melakukan. Karena benda-benda yang berbeda dapat memiliki metode dengan nama yang sama, makna dari pesan yang harus dipahami relatif terhadap objek tertentu yang menerima pesan. Pesan yang sama dikirim ke dua objek yang berbeda dapat memanggil dua metode yang berbeda.
Manfaat utama dari polimorfisme adalah bahwa menyederhanakan antarmuka pemrograman. Hal ini memungkinkan konvensi yang akan didirikan yang dapat digunakan di kelas setelah kelas. Alih-alih menciptakan nama baru untuk masing-masing fungsi baru yang anda tambahkan ke program, nama yang sama dapat digunakan kembali. Pemrograman antarmuka dapat digambarkan sebagai satu set abstrak perilaku, terlepas dari kelas yang mengimplementasikannya.
Contoh:
Contoh-1: Berikut ini adalah contoh sederhana yang ditulis dalam Python 2.x.
class Animal:
def __init__(self, name): # Constructor of the class
self.name = name
def talk(self): # Abstract method, defined by convention only
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
return 'Meow!'
class Dog(Animal):
def talk(self):
return 'Woof! Woof!'
animals = [Cat('Missy'),
Dog('Lassie')]
for animal in animals:
print animal.name + ': ' + animal.talk()
Contoh-2: Polimorfisme ini dilaksanakan di Jawa menggunakan metode overloading dan metode utama konsep-konsep.
Mari kita Pertimbangkan contoh Mobil untuk membahas polimorfisme. Mengambil segala merek seperti Ford, Honda, Toyota, BMW, Benz dll., Segala sesuatu adalah dari jenis Mobil.
Tetapi masing-masing memiliki sendiri fitur-fitur canggih dan teknologi yang lebih maju yang terlibat dalam langkah mereka perilaku.
Sekarang mari kita membuat dasar jenis Mobil
Car.java
public class Car {
int price;
String name;
String color;
public void move(){
System.out.println("Basic Car move");
}
}
Mari kita menerapkan Mobil Ford contoh.
Ford memperluas jenis Mobil untuk mewarisi semua anggotanya(sifat dan metode).
Ford.java
public class Ford extends Car{
public void move(){
System.out.println("Moving with V engine");
}
}
Di atas Ford kelas meluas kelas Mobil dan juga mengimplementasikan bergerak() metode. Meskipun langkah metode sudah tersedia untuk Ford melalui Warisan, Ford masih menerapkan metode dengan caranya sendiri. Ini adalah yang disebut metode utama.
Honda.java
public class Honda extends Car{
public void move(){
System.out.println("Move with i-VTEC engine");
}
}
Sama seperti Ford, Honda juga memperluas jenis Mobil dan dilaksanakan langkah metode dengan caranya sendiri.
Metode utama adalah fitur penting untuk mengaktifkan Polimorfisme. Menggunakan Metode utama, Sub jenis ini dapat mengubah cara metode kerja yang tersedia melalui warisan.
PolymorphismExample.java
public class PolymorphismExample {
public static void main(String[] args) {
Car car = new Car();
Car f = new Ford();
Car h = new Honda();
car.move();
f.move();
h.move();
}
}
Polimorfisme Contoh Output:
Di PolymorphismExample kelas metode utama, saya telah membuat tiga objek - Mobil, Ford, dan Honda. Semua tiga benda yang disebut oleh jenis Mobil.
Mohon perhatikan poin penting di sini yang super tipe kelas dapat merujuk ke Sub tipe kelas dari objek tetapi wakil-ayat ini tidak mungkin. Alasannya adalah bahwa semua anggota dari super class yang tersedia untuk subclass menggunakan warisan dan selama waktu kompilasi, penyusun mencoba untuk mengevaluasi apakah tipe referensi yang kita gunakan memiliki metode yang ia mencoba untuk mengakses.
Jadi, untuk referensi mobil,f dan h dalam PolymorphismExample, langkah metode yang ada dari jenis Mobil. Jadi, compiler melewati proses kompilasi tanpa ada masalah.
Tapi ketika datang untuk menjalankan waktu eksekusi, mesin virtual memanggil metode pada objek yang sub jenis. Jadi, metode move() dipanggil dari masing-masing implementasi.
Jadi, semua benda adalah dari jenis Mobil, tapi selama waktu berjalan, eksekusi tergantung pada Objek di mana doa tersebut terjadi. Ini disebut polimorfisme.
Biasanya ini mengacu pada kemampuan untuk sebuah objek dari tipe A untuk berperilaku seperti sebuah objek dari tipe B. Dalam pemrograman berorientasi objek ini biasanya mencapai dengan warisan. Beberapa wikipedia link untuk membaca lebih lanjut:
EDIT: link yang rusak diperbaiki.
Polimorfisme adalah ini:
class Cup {
int capacity
}
class TeaCup : Cup {
string flavour
}
class CoffeeCup : Cup {
string brand
}
Cup c = new CoffeeCup();
public int measure(Cup c) {
return c.capacity
}
anda dapat lulus hanya Secangkir bukan contoh yang spesifik. Ini membantu dalam keumuman karena anda don't harus memberikan ukuran tertentu() contoh per cangkir masing-masing jenis
Saya tahu ini adalah sebuah pertanyaan yang lebih tua dengan banyak jawaban yang baik tapi aku'd seperti untuk memasukkan satu kalimat jawaban:
Mengobati berasal tipe seolah-olah itu's tipe dasar.
Ada banyak contoh-contoh di atas yang menunjukkan hal ini dalam tindakan, tapi saya merasa ini adalah sebuah jawaban yang ringkas.
(Saya browsing artikel lain tentang sesuatu yang sama sekali berbeda.. dan polimorfisme muncul... Sekarang saya berpikir bahwa saya tahu apa yang Polimorfisme adalah.... tapi ternyata tidak dalam cara ini indah menjelaskan.. Ingin menuliskannya di suatu tempat.. baik masih akan berbagi... )
http://www.eioba.com/a/1htn/how-i-explained-rest-to-my-wife
baca dari bagian ini:
..... polimorfisme. Yang's culun cara untuk mengatakan bahwa kata benda yang berbeda dapat memiliki kerja yang sama diterapkan kepada mereka.
Pada umumnya, it's kemampuan untuk antarmuka sejumlah jenis yang berbeda dari objek menggunakan yang sama atau dangkal mirip API. Ada berbagai macam bentuk:
Fungsi overloading: mendefinisikan beberapa fungsi dengan nama yang sama dan parameter yang berbeda jenis, seperti sqrt(float), sqrt(double) dan sqrt(kompleks). Dalam kebanyakan bahasa yang memungkinkan ini, compiler akan secara otomatis memilih salah satu yang benar untuk jenis argumen yang dilewatkan ke dalamnya, jadi ini adalah waktu kompilasi polimorfisme.
Virtual metode dalam OOP: metode kelas dapat memiliki berbagai implementasi yang disesuaikan dengan spesifikasi dari subclass; masing-masing kata untuk mengesampingkan pelaksanaan diberikan di kelas dasar. Diberikan sebuah objek yang dapat menjadi dasar kelas atau subkelas, pelaksanaan yang benar dipilih secara on the fly, sehingga ini adalah saat run-time polimorfisme.
Template: sebuah fitur dari beberapa OO bahasa dimana sebuah fungsi, kelas, dll. dapat parameterised oleh jenis. Misalnya, anda dapat menentukan generik "daftar" template kelas, dan kemudian menurunkannya sebagai "daftar bilangan bulat", "daftar string", bahkan mungkin "daftar daftar dari string" atau sejenisnya. Umumnya, anda menulis kode sekali untuk struktur data yang sewenang-wenang jenis elemen, dan compiler menghasilkan versi untuk berbagai jenis elemen.
Istilah polimorfisme berasal dari:
poli = banyak
morphism = kemampuan untuk mengubah
Dalam pemrograman, polimorfisme adalah "teknik" yang memungkinkan anda "salah" pada sebuah objek menjadi lebih dari satu jenis hal. Misalnya:
Mahasiswa objek juga merupakan objek orang. Jika anda "salah" (ie cast) pada mahasiswa, anda mungkin bisa meminta ID mahasiswa. Anda dapat't selalu melakukan hal itu dengan seseorang, kan? (seseorang belum tentu seorang mahasiswa, dengan demikian mungkin tidak memiliki kartu mahasiswa). Namun, seseorang mungkin memiliki nama. Mahasiswa tidak terlalu.
Intinya, "melihat" pada objek yang sama dari berbagai "sudut" dapat memberikan anda berbeda "perspektif" (yaitu sifat yang berbeda atau metode)
Jadi teknik ini memungkinkan anda membangun hal-hal yang dapat "melihat" dari sudut yang berbeda.
Mengapa kita menggunakan polimorfisme? Untuk permulaan ... abstraksi. Pada titik ini harus cukup info :)
Polimorfisme adalah kemampuan dari objek yang dapat diambil dalam berbagai bentuk. Misalnya pada manusia kelas manusia dapat bertindak dalam berbagai bentuk ketika kita berbicara tentang hubungan. EX: SEORANG pria adalah seorang ayah untuk anaknya dan ia adalah suami kepada istrinya dan ia adalah guru kepada siswa.
I've memberikan gambaran tingkat tinggi dari polimorfisme untuk pertanyaan lain:
https://stackoverflow.com/questions/5854581/polymorphism-in-c/5854862#5854862
Semoga membantu. Ekstrak...
...hal ini membantu untuk memulai dari sebuah tes sederhana untuk itu dan definisi [polimorfisme]. Mempertimbangkan kode:
Type1 x;
Type2 y;
f(x);
f(y);
di Sini,
f()
adalah untuk melakukan beberapa operasi dan diberi nilaix
dany
sebagai input. Untuk menjadi polimorfik,f()
harus mampu beroperasi dengan nilai-nilai dari setidaknya dua jenis yang berbeda (misalnyaint
dandouble
), menemukan dan melaksanakan jenis-kode yang sesuai.
( lanjutan pada https://stackoverflow.com/questions/5854581/polymorphism-in-c/5854862#5854862 )
Polimorfisme adalah kemampuan suatu objek untuk mengambil banyak bentuk. Penggunaan yang paling umum dari polimorfisme dalam OOP terjadi ketika kelas induk referensi ini digunakan untuk merujuk kepada seorang anak kelas objek. Dalam contoh ini yang ditulis di Jawa, kami memiliki tiga jenis kendaraan. Kita membuat tiga objek yang berbeda dan mencoba untuk menjalankan roda metode:
public class PolymorphismExample {
public static abstract class Vehicle
{
public int wheels(){
return 0;
}
}
public static class Bike extends Vehicle
{
@Override
public int wheels()
{
return 2;
}
}
public static class Car extends Vehicle
{
@Override
public int wheels()
{
return 4;
}
}
public static class Truck extends Vehicle
{
@Override
public int wheels()
{
return 18;
}
}
public static void main(String[] args)
{
Vehicle bike = new Bike();
Vehicle car = new Car();
Vehicle truck = new Truck();
System.out.println("Bike has "+bike.wheels()+" wheels");
System.out.println("Car has "+car.wheels()+" wheels");
System.out.println("Truck has "+truck.wheels()+" wheels");
}
}
Hasilnya adalah:
Untuk informasi lebih lanjut silahkan kunjungi https://github.com/m-vahidalizadeh/java_advanced/blob/master/src/files/PolymorphismExample.java. Saya harap ini membantu.
Let's menggunakan analogi. Untuk mengingat musik script setiap musisi yang memainkan itu memberikan dia sendiri sentuh dalam penafsiran.
Musisi dapat disarikan dengan antarmuka, genre yang musisi termasuk dapat menjadi sebuah kelas abstrak yang mendefinisikan beberapa aturan global interpretasi dan setiap musisi yang bermain dapat dimodelkan dengan beton kelas.
Jika anda adalah seorang pendengar dari karya musik, anda memiliki referensi untuk script misalnya Bach's 'Fuga dan Tocata' dan setiap musisi yang melakukan itu tidak polymorphicaly dengan caranya sendiri.
Ini adalah hanya sebuah contoh dari desain yang mungkin (di Jawa):
public interface Musician {
public void play(Work work);
}
public interface Work {
public String getScript();
}
public class FugaAndToccata implements Work {
public String getScript() {
return Bach.getFugaAndToccataScript();
}
}
public class AnnHalloway implements Musician {
public void play(Work work) {
// plays in her own style, strict, disciplined
String script = work.getScript()
}
}
public class VictorBorga implements Musician {
public void play(Work work) {
// goofing while playing with superb style
String script = work.getScript()
}
}
public class Listener {
public void main(String[] args) {
Musician musician;
if (args!=null && args.length > 0 && args[0].equals("C")) {
musician = new AnnHalloway();
} else {
musician = new TerryGilliam();
}
musician.play(new FugaAndToccata());
}
Polimorfisme adalah kemampuan programmer untuk menulis metode dengan nama yang sama yang melakukan hal yang berbeda untuk jenis yang berbeda dari objek, tergantung pada kebutuhan dari objek tersebut. Misalnya, jika anda sedang mengembangkan sebuah kelas yang disebut Sebagian kecil
dan kelas yang disebut ComplexNumber
, baik dari ini mungkin termasuk metode yang disebut display()
, tetapi masing-masing dari mereka akan menerapkan metode yang berbeda. Di PHP, misalnya, anda bisa menerapkan seperti ini:
// Class definitions
class Fraction
{
public $numerator;
public $denominator;
public function __construct($n, $d)
{
// In real life, you'd do some type checking, making sure $d != 0, etc.
$this->numerator = $n;
$this->denominator = $d;
}
public function display()
{
echo $this->numerator . '/' . $this->denominator;
}
}
class ComplexNumber
{
public $real;
public $imaginary;
public function __construct($a, $b)
{
$this->real = $a;
$this->imaginary = $b;
}
public function display()
{
echo $this->real . '+' . $this->imaginary . 'i';
}
}
// Main program
$fraction = new Fraction(1, 2);
$complex = new ComplexNumber(1, 2);
echo 'This is a fraction: '
$fraction->display();
echo "\n";
echo 'This is a complex number: '
$complex->display();
echo "\n";
Output:
This is a fraction: 1/2
This is a complex number: 1 + 2i
Beberapa jawaban yang lain tampaknya menyiratkan bahwa polimorfisme hanya digunakan dalam hubungannya dengan warisan; misalnya, mungkin Sebagian kecil
dan ComplexNumber
kedua melaksanakan sebuah kelas abstrak yang disebut Jumlah
yang memiliki metode display()
, yang Fraksi dan ComplexNumber kemudian kedua berkewajiban untuk melaksanakan. Tapi anda don't perlu warisan untuk mengambil keuntungan dari polimorfisme.
Setidaknya secara dinamis mengetik bahasa seperti PHP (I don't tahu tentang C++ atau Java), polymorphism memungkinkan pengembang untuk memanggil metode tanpa harus mengetahui jenis objek dari waktu ke depan, dan percaya bahwa pelaksanaan yang benar dari metode yang akan disebut. Misalnya, pengguna memilih jenis Nomor
dibuat:
$userNumberChoice = $_GET['userNumberChoice'];
switch ($userNumberChoice) {
case 'fraction':
$userNumber = new Fraction(1, 2);
break;
case 'complex':
$userNumber = new ComplexNumber(1, 2);
break;
}
echo "The user's number is: ";
$userNumber->display();
echo "\n";
Dalam hal ini, sesuai display()
metode yang akan dipanggil, meskipun pengembang dapat't tahu di depan waktu apakah pengguna akan memilih pecahan atau bilangan kompleks.
Polimorfisme:
eksekusi yang Berbeda sesuai dengan instance dari class, bukan tipe referensi variabel.
Antarmuka jenis referensi variabel dapat merujuk ke salah satu dari instance class yang mengimplementasikan interface.
Polimorfisme secara harfiah berarti, beberapa bentuk. (atau banyak bentuk) : Objek dari kelas yang berbeda dan nama yang sama dengan nama metode , tetapi alur kerja yang berbeda. Contoh sederhana akan sama:
Menganggap seseorang X.
Ia hanya satu orang, tetapi ia bertindak sebagai banyak. Anda mungkin bertanya bagaimana:
Dia adalah seorang anak kepada ibunya. Teman nya teman-teman. Seorang kakak untuk adiknya.