Maya lwn Abstrak
Virtual dan Abstrak ialah dua kata kunci yang digunakan dalam kebanyakan bahasa pengaturcaraan Berorientasikan Objek (OO) seperti Java dan C. Walaupun terdapat sedikit perbezaan dalam maksudnya dalam bahasa yang berbeza, kata kunci Maya dan Abstrak memberikan gambaran pelaksanaan separa kepada entiti yang dilampirkan padanya.
Abstrak
Biasanya, kelas Abstrak, juga dikenali sebagai Kelas Asas Abstrak (ABC), tidak boleh dibuat instantiated (contoh kelas itu tidak boleh dibuat). Jadi, kelas Abstrak hanya bermakna jika bahasa pengaturcaraan menyokong warisan (keupayaan untuk mencipta subkelas daripada melanjutkan kelas). Kelas abstrak biasanya mewakili konsep atau entiti abstrak dengan pelaksanaan separa atau tiada. Oleh itu, kelas Abstrak bertindak sebagai kelas induk dari mana kelas anak diperoleh, supaya kelas anak akan berkongsi ciri kelas induk yang tidak lengkap dan kefungsian boleh ditambah untuk melengkapkannya. Kelas abstrak mungkin mengandungi kaedah Abstrak. Subkelas yang memanjangkan kelas abstrak boleh melaksanakan kaedah Abstrak (warisan) ini. Jika kelas kanak-kanak melaksanakan semua kaedah Abstrak sedemikian, ia adalah kelas konkrit. Tetapi jika tidak, kelas kanak-kanak juga menjadi kelas Abstrak. Maksud semua ini ialah, apabila pengaturcara mencalonkan kelas sebagai Abstrak, dia mengatakan bahawa kelas itu akan menjadi tidak lengkap dan ia akan mempunyai elemen yang perlu dilengkapkan oleh subkelas yang mewarisi. Ini adalah cara yang bagus untuk membuat kontrak antara dua pengaturcara, yang memudahkan tugas dalam pembangunan perisian. Pengaturcara, yang menulis kod untuk diwarisi, perlu mengikut definisi kaedah dengan tepat (tetapi sudah tentu boleh mempunyai pelaksanaannya sendiri). Dalam Java dan C, kelas dan kaedah Abstrak diisytiharkan menggunakan kata kunci Abstrak.
Maya
Kaedah/fungsi maya memberikan keupayaan untuk membatalkan gelagatnya secara pilihan dengan kelas pewarisan (menggunakan fungsi dengan tandatangan yang sama). Konsep fungsi Maya adalah penting dalam senario berikut. Katakan kelas diterbitkan oleh kelas kanak-kanak, maka apabila objek kelas terbitan digunakan, ia boleh merujuk kepada objek kelas asas atau kelas terbitan. Tetapi, tingkah laku panggilan kaedah boleh menjadi samar-samar jika kaedah kelas asas ditindih. Jadi, untuk menyelesaikan kekaburan ini, kata kunci Maya digunakan. Jika kaedah ditanda Maya, maka fungsi kelas terbitan dipanggil (jika ada) atau fungsi kelas asas dipanggil. Sebagai contoh, dalam C++, kata kunci Maya digunakan tepat untuk tujuan ini. Dalam C, kata kunci Maya digunakan dengan cara yang sama, tetapi sebagai tambahan, kata kunci ganti harus digunakan untuk mengubah suai semua kaedah yang diganti. Tetapi di Jawa, tiada kata kunci Maya yang jelas. Semua kaedah bukan statik dianggap Maya. Fungsi maya tanpa badan dipanggil fungsi Maya Tulen. Dalam Java dan C, kaedah Abstrak sebenarnya adalah Maya Tulen.
Perbezaan antara Maya dan Abstrak
Walaupun Abstrak dan Maya ialah dua kata kunci/konsep yang memberikan makna pelaksanaan yang tidak lengkap kepada entiti yang berkaitan, mereka mempunyai perbezaannya. Kaedah abstrak (yang mesti ditakrifkan dalam kelas Abstrak) tidak mempunyai pelaksanaan sama sekali, manakala kaedah Maya mungkin mempunyai pelaksanaan. Jika kaedah Abstrak dilanjutkan oleh kelas konkrit, semua kaedah Abstrak yang diwarisi mesti dilaksanakan, manakala kaedah Maya yang diwarisi mungkin atau mungkin tidak ditindih.