Виртуалды және дерексіз
Virtual және Abstract - Java және C сияқты көптеген нысанға бағытталған (OO) бағдарламалау тілдерінде қолданылатын екі кілт сөз. Оның әртүрлі тілдерде мағынасында шамалы айырмашылықтар болғанымен, Виртуалды және Абстрактілі кілт сөздердің өзі тіркейтін нысандарға ішінара іске асыру сезімін береді.
Реферат
Әдетте, дерексіз базалық сыныптар (ABC) деп те белгілі дерексіз сыныптарды құру мүмкін емес (бұл сыныптың данасын жасау мүмкін емес). Сонымен, абстрактілі сыныптар егер бағдарламалау тілі мұрагерлікті қолдайтын болса ғана мағыналы болады (сыныпты кеңейтуден ішкі сыныптарды құру мүмкіндігі). Абстрактілі сыныптар әдетте абстрактілі ұғымды немесе ішінара немесе мүлде орындалмаған нысанды білдіреді. Демек, дерексіз сыныптар еншілес сыныптар алынатын ата-аналық сыныптар ретінде әрекет етеді, осылайша еншілес сынып негізгі сыныптың толық емес мүмкіндіктерін бөліседі және оларды аяқтау үшін функционалдық мүмкіндіктерді қосуға болады. Абстрактілі сыныптарда дерексіз әдістер болуы мүмкін. Абстрактілі сыныпты кеңейтетін ішкі сыныптар осы (тұқым қуалайтын) дерексіз әдістерді жүзеге асыра алады. Егер еншілес сынып барлық осындай дерексіз әдістерді жүзеге асырса, бұл нақты сынып. Бірақ олай болмаса, еншілес сынып та дерексіз сыныпқа айналады. Мұның бәрі бағдарламашы классты Реферат ретінде ұсынғанда, ол сыныптың аяқталмағанын және оның мұрагер ішкі сыныптармен толтырылуы керек элементтері болатынын айтады. Бұл бағдарламалық жасақтаманы әзірлеудегі тапсырмаларды жеңілдететін екі бағдарламашы арасында келісімшарт жасаудың тамаша тәсілі. Мұрагерлік кодты жазатын бағдарламашы әдіс анықтамаларын дәл орындауы керек (бірақ, әрине, өзінің іске асырылуы болуы мүмкін). Java және C тілдерінде Abstract сыныптары мен әдістері Abstract кілт сөзі арқылы жарияланады.
Виртуалды
Виртуалды әдістер/функциялар мұрагер класс арқылы оның мінез-құлқын қосымша анықтау мүмкіндігін береді (бірдей қолтаңбасы бар функцияны пайдалану). Виртуалды функция тұжырымдамасы келесі сценарийде маңызды. Класс еншілес класс арқылы алынған делік, содан кейін туынды сыныптың нысаны пайдаланылғанда, ол негізгі сыныптың немесе туынды сыныптың объектісіне сілтеме жасай алады. Бірақ, егер негізгі сынып әдістері қайта анықталса, әдісті шақыру әрекеті екіұшты болуы мүмкін. Осылайша, бұл екіұштылықты шешу үшін Virtual кілт сөзі қолданылады. Егер әдіс Virtual деп белгіленсе, онда туынды сыныптың функциясы (бар болса) немесе негізгі класстың функциясы шақырылады. Мысалы, C++ тілінде Virtual кілт сөзі дәл осы мақсат үшін қолданылады. C тілінде Виртуалды кілт сөзі ұқсас жолмен пайдаланылады, бірақ оған қоса, барлық қайта анықталған әдістерді өзгерту үшін override кілт сөзі пайдаланылуы керек. Бірақ Java-да нақты виртуалды кілт сөз жоқ. Барлық статикалық емес әдістер Виртуалды болып саналады. Денесі жоқ виртуалды функциялар таза виртуалды функциялар деп аталады. Java және C тілдерінде дерексіз әдістер шын мәнінде таза виртуалды болып табылады.
Виртуалды және дерексіз арасындағы айырмашылық
Дерексіз және Виртуалды екі түйінді сөз/түсінігі байланыстырылған нысандарға толық емес іске асырудың мағынасын беретінімен, олардың айырмашылықтары бар. Абстрактілі әдістер (Абстрактілі сыныптарда анықталуы керек) мүлде жүзеге асырылмайды, ал Виртуалды әдістерде іске асыру болуы мүмкін. Егер дерексіз әдістер нақты сынып арқылы кеңейтілсе, мұраға алынған дерексіз әдістердің барлығы іске асырылуы керек, ал мұраланған Виртуалды әдістер жойылуы немесе алынбауы мүмкін.