Dari Polimorfisme di WIkipedia
Dalam ilmu komputer, polimorfisme adalah fitur bahasa pemrograman yang memungkinkan nilai-nilai dari tipe data yang berbeda ditangani menggunakan antarmuka yang seragam.
Dari mengetik bebek di Wikipedia
Dalam pemrograman komputer dengan bahasa pemrograman berorientasi objek, pengetikan bebek adalah gaya pengetikan dinamis di mana serangkaian metode dan properti objek saat ini menentukan semantik yang valid, daripada pewarisannya dari kelas tertentu atau implementasi antarmuka tertentu.
Interpretasi saya adalah bahwa berdasarkan pada mengetik bebek, metode objek / properti menentukan semantik yang valid. Berarti bentuk objek saat ini menentukan antarmuka yang ditegakkan.
Dari polimorfisme Anda dapat mengatakan suatu fungsi bersifat polimorfik jika ia menerima beberapa tipe data yang berbeda asalkan mereka menjunjung tinggi suatu antarmuka.
Jadi, jika suatu fungsi dapat tipe bebek, ia dapat menerima beberapa tipe data yang berbeda dan beroperasi pada mereka selama tipe data memiliki metode / properti yang benar dan dengan demikian menjunjung tinggi antarmuka.
(Penggunaan istilah antarmuka dimaksudkan bukan sebagai konstruk kode tetapi lebih sebagai konstruk deskriptif, yang mendokumentasikan)
- Apa hubungan yang benar antara ducktyping dan polimorfisme?
- Jika suatu bahasa dapat tipe bebek, apakah itu berarti ia dapat melakukan polimorfisme?
door.close()
dantiger.close()
Jawaban:
Saya mengatakan bahwa polimorfisme adalah sifat generik, yang dapat diimplementasikan beberapa cara:
masing-masing memungkinkan programmer untuk menggunakan kode tunggal dengan tipe yang berbeda, jadi semuanya mewujudkan konsep polimorfisme.
sumber
Saya pikir itu:
Baik mengetik bebek dan polimorfisme adalah cara tipuan / abstraksi. Polimorfisme adalah konsep yang didasarkan pada jenis dan pengetikan sedangkan pengetikan bebek didasarkan pada kontrak.
Dengan polimorfisme, penting HAL-HAL itu dan bukan bagaimana berperilaku (perilaku itu mungkin merupakan konsekuensi dari apa itu).
Dalam mengetik bebek, penting bagaimana HAL berperilaku. Mengetik bebek lebih terikat pada konsep objek sebagai aktor yang bertukar pesan, bukan objek yang memiliki beberapa properti yang ditentukan.
sumber
Jawabannya adalah YA .
Mengetik Bebek adalah kasus khusus pengetikan dinamis , dan bahkan jika pengetikan dinamis per se tidak dapat secara langsung dianggap sebagai polimorfisme (karena itu hanya properti bahasa untuk melakukan pemeriksaan ketik saat runtime daripada pada waktu kompilasi), teknik yang biasanya mendasari pengetikan dinamis, pengikatan yang lambat dan pengiriman dinamis seperti ini merupakan karakteristik untuk polimorfisme .
sumber
Mengetik bebek bukan bagian dari polimorfisme, karena polimorfisme membutuhkan kesaksian, yang hilang dalam pengetikan bebek. Jadi mengetik bebek memiliki peluang untuk "mengimplementasikan" sebuah "antarmuka" bukan karena itu masuk akal semantik tetapi karena Anda memiliki tanda tangan yang sama. Jika mengetik bebek adalah bagian dari polimorfisme maka ia akan memiliki semua sifat polimorfisme, termasuk deklarasi eksplisit.
Mengetik bebek juga sebenarnya bukan implementasi polimorfisme, itu bagian dari sistem tipe yang berbeda. Biasanya Anda mengasosiasikan pengetikan bebek dengan bahasa dinamis yang berjalan di depan dan meneruskan pesan ke objek tanpa mengetahui apakah objek tersebut dapat menanganinya - jika dapat maka secara efektif ia telah lulus uji pengetikan bebek. Biasanya Anda menganggap polimorfisme sedang diimplementasikan pada waktu kompilasi dengan mengatur vtables (dan itu mungkin jika antarmuka berbeda dari kelas). Tetapi ada BANYAK bahasa di luar sana dan banyak cara untuk mengimplementasikan fitur-fitur ini.
Hingga taraf tertentu ini adalah pertanyaan filosofis. Bisakah Anda menganggap bebek mengetik sebagai antarmuka yang secara otomatis dinyatakan secara implisit? Saya tidak bisa memikirkan alasan yang salah , tepatnya, tetapi saya tidak berpikir itu mungkin cara paling produktif untuk melihatnya. Saya pikir bebek mengetik dan antarmuka keduanya fitur yang biasa ditemui dari sistem jenis bahasa pemrograman, keduanya memiliki cara berperilaku yang cukup mirip, dan keduanya penting bagi pemrogram untuk mengerti.
sumber
Rasanya hampir wajar untuk mengatakan "Ya, jika foo memiliki ketikan bebek, foo memiliki polimorfisme". Tapi saya tidak bisa mengatakan ini 100% pasti, dalam arti bahwa mungkin itu benar mungkin untuk membuat contoh buatan dari sistem seperti itu yang mengetik bebek ("bisakah itu dukun && dapat mengapung di atas air ==> itu adalah Bebek ") walaupun tidak memiliki polimorfisme (" foo, dukun! "Gagal), tetapi mereka akan benar-benar buatan dan di dunia nyata, saya akan mengatakan" Ya, jika mengetik bebek ada, polimorfisme juga harus ada ".
Secara pribadi saya melihat bebek mengetik sebagai "polimorfisme dilakukan dengan benar". Yang saya maksud dengan itu, hal yang ada di dunia pengetikan bebek tidak perlu memiliki tipe eksplisit dan perilaku mereka (polimorfik = "akses yang sama, hasil yang berbeda") adalah satu-satunya hal yang diperhitungkan. Dalam implementasi polimorfisme lain, ia dibatasi pada tipe / antarmuka / pewarisan, sehingga "polimorfisme yang diimplementasikan dan dibatasi" bukan "polimorfisme per se".
sumber
(B. Pierce & teman-teman)
Jadi seperti yang Anda perhatikan, dalam hal ini, pengetikan bebek adalah pengetikan dinamis yang benar-benar berjalan sebaliknya.
Ada beberapa metode untuk menentukan jenis yang berhubungan dengan polymorphing misalnya yang membuat kode lebih fleksibel tetapi mengetik bebek adalah masalah lain sama sekali dalam kasus ini.
Secara rinci ada kalkulus lambda yang diketik dan kalkulus lambda yang tidak diketik yang membantu menentukan properti kalkulasi dan perhitungan.
Saya juga melihat bahwa hal-hal seperti mengetik bebek dapat membantu jika kita hanya ingin mendapatkan hasil dengan cepat tetapi pada kesempatan lain saya juga merasa bahwa sifat dinamis membuatnya lebih dapat disesuaikan dengan kebutuhan, sehingga saya dapat menghitung lebih cepat. Saya kira itu hanya untuk mengatakan, sayang, bahwa jika saya sudah tahu apa yang ingin saya hitung, mengetik adalah yang terbaik, tetapi mengapa saya tahu apa yang saya inginkan? Hehehe ...
Itu lima sen saya dan saya kira itu bisa menjadi topik penelitian yang menarik.
sumber