Maya vs Abstrak
Virtual dan Abstrak adalah dua kata kunci yang digunakan dalam kebanyakan bahasa pengaturcaraan Berorientasi Objek (OO) seperti Java dan C #. Walaupun terdapat sedikit perbezaan dalam apa yang dimaksudkan dalam bahasa yang berbeza, kedua kata kunci Maya dan Abstrak memberikan rasa parsial implementasi kepada entiti yang disambungkan ke.
Abstrak
Biasanya, kelas Abstrak, juga dikenali sebagai Kelas Abstrak Base (ABC), tidak boleh instantiated (contoh kelas itu tidak boleh dibuat). Oleh itu, kelas Abstrak hanya bermakna jika bahasa pengaturcaraan menyokong warisan (keupayaan untuk membuat subclass daripada melanjutkan kelas). Kelas abstrak biasanya mewakili konsep atau entiti abstrak dengan pelaksanaan sebahagian atau tidak. Oleh itu, kelas Abstrak bertindak sebagai kelas induk dari mana kelas kanak-kanak diperoleh, supaya kelas kanak-kanak akan berkongsi ciri-ciri yang tidak lengkap kelas induk dan fungsi boleh ditambah untuk menyelesaikannya. Kelas abstrak mungkin mengandungi kaedah Abstrak. Subkelas yang memanjangkan kelas abstrak boleh melaksanakan kaedah-kaedah ini (warisan) Abstrak. Jika kelas kanak-kanak melaksanakan semua kaedah Abstrak, ia adalah kelas konkrit. Tetapi jika tidak, kelas kanak-kanak juga menjadi kelas Abstrak. Apa maksudnya ialah, apabila programmer menamakan kelas sebagai Abstrak, dia mengatakan bahawa kelas itu tidak lengkap dan ia akan mempunyai unsur-unsur yang perlu diselesaikan oleh subclass yang mewarisi. Ini adalah cara yang baik untuk membuat kontrak antara dua pengaturcara, yang menyederhanakan tugas dalam pembangunan perisian. Programmer, yang menulis kod untuk mewarisi, perlu mengikuti definisi kaedah dengan tepat (tetapi sudah tentu dapat melaksanakannya sendiri). Di Jawa dan C #, kelas dan kaedah Abstrak diisytiharkan menggunakan kata kunci Abstrak.
Maya
Kaedah / fungsi maya memberikan keupayaan untuk mengalihkan tingkah laku secara pilihan oleh kelas yang mewarisi (menggunakan fungsi dengan tandatangan yang sama). Konsep fungsi Maya adalah penting dalam senario berikut. Katakan kelas diperolehi oleh kelas kanak-kanak, maka setiap kali objek kelas yang diperoleh digunakan, ia boleh merujuk kepada objek kelas asas atau kelas yang diturunkan. Tetapi, tingkah laku panggilan boleh menjadi tidak jelas jika kaedah kelas asas ditindih. Jadi, untuk menyelesaikan kekaburan ini, kata kunci Maya digunakan. Sekiranya kaedah ditandakan Maya, maka fungsi kelas yang diturunkan 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 di samping itu, penangguhan kata kunci harus digunakan untuk memodifikasi semua kaedah yang ditindas. Tetapi di Jawa, tidak ada kata kunci Maya yang jelas. Semua kaedah bukan statik dianggap sebagai Maya. Fungsi maya tanpa badan dipanggil fungsi Maya Murni. Di Jawa dan C #, kaedah Abstrak sebenarnya Murni Murni.
Perbezaan antara Maya dan Abstrak
Walaupun Abstrak dan Maya adalah dua kata kunci / konsep yang memberikan makna pelaksanaan yang tidak lengkap kepada entiti yang bersangkutan, mereka mempunyai perbezaannya. Kaedah abstrak (yang mesti ditakrifkan dalam kelas Abstrak) tidak mempunyai pelaksanaan sama sekali, sementara kaedah Maya mungkin mempunyai pelaksanaan. Sekiranya kaedah Abstrak diperluaskan oleh kelas konkrit, semua kaedah Abstrak yang diwariskan mesti dilaksanakan, sementara kaedah Maya diwariskan mungkin atau tidak boleh ditindih.