Տարբերությունը վիրտուալի և վերացականի միջև

Տարբերությունը վիրտուալի և վերացականի միջև
Տարբերությունը վիրտուալի և վերացականի միջև

Video: Տարբերությունը վիրտուալի և վերացականի միջև

Video: Տարբերությունը վիրտուալի և վերացականի միջև
Video: Խորությամբ ուսումնասիրում ենք համակարգիչների աշխատանքը և ծրագրավորումը, ինտերպրետացիա, կոմպիլացիա... 2024, Հուլիսի
Anonim

Վիրտուալ ընդդեմ վերացական

Վիրտուալ և Աբստրակտ երկու հիմնաբառեր են, որոնք օգտագործվում են Օբյեկտ ուղղված (OO) ծրագրավորման լեզուների մեծ մասում, ինչպիսիք են Java-ն և C-ը: Թեև կան թեթև տարբերություններ տարբեր լեզուներում դրա նշանակության մեջ, և՛ Վիրտուալ, և՛ Աբստրակտ հիմնաբառերը մասնակի իրականացման զգացողություն են հաղորդում այն միավորներին, որոնց կցվում են:

վերացական

Սովորաբար, Աբստրակտ դասերը, որոնք նաև հայտնի են որպես Աբստրակտ բազային դասեր (ABC), չեն կարող ինստրուկտացվել (այդ դասի օրինակը չի կարող ստեղծվել): Այսպիսով, Աբստրակտ դասերը իմաստալից են միայն այն դեպքում, եթե ծրագրավորման լեզուն աջակցում է ժառանգությանը (դասերի ընդլայնումից ենթադասեր ստեղծելու կարողություն):Աբստրակտ դասերը սովորաբար ներկայացնում են վերացական հասկացություն կամ էություն՝ մասնակի կամ առանց իրագործման: Հետևաբար, Abstract դասերը գործում են որպես ծնող դասեր, որոնցից բխում են երեխայի դասերը, այնպես որ երեխայի դասը կիսում է ծնող դասի թերի հատկանիշները և կարող է ավելացվել ֆունկցիոնալությունը՝ դրանք ավարտելու համար: Աբստրակտ դասերը կարող են պարունակել Աբստրակտ մեթոդներ։ Աբստրակտ դասը ընդլայնող ենթադասերը կարող են իրականացնել այս (ժառանգված) Աբստրակտ մեթոդները։ Եթե երեխա դասը իրականացնում է բոլոր նման Abstract մեթոդները, ապա դա կոնկրետ դաս է: Բայց եթե դա չլինի, ապա մանկական դասարանը նույնպես դառնում է Աբստրակտ դաս: Այս ամենը նշանակում է, որ երբ ծրագրավորողը դաս է առաջադրում որպես Abstract, նա ասում է, որ դասը թերի կլինի և այն կունենա տարրեր, որոնք պետք է լրացվեն ժառանգող ենթադասերով: Սա երկու ծրագրավորողների միջև պայմանագիր ստեղծելու լավ միջոց է, որը հեշտացնում է ծրագրային ապահովման մշակման խնդիրները: Ծրագրավորողը, ով գրում է կոդը ժառանգելու համար, պետք է ճշգրիտ հետևի մեթոդի սահմանմանը (բայց, իհարկե, կարող է ունենալ իր սեփական իրականացումը):Java-ում և C-ում Abstract դասերը և մեթոդները հայտարարվում են Abstract հիմնաբառի միջոցով:

Վիրտուալ

Վիրտուալ մեթոդները/ֆունկցիաները հնարավորություն են տալիս կամայականորեն փոխել իր վարքագիծը ժառանգող դասի կողմից (օգտագործելով նույն ստորագրությամբ ֆունկցիան): Վիրտուալ ֆունկցիայի հայեցակարգը կարևոր է հետևյալ սցենարում. Ենթադրենք, որ դասը բխում է զավակ դասից, ապա երբ օգտագործվում է ստացված դասի օբյեկտը, այն կարող է վերաբերել բազային դասի կամ ստացված դասի օբյեկտին: Սակայն մեթոդի կանչի վարքագիծը կարող է երկիմաստ լինել, եթե բազային դասի մեթոդները վերացված են: Այսպիսով, այս երկիմաստությունը լուծելու համար օգտագործվում է Վիրտուալ բանալի բառ: Եթե մեթոդը նշված է Վիրտուալ, ապա ստացված դասի ֆունկցիան կանչվում է (եթե այդպիսիք կան), կամ էլ՝ բազային դասի ֆունկցիան: Օրինակ, C++-ում Վիրտուալ բանալի բառն օգտագործվում է հենց այս նպատակով։ C-ում Վիրտուալ բանալի բառն օգտագործվում է նույն ձևով, բայց բացի այդ, բանալի բառի վերագրանցումը պետք է օգտագործվի բոլոր վերացված մեթոդները փոփոխելու համար:Բայց Java-ում հստակ վիրտուալ հիմնաբառ չկա: Բոլոր ոչ ստատիկ մեթոդները համարվում են վիրտուալ: Առանց մարմնի վիրտուալ ֆունկցիաները կոչվում են Մաքուր վիրտուալ ֆունկցիաներ: Java-ում և C-ում աբստրակտ մեթոդներն իրականում մաքուր վիրտուալ են:

Տարբերությունը վիրտուալի և վերացականի միջև

Չնայած Abstract-ը և Virtual-ը երկու հիմնաբառեր/հասկացություններ են, որոնք ապահովում են թերի իրականացման իմաստը դրա հետ կապված սուբյեկտներին, նրանք ունեն իրենց տարբերությունները: Աբստրակտ մեթոդները (որոնք պետք է սահմանվեն Abstract դասերի ներսում) ընդհանրապես չունեն իրականացում, մինչդեռ Վիրտուալ մեթոդները կարող են ունենալ իրականացում։ Եթե Abstract մեթոդները ընդլայնվում են կոնկրետ դասի կողմից, ապա բոլոր ժառանգված Abstract մեթոդները պետք է իրականացվեն, մինչդեռ ժառանգված Վիրտուալ մեթոդները կարող են կամ չեն կարող վերացվել:

Խորհուրդ ենք տալիս: