Virtual vs Abstrakt
Virtual və Abstract Java və C kimi əksər Obyekt yönümlü (OO) proqramlaşdırma dillərində istifadə olunan iki açar sözdür. Fərqli dillərdə mənası ilə bağlı cüzi fərqlər olsa da, həm Virtual, həm də Mücərrəd açar sözlər qoşulduğu obyektlərə qismən icra hissi verir.
Abstrakt
Adətən, Abstract Base Classes (ABC) kimi tanınan Abstrakt siniflər yaradıla bilməz (həmin sinfin nümunəsi yaradıla bilməz). Beləliklə, mücərrəd siniflər yalnız proqramlaşdırma dili miras almağı dəstəklədiyi təqdirdə məna kəsb edir (sinfi genişləndirməkdən alt siniflər yaratmaq imkanı). Mücərrəd siniflər adətən mücərrəd konsepsiya və ya obyekti qismən və ya heç bir şəkildə həyata keçirmir. Buna görə də, Abstrakt siniflər uşaq siniflərinin əldə edildiyi ana siniflər kimi çıxış edir, beləliklə uşaq sinif ana sinifin natamam xüsusiyyətlərini paylaşacaq və onları tamamlamaq üçün funksionallıq əlavə oluna bilər. Abstrakt siniflərdə Abstrakt metodlar ola bilər. Mücərrəd sinfi genişləndirən alt siniflər bu (irsi) Abstrakt metodları həyata keçirə bilər. Uşaq sinfi bütün bu Abstrakt metodları həyata keçirirsə, bu konkret sinifdir. Amma belə deyilsə, uşaq sinfi də Abstrakt sinifə çevrilir. Bütün bunlar o deməkdir ki, proqramçı bir sinfi Abstrakt olaraq təyin etdikdə, o, sinfin natamam olacağını və miras qalan alt siniflər tərəfindən tamamlanmalı olan elementlərə sahib olacağını söyləyir. Bu, iki proqramçı arasında proqram təminatının hazırlanmasında tapşırıqları asanlaşdıran müqavilə yaratmaq üçün gözəl bir yoldur. Vərəsəlik üçün kod yazan proqramçı metod təriflərinə dəqiq əməl etməlidir (lakin təbii ki, özünün tətbiqi də ola bilər). Java və C dillərində Abstract sinifləri və metodları Abstract açar sözündən istifadə etməklə elan edilir.
Virtual
Virtual metodlar/funksiyalar irsi sinif (eyni imzaya malik funksiyadan istifadə etməklə) tərəfindən onun davranışını istəyə görə ləğv etmək imkanı verir. Virtual funksiya anlayışı aşağıdakı ssenaridə vacibdir. Tutaq ki, bir sinif uşaq sinif tərəfindən törədilib, onda törəmə sinfin obyekti istifadə edildikdə, o, əsas sinifin obyektinə və ya törəmə sinfə istinad edə bilər. Lakin, əsas sinif metodları ləğv olunarsa, metod çağırış davranışı qeyri-müəyyən ola bilər. Beləliklə, bu qeyri-müəyyənliyi aradan qaldırmaq üçün Virtual açar sözdən istifadə olunur. Metod Virtual olaraq qeyd olunubsa, o zaman törəmə sinfin funksiyası (əgər varsa) və ya əsas sinfin funksiyası çağırılır. Məsələn, C++ dilində Virtual açar sözü məhz bu məqsədlə istifadə olunur. C-da Virtual açar sözü oxşar şəkildə istifadə olunur, lakin əlavə olaraq, bütün ləğv edilmiş metodları dəyişdirmək üçün override açar sözündən istifadə edilməlidir. Lakin Java-da açıq Virtual açar söz yoxdur. Bütün qeyri-statik üsullar Virtual hesab olunur. Bədəni olmayan virtual funksiyalar Saf Virtual funksiyalar adlanır. Java və C dillərində Abstrakt metodlar əslində Saf Virtualdır.
Virtual və Abstrakt arasındakı fərq
Mücərrəd və Virtual iki açar söz/anlayış olsa da, onun əlaqəli qurumları üçün natamam icra mənasını verir, onların fərqləri var. Abstrakt metodlar (abstrakt siniflər daxilində müəyyən edilməlidir) ümumiyyətlə həyata keçirməyə malik deyil, Virtual metodların isə icrası ola bilər. Mücərrəd metodlar konkret sinif tərəfindən genişləndirilirsə, bütün irsi Abstrakt metodlar həyata keçirilməlidir, irsi Virtual metodlar isə ləğv edilə və ya ləğv edilə bilər.